第 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 使用规模扩大,有两个常见问题会增加成本和延迟:
- 工具定义占用大量上下文窗口;
- 中间工具结果消耗额外 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. 架构图 / 流程图
8.1 MCP 总体架构
8.2 MCP 作为 Context Provider
8.3 Code Execution with MCP
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。
核心结论:
- MCP 不只是 Tool,而是外部资源、工具和执行环境的标准接入层。
- MCP 可以作为 Context Provider,为 Agent 按需提供外部资源。
- Code execution with MCP 能减少中间结果进入上下文,提升效率。
- 企业 MCP 应统一接入 Git、Jira、Confluence、CI、数据库等系统。
- MCP 必须与权限、审计、上下文选择和工具编排结合。
一句话总结:
MCP 的真正价值,是让企业系统以标准、受控、可治理的方式成为 Agent 的上下文和能力来源。
14. 实践任务
任务 1:设计 Git MCP Server
定义 resources、tools、权限和审计字段。
任务 2:实现 McpContextProvider
把一个 MCP Resource 转成 ContextChunk。
任务 3:设计 MCP 安全策略
说明哪些资源可读,哪些工具可调用,哪些操作需要审批。
任务 4:日志分析 MCP
设计一个 code execution MCP,让 Agent 上传日志引用,返回失败摘要而不是完整日志。