Cómo Implementar Bearer Token en FastMCP Server con transporte streamable-http usando Python

En este tutorial, te mostraré cómo implementar un sistema de autenticación basado en Bearer Token en un servidor FastMCP utilizando el transporte streamable-http. Estaremos trabajando con FastMCP v2, un framework potente para construir servidores MCP (Model Context Protocol).

Requisitos previos

Antes de comenzar, asegúrate de tener instalado:

  • FastMCP v2

Vamos a crear un archivo main.py con el siguiente contenido:

""" Demo Bearer Token """
from fastmcp import FastMCP
from fastmcp.server.auth.providers.jwt import StaticTokenVerifier

verifier = StaticTokenVerifier(
    tokens={
        "dev-guest-token": {
            "client_id": "guest-user",
            "scopes": ["read:data"]
        }
    },
    required_scopes=["read:data"]
)

mcp = FastMCP(name="Bearer Token Example", auth=verifier)


@mcp.tool()
def echo(message: str) -> str:
    """Echoes the input message."""
    return f"Server echoes: {message}"


if __name__ == "__main__":
    mcp.run(transport="http")

Ejecución del servidor

Para iniciar el servidor, ejecuta el siguiente comando:

fastmcp run main.py --transport http

Prueba con MCP Inspector

Para probar nuestro servidor, podemos usar el MCP Inspector con estos pasos:

  1. Ejecuta:
fastmcp dev main.py
  1. En la interfaz del Inspector:
  • Transport Type: Selecciona “Streamable HTTP”
  • URL: Ingresa http://127.0.0.1:8000/mcp
  • Authenticacion > Bearer Token: Ingresa dev-guest-token
  • Presiona “Connect”

Salida esperada en terminal:

🌐 Opening browser...
New StreamableHttp connection request
Query parameters: {"url":"http://127.0.0.1:8000/mcp","transportType":"streamable-http"}
Created StreamableHttp server transport
Created StreamableHttp client transport
Client <-> Proxy  sessionId: f565e6a7-779e-4bea-b966-e7fb79746986
Proxy  <-> Server sessionId: edba962e09af47e48b99e992990cf25b
Received POST message for sessionId f565e6a7-779e-4bea-b966-e7fb79746986
Received GET message for sessionId f565e6a7-779e-4bea-b966-e7fb7974698    

Si proporcionas un token incorrecto, verás el siguiente error en la terminal:

🌐 Opening browser...
New StreamableHttp connection request
Query parameters: {"url":"http://127.0.0.1:8000/mcp","transportType":"streamable-http"}
Created StreamableHttp server transport
Created StreamableHttp client transport
Client <-> Proxy  sessionId: bb6c81d4-913f-411f-9e4c-409f42c9206e
Error from MCP server: Error: Error POSTing to endpoint (HTTP 401): {"error": "invalid_token", "error_description": "Authentication required"}
    at StreamableHTTPClientTransport.send (file:///home/jaime/.npm/_npx/5a9d879542beca3a/node_modules/@modelcontextprotocol/sdk/dist/esm/client/streamableHttp.js:284:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Este método es útil para proteger tus endpoints y controlar el acceso a tus herramientas MCP.

Para más información sobre verificación de tokens en FastMCP, visita la documentación oficial.

Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments