【开源项目】FastMCP 让 MCP 服务器开发像搭积木一样简单

893 阅读3分钟

FastMCP 让 Python 开发者用装饰器和类型注解,将普通函数变成 LLM 可调用的工具——代码即协议。

​​引言:当 MCP 遇上 Pythonic 设计​​

MCP(Model Context Protocol)为 LLM 提供了访问外部资源的标准化接口,但传统开发需处理复杂协议细节。FastMCP 用 ​​Python 装饰器​​和​​类型驱动开发​​重构了这一流程——开发者只需关注函数逻辑,框架自动处理协议封装、路由和类型验证。
开源 4 个月,GitHub 收获 7.8 K 星,已被 Claude Desktop、Cursor 等工具集成。下文将拆解其核心能力,并提供可直接投产的部署方案。 image.png


​​正文:极简协议开发实战​​

​​1. 核心概念:三行代码暴露一个工具​​

FastMCP 通过装饰器将三类功能暴露给 LLM:

  • ​​工具(Tools)​​:执行带副作用的操作(如 API 调用)

    from fastmcp import FastMCP
    mcp = FastMCP("DataProcessor")
    
    @mcp.tool()
    def query_db(sql: str) -> list[dict]:  # 类型注解自动生成参数约束
        """执行 SQL 并返回 JSON 结果"""
        return db.execute(sql).to_dicts()
    
  • ​​资源(Resources)​​:提供只读数据(类似 RESTful GET)

    @mcp.resource("user://{user_id}/profile")  # URI 模板支持动态路由
    def get_profile(user_id: int) -> dict:
        return User.get(user_id).serialize()
    
  • ​​提示(Prompts)​​:定义可复用的对话模板

    @mcp.prompt()
    def debug_error(error_log: str) -> str:
        return f"请分析以下错误并给出修复方案:\n{error_log}"
    

​​协议优势​​:函数文档字符串(如 """执行 SQL...""")直接成为 LLM 的 tool description,​​代码即文档​​。

​​2. 部署:生产级服务四步启动​​

# 1. 安装(推荐 uv 管理依赖)
brew install uv         # macOS
pip install uv          # Windows/Linux
uv pip install fastmcp uvicorn[standard]

# 2. 创建服务文件 server.py
from fastmcp import FastMCP
mcp = FastMCP("FinanceAgent", dependencies=["pandas"])  # 声明依赖

@mcp.tool()
def analyze_revenue(data: dict) -> float:
    """计算季度营收增长率"""
    df = pd.DataFrame(data)
    return (df["revenue"].pct_change() * 100).iloc[-1]

if __name__ == "__main__":
    mcp.run(port=8000, reload=True)  # 热重载便于调试

# 3. 启动服务
uvicorn server:app --reload

# 4. 连接客户端(如 Claude Desktop)
# 在设置中添加 MCP 服务器路径:http://localhost:8000

​​关键配置项​​:

  • dependencies 声明环境依赖,部署时自动检查
  • mcp.run(transport='http') 支持 SSE/Stdio 等协议

​​3. 进阶:解决真实场景问题​​

  • ​​组合多个服务​​:统一入口调用分散工具

    from fastmcp.compose import MCPComposer
    composer = MCPComposer()
    composer.add_server("http://finance-server:8000")
    composer.add_server("http://hr-server:8001")
    composer.run()  # 聚合为单一 MCP 端点
    
  • ​​图像处理​​:直接返回图片内容

    from fastmcp import imageContent
    
    @mcp.tool()
    def generate_plot() -> bytes:
        plt.plot([1, 2, 3])
        return imageContent(plt)  # 自动转 base64
    
  • ​​错误溯源​​:抛出 UserError 让 LLM 理解异常

    if not db.connected:
        from fastmcp import UserError
        raise UserError("数据库未连接,请检查网络")
    

​​4. 调试:内置 MCP Inspector​​

启动实时测试控制台:

fastmcp dev server.py  # 交互式验证工具调用

支持发送模拟请求、查看日志流、跟踪会话状态。


​​为什么选择 FastMCP?技术决策者的 checklist​​

  1. ​​效率碾压​​:比直接使用 MCP SDK 减少 80% 样板代码
  2. ​​协议兼容​​:完整支持资源模板、工具流、提示链
  3. ​​生产就绪​​:内置认证、CORS、SSE 通知、OpenAPI 导出
  4. ​​生态集成​​:一键接入 Claude/Cursor,无需额外适配

当 LLM 成为新“操作系统”,MCP 即是它的系统调用层。FastMCP 用 Python 的优雅抽象,让开发者​​专注业务逻辑而非协议胶水代码​​。 项目地址:FastMcp

往期回顾:

🚀 【下载工具新势力】高中生开发 Ai Ghost Downloader 3,实测速度超 IDM

🚀 当 Java 遇上大模型,LangChain 4 j 如何成为开发者的「AI 胶水」?​​

🚀【语音合成】B 站开源 IndexTTS :声音克隆,吊打真人发音,断句精准度 98%