为什么生产级 Agent 最终会走向 MCP,而不是继续堆 API 和 CLI?一篇讲清楚

摘要:很多人以为 Agent 接外部系统,无非就是调 API、跑 CLI、再做几个函数调用。但真正到了生产环境,问题很快会从“能不能接上”变成“能不能规模化复用、稳定授权、跨平台运行”。这正是 MCP 变得越来越重要的原因。

最近 Anthropic 发了一篇很值得技术团队细读的文章,主题很直接,如何让 Agent 真正连接到生产系统,以及为什么很多团队最后会走向 MCP(Model Context Protocol)

这个问题非常关键。因为今天很多人讨论 Agent,还是停留在“模型会不会规划”“提示词怎么写”“工作流怎么搭”。但一旦真想把 Agent 用在企业环境里,真正决定它有没有价值的,往往不是推理能力,而是它到底能不能安全、稳定、低成本地接进真实系统

说白了,Agent 再聪明,如果碰不到 Jira、数据库、工单系统、代码仓库、云资源、知识库、支付系统,它就只能做一个聊天机器人。

所以这篇文章真正讨论的是一个很工程、也很现实的话题:Agent 到底该怎么接外部系统?

Anthropic 把答案归纳成三种路径:

  1. 直接调 API
  2. 调用 CLI
  3. 通过 MCP 接入

这三条路都能走,但适用阶段完全不一样。

一、最容易开始的方式,永远是直接调 API

绝大多数团队第一次做 Agent 接入外部系统,都会从 API 开始。

这是最自然的路径。模型要查工单,就发 HTTP 请求;要建任务,就调一个 createTask 接口;要拿数据库记录,就调用内部服务。现在很多平台还会把这个过程包装成 function calling,看起来更优雅,但本质上还是一回事:Agent 直接面对具体 API。

这条路为什么流行?原因很简单:

  • 上手最快
  • 不需要额外协议层
  • 一个 Agent 接一个系统时很直接
  • Demo 特别容易做出来

所以如果你现在只是做一个小规模原型,比如“让 Agent 去查 CRM 里的客户信息”,那直接调 API 完全没问题。

问题在于,这种方式只适合起步,不适合规模化。

为什么?因为一旦系统和 Agent 数量上来,就会出现典型的 M×N 集成问题

比如:

  • 3 个 Agent
  • 8 个系统
  • 不同系统各自有认证方式、参数格式、错误码、速率限制

最后会变成什么?

每一个 Agent 和每一个系统之间,都是一条独立集成链路。于是你会得到:

  • 各种重复写的鉴权逻辑
  • 各种重复定义的工具描述
  • 各种互不一致的异常处理
  • 一个新 Agent 上线,就要重新接一遍
  • 一个新平台切进来,又要重做一次适配

这就是 API 直连的核心问题,它能用,但不形成公共层

二、CLI 很快很猛,但它更像“本地开发期武器”

第二条路,是让 Agent 直接跑命令行工具,也就是 CLI。

这个方式在开发者场景里特别常见。比如:

  • 调 git
  • 调 kubectl
  • 调 terraform
  • 调某个内部脚本
  • 调已经成熟的企业 CLI

它的优点也很明显:

  • 复用现有工具链
  • 不用重新封装太多语义
  • 对本地开发环境很友好
  • 在 shell + 文件系统 + 容器 里特别顺手

这也是为什么很多 coding agent、运维 agent、内部自动化 agent,在本地或沙箱里非常喜欢 CLI。

因为它几乎是零门槛接入。你本来就有一套命令行工作流,Agent 只是替你执行。

但 CLI 有一个硬限制,Anthropic 这篇文章点得很准:它的公共层太薄了。

CLI 的问题不是不好用,而是它很难成为“跨平台生产标准层”。

比如:

  • 在 Web 端,很多环境不给 shell
  • 在移动端,基本没有完整命令执行环境
  • 在云托管 agent 场景里,也未必能给你容器和本地文件系统
  • 凭证管理通常依赖本地配置文件,迁移麻烦
  • 工具语义不标准,Agent 很难稳定理解每个命令的行为边界

所以 CLI 特别适合:

  • 本地开发
  • 临时自动化
  • 宽权限内部环境
  • 已有工具很多、先快速接起来的场景

但如果你要的是真正跨端、长期、可复用、可治理的接入方式,CLI 也会很快碰到天花板。

三、MCP 为什么越来越像生产级 Agent 的“公共连接层”

第三条路,就是 MCP。

MCP 可以理解成:在 Agent 和外部系统之间,加了一个标准化协议层。

不再是每个 Agent 自己去理解每个系统,也不再是每个平台自己发明一套工具描述,而是通过 MCP server,把一个系统的能力以标准方式暴露给 Agent。

这件事一旦成立,带来的变化很大。

1. 它先解决的是“复用”问题

如果你直接接 API,本质是 Agent 和系统点对点耦合。

如果你做成 MCP server,那么:

  • Claude 能接
  • ChatGPT 能接
  • Cursor 能接
  • VS Code 里的 agent 能接
  • 未来别的兼容客户端也能接

也就是说,你不再是在给某一个 Agent 写私有适配层,而是在给整个 agent 生态写一个可复用能力接口

2. 它解决的是“运行环境不统一”的问题

现在越来越多生产级 Agent 都跑在云端,而不是用户本机。

这是因为生产系统需要:

  • 持续运行
  • 异步执行
  • 弹性扩容
  • 多租户管理
  • 统一审计

而这些 Agent 要接触的数据和系统,本身也都在云端,比如:

  • 企业 SaaS
  • 内部工单系统
  • 云资源
  • 代码托管平台
  • 知识库
  • 数据平台

这时候,CLI 那套“本地 shell + 本地凭证文件”的思路就不够用了。

MCP 的好处是,它天然更适合远程连接和托管式运行。一个远程 MCP server,可以同时服务 Web、移动端、云 Agent 和桌面客户端。

这就是它最重要的工程价值,不只是“标准”,而是可分发、可跨环境运行

四、为什么说生产环境最后要的不是“更多工具”,而是“更少但更像任务的工具”

Anthropic 这篇文章里有一个非常重要的观点,我特别认同:

不要把 API 一比一照搬成 MCP 工具,而要按“用户意图”组织工具。

这是很多团队最容易踩的坑。

他们一做 MCP server,就想把自己的 API 全部映射出来:

  • getUser
  • getThread
  • getMessages
  • parseAttachment
  • createIssue
  • attachFile
  • updateStatus

看起来很完整,实际上 Agent 用起来会很痛苦。

因为模型不擅长在过多底层原子能力之间自己稳定拼流程。工具越碎,调用链越长,出错概率越高,token 消耗越大。

所以更好的方法是什么?

按任务意图封装。

比如,不要给 6 个底层工具,而是直接给一个:

  • create_issue_from_thread

这样 Agent 不需要自己做太多中间编排,既减少错误,也减少上下文消耗。

这件事说白了,就是 MCP server 的设计目标不该是“忠实镜像后端 API”,而应该是:

让 Agent 用最少调用次数完成一个完整任务。

这是一种典型的 agent-native 工具设计思维。

五、当系统特别大时,为什么又不能只靠“意图工具”

但事情并不是永远这么简单。

如果你的系统像 AWS、Cloudflare、Kubernetes 这种级别,有几百上千个操作,单靠几个高层意图工具是不够的。

这时候 Anthropic 提出了另一个很实用的模式:code orchestration

意思是,不要试图为几千个 API 都设计成独立工具,而是只暴露一个很薄的工具层,比如:

  • 搜索能力
  • 执行能力

然后让 Agent 自己生成一小段代码,这段代码在受控沙箱里运行,再去调用你的 API,最后只把结果返回。

这个模式本质上是在做什么?

是在工具层和代码执行层之间做平衡:

  • 工具层保持很薄
  • 覆盖面足够大
  • Agent 保留灵活性
  • 服务端仍能控制安全边界

文章里提到 Cloudflare 的 MCP server 是一个典型例子,两三个工具就能覆盖大量 endpoint,而且 token 成本控制得很好。

这说明一个现实:MCP 不是只能做“固定工具菜单”,它也可以承载更动态、更复杂的编排方式。

六、MCP 真正比 API / CLI 更强的地方,在于它开始有“丰富语义”

如果只把 MCP 理解成“标准化工具调用”,其实还低估了它。

Anthropic 现在强调的一个方向是:MCP 不只是能返回文本,还能返回更丰富的交互语义。

这包括两个特别重要的能力。

1. MCP Apps

MCP Apps 是一个协议扩展,允许工具调用结果直接返回一个交互界面,比如:

  • 图表
  • 表单
  • Dashboard
  • 小型操作界面

这件事为什么重要?

因为很多业务场景,文本并不是最好交互方式。

比如:

  • 看数据趋势,用图表更直观
  • 填参数,用表单更高效
  • 看资源状态,用 dashboard 更清楚

如果 Agent 只能返回一段文字,它就很难真正进入复杂业务流程。可一旦 MCP 能把产品 UI 局部嵌进对话界面,Agent 的可用性会立刻上一个台阶。

某种程度上,这意味着 MCP 正在变成一种对话时代的应用接入层

2. Elicitation

另一个能力叫 elicitation,可以理解成:工具执行到一半,暂停下来向用户要信息。

这很重要,因为真实任务往往不是参数一次给全。

比如:

  • 缺一个必填字段
  • 要确认删除操作
  • 候选项有歧义,需要用户选一下
  • 要跳 OAuth 登录
  • 要跳支付页

如果没有这种机制,Agent 往往只能中断任务,然后对用户说“请你去设置页完成某某操作”。体验非常割裂。

有了 elicitation,用户还留在当前流程里,只是补一个表单、点一个确认、或者跳一个网页完成授权,再回到任务主线。

这对生产环境太重要了,因为真正可用的 Agent,必须能在自动化和人类介入之间平滑切换

七、为什么 OAuth、凭证托管这些“脏活累活”,反而决定 MCP 能不能进生产

很多人讨论 Agent 协议,容易只盯着工具格式、返回结构、schema 设计。

但生产环境里,真正最难的,常常不是调用能力本身,而是:

  • 用户怎么授权
  • Token 怎么保存
  • 过期了怎么刷新
  • 多个 Agent 会话怎么复用凭证
  • 怎样避免每次调用都重新登录

这也是为什么 Anthropic 在文里专门强调标准化认证

如果一个 MCP server 需要 OAuth,那么规范化的客户端注册和授权流程,会极大降低首次接入和后续维护成本。

更进一步,云托管 Agent 还要解决一个更麻烦的问题:

用户授权之后,Agent 在后台长期运行时,凭证到底放哪?

Anthropic 提到的 vault 思路,本质上就是把这个问题平台化:

  • 用户授权一次
  • 平台代管 token
  • 会话创建时按 vault ID 注入
  • 平台负责刷新和复用

这意味着开发团队不需要自己再造一套秘密管理和 token 生命周期系统。

这看起来像“工程细节”,但其实非常关键。因为生产级 Agent 真正落地,最后拼的往往不是 Demo 漂不漂亮,而是谁先把这些脏活累活工程化。

八、如果你今天在做 Agent 集成,应该怎么选?

说到这里,其实就能给出一个非常务实的判断。

如果你在做原型验证

直接调 API 就够了。

因为你最关心的是:

  • 能不能跑通
  • 业务值不值得做
  • 用户有没有兴趣

这时候别过早设计复杂协议层。

如果你在做本地开发者工具

CLI 仍然非常好用。

尤其是:

  • coding agent
  • devops agent
  • sandbox agent
  • 内部提效工具

这类场景本来就离 shell 很近,CLI 的性价比很高。

如果你在做生产级、跨平台、长期复用的 agent 系统

那你几乎一定会认真考虑 MCP。

因为你最终需要的是:

  • 可复用接入层
  • 标准化能力发现
  • 更稳定的鉴权流程
  • 跨端兼容
  • 更丰富的交互语义
  • 对云托管 agent 更友好的运行方式

这不是“追新协议”,而是工程复杂度逼出来的结果。

九、写在最后,MCP 真正解决的不是“调用工具”,而是“让 Agent 接近软件系统的方式标准化”

我觉得这篇文章最值得读懂的一点是:

很多人把 MCP 当成一个新工具格式,但它真正的价值远不止这个。

它在解决的,是一个更大的问题:

当 Agent 不再只是聊天助手,而要真正进入企业软件、云平台、业务流程时,它应该通过什么公共层去接近这些系统?

API 当然还能继续用。CLI 当然也不会消失。

但只要 Agent 继续往生产环境走,继续往跨平台走,继续往远程托管走,行业就一定会需要一种更统一的连接层。

而 MCP 现在越来越像那个位置。

所以,MCP 的意义不是“比 API 高级”,也不是“要取代 CLI”,而是:

它开始把 Agent 连接软件世界这件事,从零散集成,推向标准工程。

这一步,可能比很多人现在意识到的还要重要。


参考资料:

  • Anthropic Blog: Building agents that reach production systems with MCP
  • Anthropic 关于 MCP Apps、Elicitation、Claude Managed Agents 与 Vaults 的公开说明
分享到