MCP以及底层协议、传输模式
MCP是Anthropic于2024年11月开源的AI与外部世界连接的统一标准,底层使用JSON-RPC2.0协议,官方传输标准为stdio, Streamable HTTP,SSE已废弃,核心作用是通过标准化中间层解决AI应用与外部工具/数据源之间的M x N集成问题,实现即插即用。
核心定义与角色
MCP 常被称为“AI 的 USB-C 接口”。它解决的核心痛点是:传统模式下 m 个模型 × n 个工具需要 m×n 次定制开发,引入 MCP 后只需 m+n 次实现即可全互联。
在 AI 系统中,MCP 承担以下角色:
- 标准化连接层:统一 LLM 与外部工具/数据源的交互接口,各厂商只需实现一次 Client 或 Server 即可互通
- 能力扩展桥梁:让模型从“只会回答”升级为“能执行操作”(读文件、查数据库、调 API)
- 安全隔离层:所有敏感操作在 Server 端执行,凭证不暴露给模型侧
- 智能体基础设施:是 AI Agent 串联多个工具完成复杂任务的基础设施,但它不是智能体框架本身,而是智能体访问工具的标准化整合层
核心架构
MCP采用Host-Client-Server三层架构:
- Host主机,运行LLM的应用环境
- Client客户端,内嵌于Host中的通信中间件,将模型指令转为Json-RPC2.0标准请求,与Server通信
- Server服务器,外部能力的提供者,封装并暴露三类核心原语Primitives
- Resources资源,只读数据
- Tools工具,可执行函数
- Prompts提示模板,可复用的工作流模板
底层协议
MCP底层使用JSON-RPC2.0作为消息格式标准
JSON-RPC2.0是一种轻量级、语言无关的远程过程调用协议,使用JSON作为数据格式,不是传输协议,而是应用层的消息格式标准,传输层可以灵活替换。
消息类型:MCP中所有通信都遵循JSON-RPC2.0的三种消息类型,
- 请求Request,客户端发起,要求服务器执行操作,包含唯一id
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "getWeather", "arguments": { "city": "杭州" } }
}
- 响应Response,服务器对请求的回复,包含result 或 error
{
"jsonrpc": "2.0",
"id": 1,
"result": { "content": [{ "type": "text", "text": "杭州今天晴,28°C" }] }
}
- 通知Notification,单向详细,无需回复,不包含id
{
"jsonrpc": "2.0",
"method": "notifications/resources/updated",
"params": { "uri": "file:///data/report.txt" }
}
初始化握手:连接建立后必须先完成能力协商,Client发送initialize请求声明自身能力,Server返回其支持的capabilities,双方协商完成后才能调用list_tools(), call_tool()等方法
传输模式详解
MCP协议定义了三种标准传输机制:
1、stdio模式(标准输入 / 输出)
- 原理:Client以子进程形式启动Server,通过操作系统的stdin / stdout管道交换JSON-RPC消息,不走网络
- 通信流程:Client启动Server子进程 -> Client往Server的stdin写入消息 -> Server处理后往stdout写入响应 ->Client从stdout读取结果 ->结束关闭stdin终止进程
- 特点:消息以换行符 \n分隔,UTF-8编码,Server可通过stderr输出日志
- 适用场景:本地开发、CLI工具、单机部署、CI/CD管道
- 优势:零网络延迟,实现简单,安全性高
- 局限:只能单进程通信,无法多客户端并发
2、Streamable HTTP模式(远程推荐)
- 原理:基于HTTP协议,通过单一端点,例如/mcp实现双向通信,支持流式传输,用于替代SSE
- 适用场景:远程服务调用,云端部署,多客户端并发访问,浏览器环境
- 优势:支持跨网络通信,多客户端共享,天然兼容Web基础设施(负载均衡,CDN等)
3、SSE模式(已废弃)
- 原理:基于HTTP + SSE,Client通过HTTP Post发请求,Server通过SSE单向推送响应
- 推荐使用Streamable HTTP替代
模式对比:
| 特性 | stdio | Streamable HTTP | SSE |
|---|---|---|---|
| 通信方式 | 进程管道,stdin, stdout | HTTP双向 | HTTP POST + SSE推送 |
| 网络依赖 | 无 | 需要 | 需要 |
| 多客户端 | 不支持 | 支持 | 支持 |
| 适用场景 | 本地/ CLI | 远程 / 云端 | 远程(已废弃) |
示例
http模式
例如Kubernetes MCP Server的HTTP模式配置示例,认证方式使用Bearer Token
{
"mcpServers": {
"kubernetes": {
"enabled": true,
"type": "http",
"url": "http://xxxx/mcp",
"headers": {
"Authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjFhMmIzYzRkNWU2Zjc4OTAxMjM0NTY3ODkwYWJjZGVmIn0.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0In0.signature",
"X-Cluster-Name": "prod-cluster-01"
},
"description": "Kubernetes MCP server for cluster management operations"
}
}
}
- type, "http"表示Streamable HTTP传输模式
- url,是远程地址
或者HTTP模式 + API key,
{
"mcpServers": {
"weather-api": {
"enabled": true,
"type": "http",
"url": "https://api.example.com/mcp",
"headers": {
"X-API-Key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Content-Type": "application/json"
},
"description": "Weather API MCP server for weather query operations"
}
}
}
stdio模式
例如Postgresql数据库MCP Server的配置示例,使用sdtio传输模式
配置:
{
"mcpServers": {
"postgres": {
"enabled": true,
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://readonly_user:your_password@xxxxx/test_db"
],
"description": "PostgreSQL MCP server for database query operations"
}
}
}
- enabled表示是否启用
- command表示启动Server子进程的命令,用到npx
- args表示命令参数,-y自动确认安装
- description,描述信息
总结:
- HTTP模式,用type: “http” + url连接远程服务,适合团队共享,云端部署
- stdio模式,用command + args启动本地子进程,适合本地开发,轻量工具
更多推荐



所有评论(0)