FastAPI转MCP服务器工具

FastMCP是一个小型工具,用于将选定的FastAPI路由作为MCP服务器暴露,支持流式HTTP传输,并可配置审批工作流。

  • by sgthun
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 sgthun/FastMCP

使用说明

FastMCP(孵化器)

FastMCP 是一个小型辅助工具,用于将选定的 FastAPI 路由通过 Streamable HTTP 传输方式暴露为一个 MCP 服务器。它被设计成可以后续独立复制为一个库。

亮点:

  • 对FastAPI应用进行内省,并将路由转换为MCP工具
  • 通过标签过滤,在不同端口上构建不同的MCP“角色”
  • 可选的审批工作流程:通过可插拔存储和最小化门户排队等待人工审批的工具调用

这个孵化器位于下方 FastMCP/ 在这个仓库中用于初始化,并将被提取到一个独立的包中。

快速入门(在此仓库中)

  • 入口点 FastMCP/http_server.py 加载厨房FastAPI应用程序,并默认在8091端口上暴露一个MCP服务器。
  • 通过环境变量进行配置:
    • FASTMCP_HTTP_PORT:监听端口(默认 8091)
    • FASTMCP_TAGS:逗号分隔的 FastAPI 路由标签,用于包含(可选)
    • FASTMCP_REQUIRE_APPROVAL: 真/假,用于启用审批队列(可选)

当启用审批功能时,会在其下方安装一个简易门户 /portal 批准/拒绝/修改排队中的请求。

为每条路由添加MCP元数据

为您的路由端点函数附加属性,以自定义暴露的工具:

  • mcp_enable: 布尔值(默认为 True)
  • mcp_name: 字符串(默认为路由名称或路径派生)
  • mcp_description: 字符串(或“字符串类型”)
  • `mcp_tags`: 可迭代的字符串集合(与 FastAPI 路由标签合并)
  • `mcp_requires_approval`: 布尔值(覆盖此路由的全局默认设置)

示例:

@router.post("/do_something", tags=["automation"])
async def do_something(payload: Payload):
    do_something.mcp_name = "do_something_tool"
    do_something.mcp_description = "Does something important"
    do_something.mcp_tags = ["automation", "safe"]
    do_something.mcp_requires_approval = True
    return {"ok": True}

审批仓库

  • InMemoryApprovalStore 提供了一个简单的测试商店。
  • 实施 ApprovalStore 使用您选择的数据存储来支持队列的接口。

注释

  • 这个MCP服务器使用其TestClient将调用代理回FastAPI应用程序。在生产环境中,建议通过网络委托给应用程序的HTTP API。
  • 工具输入模式是一个通用对象。未来版本可能会推断请求模型以生成JSON模式。
  • 这是一个孵化器;提取时API可能会发生变化。