模型上下文协议规范(2025-03-26)
翻译自:https://spec.modelcontextprotocol.io/specification/2025-03-26/
ℹ️ 协议修订:2025-03-26
模型上下文协议 (MCP) 是一个开放的协议,它使得语言模型应用程序与外部数据源和工具之间的无缝集成成为可能。无论您是在构建一个由人工智能驱动的集成开发环境(IDE),增强一个聊天界面,还是创建自定义的AI工作流程,MCP都提供了一种标准化的方式连接语言模型与它们所需的上下文。
这个规范定义了权威的协议要求,基于位于schema.ts的TypeScript Schema。
对于实施指南和示例,请访问 modelcontextprotocol.io。
本文档中的关键词“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“NOT RECOMMENDED”、“MAY”和“OPTIONAL”应当按照BCP 14 [RFC2119] [RFC8174]所描述的意义进行解读,当且仅当它们如本文所示全部以大写字母出现时。
概览
MCP为应用程序提供了一种标准化的方式来:
- 与语言模型分享上下文信息
- 向人工智能系统暴露工具和能力
- 构建可组合的集成和工作流程
该协议使用 JSON-RPC 2.0消息来建立以下之间的通信:
- 主机:发起连接的LLM应用程序
- 客户端:宿主应用程序内部的连接器
- 服务器:提供上下文和能力的服务
MCP 从 语言服务器协议 中获得了一些灵感,该协议标准化了如何在整个开发工具生态系统中增加对编程语言的支持。与此类似,MCP 标准化了如何将额外的上下文和工具集成到 AI 应用的生态系统中。
关键细节
基础协议
- JSON-RPC 消息格式
- 有状态连接
- 服务器和客户端能力协商
特性
服务器向客户提供以下任一特性:
- 资源:上下文与数据,供用户或人工智能模型使用
- 提示:为用户提供的模板化消息和工作流程
- 工具:AI模型执行的函数
客户端可能会向服务器提供以下功能:
- 采样:服务器主动的代理行为和递归的大型语言模型交互
附加工具
- 配置
- 进度跟踪
- 取消
- 错误报告
- 记录
安全与信任与安全保障
模型上下文协议通过任意数据访问和代码执行路径开启了强大的功能。随着这种能力的增加,所有实现者必须仔细考虑重要的安全和信任问题。
关键原则
- 用户同意与控制
- 用户必须明确同意并理解所有数据访问和操作。
- 用户必须保留对哪些数据被共享以及采取什么行动的控制权。
- 实施者应为审查和授权活动提供清晰的用户界面。
- 数据隐私
- 主机在将用户数据暴露给服务器之前,必须获得用户的明确同意。
- 主机在未经用户同意的情况下不得将资源数据传输到其他地方。
- 用户数据应该通过适当的访问控制来保护。
- 工具安全
- 工具代表任意代码执行,必须谨慎对待。
- 特别是,工具行为的描述,如注解,应被视为不可信的,除非它们来自于一个可信的服务器。
- 主机在调用任何工具之前必须获得用户的明确同意。
- 用户应在授权使用每个工具之前了解它的功能。
- 工具代表任意代码执行,必须谨慎对待。
- LLM 采样控制
- 用户必须明确批准任何LLM抽样请求。
- 用户应该控制:
- 是否会发生抽样
- 实际将要发送的提示
- 服务器可以看到什么结果
- 该协议有意限制了服务器对提示的可见性。
实施指南
虽然MCP本身不能在协议层面强制执行这些安全原则,但是实现者应该:
- 将强大的同意和授权流程构建到他们的应用程序中
- 提供清晰的安全隐患文档说明
- 实施适当的访问控制和数据保护
- 在他们的集成中遵循安全最佳实践。
- 在他们的功能设计中考虑隐私影响。