8.4 模型上下文协议与工具标准化
8.4.1 协议简介
Model Context Protocol(MCP)是一种开放协议规范,旨在标准化 AI 模型与外部工具、资源的交互方式。
MCP 解决的核心问题:
缺乏统一的工具交互标准
不同模型/应用的工具集成方式各异
工具能力难以复用
8.4.2 协议架构
图 8-6:MCP 架构图
主要组件:
MCP 客户端:集成到 AI 应用中,发起请求
MCP 服务端:提供工具和资源的接口
传输层:支持多种传输方式(stdio、HTTP)
MCP 传输与 JSON-RPC 2.0 详解
MCP 基于 JSON-RPC 2.0 作为消息传输标准,在客户端和服务端之间进行结构化的远程过程调用。JSON-RPC 2.0 定义了请求、响应、通知三种消息类型,每个消息包含必要的版本、方法名、参数和ID信息。
传输层演进:
最新的 MCP 规范支持两类传输:
stdio:经典的标准输入输出流,适合本地进程通信和容器化部署
Streamable HTTP:新一代的 HTTP 传输方案,替代了早期的 HTTP+SSE 组合,支持更高效的双向流式通信,特别是对长连接和大型响应流有更好的支持
OAuth 2.1 与安全认证
在生产环境中,MCP 服务端通常需要进行身份认证和授权。新版 MCP 协议集成了 OAuth 2.1 标准,用于安全地获取和验证访问令牌:
Authorization Endpoint:用户授权端点,获取授权码
Token Exchange:通过授权码交换访问令牌
Token Validation:服务端验证令牌有效性和权限范围
Scope Control:细粒度权限控制,限制客户端的访问范围
这确保了即使客户端与服务端通过不安全的网络通信,也能保护敏感操作(如数据修改、删除)。
Origin 验证与本地绑定
为防止恶意来源的请求,MCP 协议引入了:
Origin Validation:验证请求来自合法的客户端源
Localhost Binding:对本地部署的服务端,可以限制只接受本机(127.0.0.1)的连接,防止网络攻击
这些机制构成了 MCP 协议在分布式系统中的安全基础。
8.4.3 核心概念
MCP 的早期介绍通常聚焦三类最常见的基础构件:工具(Tools)、资源(Resources) 和 提示模板(Prompts)。在当前规范与社区设计原则中,MCP 还进一步引入了面向长时任务的 Tasks 能力,用于跟踪状态、轮询进度和延迟获取结果。这种标准化使得不同实现之间能够互操作——任何符合规范的客户端都能调用任何符合规范的服务端。
工具
可执行的函数,类似于函数调用。格式包含 name(工具名称)、description(描述)和 inputSchema(参数定义,遵循 JSON Schema 格式):
资源
可读取的数据源,如文件、数据库、API 端点等。格式包含 uri(资源唯一标识符)、name(显示名称),以及可选的 mimeType(内容类型)和 description:
提示模板
预定义的提示词模板,便于复用常见的交互模式。格式包含 name(模板名称)、description(描述),以及可选的 arguments(参数列表):
任务
用于表示可能持续较长时间的工作单元,例如批量索引、长时爬取或异步分析。相比“一次请求立即返回”的工具调用,任务更强调状态跟踪、进度查询和结果延迟获取:
8.4.4 协议优势
标准化:统一的协议减少集成成本
可组合:不同 MCP 服务可以组合使用
跨平台:同一服务可被不同客户端使用
生态系统:日益丰富的预构建服务
8.4.5 服务示例
文件系统服务
提供文件读写能力:
read_file:读取文件write_file:写入文件list_directory:列出目录
数据库服务
提供数据库访问:
query:执行查询describe_schema:获取表结构
网页服务
提供网页访问:
fetch_url:获取网页内容search:搜索网页
8.4.6 实现服务
简单的 MCP 服务实现框架:
8.4.7 MCP与上下文工程的深度融合
MCP 不仅仅是工具调用的标准化协议,更是上下文工程的关键基础设施。理解 MCP 如何影响上下文工程的各个环节至关重要。
MCP Resources 作为上下文源
传统方法的限制:
问题:
向量库中的信息可能陈旧
对高频实时数据的支持通常依赖增量索引、缓存刷新或直连数据源,工程复杂度更高
多个数据源的集成复杂
基于MCP的上下文获取:
实现示例:
关键优势:
动态性:资源可以是实时数据,无需预构建向量库
多源融合:天然支持来自不同系统的数据整合
可扩展性:新增数据源仅需接入新的MCP服务器
信息溯源:资源URI明确指示数据来源
MCP Tools 扩展上下文操作
上下文不仅是输入,也可能需要在推理过程中动态变换。MCP Tools 提供了这种能力:
使用场景:
即时压缩:当上下文超过限制时,动态调用压缩工具
关键词过滤:提取与查询相关的上下文片段
跨语言支持:自动翻译外语上下文
知识增强:在推理中动态调用知识库
MCP Prompts 标准化提示词模式
MCP Prompts 规范化了上下文的呈现方式,使得提示词设计可复用和版本管理:
标准化的好处:
版本控制:提示词可以版本管理,方便回滚和A/B测试
可复用性:团队可共享优化过的提示词模板
一致性:相同类型的任务使用相同的提示结构
可维护性:改进某个模板自动应用到所有相关系统
实战:MCP服务器配置文件示例
上下文工程的三层架构:
这个架构使得上下文工程从静态的向量检索演进到 动态、可组合、可扩展 的系统。
8.4.8 未来展望
MCP 协议正在快速发展。不同客户端、IDE 与模型平台对 MCP 的支持程度可能不同,且会随版本迭代变化;在做技术选型时建议以对应项目与产品的最新文档为准。
8.4.9 实战案例:构建 GitHub 协议服务
以下是一个 GitHub MCP Server 的 示意性 实现,用于展示如何同时提供 Tools、Resources 和 Prompts。
完整代码实现
配置和使用
1. 安装依赖:
2. 在 Claude Desktop 中配置(claude_desktop_config.json):
3. 使用示例:
踩坑经验:
Token 权限要最小化,只授予必需的 scope
异步 HTTP 客户端比同步更适合 MCP Server
复杂操作应拆分为多个小工具,而非一个大工具
最后更新于
