3步把FastAPI接口变成MCP工具:FastAPI-MCP部署与实践指南

发布时间:2026/9/14 22:01:30
3步把FastAPI接口变成MCP工具:FastAPI-MCP部署与实践指南 3步把FastAPI接口变成MCP工具FastAPI-MCP部署与实践指南【免费下载链接】fastapi_mcpExpose your FastAPI endpoints as Model Context Protocol (MCP) tools, with Auth!项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi_mcp想让大模型客户端直接调用你现成的 FastAPI 接口逐个手写工具 schema 是笔苦差。FastAPI-MCP 是一个 FastAPI 原生的 MCP 服务器生成器把FastApiMCP指向你的 FastAPI 应用它自动把所有端点转成带认证能力的 MCP 工具请求/响应模型和 Swagger 文档原样保留。它凭什么省了事和手动为每个端点写工具定义 单独搭一层 MCP 服务相比它直接砍掉中间环节能力说明零配置生成工具读 OpenAPI 自动生成 MCP 工具schema 与文档描述不丢复用 FastAPI 认证端点上已有的Depends()依赖直接生效MCP 侧不用重写鉴权ASGI 直调内嵌模式下走 ASGI 接口调用少一跳网络转发灵活挂载同一应用内嵌或挂到独立进程做网关mount_http()一行切换工具白名单按 operation_id / tags 过滤避免把内部接口暴露给 LLM最小可运行版本装包到跑通只要一段代码环境要求Python 3.10推荐 3.12FastAPI 已在你项目里。uv add fastapi-mcp # 或 pip install fastapi-mcp最小代码15 行以内from fastapi import FastAPI from fastapi_mcp import FastApiMCP app FastAPI(titleDemo API) app.get(/items/{item_id}) async def read_item(item_id: int): return {item_id: item_id} mcp FastApiMCP(app) # 扫描全部端点生成 MCP 工具 mcp.mount_http() # 默认挂载到 /mcp if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)跑起来后http://localhost:8000/mcp就是一个可用的 MCP 服务。想立刻验证用 MCP Inspector 连接该地址在 Tools 列表里应能看到read_item填入参数点 Run Tool 即可拿到返回值。更多基础用法见 快速上手文档。内嵌还是独立进程两种部署怎么选内嵌mcp.mount_http()不带参数即可适合快速给单个服务加 MCP 能力工具调用走 ASGI 直调、无额外网络开销。独立进程把 MCP 挂到另一个FastAPI()实例上业务接口不再随 MCP 暴露网关可独立扩缩容。适合对外只开放工具视图、或想按网关维度做鉴权限流的场景。独立模式的完整示例在 examples/04_separate_server_example.py核心就三行from fastapi import FastAPI from fastapi_mcp import FastApiMCP from examples.shared.apps.items import app # 业务应用 mcp FastApiMCP(app) # 只作为工具来源 mcp_app FastAPI() mcp.mount_http(mcp_app) # 挂到独立应用然后分别启动业务服务和网关uvicorn examples.shared.apps.items:app --host 0.0.0.0 --port 8001 uvicorn your_module:mcp_app --host 0.0.0.0 --port 8000部署细节可对照 独立部署文档。传输、路由与客户端接入传输怎么选新接入一律用 HTTP 传输mcp.mount_http()默认路径/mcp它实现的是最新的 Streamable HTTP 规范会话管理更稳。mcp.mount_sse()默认路径/sse仅为兼容旧版客户端保留属兼容用方案不必为新项目考虑。路由与过滤两个挂载方法都接受router和mount_path参数可以把 MCP 挂进版本化的 APIRouterfrom fastapi import APIRouter router APIRouter(prefix/api/v1) mcp FastApiMCP(app, exclude_tags[internal]) # 内部接口不进工具列表 mcp.mount_http(router, mount_path/mcp) app.include_router(router) # 挂 APIRouter 时会自动补 include客户端配置Claude Desktop、Cursor 等常见客户端的 JSON 长这样HTTP 传输{ mcpServers: { fastapi-mcp: { url: http://localhost:8000/mcp } } }SSE 兼容模式则把url换成http://localhost:8000/sse。客户端发来的Authorization头默认会被转发给下游工具调用token 直通不需要额外配置。传输协议细节参考 MCP传输文档。上生产前的清单鉴权端点已有Depends()依赖直接生效需要完整 OAuth 2 流程时配置AuthConfig支持 2025-03-26 规范见 认证文档HTTPS网关入口强制 TLSMCP 的url配置同步换成https://限流在反向代理或网关层对/mcp路径做请求速率限制日志用项目自带格式初始化日志见 examples/shared/setup.py慢接口超时接口响应超过默认时间时注入自定义客户端FastApiMCP(app, http_clienthttpx.AsyncClient(timeout20))收敛工具面用include_operations/exclude_tags过滤工具越少 LLM 选路越准常见问题与收尾Q新加的端点为什么不出现在工具列表工具注册发生在构造FastApiMCP时后续新增端点后调用mcp.setup_server()重新注册即可示例见 examples/05_reregister_tools_example.py。Q工具调用返回 4xx/5xx 会怎样会以错误形式抛回 MCP 客户端同时服务端日志记录完整异常方便排查是参数问题还是下游问题。Q能只暴露部分接口给 LLM 吗能用include_operations或include_tags白名单参见 工具过滤示例。FastAPI-MCP 的价值在于把接口转 MCP这件事压缩成两行代码同时把认证、schema、文档这些容易被手写方案漏掉的细节都保住了。内嵌起步、需要隔离时再拆独立网关是大多数团队的合理路径。有改进想法可以直接提 PR流程见 贡献指南更多示例在 examples/进阶配置参考 定制文档。【免费下载链接】fastapi_mcpExpose your FastAPI endpoints as Model Context Protocol (MCP) tools, with Auth!项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi_mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询