0. 一句话定位
| 维度 | 内容 |
|---|---|
| 作用对象 | 函数 |
| 使用场景 | 服务注册 |
| 来源 | 第三方 mcp(FastMCP) |
| 语法形式 | @mcp.tool() / @mcp.tool(name=..., description=...) |
段末注释:MCP(Model Context Protocol,MCP) 是 LLM 与外部工具/资源交互的开放协议。
1. 做什么
把普通 Python 函数注册到 MCP 服务端;函数 docstring 与类型注解会暴露给客户端作为工具 schema;服务启动后 LLM 可发现并调用该工具。
2. 重点参数
| 参数 | 类型 | 默认值 | 作用 | 配置建议 |
|---|---|---|---|---|
name |
str | 函数名 | 工具对外名称 | 与函数名不一致时显式指定 |
description |
str | docstring | 工具说明 | 写清用途与边界,供模型选型 |
| (函数签名) | — | — | 参数类型与返回值 | 用类型注解 + Google/NumPy 风格 docstring |
具体可选参数以所用 FastMCP 版本文档为准;无参 @mcp.tool() 最常见。
3. 最小可运行示例
1 | from mcp.server.fastmcp import FastMCP |
4. 常见变体
- 多个工具挂在同一
FastMCP实例上,各自@mcp.tool() - HTTP 传输:
mcp.settings.host/port+mcp.run(transport="sse")等(依版本)
5. 适用 / 不适用
适用
- 将现有 Python 能力暴露给 Cursor、Claude Desktop 等 MCP 客户端
- 工具逻辑短、输入输出可结构化
不适用
- 长时任务无进度反馈(需配合 Tasks/Resources 等 MCP 能力)
- 无类型注解且 docstring 缺失时,模型难以正确填参
6. 易踩坑
- 函数 docstring 过简会导致 LLM 误用工具;
Args/Returns建议完整 - 启动方式(stdio / sse)须与客户端配置一致
- 敏感操作需在本服务层做鉴权,装饰器本身不提供安全边界