让你的服务变成MCP Server?FastAPI MCP 指南

在当今AI世界中,应用程序和大模型之间的无缝集成至关重要。模型上下文协议 (MCP) 通过允许 AI 模型访问外部工具和数据源来弥合这一差距。

FastAPI MCP 可以用最少的配置将现有的 FastAPI 端点转换为与 MCP 兼容的工具。本文将描述设置和使用 FastAPI MCP 来增强 AI 应用程序。作为一个零配置工具,它会自动将FastAPI 端点作为MCP工具公开。FastAPI MCP 的美妙之处在于其简单性,它使用现有的 API 端点,并使它们可供 AI 模型访问,而无需您重写代码或创建单独的实现。


如果希望零基础快速入门基于MCP的AI 应用开发,感谢大家阅读一个老程序员写的入门读物:

1. FastAPI MCP 基础

借助 FastAPI MCP 服务器的支持,开发者可以更高效地将现有的 API 接口集成到 AI 模型的工作流中,从而实现模型对工具的智能调用。通过这一能力,FastAPI 不仅延续了其在构建高性能、易维护 API 方面的优势,还为 AI 应用提供了标准化、可扩展的接口接入方式。

使用 FastAPI MCP 的集成功能,可以轻松实现以下关键特性:

自动将 FastAPI 端点转换为 MCP 工具。这意味着你无需手动编写额外代码或重复定义接口逻辑,只需对现有端点稍作配置,即可将其注册为模型可调用的功能模块。这大大降低了将业务服务与 AI 模型连接的门槛。

无缝保留原有的 API 模式和文档。FastAPI 以其强大的类型注解和自动生成的交互式文档著称。在启用 MCP 功能后,这些优势依然得以保留——无论是请求体结构、响应格式还是验证规则,都将继续生效。同时,MCP 工具的描述信息也可以直接从 OpenAPI/Swagger 文档中提取,确保工具说明的一致性和准确性。

部署方式也具备高度灵活性。你可以选择将 MCP 服务器与现有 API 服务一起部署,形成一个统一的服务单元;也可以将其作为独立服务运行,以实现更清晰的职责划分和资源管理。这种灵活的架构设计,使得 FastAPI 可以适应从小型应用到企业级系统的多种部署需求。

不仅如此,还可以精细控制哪些端点被公开为 MCP 工具。并非所有 API 都适合暴露给 AI 模型,有些可能涉及内部逻辑或安全敏感操作。FastAPI 提供了便捷的机制,让你能够有选择性地指定需要注册为工具的端点,从而确保系统的安全性与可控性。

我们可以自定义工具说明的生成方式。包括工具名称、描述、参数格式、返回值结构等都可以根据实际业务场景进行调整。这种定制化能力不仅有助于提升模型对工具的理解效率,还能增强提示词工程中的语义一致性,使 AI 在调用工具时更加准确和可靠。

FastAPI MCP不仅简化了工具接入流程,还兼顾了开发效率、系统安全与模型可用性之间的平衡,是当前推动 AI 与业务服务深度融合的理想选择之一。

2. FastAPI MCP 的基本使用

在开始使用之前,需要安装 FastAPI MCP 包:

uv add fastapi-mcp
或者 pip install fastapi-mcp

实现 FastAPI MCP 的最简单方法是将其直接挂载到现有的 FastAPI 应用程序中。这里有一个最小的例子:

from fastapi import FastAPI
from fastapi_mcp import FastApiMCP

# Your existing FastAPI app
app = FastAPI()

# Define your API endpoints
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
    return {"user_id": user_id}

# Add MCP server to your FastAPI app
mcp = FastApiMCP(
    app,
    name="My API MCP",
    description="MCP server for my API",
    base_url="<http://localhost:8000>"
)

# Mount the MCP server to your app
mcp.mount()

# Run your app as usual
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

通过这几行代码,你的 FastAPI 应用程序现在已经配备了一个 MCP 服务器,可以 http://localhost:8000/MCP 访问。支持 MCP 的 AI 模型,比如 Claude,现在可以作为工具发现 API 端点并与之交互。

3. 工具命名的最佳实践

当 AI 模型与我们的工具交互时,清晰的命名是必不可少的。FastAPI MCP 使用 FastAPI 路由中的 operation_id 作为 MCP 工具名。如果没有指定operation_id,FastAPI 会自动生成一个,但这个 id 可能用户友好性较差。

考虑以下两个端点定义:

# Auto-generated operation_id (e.g., "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}

第二种方法创建一个更直观的工具名称,AI 模型将发现更容易正确使用。始终提供显式的 operation_id 值,以获得更清晰的工具名称。

4. 高级配置选项

FastAPI MCP 提供了控制如何将 API 模式描述为 AI 模型的选项:

mcp = FastApiMCP(
app,
name="My API MCP",
base_url="<http://localhost:8000>",
describe_all_responses=True, # Include all possible response schemas
describe_full_response_schema=True # Include full JSON schemas in descriptions
)

describe_all_responses选项在工具描述中包含所有可能的响应模式,而  describe_full_response_schema 包含完整的 JSON 模式而不是简化版本。

如果不希望将所有 API 端点公开为 MCP 工具。FastAPI MCP 提供了几种过滤端点成为工具的方法:

# 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
mcp = FastApiMCP(
    app,
    include_operations=["user_login"],
    include_tags=["public"]
)

这些过滤功能使我们能够细粒度地控制哪些端点作为工具公开,从而允许我们在维护安全性的同时为 AI 模型提供必要的功能。

5. 部署选项

虽然将 MCP 服务器挂载到现有的 FastAPI 应用程序很简单,但是出于安全或架构的原因,可能需要单独部署它。以下是如何设置:

from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
# Your API app
api_app = FastAPI()
# Define your API endpoints on api_app
@api_app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
    return {"user_id": user_id}
# 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)
# 现在可以独立运行这两个服务了
# uvicorn main:api_app --host api-host --port 8001
# uvicorn main:mcp_app --host mcp-host --port 8000

这种方法允许在不同的主机或端口上运行 API 和 MCP 服务器,从而在架构中提供灵活性。

6. 创建后更新工具

如果在创建 MCP 服务器之后向 FastAPI 应用程序添加新端点,则需要刷新服务器以包含它们:

# 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()
# 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()

setup_server ()方法用任何新的端点更新 MCP 服务器,确保工具与 API 保持同步。

7. 将 AI 模型连接到 MCP 服务器

一旦集成了 MCP 的 FastAPI 应用程序运行起来,我们就可以通过各种方式将人工智能模型连接到它。

使用服务器发送的事件 (SSE)

许多 MCP 客户端 (如 Cursor) 支持服务器发送事件 (SSE) 进行实时通信:

  • 在启用 FastAPI MCP 的情况下运行应用程序

  • 在Cursor中,进入 Settings > MCP

  • 使用 MCP 服务器的端点 (例如 http://localhost:8000/MCP) 作为 SSE URL

  • Cursor 将自动发现所有可用的工具和资源

为其他客户端使用 MCP-Proxy

对于不直接支持 SSE 的客户端,可以使用 mcp-proxy:

  • 安装 mcp-proxy: uv tool install mcp-proxy

  • 将proxy配置添加到 Claude Desktop 的 MCP 配置文件

{
  "mcpServers": {
    "my-api-mcp-proxy": {
      "command": "/Full/Path/To/Your/Executable/mcp-proxy",
      "args": ["<http://127.0.0.1:8000/mcp>"]
    }
  }
}

8. 真实世界的应用和好处

FastAPI MCP 的出现,为将现有的 API 无缝集成到人工智能模型中提供了新的可能性。这种集成不仅简化了开发流程,还显著增强了 AI 模型的功能和应用场景。

它极大地扩展了数据访问的能力。通过 FastAPI MCP,AI 模型可以直接查询数据库或数据服务,获取所需的实时信息。这意味着无论是客户资料、交易记录还是市场趋势分析,模型都能迅速获得最新、最准确的数据支持,从而做出更加精准的预测和决策。

文档处理方面,FastAPI MCP 允许模型在系统中执行添加、检索或分析文档的操作。例如,在法律行业,模型可以通过调用 API 来检索特定案件的相关文件;在医疗领域,则可以用于病历管理和诊断报告生成。这种能力使得 AI 不仅限于数据分析,还能深入到具体的业务操作层面,提供更为全面的服务。

FastAPI MCP 支持复杂的业务逻辑执行。通过 API,AI 模型能够触发一系列预定义的业务流程,如订单处理、库存管理或财务结算等。这不仅提高了自动化水平,也确保了操作的一致性和准确性,减少了人为错误的可能性。

FastAPI MCP 还促进了用户交互的发展,使 AI 驱动的应用程序能够以更加自然、高效的方式与用户进行互动。无论是在客户服务中的智能应答,还是个性化推荐系统的优化,MCP 都能提供强大的技术支持,提升用户体验。

使用 FastAPI MCP 的主要优点体现在以下几个方面:

1. 开发效率的提升。开发者无需从零开始构建专门的集成接口,而是可以直接重用现有的 API。这种方式不仅节省了大量的时间和资源,还加快了项目的推进速度。

2. 一致性。由于所有的 API 逻辑都维护在一个单一的真实来源中,任何更新或修改都会自动同步到所有相关的应用和服务,包括那些由 AI 模型使用的部分。这确保了整个系统的稳定性和一致性,减少了维护成本。

3.简单维护。当 API 发生变化时,这些变更会自动反映在 MCP 工具中,无需手动调整每个集成点。这对于需要频繁迭代和升级的系统来说尤为重要,能够有效避免因版本不匹配导致的问题。

4. 安全性。FastAPI MCP 提供了精细的控制机制,允许开发者明确指定哪些端点可以被 AI 模型访问。这样既能保证数据的安全性,又能灵活应对不同的应用场景需求。

FastAPI MCP 不仅为 AI 模型与现有 API 的集成开辟了新路径,还在多个关键领域展现了其独特价值,包括数据访问、文档处理、业务逻辑执行以及用户交互优化。同时,它带来的开发效率、一致性、维护简便性和安全性方面的优势。

如果希望快速入门MCP,建议阅读老码农的新作——

如果希望了解MCP 更多的应用价值,建议阅读:

9. 小结

FastAPI MCP 标志着在实现 API 与人工智能模型之间无缝、高效集成方面迈出的关键一步。它通过自动化地将 FastAPI 端点转化为符合 MCP 规范的工具,有效避免了重复开发的工作量,显著降低了构建 AI 增强型应用的技术门槛和复杂度。

无论开发一个简单的原型,还是打造一个面向生产的复杂系统,FastAPI MCP 都能提供足够的灵活性与精细的控制能力,帮助您高效地将现有 API 功能安全、准确地暴露给 AI 模型使用。借助本指南中所介绍的最佳实践,您可以充分发挥 MCP 在智能服务构建中的潜力,提升应用的自动化水平与智能化能力。

现在就开始让我们将API 与 AI 模型集成,释放前所未有的自动化潜能,开启更智能、更流畅的用户体验之旅。

【关联阅读】

<think>我们正在讨论如何使用FastAPI实现MCP服务。根据引用内容,FastAPI-MCP是一个工具,它可以帮助我们将FastAPI应用转换为MCP服务。具体步骤和实现方法如下: 1. **环境准备与依赖安装**:首先需要安装FastAPIfastapi_mcp库。可以使用pip进行安装。 2. **创建FastAPI应用**:使用FastAPI创建一个基本的应用实例。 3. **挂载MCP服务器**:使用fastapi_mcp库中的`add_mcp_server`函数将MCP服务器挂载到FastAPI应用上,并指定挂载路径和名称。 4. **运行应用**:使用uvicorn或其他ASGI服务器运行应用。 根据引用[3]的代码示例,我们可以这样实现: ```python from fastapi import FastAPI from fastapi_mcp import add_mcp_server # 创建FastAPI应用 app = FastAPI() # 挂载MCP服务器 add_mcp_server( app, # 你的FastAPI应用 mount_path="/mcp", # 挂载MCP服务器的路径 name="MyAPIMCP", # MCP服务器的名称 ) ``` 这样,我们就创建了一个基本的MCP服务。但是,我们可能还需要定义一些工具(tools)以供AI模型调用。引用[4]中提到了一个示例文件(05_reregister_tools_example.py),我们可以参考它来注册工具。 具体步骤: 1. 定义工具函数:这些函数将作为AI模型可以调用的工具。 2. 使用`register_tool`装饰器注册这些函数,以便MCP服务能够识别它们。 例如,假设我们有一个获取天气的工具函数: ```python from fastapi_mcp import register_tool @register_tool def get_weather(city: str) -> str: """ 根据城市名获取天气信息 Args: city (str): 城市名称 Returns: str: 天气信息 """ # 这里实现获取天气的逻辑,例如调用第三方API return f"{city}的天气是晴天" ``` 然后,我们将这个工具注册到MCP服务中。注意,上面的`register_tool`装饰器会自动将工具注册到MCP中。 最后,我们运行应用: ```bash uvicorn main:app --reload ``` 这样,MCP服务就运行在指定的路径(例如:/mcp)下,AI模型可以通过这个端点来调用我们注册的工具。 另外,引用[1]提到,FastAPI的高性能特性(异步支持和优化的请求处理流程)使得构建的MCP服务器具有高性能。同时,FastAPI的模块化和插件系统也方便我们扩展MCP服务器。 总结步骤: 1. 安装依赖:fastapi, uvicorn, fastapi_mcp 2. 创建FastAPI应用 3. 使用`add_mcp_server`挂载MCP服务 4. 使用`register_tool`注册工具函数 5. 运行应用 注意:fastapi_mcp的具体用法可能还需要参考其文档(引用[4]提供的链接)。 如果我们需要更复杂的功能,比如跨模态上下文传递,可能需要扩展MCP协议,但根据当前问题,我们只需要实现一个基本的MCP服务即可。 现在,我们根据上述步骤编写一个完整的示例。</think>### 使用 FastAPI 实现 MCP 服务的完整指南 #### 1. **环境准备与依赖安装** ```bash # 创建虚拟环境(可选) python -m venv mcp-env source mcp-env/bin/activate # 安装核心依赖 pip install fastapi uvicorn fastapi-mcp ``` #### 2. **基础服务搭建** ```python from fastapi import FastAPI from fastapi_mcp import add_mcp_server # 初始化 FastAPI 应用 app = FastAPI(title="AI 服务网关") # 挂载 MCP 服务器 add_mcp_server( app=app, # FastAPI 应用实例 mount_path="/mcp", # MCP 服务端点路径 name="AIServiceMCP", # MCP 服务名称 description="AI 模型集成平台" # 服务描述 ) ``` #### 3. **注册自定义功能工具** ```python from fastapi_mcp import register_tool # 注册天气查询工具 @register_tool async def get_weather(location: str) -> dict: """ 获取指定位置的天气信息 参数: - location: 城市名称 (如 "北京") 返回: - 包含温度、天气状况的字典 """ # 这里实现实际的天气API调用 return {"location": location, "temp": 25, "condition": "晴"} # 注册股票查询工具 @register_tool async def get_stock_price(symbol: str) -> float: """ 查询股票实时价格 参数: - symbol: 股票代码 (如 "AAPL") 返回: - 当前股价 """ # 这里实现实际的股票API调用 return 175.43 ``` #### 4. **配置上下文管理** ```python from fastapi_mcp import McpContext # 自定义上下文处理器 @app.middleware("http") async def add_context(request: Request, call_next): # 创建MCP上下文对象 context = McpContext( user_id=request.headers.get("X-User-ID"), session_id=request.cookies.get("session_id") ) # 将上下文附加到请求状态 request.state.mcp_context = context response = await call_next(request) # 更新上下文状态(如保存对话历史) context.save_session_data() return response ``` #### 5. **启动服务** ```bash # 使用 Uvicorn 启动服务 uvicorn main:app --reload --port 8000 ``` #### 6. **服务验证** 访问以下端点验证服务状态: - MCP 服务文档:`http://localhost:8000/mcp/docs` - 工具列表:`http://localhost:8000/mcp/tools` - 服务健康检查:`http://localhost:8000/mcp/health` #### 7. **AI 模型集成示例** ```python # 在 FastAPI 路由中使用 MCP @app.post("/ask-ai") async def ask_ai(question: str, request: Request): # 获取当前上下文 context = request.state.mcp_context # 构建 AI 请求 ai_response = await context.query_ai( prompt=question, model="gpt-4", max_tokens=500 ) # 处理可能的工具调用 if ai_response.tool_calls: results = await execute_tools(ai_response.tool_calls) return {"answer": results} return {"answer": ai_response.content} ``` #### 8. **高级配置选项** ```python # 高级 MCP 配置 add_mcp_server( app=app, mount_path="/mcp", name="AdvancedMCP", # 性能优化配置 max_workers=8, # 最大工作线程数 rate_limit="100/minute", # 请求速率限制 # 安全配置 api_keys=["SECRET_KEY_1", "SECRET_KEY_2"], # 模型集成 default_model="claude-3", fallback_model="gpt-3.5-turbo" ) ``` #### 关键优势与特性 1. **高性能基础**:继承 FastAPI 的异步特性,支持高并发请求处理[^1] 2. **自动文档生成**:内置 OpenAPI 文档,自动展示所有注册工具 3. **上下文管理**:支持跨请求的上下文持久化 4. **工具热注册**:运行时动态添加/移除工具函数 5. **统一错误处理**:标准化错误响应格式 6. **多模型支持**:可同时集成多个AI模型后端 > 实际部署时建议添加: > - API网关层(如 Nginx) > - 监控系统(Prometheus/Grafana) > - 分布式缓存(Redis) > - 消息队列(RabbitMQ/Kafka)用于异步任务处理 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值