MCP核心遵循客户端-服务器架构,其中主机应用程序(MCP client)可以连接到多个服务器(MCP Server):
MCP 在通信机制的设计上,将协议层(**Protocol layer)**与传输层(**Transport layer)**解耦
协议层依赖传输层提供的原始字节流,通过JSON-RPC封装为结构化消息,传输层可替换(如从Stdio切换为HTTP-SSE),而协议层逻辑保持不变,实现跨环境复用
通过这种分层设计,MCP既保证了通信的灵活性(如本地/云端场景切换),又实现了语义的统一性(如跨工具的标准请求格式),成为AI系统与数字世界交互的“通用插座”
协议层负责消息封装、请求和响应的关联、高级通信模式的管理。
就具体实现而言,就是实现了下面四个接口:
以 Python 为例:
class Session(BaseSession[RequestT, NotificationT, ResultT]):
asyncdef send_request(
self,
request: RequestT,
result_type: type[Result]
) -> Result:
"""Send request and wait for response. Raises McpError if response contains error."""
# Request handling implementation
asyncdef send_notification(
self,
notification: NotificationT
) -> None:
"""Send one-way notification that doesn't expect response."""
# Notification handling implementation
asyncdef _received_request(
self,
responder: RequestResponder[ReceiveRequestT, ResultT]
) -> None:
"""Handle incoming request from other side."""
# Request handling implementation
asyncdef _received_notification(
self,
notification: ReceiveNotificationT
) -> None:
"""Handle incoming notification from other side."""
# Notification handling implementation
MCP 的 Transport layer 负责处理 MCP Client 和 MCP Server 的底层通信,它决定了消息如何发送和接收。
All transports use JSON-RPC 2.0 to exchange messages.
MCP 的 Transport layer 采用 JSON-RPC 2.0 协议 来传输数据,并且支持两种传输模式:
MCP 使用 JSON-RPC 2.0 协议 作为传输数据的格式。 ****MCP 的传输层(Transports)负责处理底层通信细节,具体包括:
传输层的转换过程确保了 MCP 协议的抽象性与传输无关性,即 MCP 可灵活适配多种传输方式而不影响其核心逻辑。
MCP 定义了三种主要的消息类型
Request
{
jsonrpc: "2.0",
id: number | string,
method: string,
params?: object
}
Response
{
jsonrpc: "2.0",
id: number | string,
result?: object,
error?: {
code: number,
message: string,
data?: unknown
}
}
Notifications
{
jsonrpc: "2.0",
method: string,
params?: object
}
stdio模式是MCP协议定义的两种标准传输机制之一,采用同步阻塞模型进行通信。该模式通过操作系统的管道机制实现数据交换,主要面向本地批处理任务或简单工具调用场景。其优势在于实现简单、低延迟且无需网络配置,但仅限本地使用,不支持分布式部署。
核心思想:
MCP Server 作为 MCP Client 的一个子进程启动,通过进程的标准输入(stdin)和标准输出(stdout)传输数据,客户端和服务端通过管道(Pipe)或文件描述符直接交换信息。
fork/exec
等系统调用建立进程间通信管道\n
分隔,且禁止包含嵌入换行符SSE(Server-Sent Events)是MCP协议中基于HTTP协议实现的远程传输模式,通过HTTP长连接实现服务端到客户端的实时单向数据推送,配合HTTP POST完成双向通信。该模式主要解决AI应用场景中对话式会话状态保持、流式输出等需求,适用于需要远程访问或实时数据推送的场景,如云服务调用、多客户端监控等。
SSE 模式通过 两个独立通道 实现双向通信:
/sse
端点),接收服务器推送的 JSON-RPC 格式事件流。text/event-stream
格式传输,支持自动重连机制。/messages
)发送 JSON-RPC 请求,触发服务器执行操作(如调用工具、查询资源)。关键特性:
以下为一次完整会话的步骤(以调用远程工具为例):
连接建立
/sse
发送 GET 请求,建立 SSE 长连接。session_id
并通过 SSE 流推送至客户端。请求发送
method
、params
、request_id
),通过 HTTP POST 发送至 /messages
端点,并在 Header 中携带 session_id
。{
"jsonrpc": "2.0",
"id": 1,
"method": "get_weather",
"params": {
"city": "北京"
}
}
服务端处理
结果推送与匹配
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"temperature": 25,
"humidity": "60%"
}
}
request_id
将响应与原始请求关联。request_id
:连接终止
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有