跳转至

第 08 篇 · MCP:让 Agent 跟外部生态对接

Ch04.343 第 08 篇 · MCP:让 Agent 跟外部生态对接

📊 Level ⭐⭐ | 9.8KB | entities/mcp-agent-external-ecosystem-integration-guide-2026.md

第 08 篇 · MCP:让 Agent 跟外部生态对接

摘要

MCP(Model Context Protocol)是 Anthropic 于 2024 年 11 月开源的一项协议,旨在以统一、标准的方式将外部系统的能力、数据和上下文暴露给 AI 模型使用。本文深入解析 MCP 与本地 Tools 的核心区别:Tools 是模型可调用能力的形态,MCP 是把这些能力跨进程、跨项目、跨生态暴露出来的协议。MCP 解决了 Agent 生态中「外部能力复用与标准化」这一关键问题,让 Agent 从只能调用本地 Python 函数,进化为能够发现并连接任何外部服务。

核心要点

  • MCP 定位:不是替代 Tools,而是为 Tools 提供了跨进程、跨项目、跨生态暴露的统一协议
  • 三大核心概念:Server(暴露 tools/resources/prompts 三類能力)、Client(通过 JSON-RPC 发起请求)、Transport(决定消息传输方式:stdio 或 streamable HTTP)
  • 与本地 Tools 的主要区别:本地工具在 Agent 进程内直接调用,MCP 工具通过独立 Server 进程/服务调用,中间层通过 MCP 协议通信
  • 核心价值:外部生态能力的复用和标准化——一次开发 MCP Server,所有 Agent 都可复用
  • 维护优势:MCP Server 更新后 Agent 端无感,无需修改 Agent 代码

深度分析

MCP 在 Agent 工具调用体系中的定位

在 Agent 系统的工具调用架构中,MCP 处于一个微妙但关键的位置。为了理解其价值,我们需要先明确 Agent 工具调用的几个层级:

  1. 内建函数(Built-in Functions):Agent 运行时自带的系统函数(如 read_filelist_files),在 Agent 进程内直接调用
  2. 项目级 Tools:在 Agent 项目代码内部注册的工具函数,通过本地 registry 注入给模型
  3. MCP Server 暴露的工具:通过 MCP 协议连接的独立服务,Agent 通过 JSON-RPC 调用

MCP 解决的不是「让 Agent 能调用工具」的问题——这一步 Tools 已经做到了。MCP 解决的是 「让 Agent 能发现和调用外部系统的工具」 的问题。

对模型而言,这三种工具在调用时是透明的——模型看不到、也不关心工具是本地函数还是 MCP Server。变化发生在 Agent runtime 层:从直接调用本地函数的 fn.execute(),变成了通过 MCP Client 发送 JSON-RPC 消息到独立 Server 进程。

MCP 的三大核心抽象能力解构

MCP Server 可以暴露三类能力,分别对应 Agent 与外部系统交互的不同需求层面:

1. Tools(可调用的动作) —— 这是最常用、也是 MCP 引入初期最容易理解的能力。每个工具对应一个可执行动作,如 read_filesearch_issuessend_email。Tools 是 Agent 主动对外部世界施加影响的通道。

2. Resources(可读取的上下文) —— 对应 Agent 需要被动获取的信息。文档、数据库记录、URI 指向的资源等都属于这个类别。Resources 允许 Agent 在做出决策前先获取外部上下文,这对于需要业务语义理解的场景至关重。

3. Prompts(预定义提示词模板) —— 这是 MCP 最具争议也最被低估的能力。它允许外部服务向 Agent 暴露「你应该如何与我来往」的指南。这意味着不同外部系统可以为 Agent 量身定做使用自己的最佳实践。

值得注意的是,当前绝大多数真实项目(包括本文原作者的实践)主要使用 Tools 能力,「resources 和 prompts 基本不会在这里使用」。 但随着 MCP 生态的成熟,另两类能力的重要性预计将会提升。

本地 Tools vs MCP:选择策略

在什么场景下应该使用本地 Tools,什么场景下应该引入 MCP?这取决于系统的复杂度和复用需求:

维度 本地 Tools MCP
适用场景 小规模、单 Agent、无外部系统集成需求 多 Agent、跨系统集成、需要标准化接口
复用性 仅在当前 Agent 项目内可用 所有连接该 MCP Server 的 Agent 均可复用
维护成本 每个 Agent 单独修改 Server 端更新,Agent 无感
通信开销 零(进程内调用) JSON-RPC 序列化/反序列化开销
部署复杂度 中(需要部署独立 Server 进程)

推荐策略:如果你的 Agent 功能比较单一、工具少、不需要外部系统接入,直接用本地 Tools 即可。但当你有多个 Agent 需要共享同一套外部能力(如同一个企业的用户系统、知识库、工单系统),就应该引入 MCP 实现一次开发、多处复用。

MCP Transport 选择:stdio vs Streamable HTTP

MCP 的 Transport 层决定了消息如何在 Client 和 Server 之间传递,这是 MCP 架构中容易被忽略但实际影响深远的决策点:

  • stdio(标准输入输出):将 MCP Server 作为 Agent 的子进程启动,通过 stdin/stdout 进行 JSON-RPC 通信。这种方式延迟最低、部署最简单,适合本地开发和单机部署场景。原文的动手案例使用了这种方式。
  • Streamable HTTP:通过 HTTP 协议连接远程 MCP Server,适合公司内部统一部署的场景。这种方式允许 MCP Server 独立运行,支持多 Agent 共享同一 Server,但增加了网络延迟和部署复杂度。

选择规则:本地开发→stdio,生产部署涉及多 Agent 共享→Streamable HTTP。

MCP 生态成熟度评估与未来展望

MCP 自 2024 年 11 月发布以来,已经从概念验证阶段进入了初步的工程落地阶段。其生态成熟度表现为:

  1. 框架支持:Python SDK 已封装好 JSON-RPC 协议细节,开发者无需手写底层通信
  2. 平台集成:Claude Code、Cursor 等主流 Agent 平台已原生支持 MCP
  3. Server 生态:社区和商业服务开始提供标准 MCP Server 实现(数据库、GitHub、Slack 等)

但需要清醒认识的是,MCP 仍然处于早期阶段。资源层(Resources)和提示词层(Prompts)的标准化程度远低于工具层(Tools),跨语言实现的兼容性问题尚未完全解决,性能开销在生产大规模集群时也需要关注。

实践启示

  1. 分层设计 Tools 层:内建函数 → 项目 Tools → MCP 外部 Tools。在 Agent 架构设计之初就明确这三个层次的边界,避免后期重构成本。内建函数处理文件系统等底层操作,项目 Tools 封装业务逻辑,MCP Tools 对接外部生态。

  2. 为常用外部服务封装标准 MCP Server。在企业环境中,用户系统、知识库、工单系统、代码仓库等高频服务最值得优先建设 MCP Server。一次开发后,所有 Agent 无需修改代码即可获得这些能力。

  3. 使用 stdio Transport 加速本地开发,生产环境切换为 HTTP。开发阶段用 stdio 可以获得最低的延迟和最简单的是部署体验;生产环境应采用独立的 Streamable HTTP Server,实现负载均衡和权限控制。

  4. MCP Server 作为微服务的「Agent 适配器」。不是在微服务和 Agent 之间硬编码 API 调用,而是在两者之间插入一个 MCP Server 层作为适配器,将微服务能力以统一的 Tool 接口暴露给 Agent。这样微服务的内部变更不会影响 Agent。

  5. 不要在 MCP 中过度暴露能力。每个 MCP Server 暴露的 Tools 应该聚焦于特定的业务领域(如「用户服务 MCP Server」暴露查询用户、更新用户信息的工具),避免一个 Server 暴露太多不相关的能力,导致 Agent 的 Action Space 膨胀。

相关实体

原文存档