把一个 Python 函数接给 AI 使用,FastMCP 将它封成 MCP 工具

开源项目猫目发布于 来源:FastMCP 官方资料
当前独立项目由Prefect维护;从函数声明生成工具说明和输入约束,再用Client明确调用,别与官方MCP SDK中的旧同名类混写。
把一个 Python 函数接给 AI 使用,FastMCP 将它封成 MCP 工具

为什么值得关注

让已有Python功能通过统一协议提供给AI客户端,而不是为每个客户端各写一套调用接头。

适合谁:拥有Python业务函数、想通过MCP提供工具服务的开发者

这次有哪些亮点

  • @mcp.tool从函数签名与说明生成工具定义
  • 同一对象可用stdio或HTTP运行,Client用工具名和参数调用

使用前需要知道

服务只开放注册的函数,业务鉴权和数据访问需自己实现;独立FastMCP为Apache-2.0,Horizon等托管企业服务另行判断。

团队已经有一个 Python 查询函数,想让不同 AI 客户端都能调用它,接下来要补的是工具描述、参数校验和通信方式。FastMCP 的入门案例,从一个 greet(name) 函数开始,把这些部分连成可调用的 MCP 服务。

先认清项目身份:当前仓库是 PrefectHQ/fastmcp,由 Prefect 维护。早期 FastMCP 进入过官方 MCP Python SDK;这里介绍的是继续独立发展的 FastMCP 包,安装与接口应看这份项目的文档。

函数签名,成为客户端能理解的工具

官方 quickstart创建 FastMCP 对象,再用 @mcp.tool 注册 greet 函数。函数有 name 字符串参数与字符串返回值,正文说明它做什么。

FastMCP 据此生成工具定义,包括输入结构、校验与描述。客户端拿到的因此不只是一个没有说明的函数名:它能够知道这个工具接收什么参数,再以工具调用的形式传入。

教学情境中,你可以把 greet 换成已有的“按订单编号读取发货状态”函数。替换的是函数的业务实现;FastMCP 负责将这个实现接到协议上。它不会凭装饰器自动知道数据库在哪里,也不会生成一套真实订单权限。

一份服务对象,两种运行方式

直接调用 mcp.run() 默认使用 stdio,适合由客户端启动本地进程。示例也给出 HTTP 方式:在 run 中选择 transport="http" 与端口,让客户端通过地址连接。

如果用 CLI 启动,则要留意入口:fastmcp run my_server.py:mcp 导入的是文件中的 mcp 对象,文件的 if __name__ == "__main__" 块不会执行。只把 HTTP 参数写在那个块里,再从 CLI 导入,不代表 CLI 也会采用那些参数;需要按命令方式传入传输和端口选项。

这是小例子里很实用的一处边界:工具对象定义了能做什么,启动方式决定它怎样被连接。

从客户端确认一次明确调用

quickstart 继续用 FastMCP Client 连接 HTTP 地址,在异步上下文里调用 call_tool("greet", {"name": "Ford"})。这个步骤把服务端函数与客户端输入接在一起,能检查名称、参数和返回结果是否对应。

先用客户端明确调用,再交给模型选择何时使用工具,有助于区分两类问题:服务本身是否可用,以及模型是否选对工具。协议连接成功,也不等于模型每次都会作出正确选择。

独立 FastMCP 采用 Apache-2.0 许可,README 另列 Horizon 企业服务,不能把托管能力都算进开源包。对已经有 Python 功能的人,它的直接用途是做一个可以复用的工具入口:函数保留业务逻辑,MCP 提供描述与调用约定,不同客户端通过同一份约定来使用它。

原始资料:FastMCP 官方资料

以上为编辑整理,功能、许可与使用条件以官方说明为准。

返回每日分享