FastAPI-MCP
Uma ferramenta de configuração zero para expor automaticamente endpoints FastAPI como ferramentas MCP.
Documentação
FastAPI-MCP
Uma ferramenta de configuração zero para expor automaticamente endpoints do FastAPI como ferramentas do Model Context Protocol (MCP).
Recursos
- Integração direta - Monte um servidor MCP diretamente no seu aplicativo FastAPI
- Configuração zero necessária - basta apontá-lo para o seu aplicativo FastAPI e ele funciona
- Descoberta automática de todos os endpoints FastAPI e conversão em ferramentas MCP
- Preservação de esquemas dos seus modelos de requisição e de resposta
- Preservação da documentação de todos os seus endpoints, exatamente como está no Swagger
- Implantação flexível - Monte seu servidor MCP no mesmo aplicativo ou implante separadamente
Instalação
Recomendamos usar uv, um instalador de pacotes Python rápido:
uv add fastapi-mcp
Alternativamente, você pode instalar com pip:
pip install fastapi-mcp
Uso Básico
A maneira mais simples de usar FastAPI-MCP é adicionar um servidor MCP diretamente ao seu aplicativo FastAPI:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
mcp = FastApiMCP(
app,
# Optional parameters
name="My API MCP",
description="My API description",
base_url="http://localhost:8000",
)
# Mount the MCP server directly to your FastAPI app
mcp.mount()
É isso! Seu servidor MCP gerado automaticamente agora está disponível em https://app.base.url/mcp.
Nota sobre
base_url: Emborabase_urlseja opcional, é altamente recomendável fornecê-lo explicitamente. Obase_urlinforma ao servidor MCP para onde enviar as requisições de API quando as ferramentas são chamadas. Sem ele, a biblioteca tentará determinar a URL automaticamente, o que pode não funcionar corretamente em ambientes implantados onde as URLs internas e externas diferem.
Nomeação de Ferramentas
FastAPI-MCP usa o operation_id das suas rotas FastAPI como nomes das ferramentas MCP. Quando você não especifica um operation_id, o FastAPI gera automaticamente um, mas esses podem ser enigmáticos.
Compare estas duas definições de endpoint:
# Auto-generated operation_id (something like "read_user_users__user_id__get")
@app.get("/users/{user_id}")
async def read_user(user_id: int):
return {"user_id": user_id}
# Explicit operation_id (tool will be named "get_user_info")
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}
Para nomes de ferramentas mais claros e intuitivos, recomendamos adicionar parâmetros explícitos de operation_id às definições de rota do seu FastAPI.
Para saber mais, leia a documentação oficial do FastAPI sobre configuração avançada de operações de caminho.
Uso Avançado
FastAPI-MCP fornece várias maneiras de personalizar e controlar como seu servidor MCP é criado e configurado. Aqui estão alguns padrões de uso avançado:
Personalizando a Descrição do Esquema
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
mcp = FastApiMCP(
app,
name="My API MCP",
base_url="http://localhost:8000",
describe_all_responses=True, # Include all possible response schemas in tool descriptions
describe_full_response_schema=True # Include full JSON schema in tool descriptions
)
mcp.mount()
Personalizando Endpoints Expostos
Você pode controlar quais endpoints FastAPI são expostos como ferramentas MCP usando IDs de operação ou tags do Open API:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
# Only include specific operations
mcp = FastApiMCP(
app,
include_operations=["get_user", "create_user"]
)
# Exclude specific operations
mcp = FastApiMCP(
app,
exclude_operations=["delete_user"]
)
# Only include operations with specific tags
mcp = FastApiMCP(
app,
include_tags=["users", "public"]
)
# Exclude operations with specific tags
mcp = FastApiMCP(
app,
exclude_tags=["admin", "internal"]
)
# Combine operation IDs and tags (include mode)
mcp = FastApiMCP(
app,
include_operations=["user_login"],
include_tags=["public"]
)
mcp.mount()
Notas sobre filtragem:
- Você não pode usar
include_operationseexclude_operationsao mesmo tempo - Você não pode usar
include_tagseexclude_tagsao mesmo tempo - Você pode combinar filtragem por operação com filtragem por tag (por exemplo, usar
include_operationscominclude_tags) - Ao combinar filtros, uma abordagem gananciosa será adotada. Endpoints que corresponderem a qualquer um dos critérios serão incluídos
Implantando Separadamente do Aplicativo FastAPI Original
Você não está limitado a servir o MCP no mesmo aplicativo FastAPI do qual ele foi criado.
Você pode criar um servidor MCP a partir de um aplicativo FastAPI e montá-lo em um aplicativo diferente:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
# Your API app
api_app = FastAPI()
# ... define your API endpoints on api_app ...
# A separate app for the MCP server
mcp_app = FastAPI()
# Create MCP server from the API app
mcp = FastApiMCP(
api_app,
base_url="http://api-host:8001", # The URL where the API app will be running
)
# Mount the MCP server to the separate app
mcp.mount(mcp_app)
# Now you can run both apps separately:
# uvicorn main:api_app --host api-host --port 8001
# uvicorn main:mcp_app --host mcp-host --port 8000
Adicionando Endpoints Após a Criação do Servidor MCP
Se você adicionar endpoints ao seu aplicativo FastAPI após criar o servidor MCP, será necessário atualizar o servidor para incluí-los:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
# ... define initial endpoints ...
# Create MCP server
mcp = FastApiMCP(app)
mcp.mount()
# Add new endpoints after MCP server creation
@app.get("/new/endpoint/", operation_id="new_endpoint")
async def new_endpoint():
return {"message": "Hello, world!"}
# Refresh the MCP server to include the new endpoint
mcp.setup_server()
Exemplos
Veja o diretório exemplos para exemplos completos.
Conectando-se ao Servidor MCP usando SSE
Assim que seu aplicativo FastAPI com integração MCP estiver em execução, você pode se conectar a ele com qualquer cliente MCP que suporte SSE, como o Cursor:
-
Execute seu aplicativo.
-
Em Cursor -> Configurações -> MCP, use a URL do seu endpoint do servidor MCP (por exemplo,
http://localhost:8000/mcp) como sse. -
O Cursor descobrirá automaticamente todas as ferramentas e recursos disponíveis.
Conectando-se ao Servidor MCP usando mcp-proxy stdio
Se o seu cliente MCP não suportar SSE, por exemplo, o Claude Desktop:
-
Execute seu aplicativo.
-
Instale o mcp-proxy, por exemplo:
uv tool install mcp-proxy. -
Adicione no arquivo de configuração MCP do Claude Desktop (
claude_desktop_config.json):
No Windows:
{
"mcpServers": {
"my-api-mcp-proxy": {
"command": "mcp-proxy",
"args": ["http://127.0.0.1:8000/mcp"]
}
}
}
No MacOS:
{
"mcpServers": {
"my-api-mcp-proxy": {
"command": "/Full/Path/To/Your/Executable/mcp-proxy",
"args": ["http://127.0.0.1:8000/mcp"]
}
}
}
Encontre o caminho para o mcp-proxy executando no Terminal: which mcp-proxy.
- O Claude Desktop descobrirá automaticamente todas as ferramentas e recursos disponíveis
Desenvolvimento e Contribuição
Obrigado por considerar contribuir para o FastAPI-MCP! Incentivamos a comunidade a postar Issues e Pull Requests.
Antes de começar, consulte nosso Guia de Contribuição.
Comunidade
Junte-se à comunidade MCParty no Slack para se conectar com outros entusiastas do MCP, fazer perguntas e compartilhar suas experiências com o FastAPI-MCP.
Requisitos
- Python 3.10+ (Recomendado 3.12)
- uv
Licença
Licença MIT. Copyright (c) 2024 Tadata Inc.