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

0 阅读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%