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

STDIO 传输非常适合:

  • 在同一台机器上运行的本地集成和工具

  • 安全敏感操作

  • 低延迟要求

  • 单客户端场景(每个服务器一个 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'});
// Register tools...

// Use STDIO transport
const transport = new StdioServerTransport(server);
transport.listen();

上交所运输

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

SSE 传输的工作原理

  1. 客户端(Cline)通过 HTTP GET 请求连接到服务器的 SSE 端点

  2. 这将建立一个持久连接,服务器可以将事件推送到客户端

  3. 对于客户端到服务器的通信,客户端向单独的端点发出 HTTP POST 请求

  4. 沟通通过两个渠道进行:

    • 事件流(GET):服务器到客户端的更新

    • 消息端点(POST):客户端到服务器的请求

复制

Client                             Server
  |                                  |
  |---- HTTP GET /events ----------->| (establish SSE connection)
  |<---- SSE event stream -----------| (persistent connection)
  |                                  |
  |---- HTTP POST /message --------->| (client request)
  |<---- SSE event with response ----| (server response)
  |                                  |

上交所特征

  • 远程访问 :可以托管在与 Cline 实例不同的机器上

  • 可扩展性 :可以同时处理多个客户端连接

  • 协议 :通过标准 HTTP 工作(无需特殊协议)

  • 持久性 :维护服务器到客户端消息的持久连接

  • 身份验证 :可以使用标准 HTTP 身份验证机制

何时使用 SSE

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'});
// Register tools...

// Use SSE transport
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 之间进行选择

考虑
标准输出
上交所

地点

仅限本地机器

本地或远程

客户

单一客户端

多个客户端

表现

更低的延迟

更高的延迟(网络开销)

设置复杂性

更简单

更复杂(需要 HTTP 服务器)

安全

考虑标准输出上交所

地点

仅限本地机器

本地或远程

客户

单一客户端

多个客户端

表现

更低的延迟

更高的延迟(网络开销)

设置复杂性

更简单

更复杂(需要 HTTP 服务器)

安全

本质安全

需要明确的安全措施

网络访问

不需要

必需的

可扩展性

限于本地机器

可以跨网络分发

部署

按用户安装

集中安装

更新

分布式更新

集中更新

资源使用情况

使用客户资源

使用服务器资源

依赖项

客户端依赖项

服务器端依赖项

在 Cline-胜算云增强版 中配置传输

有关在 Cline-胜算云增强版 中配置 STDIO 和 SSE 传输的详细信息(包括示例), 请参阅配置 MCP 服务器

Last updated