第 17 章:MCP:不是 Tool,而是 Context Provider

本章导读

  • 核心问题:MCP 在企业 Agent 架构中到底解决什么问题。
  • 关键词:MCP、MCP Server、Resource、Tool、Context Provider、Sandbox
  • 学习产出:通过 MCP 接入 CI、Git、Jira、Confluence 等企业系统。

1. 本章要解决什么问题

MCP 经常被简单理解成“工具调用协议”。

这个理解不算错,但不够完整。

在企业 Agent 架构中,MCP 更重要的价值是:

以标准方式把外部系统、资源、工具和执行环境接入 Agent。

因此,MCP 不只是 Tool。

它更像:

Context Provider
Tool Provider
Resource Provider
Execution Environment Adapter

本章核心观点是:

MCP 的价值不只是让 Agent 能调用函数,而是让 Agent 能以统一方式发现、访问和操作外部上下文与能力。

本章回答:

  • MCP 在 Agent 架构中处于哪一层;
  • MCP 与 Tool 有什么区别;
  • 为什么 MCP 能帮助降低工具定义和中间结果带来的 token 消耗;
  • Code execution with MCP 的意义是什么;
  • 企业系统如何通过 MCP 接入 Git、Jira、Confluence、数据库、CI;
  • 如何在 Java / Spring Boot 中设计 MCP Adapter。

2. 对应 Anthropic 文章

本章主要对应:

  • Code execution with MCP: Building more efficient agents

Anthropic 在文章中指出,随着 MCP 使用规模扩大,有两个常见问题会增加成本和延迟:

  1. 工具定义占用大量上下文窗口;
  2. 中间工具结果消耗额外 token。

当 Agent 连接成百上千个工具时,如果每次都把全部工具定义放进上下文,模型还没开始理解任务,就已经被工具描述淹没。

因此需要更高效的方式管理工具、资源和执行。

3. MCP 与 Tool 的区别

3.1 Tool 是动作

Tool 表示 Agent 可以执行的一个动作。

例如:

read_file
search_code
query_database
create_jira_issue
run_test

Tool 的重点是:

输入 → 执行 → 输出

3.2 MCP 是连接协议

MCP Server 可以暴露:

  • tools;
  • resources;
  • prompts;
  • 外部系统能力;
  • 执行环境。

它的重点是:

Agent Client 如何标准化连接外部能力

因此 MCP 更像 USB-C:不是某一个设备,而是连接设备的标准接口。

3.3 MCP 也是 Context Provider

MCP 可以暴露资源,例如:

文件
文档
数据库 schema
Git diff
Issue 内容
CI 日志
内部 Wiki 页面

这些资源被读取后会成为 Context。

所以从本书架构看,MCP 不只是 Tool Layer,也属于 Context Layer。

4. 为什么 MCP 对企业重要

企业 Agent 需要连接大量系统:

GitLab / GitHub
Jira
Confluence
Slack
CI/CD
数据库
对象存储
日志系统
监控系统
内部 API

如果每个 Agent 都单独实现连接,会导致:

  • 重复开发;
  • 权限不一致;
  • 审计困难;
  • 工具定义混乱;
  • 结果格式不统一;
  • 安全边界分散。

MCP 提供统一接入层。

企业可以为每类系统提供 MCP Server,再由 Agent Runtime 通过 MCP Client 访问。

5. Code Execution with MCP

Code execution with MCP 的关键思想是:

让 Agent 在受控执行环境中运行代码,处理大量数据,只把压缩结果返回上下文。

这可以解决两个问题。

5.1 减少中间结果 token

例如 Agent 要分析 10000 行 CSV。

错误方式:

把完整 CSV 塞进上下文。

正确方式:

MCP code execution 读取 CSV
程序计算统计结果
只返回聚合摘要

5.2 提高工具组合能力

Agent 可以写代码调用多个工具或处理多个结果。

例如:

读取 CI 日志
提取失败测试
按模块聚合
匹配最近 Git Diff
返回最可能原因

中间数据不必全部进入模型。

6. MCP 在企业 Agent 架构中的位置

可以把 MCP 放在三层之间:

Agent Runtime
  ↓
MCP Client
  ↓
MCP Servers
  ↓
Enterprise Systems

MCP Server 负责具体系统适配。

Agent Runtime 负责权限、上下文选择、工具编排和审计。

7. MCP 接入模式

7.1 Resource Provider 模式

暴露资源:

jira://issue/PROJ-123
confluence://page/456
git://repo/order-service/diff/abc
ci://build/4312/log

Agent 按需读取。

7.2 Tool Provider 模式

暴露动作:

jira.createIssue
git.getDiff
ci.getBuildSummary
db.queryReadonly

7.3 Sandbox Execution 模式

暴露受控代码执行能力:

python.run
node.run
sql.sandboxQuery

用于数据处理、日志解析、批量工具结果聚合。

7.4 Prompt / Skill Provider 模式

MCP 也可以提供任务模板或组织规范。

例如:

incident-analysis-prompt
security-review-checklist

8. 架构图 / 流程图

MCP Context Provider 架构
图 17-1 MCP Context Provider 架构 这张图展示 Agent Runtime 如何通过 MCP Client 接入 CI、Git、Jira、Confluence 和 Sandbox。 Mermaid 源文件

8.1 MCP 总体架构

MCP 总体架构
图 17-2 MCP 总体架构 Mermaid 源文件

8.2 MCP 作为 Context Provider

MCP 作为 Context Provider
图 17-3 MCP 作为 Context Provider Mermaid 源文件

8.3 Code Execution with MCP

Code Execution with MCP
图 17-4 Code Execution with MCP Mermaid 源文件

9. Java / Spring Boot 落地方案

9.1 McpConnector

public interface McpConnector {
    List<McpServerDescriptor> listServers();
    McpResource readResource(McpResourceRef ref);
    McpToolResult callTool(McpToolCall call);
}

9.2 McpServerRegistry

public interface McpServerRegistry {
    void register(McpServerDescriptor server);
    List<McpServerDescriptor> findByCapability(String capability);
}

9.3 McpContextProvider

@Component
public class McpContextProvider implements ContextProvider {

    private final McpConnector connector;

    @Override
    public boolean supports(ContextRequest request) {
        return request.metadata().containsKey("mcpResources");
    }

    @Override
    public List<ContextChunk> provide(ContextRequest request) {
        // 根据资源引用按需读取,并转成 ContextChunk
        return List.of();
    }
}

9.4 McpToolAdapter

public class McpToolAdapter implements AgentTool<McpToolInput, McpToolResult> {

    private final McpConnector connector;
    private final ToolDefinition definition;

    @Override
    public ToolDefinition definition() {
        return definition;
    }

    @Override
    public McpToolResult execute(McpToolInput input, ToolExecutionContext context) {
        return connector.callTool(input.toMcpToolCall());
    }
}

9.5 McpSecurityPolicy

public interface McpSecurityPolicy {
    boolean canAccessServer(UserIdentity user, McpServerDescriptor server);
    boolean canReadResource(UserIdentity user, McpResourceRef resource);
    boolean canCallTool(UserIdentity user, McpToolCall call);
}

MCP 安全策略必须放在 Agent Runtime 层强制执行。

10. 企业案例:Git MCP Server

Git MCP Server 可以暴露:

Resources

git://repo/{repoId}/README.md
git://repo/{repoId}/AGENTS.md
git://repo/{repoId}/diff/{commit}
git://repo/{repoId}/file/{path}

Tools

git.searchCode
git.getDiff
git.getRecentCommits
git.readFileRange
git.blame

安全规则

只允许访问用户有权限的 repo
默认只读
写操作必须走单独 Tool 并审批
禁止读取 secret 文件
所有访问记录审计

11. 常见误区

11.1 把 MCP 当成普通函数调用

MCP 是外部能力接入协议,不只是函数。

11.2 一次加载所有 MCP 工具定义

工具定义会占用上下文,应按任务选择。

11.3 MCP Server 无权限边界

企业 MCP 必须有认证、授权和审计。

11.4 返回大量原始数据

MCP 应支持分页、过滤、摘要和引用。

11.5 绕过 Agent Runtime 直接访问系统

MCP 接入仍应受 Runtime 的 Tool Policy 和 Context Policy 管理。

12. 贯穿案例:CI 失败分析 Agent

CI 失败分析 Agent 可以通过 MCP 接入企业系统。

需要的 MCP Server 包括:

CI MCP Server:读取 build 摘要和日志片段
Git MCP Server:读取 PR Diff、文件片段、最近提交
Jira MCP Server:读取或评论关联 Issue
Confluence MCP Server:读取项目排障文档

资源可以表示为:

ci://build/4312/summary
ci://build/4312/log#L882-L940
git://repo/order-service/pr/882/diff
git://repo/order-service/file/src/main/java/.../OrderStateMachine.java

工具可以表示为:

ci.getBuildSummary
git.getDiff
git.searchCode
git.readFileRange

MCP 的价值不是简单函数调用,而是把 CI、Git、Jira、Confluence 这些外部系统统一接入 Agent Runtime,并通过权限、审计、分页、摘要和引用机制控制上下文成本。

13. 本章小结

本章讨论 MCP。

核心结论:

  1. MCP 不只是 Tool,而是外部资源、工具和执行环境的标准接入层。
  2. MCP 可以作为 Context Provider,为 Agent 按需提供外部资源。
  3. Code execution with MCP 能减少中间结果进入上下文,提升效率。
  4. 企业 MCP 应统一接入 Git、Jira、Confluence、CI、数据库等系统。
  5. MCP 必须与权限、审计、上下文选择和工具编排结合。

一句话总结:

MCP 的真正价值,是让企业系统以标准、受控、可治理的方式成为 Agent 的上下文和能力来源。

14. 实践任务

任务 1:设计 Git MCP Server

定义 resources、tools、权限和审计字段。

任务 2:实现 McpContextProvider

把一个 MCP Resource 转成 ContextChunk。

任务 3:设计 MCP 安全策略

说明哪些资源可读,哪些工具可调用,哪些操作需要审批。

任务 4:日志分析 MCP

设计一个 code execution MCP,让 Agent 上传日志引用,返回失败摘要而不是完整日志。

results matching ""

    No results matching ""