FastMCP 中文入门 · Tools / Resources / Prompts
Tool 之外,还有
Resource 和 Prompt
第1课我只写了一个 greet。这节课按官方三根柱子,各放一个最小例子:能改状态的 Tool、只读的 Resource、可选用的 Prompt 模板。verify 一次验齐。
▸ 方向键 / 空格 / 点击翻页 · 右下角可“自动播放”
开场:会写 Tool 不等于会设计 MCP server。还有只读数据与提示词模板两根柱子。
本期速览 · OVERVIEW
三分法 · 一次验齐
Tool
改
add_todo
Resource
读
todo://list
Prompt
模板
weekly_review
验收
EP02 OK
list + read
用待办玩具域串起三根柱子。
学习目标
这节课你学完能做什么
我刚学 MCP 时也以为「会写 Tool 就够了」。官方还有 Resource / Prompt。
1
能用自己的话说明:Tool / Resource / Prompt 各干什么(改 / 读 / 模板)
2
能读懂
server.py:一个 @mcp.tool、一个 @mcp.resource、一个 @mcp.prompt3
能跑通
verify.py:list 到三样,并能 read_resource 读到清单正文对应官方 Tools / Resources & Templates / Prompts。
收藏卡① · 三分对照
大白话:改 · 读 · 模板
| 能力 | 一句话 | 本课例子 | 典型发现 |
|---|---|---|---|
| Tool | 模型可主动调用的动作(常带副作用) | add_todo | list_tools |
| Resource | 带 URI 的只读数据 | todo://list | list_resources / read |
| Prompt | 可复用的消息模板 | weekly_review | list_prompts |
三者不能互相替代。宿主对 Prompt/Resource 支持弱时可「当 Tool 暴露」,本课先立正统三分。
待办玩具域:Tool 加一项 / Resource 读清单 / Prompt「怎么复盘」模板。
Tool · 动作
模型可主动调用的动作
普通 Python 函数 → LLM 可调用;校验参数 → 执行 → 回结果。add_todo 往内存清单追加 = 改状态。
server.pyTool
@mcp.tool def add_todo(title: str) -> str: title = title.strip() if not title: raise ValueError("title required") _TODOS.append(title) return f"added:{title}"
与 greet 同类:主动做事、可有副作用。
收藏卡② · Resource 三件套
带 URI 的只读数据
1
URI:
@mcp.resource("todo://list")2
懒执行:只有
read_resource 才跑3
只读语义:改状态另写 Tool;与 Tool 共用
_TODOSserver.pyResource
@mcp.resource("todo://list") def todo_list() -> str: return "\n".join(f"{i+1}. {t}" for i, t in enumerate(_TODOS))
Resource 不负责新增;读才能看见刚加的项。
收藏卡③ · Prompt vs Tool
Prompt:可复用的指令模板
我第一次也容易把 Prompt 和 Tool 混成「又一个函数调用」。
| Tool | Prompt | |
|---|---|---|
| 像什么 | 遥控器按键:按一下做事 | 台词本:怎么开场 |
| 返回 | 执行结果 added:… | 消息/模板,交给模型继续聊 |
| 谁发起 | 模型在对话中决定 | 用户或宿主选用模板 |
server.pyPrompt
@mcp.prompt def weekly_review() -> str: return "请根据 todo://list 帮我排出本周优先级,并标出可砍掉的两项。"
weekly_review 自己不读清单;模板点名 URI,由宿主/模型再读 Resource。
server.py 地图
三根柱子排在同一文件
L4
FastMCP("ep02-trp")L6
内存
_TODOS(玩具,进程结束即无)L9+
Tool → Resource(URI 挂号)→ Prompt
末
mcp.run() 默认 STDIO(宿主见第3课)分流口令:Tool 主动做事;Resource 无参只读;Prompt 开场台词。
文件:ep02-tools-resources-prompts/server.py
verify · 一次验齐
发现性 + 可读性双断言
verify.py核心
tools = [t.name for t in await c.list_tools()] resources = [r.uri for r in await c.list_resources()] prompts = [p.name for p in await c.list_prompts()] assert "add_todo" in tools assert "todo://list" in resources assert "weekly_review" in prompts assert "学 FastMCP" in (await c.read_resource("todo://list"))[0].text
uv run python ep02-tools-resources-prompts/verify.py → EP02 OK
验收要能分辨:不只有 tool,还要 list 到 URI/prompt 名,并读出正文。
本节练习
必做 + 选做
必
跑 verify;合上文档口述三分各一例
选
Prompt 加 focus;挂
todo://count;删 @mcp.prompt 确认会红删装饰器必须红——验证方法本身要能分辨对错。
选做故意制造失败,确认 assert 有分辨力。
小结
带走三根柱子
Tool
add_todo · 动作 · 改状态
Resource
todo://list · 只读 · URI
Prompt
weekly_review · 台词本
会写 Tool,不等于会设计 MCP server。还有读与模板。
交付:对照表 + 三分 server + verify 一次验齐。
选题征集
你更容易混哪一对?
A
Tool ↔ Resource
改状态 vs 只读 URI
B
Tool ↔ Prompt
按键做事 vs 台词开场
C
宿主支持弱
何时「当 Tool 暴露」
D
verify 红灯
list / read 哪一步挂
片尾征集,不硬推下一课。
— FastMCP 中文入门 · EP 02 —
会勇禾口王的AI笔记
FastMCP 中文入门 · FASTMCP LAB · EP02 · @huiyonghkw
Tool · Resource · Prompt · verify 一次验齐
系列 · 官方文档陪读 · 边造边学
微信搜 会勇禾口王的AI笔记,回复 MCP 领收藏卡清单
片尾签收。