LogoCursor
MCP Servers

MCP 传输机制

mcp-transport-mechanisms 说明

MCP 传输机制

模型上下文协议(MCP)支持两种主要的通信传输机制,用于 Cline 与 MCP 服务器之间的数据交互:标准输入/输出(STDIO)和服务器推送事件(SSE)。每种方式都有其独特特性、优势和适用场景。


STDIO 传输

STDIO 传输在本地机器上运行,通过标准输入/输出流进行通信。

STDIO 工作原理

  1. 客户端(Cline)以子进程方式启动 MCP 服务器
  2. 通信通过进程流进行:客户端写入服务器的 STDIN,服务器通过 STDOUT 响应
  3. 每条消息以换行符分隔
  4. 消息格式为 JSON-RPC 2.0
Client                    Server
 |                         |
 |<---- JSON message ----->| (via STDIN)
 |                         | (processes request)
 |<---- JSON message ------| (via STDOUT)
 |                         |

STDIO 特性

  • 本地性:与 Cline 运行在同一台机器上
  • 高性能:极低延迟和开销(无网络栈)
  • 简洁性:无需网络配置,进程间直接通信
  • 一对一关系:每个服务器仅服务一个客户端
  • 安全性:无网络暴露,天然更安全

适用场景

STDIO 传输适合以下场景:

  • 本地集成和工具(与 Cline 同机运行)
  • 对安全性要求高的操作
  • 低延迟需求
  • 单客户端场景(每个服务器仅服务一个 Cline 实例)
  • 命令行工具或 IDE 扩展

STDIO 实现示例

import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
 
const server = new Server({name: 'local-server', version: '1.0.0'});
// 注册工具...
 
// 使用 STDIO 传输
const transport = new StdioServerTransport(server);
transport.listen();

SSE 传输

服务器推送事件(SSE)传输在远程服务器上运行,通过 HTTP/HTTPS 进行通信。

SSE 工作原理

  1. 客户端(Cline)通过 HTTP GET 请求连接服务器的 SSE 端点
  2. 建立持久连接,服务器可持续向客户端推送事件
  3. 客户端向服务器发送消息时,通过 HTTP POST 请求到另一个端点
  4. 通信分为两条通道:
    • 事件流(GET):服务器到客户端的更新
    • 消息端点(POST):客户端到服务器的请求
Client                             Server
 |                                  |
 |---- HTTP GET /events ----------->| (建立 SSE 连接)
 |<---- SSE event stream -----------| (持久连接)
 |                                  |
 |---- HTTP POST /message --------->| (客户端请求)
 |<---- SSE event with response ----| (服务器响应)
 |                                  |

SSE 特性

  • 远程访问:可部署在与 Cline 不同的机器上
  • 可扩展性:支持多个客户端并发连接
  • 协议标准:基于标准 HTTP,无需特殊协议
  • 持久连接:服务器到客户端消息为持久连接
  • 认证支持:可用标准 HTTP 认证机制

适用场景

SSE 传输更适合以下场景:

  • 跨网络远程访问
  • 多客户端并发
  • 公共服务
  • 需要集中访问的工具
  • 与 Web 服务集成

SSE 实现示例

import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
import express from 'express';
 
const app = express();
const server = new Server({name: 'remote-server', version: '1.0.0'});
// 注册工具...
 
// 使用 SSE 传输
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
  console.log('MCP server listening on port 3000');
});

本地与托管:部署考量

选择 STDIO 或 SSE 传输方式会直接影响 MCP 服务器的部署和管理方式。

STDIO:本地部署模式

STDIO 服务器在与 Cline 相同的本地机器上运行,主要影响如下:

  • 安装:每台用户机器都需安装服务器可执行文件
  • 分发:需为不同操作系统提供安装包
  • 更新:每个实例需单独更新
  • 资源占用:使用本地 CPU、内存和磁盘
  • 访问控制:依赖本地文件系统权限
  • 集成:易于与本地系统资源(文件、进程)集成
  • 执行:随 Cline 启动/关闭(子进程生命周期)
  • 依赖:所有依赖需在用户机器上安装

实际示例

本地文件搜索工具(STDIO):

  • 在用户机器上运行
  • 直接访问本地文件系统
  • 按需由 Cline 启动
  • 无需网络配置
  • 需与 Cline 一同安装或通过包管理器安装

SSE:托管部署模式

SSE 服务器可部署在远程服务器,通过网络访问:

  • 安装:只需在服务器上安装一次,供多用户访问
  • 分发:单一部署服务多个客户端
  • 更新:集中更新,所有用户即时生效
  • 资源占用:使用服务器资源,不占用本地
  • 访问控制:通过认证和授权系统管理
  • 集成:与用户专属资源集成更复杂
  • 执行:作为独立服务持续运行
  • 依赖:依赖在服务器端统一管理

实际示例

数据库查询工具(SSE):

  • 在中心服务器上运行
  • 用服务器端凭证连接数据库
  • 持续为多用户服务
  • 需配置网络安全
  • 可用容器或云技术部署

混合模式

某些场景可采用混合方案:

  1. STDIO + 网络访问:本地 STDIO 服务器作为远程服务代理
  2. SSE + 本地命令:远程 SSE 服务器可通过回调触发本地操作
  3. 网关模式:本地 STDIO 服务器处理本地操作,连接远程 SSE 服务器完成专业功能

如何选择 STDIO 与 SSE

考量STDIOSSE
部署位置仅本地本地或远程
客户端数单客户端多客户端
性能低延迟网络延迟较高
配置复杂度简单需 HTTP 服务器
安全性天然安全需额外安全措施
网络需求无需必须
可扩展性受限于本地可跨网络分布
部署方式每用户单独安装集中式安装
更新方式分布式更新集中式更新
资源占用占用客户端资源占用服务器资源
依赖管理客户端依赖服务器端依赖

在 Cline 中配置传输方式

关于在 Cline 中配置 STDIO 和 SSE 传输方式的详细信息与示例,请参见:配置 MCP 服务器