MCP 协议

MCP 协议详解

MCP(Model Context Protocol,模型上下文协议)是由Anthropic于2024年11月发布的开源标准协议,旨在为AI应用(如大型语言模型LLM)和外部数据源、工具、系统之间提供标准化、安全的双向连接接口。它解决了传统AI集成中的“N×M”问题(每个AI模型需为每个数据源开发自定义连接器),类似于AI领域的“USB-C端口”。MCP基于JSON-RPC 2.0传输,支持stdio和HTTP传输,已被OpenAI、Google DeepMind等主要AI提供商采用。

1. MCP 协议概述

基本概念

  • 作用:标准化AI模型与外部系统(如数据库、文件系统、API、开发工具)的交互,实现上下文注入、数据检索和工具调用
  • 端口:无固定端口,支持stdio(本地)或HTTP(网络,默认无TLS)
  • 传输层:JSON-RPC 2.0 over stdio/HTTP,支持双向消息(请求、响应、通知)
  • 工作模式:客户端-服务器架构,AI应用作为MCP客户端,数据源作为MCP服务器
  • 开源标准:GitHub仓库托管,鼓励社区贡献连接器

MCP vs 传统AI集成

特性MCP传统函数调用(如OpenAI API)
标准化是(开源协议)供应商特定
双向通信支持(通知、流式响应)主要单向
上下文管理内置(元数据标签、提示仓库)手动注入
安全性可选TLS/OAuth依赖供应商
扩展性生态系统(连接器共享)自定义开发
适用场景AI代理、工具链简单API调用

MCP 的核心优势

  • 简化集成:开发者无需为每个AI模型重写连接器,一次实现全平台兼容
  • 增强AI能力:AI可动态访问实时数据,提升代理(如Claude、ChatGPT)的实用性
  • 生态构建:支持数据源暴露(如GitHub仓库、业务工具),AI应用消费(如代码生成、数据分析)

2. MCP 架构

核心组件

AI应用 (MCP Client) ↔ 传输层 (JSON-RPC) ↔ MCP Server ↔ 外部系统 (数据/工具)
    ↓                          ↓                    ↓
  - 请求/通知                - 消息转换            - 数据检索/工具执行
  - 上下文注入               - 错误处理            - 安全访问控制

角色分工

  • MCP Client:AI模型侧(如Claude 3.5 Sonnet),发起请求,处理响应
  • MCP Server:数据源侧,实现协议接口,暴露资源(如文件读取、数据库查询)
  • 传输层:处理消息序列化、错误恢复,支持中断重连

传输方法

方法描述适用场景
stdio标准输入/输出,本地进程间通信本地工具集成(如VS Code插件)
HTTP网络传输,默认明文(可选TLS)远程数据源(如云数据库)
WebSocket扩展支持,双向流式实时交互(如视频会议工具)

消息类型(JSON-RPC 2.0)

  • Request:客户端→服务器,带ID和参数(如”read_file”)
  • Response:服务器→客户端,带结果或错误
  • Notification:无响应通知(如状态更新)

3. MCP 消息格式

基本JSON-RPC结构

{
  "jsonrpc": "2.0",
  "id": "unique_request_id",
  "method": "mcp.method_name",
  "params": {
    "context": "user_prompt",
    "data_source": "file://path/to/file.txt",
    "filters": {"source": "specific_ip"}
  }
}

核心方法示例

方法描述参数示例
initialize初始化连接,协商版本{"protocol_version": "1.0"}
read_context读取数据源上下文{"source": "database", "query": "SELECT * FROM users"}
execute_tool调用外部工具{"tool": "calculator", "input": "2+2"}
shutdown关闭连接无参数

错误响应格式

{
  "jsonrpc": "2.0",
  "id": "request_id",
  "error": {
    "code": -32600,
    "message": "Invalid Request",
    "data": {"details": "Unknown method"}
  }
}

4. MCP 通信流程

初始化和交互示例

1. 客户端发送initialize请求
   → Server响应协议版本和能力

2. 客户端发送read_context请求
   → Server查询数据源,返回结构化上下文(JSON + 元数据)

3. 客户端注入上下文到AI提示
   → AI生成响应,可能触发execute_tool通知

4. Server执行工具,返回结果
   → 客户端更新AI上下文,继续交互

5. 异常处理:传输中断时重连,错误时回滚状态

完整会话示例(JSON)

// 客户端: 初始化
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"version":"1.0"}}

// 服务器: 确认
{"jsonrpc":"2.0","id":1,"result":{"supported_methods":["read_context","execute_tool"]}}

// 客户端: 读取文件
{"jsonrpc":"2.0","id":2,"method":"read_context","params":{"path":"/data/report.txt","format":"json"}}

// 服务器: 返回数据
{"jsonrpc":"2.0","id":2,"result":{"content":"报告数据...","metadata":{"timestamp":"2025-10-13T00:00:00Z"}}}

// 通知: 工具执行
{"jsonrpc":"2.0","method":"notification","params":{"tool":"search","query":"AI trends 2025"}}

5. MCP 扩展功能

上下文管理

  • 元数据标签:自动添加时间戳、来源、权限标签
  • 提示仓库:服务器端预定义提示模板,提升AI响应一致性
  • 流式响应:支持实时数据注入,避免上下文窗口溢出

安全增强

  • OAuth 2.1集成:Cloudflare等提供库,支持第三方授权
  • TLS可选:默认HTTP,推荐启用加密防窃听
  • 权限控制:细粒度访问(如只读数据库)

工具集成示例

  • 数据源:文件系统、SQL数据库、Git仓库
  • 工具:计算器、搜索引擎、代码执行器
  • 工作流:自动化链(如数据分析→报告生成)

6. MCP 安全考虑

潜在风险

风险描述缓解
凭据泄露MCP服务器暴露敏感API密钥使用OAuth,加密传输
提示注入恶意上下文篡改AI行为输入验证,沙箱执行
供应链攻击恶意MCP包下载执行签名验证,静态分析
暴露服务器互联网上无认证MCP服务器访问控制,网络隔离
DoS洪泛请求耗尽资源速率限制,认证令牌

最佳实践

  • 强制TLS:所有网络连接启用加密
  • 最小权限:服务器只暴露必要方法
  • 审计日志:记录所有请求/响应
  • 扫描工具:定期检查暴露服务器(如Knostic 2025年扫描发现2000+无认证实例)

7. MCP 实现示例

Python MCP服务器(简化)

import json
import sys
from jsonrpcserver import Success, serve

# MCP方法实现
methods = {
    "initialize": lambda params: Success({"version": "1.0", "capabilities": ["read_context"]}),
    "read_context": lambda params: Success({"content": "示例数据", "metadata": {"source": "file"}})
}

# JSON-RPC服务器(stdio模式)
request = json.loads(sys.stdin.readline())
response = methods.get(request.get("method"), lambda _: Success({"error": "Unknown method"}))(request.get("params"))
print(json.dumps(response))
sys.stdout.flush()

客户端集成(AI代理)

import requests
import json

def mcp_request(server_url, method, params):
    payload = {
        "jsonrpc": "2.0",
        "id": 1,
        "method": method,
        "params": params
    }
    response = requests.post(server_url, json=payload)
    return response.json()["result"]

# 示例:读取上下文
context = mcp_request("http://mcp-server:8080", "read_context", {"path": "/data.txt"})
print(f"注入AI提示: {context['content']}")

8. MCP 生态和工具

主要实现

  • Anthropic SDK:Claude原生支持
  • OpenAI集成:2025年3月宣布兼容
  • Cloudflare OAuth库:授权提供者
  • 社区连接器:GitHub、数据库驱动

开发资源

  • 规范:modelcontextprotocol.io
  • GitHub:anthropic/mcp-spec
  • 测试工具:MCP模拟器,验证连接器

9. MCP 的未来发展

当前状态(2025年10月)

  • 采用率:主要AI提供商支持,生态快速增长
  • 挑战:安全标准化(如强制TLS),供应链风险
  • 扩展:支持更多传输(如WebSocket),AI代理工作流

潜在影响

  • AI代理革命:标准化工具调用,提升自动化
  • 企业集成:无缝连接遗留系统,减少开发成本
  • 安全焦点:2025年报告显示暴露服务器问题,需加强防护

MCP协议通过标准化接口桥接AI与现实世界系统,推动了AI从“智能”向“行动”的转变。作为开源标准,它促进了生态协作,但开发者需优先考虑安全实现,以避免新兴风险。更多细节可参考Anthropic官方文档。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注