协议版本: 2024-11-05
- stdio,通过标准输入和标准输出进行通信
- 带服务端发送事件(SSE)的 HTTP
stdio
在 stdio 传输中:- 客户端以子进程的方式启动 MCP 服务器。
- 服务器在其标准输入(
stdin)上接收 JSON-RPC 消息,并将其响应写入标准输出(stdout)。 - 消息通过换行符分隔,不得包含嵌入的换行符。
- 服务器可以将 UTF-8 字符串写入标准错误(
stderr)用于日志记录。客户端可以捕获、转发或忽略这些日志。 - 服务器不得在
stdout中写入任何非有效的 MCP 消息。 - 客户端不得向服务器的
stdin写入任何非有效的 MCP 消息。
HTTP with SSE
在 SSE 传输中,服务器作为一个独立进程运行,能够处理多个客户端连接。安全警告
实现带 SSE 的 HTTP 传输时:- 服务器必须验证所有传入连接的
Origin请求头,以防止 DNS 绑定攻击 - 在本地运行时,服务器应仅绑定到本地回环地址(127.0.0.1),而不是所有网络接口(0.0.0.0)
- 服务器应为所有连接实施适当的身份验证机制
- 一个 SSE 端点,用于客户端建立连接并从服务器接收消息
- 一个普通的 HTTP POST 端点,用于客户端向服务器发送消息
endpoint 事件。所有后续客户端消息必须作为 HTTP POST 请求发送到此端点。
服务器消息作为 SSE 的 message 事件发送,事件数据中包含以 JSON 编码的消息内容。