Python 服务器
本章用官方 SDK 一次暴露 Tool + Resource + Prompt。API 以 First steps 为准:类名是 MCPServer(v1 叫 FastMCP),导入是 from mcp.server import MCPServer。
完整示例
在同级目录建 notes/inbox.md,写几行自己的笔记,Inspector 的 Resources 里就能读到固定 URI notes://inbox。greeting://{name} 是 模板,出现在 Resource Templates,填 name=Ada 再读。
三个装饰器分别做了什么
URI 里写 {param} 就成为模板,参数必须与函数签名一致。没有花括号的 URI 是固定资源,会出现在 resources/list。
说明文字来自 docstring,参数 schema 来自 类型注解。需要更细的字段说明时,用 Annotated + pydantic.Field(与官方 Tools / Prompts 文档相同)。
启动方式
Stdio(给 Cursor / Claude Code / mcp dev):
或让 CLI 找到模块级的 mcp 对象:
HTTP:
传输相关参数只传给 run()。传给构造函数会得到:TypeError: MCPServer.__init__() got an unexpected keyword argument 'port'。
在 Inspector 里验收
按标签走一遍:
- Tools →
add(2, 5)→7 - Resources → 读
notes://inbox - Resource Templates →
greeting/Ada→Hello, Ada! - Prompts →
summarize,填一段文字 → 得到role: user的渲染结果
Host 不一定把 Resource / Prompt 暴露得像 Inspector 这么完整;先在 Inspector 证明 Server 正确,再查客户端 UI。
日志与密钥
- 用
logging,不要print到 stdout - Token 读环境变量,不要写进 Resource 正文
- 读本地文件时限制在你自己的目录(本例只用
notes/)
与 v1 FastMCP 对照
把旧文件里的类名与导入换成 MCPServer,其余装饰器代码通常可以直接用。