什么是 MCP?
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年推出的开放、版本化协议,用于让 Host 及其 Client 发现和使用 Server 暴露的能力。它标准化部分生命周期和消息交互,但不会自行授予用户数据或操作权限。
快速了解
| 全称 | 模型上下文协议 |
|---|---|
| 创建时间 | 2024 年 11 月由 Anthropic 发布 |
| 规范文档 | 官方规范 |
工作原理
MCP 区分 Host、由 Host 管理的 Client 连接,以及暴露能力的 Server 进程或端点。Server 可以提供 Tools、Resources、Prompts 和固定规范版本定义的其他功能。初始化与 Capability Negotiation 用于确认双方共同支持的功能;任何 Client 都不必实现全部能力,Server Metadata 也不能证明某项能力可信或适合某次请求。 Transport 取决于部署形态。本地 Host 可以通过 stdio 启动 Server。远程部署应固定 MCP 版本、SDK 与支持的 HTTP Transport Profile,通常先评估当前 Streamable HTTP Profile。旧式 HTTP 加 SSE 仍可能作为兼容路径存在,但不是通用的远程默认方案。Tool Discovery、Descriptor 加载和注入模型上下文的时机与大小均由 Host 和 Client 实现决定,因此不存在协议规定的固定 Token 成本或“急加载”规则。 MCP 改善互操作性,而不是授权。Server 仍必须按拓扑认证调用者,对每次操作执行 Tenant 和对象级策略、校验参数、限制结果与副作用、保护凭据,并处理取消、重试、审计、删除和事件响应。Skill、目录、应用商店、计费系统和 Agent 框架可以使用 MCP,但它们都是独立的生态或产品约定。
主要特点
- 版本化生命周期:固定协议版本,并测试每个部署实际使用的 SDK 与功能子集
- 清晰角色:Host 管理一个或多个 Client 连接;Server 暴露已声明的能力
- Capability Negotiation:初始化描述支持能力,但不要求所有 Client 具有相同行为
- 结构化交互:所选版本定义 JSON-RPC 的消息、请求、响应、通知和错误行为
- Transport Profile:stdio 适合本地进程;远程 HTTP 必须匹配已固定的规范和 Client 支持
- 策略在协议外:Schema、Annotation、发现条目和模型决定都不是认证或授权控制
常见用途
- 为 IDE 提供范围受限的代码仓库或测试能力的本地集成
- 向已授权用户暴露受结果限制的只读业务数据的 Tenant 感知 Server
- 将稳定 Tool 契约映射到现有 API 或工作流的受控 Adapter
- 执行来源、权限、新鲜度和留存过滤的文档检索能力
- 具有明确审批、幂等、审计与回滚行为的内部运维集成
示例
Loading code...常见问题
MCP 为 AI 应用解决什么问题?
MCP 为兼容的 Host、Client 和 Server 提供共同的生命周期与能力接口,减少重复适配工作。它不会自动让所有 Client 和 Server 互操作:必须固定并测试 Host、Client、SDK、协议版本、Transport、授权流程与能力子集。
MCP 的 Tools、Resources 和 Prompts 分别是什么?
Tools 描述可调用操作,Resources 暴露由 URI 类标识符寻址的上下文,Prompts 提供可复用提示词模板。具体字段和可选功能取决于固定的规范版本。Tool Schema 或 Resource URI 绝不能替代服务端授权、校验、结果过滤或副作用控制。
如何开发自己的 MCP Server?
选择并固定支持所需 MCP 版本的 SDK,从一个窄化能力开始,定义稳定输入输出契约,并针对目标 Host 与 Client 测试。本地部署要限制 stdio 进程;远程部署要选择受支持的 HTTP Profile,并在暴露副作用前增加可信身份、对象级授权、限制、可观测性、取消和回滚。
MCP 是否规定急加载或固定 Token 预算?
不规定。规范定义发现和能力交互,Host 与 Client 决定何时请求、缓存、过滤或向模型上下文注入 Descriptor。应在目标集成中测量真实 Token 用量、选择质量、延迟和任务成功率,而不是依赖通用的 Tool 数量或 Token 估计。
MCP 会提供认证和授权吗?
MCP 本身不会让调用者自动拥有读取数据或执行操作的权限。部署相关的认证可以建立可信 Principal,但 Server 仍须对每次请求执行 Tenant、对象、操作、目的、审批、配额和业务不变量检查。应将 Tool 描述、Annotation、Prompt 和 Result 都视为不可信输入。