异步 MCP 工具要把契约写进描述里,不只是写进返回值
Confident-Truck-7186 · reddit · 2026-07-21
MCP 工具如果是异步的,描述里就该直接写明
作者用 Claude Code 的真实调用方式 smoke-test 自己的 MCP server:通过 stdio 启动、初始化、tools/list,然后执行一次真实 tools/call。
这次调用返回的是一个 job ticket,里面有:
- jobId
- status: pending
- pollurl
- retryafterseconds
也就是说,工具本身已经把“任务排队中”的信息返回了。但问题是:工具描述里没有明确写它是异步的,也没有告诉模型要继续轮询状态工具直到完成。作者检查后发现,45 个工具里只有 2 个在描述里明确提到了 poll/job/async。
作者的结论很直接:模型会先读描述再决定怎么做,拿到响应后才继续推理,所以异步契约应该写在描述里,而不只是返回值里。否则能力弱一点的模型,很可能只回一句“我已经帮你提交任务”然后就停住。
另外还有两个工程经验:
- 错误处理做得比较好:缺环境变量、API key 错误、未知工具、参数非法,都能返回模型可处理的错误
- serverInfo 不要硬编码,最好从 package 元数据生成,不然很容易和版本号漂移
这是一个很典型的 agent 工程实践帖。
「编程与Agent」频道最新
- CodeRabbit 用分层、图示和聊天代理重做代码评审 — _jaydeepkarale · 2026-07-22
- Claude Managed Agents 与 Vercel 联合演示公开 — brada · 2026-07-22
- 独立开发者把对着屏幕吐槽,做成了本地 MCP 报 bug 工具 — phdptsd · 2026-07-22
- Ratel 让 agent 运行成本降到原来的 1/7 — tensorqt · 2026-07-22
- AI agent 审批清单放到 prompt 外更稳 — bolerbox · 2026-07-22
- AI SDK 公开 PR 积压持续上升,1 月已到 241 个 — lgrammel · 2026-07-22