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:
- Ejecuta:
fastmcp dev main.py
- 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.