Anthropic 官方生产级 Agent 最佳实践:12 个可复用的 MCP 设计模式¶
Ch04.058 Anthropic 官方生产级 Agent 最佳实践:12 个可复用的 MCP 设计模式¶
📊 Level ⭐⭐ | 21.4KB |
entities/anthropic-官方生产级-agent-最佳实践12-个可复用的-mcp-设计模式.md
Anthropic 官方生产级 Agent 最佳实践12 个可复用的 Mcp 设计模式
Anthropic 官方生产级 Agent 最佳实践:12 个可复用的 MCP 设计模式¶
在 Claude Code 源代码泄露事件之后,我们从源码里整理出了 12 种 Agentic Harness 模式。后来又结合 Anthropic 官方的 Agent Skills 构建指南,继续拆解出 14 种 Skill 编写模式。这次再往前走一步,问题就变得更现实了:当 Agent 真正进入生产系统,它到底应该怎么连接那些真实的业务工具、权限系统和数据源? Anthropic 官方最近那篇关于 MCP 的文章《 Building agents that reach production systems with MCP [1] 》,讨论的正是这个问题。文章比较了直接 API 调用、CLI 和 MCP 的差异,并解释为什么生产级 Agent 越来越倾向于使用 MCP。 生产级 Agent 的难点,不是「 ** 能不能调用工具 ** 」,而是「 ** 能不能安全、稳定、低成本地连接真实系统 ** 」。 所以这篇文章不准备讲 MCP 协议细节,而是换一个角度:如果把 Anthropic 的实践抽象成工程模式,哪些设计可以被复用? 我把它拆成 5 组、12 个模式。它们覆盖了 ** 工具交互面、交互语义、认证凭证、上下文经济,以及打包分发 ** 。理解这些模式,比单纯会写一个 MCP Server 更重要。
深度分析¶
模式的本质分类¶
这 12 个模式不是平铺的技术点,而是一个从外到内的分层架构: 第一层:连接架构(工具交互面)
- 远程优先解决「在哪跑」
- 按意图组织解决「暴露什么」
-
薄交互面解决「 API 太大怎么办」 这一层的核心洞察是:MCP Server 不是 API 镜像,而是面向任务的产品接口。这意味着团队需要用产品思维而非代理思维来设计 MCP Server。 第二层:交互语义(交互语义)
-
内联 UI 把高密度信息直接渲染
- 引导式输入处理结构化缺省
-
外部跳转处理敏感流程 这一层解决的是「工具返回不只是文本」的问题。传统工具调用范式假设工具返回可描述的文本,但生产系统中有大量信息是结构化的、视觉的、或需要用户确认的。MCP 的 elicitation 机制让 Server 可以在调用中途暂停,等用户补充信息再恢复——这改变了工具调用的交互模型。 第三层:安全架构(认证与凭证流)
-
可发现认证降低接入摩擦
-
凭证托管把 token 生命周期上移平台层 这一层的核心问题是:凭证不应该在每次 tool call 里流动。可发现认证的价值在于把「每家自定义」变成「客户端可发现」,让接入成本降低。 第四层:上下文工程(上下文经济)
-
按需加载控制工具定义成本
-
程序化调用控制工具结果成本 这两个模式共同解决「上下文窗口是架构约束」的问题。Anthropic 的测试数据是:按需加载减少 85% tool-definition tokens,程序化调用减少 37% token 使用。这是一个量化的工程收益。 第五层:分发架构(打包与分发)
-
插件打包解决组件一致性
- Server 分发 Skills 让工具和使用方法一起交付 这个层次解决的是「有了工具,Agent 会不会用」的问题。工具能力和使用手册不可分割,这是从 MCP 到完整 Agent 集成的关键一跃。
跨模式的内在联系¶
12 个模式之间不是独立的,它们形成了一条依赖链:
远程优先 Server
↓ (有了稳定的服务器地址)
按意图组织工具 + 薄交互面
↓ (工具面设计好之后)
内联 UI / 引导式输入 / 外部跳转
↓ (有了丰富的交互语义)
可发现认证 + 凭证托管
↓ (认证安全之后)
按需加载 + 程序化调用
↓ (上下文可控之后)
插件打包 + Server 分发 Skills
12 个模式与 Agent 工程成熟度的关系¶
可以用这 12 个模式来评估一个团队的 Agent 工程成熟度:
- L1:能写 MCP Server,暴露 API 镜像工具
- L2:按意图组织工具,有远程 Server 设计
- L3:处理丰富的交互语义(UI、elicitation、handoff)
- L4:凭证统一托管,有上下文控制机制
- L5:完整的插件打包,Server 分发 Skills 大多数团队在 L1-L2。有一些在 L3。L4-L5 是生产级 Agent 的真正门槛。
实践启示¶
从这 12 个模式里可以提炼出的工程原则¶
原则一:先设计工具面,再写 Server 不要从「这个系统有哪些 API」出发,而要从「Agent 要完成哪些任务」出发。工具名称、参数结构、返回结果都要围绕 Agent 体验重新组织。这需要产品思维,不是代理思维。 原则二:远程优先应该是默认值 本地 Server 适合开发调试,生产分发应该是远程模式。如果从一开始就按远程设计,可以避免后期的架构重构。很多团队用本地模式开发,等进入生产才发现问题。 原则三:交互语义比工具数量更重要 不是越多工具越好。Anthropic 原文的 Cloudflare 案例是两个工具覆盖 2500 个 endpoint。关键是你用什么机制让 Agent 找到并正确使用这些能力,而不是堆砌工具数量。 原则四:凭证管理是平台能力,不是工具责任 每个 MCP Server 都自己处理 token 刷新、撤销、轮换,会导致安全边界不一致。应该把凭证生命周期上移到平台层,让 Server 只负责调用,平台负责凭证管理。 原则五:上下文控制是架构决策,不是优化技巧 按需加载和程序化调用不是「可选的优化」,而是在多 Server 环境下必须具备的架构能力。当 Agent 连接多个 Server、拥有上百个工具时,上下文成本会直接影响可用性。 原则六:工具能力和使用手册必须一起交付 MCP Server 只告诉 Agent 「有什么工具」,不告诉「在业务场景里怎么组合使用这些工具」。Skills 是填补这个空白的机制。Server-Distributed Skills 的方向意味着未来的竞争点是「能力+方法」的完整交付。
实际落地的建议路径¶
- 起步阶段:从按意图组织工具 + 远程优先 Server 开始。这两个模式成本最低,收益最明确。
- 扩展阶段:加入内联 UI 和引导式输入,让 Agent 的交互体验更丰富。同时引入可发现认证,降低接入摩擦。
- 深化阶段:实现凭证托管到 Vault,引入按需加载工具和程序化调用,解决上下文成本问题。
- 分发阶段:用插件打包模式统一分发,加入与 Server 配套的 Skills,让 Agent 不仅能访问工具,还能正确使用工具。
需要警惕的反模式¶
- 把每个 API endpoint 直接暴露为工具(缺乏意图抽象)
- 凭证放在环境变量或每次 tool call 里传递(安全边界不清)
- 一次性加载所有工具定义到上下文(忽略上下文成本)
- 工具能力和使用手册分离交付(增加集成摩擦)
- 把 MCP Server 当作 API 翻译层而不是产品接口(产品思维缺失)
一个值得思考的问题¶
这 12 个模式都来自 Anthropic 的官方实践,但它们描述的是「应该怎么做」,而不是「在什么条件下才值得这么做」。 Thin Surface 模式明确说了「不适合本来就能被清晰意图封装的小系统」。Elicited Input 模式也说了「不适合无人值守场景」。但其他模式大多没有明确边界。 实际工程中,团队需要判断:在什么规模、什么场景下,哪个模式是必须的,哪个是可选的。这可能是下一步需要探索的问题。
工具交互面(Tool surface)¶
工具交互面设计是 MCP Server 的第一道架构决策。 很多团队第一次做 MCP Server,会自然想到:既然已有 API,那就把每个 API endpoint 包成一个 tool。 这个想法很直观,但通常不是最优解。 因为 Agent 不是按 endpoint 思考的。Agent 要完成的是任务,比如「从 Slack 话题创建一个 Issue」「排查这次部署为什么失败」「帮我找过去七天最异常的指标」。 如果 MCP Server 只是 API 的镜像,Agent 就必须自己拼接大量底层动作。工具变多,调用链变长,上下文变重,失败点也随之增加。 ** 好的 MCP Server,不是 API 的翻译层,而是 Agent 面向任务的产品接口。 **
1. 远程优先服务器模式(Remote-First Server Pattern)¶
第一个模式解决的是:MCP Server 应该运行在哪里? 本地 MCP Server 通过 stdio 和客户端通信,适合桌面应用、IDE Agent、本地 Claude Code 或一些命令行场景。它很轻,也很方便开发调试。 但一旦进入生产环境,这个前提就不稳定了。 生产 Agent 可能运行在浏览器、移动端、云端执行环境或托管平台里。它不一定能启动本地进程,也不一定能访问用户机器上的文件系统。 所以 Anthropic 的建议很明确:如果目标是生产级集成,应该从一开始就按远程 MCP Server 设计。 远程优先的好处是:
- • 一个 Server 可以服务多个客户端;
- • 同一套认证流程可以跨环境复用;
- • Web、移动端、云端 Agent 都能访问;
- • Server 可以独立部署、扩展、监控和审计。 但远程优先不是免费午餐。 你必须处理网络延迟、可用性、限流、认证、安全边界、日志和运维。一个本地进程可以偷懒的地方,远程服务都要补上。 所以这个模式适合大多数生产集成,但不意味着所有本地 Server 都应该被否定。 更准确的判断是: ** 本地 MCP Server 适合开发者环境,远程 MCP Server 才是生产分发形态。 **
2. 按意图组织工具模式(Intent-Grouped Tools Pattern)¶
第二个模式解决的是:工具应该按什么粒度暴露? 最常见的错误,是把 MCP Server 做成 API endpoint 的一比一包装。 比如一个工单系统原本有:
- •
get_thread - •
parse_messages - •
create_issue - •
link_attachment如果全部原样暴露给 Agent,模型就要自己判断先调用哪个、如何把上一步结果传给下一步、失败时怎么恢复。 这不是不能做,而是把太多编排责任推给了模型。 更好的方式,是按用户意图组织工具。 比如直接提供一个:create_issue_from_thread这样 Agent 不需要拼四个底层动作,而是调用一个面向任务的工具。底层 API 编排、ID 归一化、附件关联、错误重试,都可以在 MCP Server 内部处理。 这个模式适合 API 面不算太大、用户任务相对明确的系统。 比如 Linear、Slack、Notion、Sentry 这类工具,很多操作都能归纳为用户意图:创建工单、总结话题、查询错误、生成报告、更新页面。 它的代价也很明确:你不能只导出 schema,你必须设计工具。 工具名称、参数结构、返回结果、错误处理,都要围绕 Agent 的任务体验重新组织。MCP Server 不只是代理层,而是一个需要持续演进的产品接口。
3. 薄交互面模式(Thin Surface Pattern)¶
第三个模式解决的是:如果底层 API 面太大,按意图组织也会失控,怎么办? 比如 AWS、Cloudflare、Kubernetes 这类系统,底层操作可能有几百甚至几千个。即使按意图分组,也很难把所有能力都封装成合理数量的工具。 这时,继续增加工具数量只会让上下文爆炸。 Thin Surface 的思路刚好相反:不要暴露很多工具,只暴露少量高能力工具。 典型组合是:
- •
search:让 Agent 搜索可用 API 或能力; - •
execute:让 Agent 写一段短脚本,由服务端在沙箱里执行。 Anthropic 原文提到 Cloudflare MCP Server [2] 是典型案例:两个工具覆盖约 2500 个 endpoint,工具定义大约只需要 1000 tokens。 这背后的逻辑是:把巨大 API 面藏在 Server 后面,让 Agent 通过搜索找到需要的能力,再用短代码完成调用和组合。 这个模式非常适合「API 规模巨大、任务形态不固定」的系统。 但它的代价也更重:你必须有可靠的沙箱、资源限制、超时策略、权限边界和审计机制。 因为 Agent 不再只是填参数,而是在服务端执行代码。 所以 Thin Surface 不是默认选择。它适合超大 API 面,不适合本来就能被清晰意图封装的小系统。
Related entities¶
交互语义(Interaction Semantics)¶
很多早期 Agent 工具,都默认工具返回文本或 JSON。 这在简单场景里没问题,比如查询一个状态、返回一段摘要、创建一个对象。 但