多传输协议客户端

MCP多传输协议客户端支持stdio、SSE和Streamable HTTP三种通信方式,适用于需要多种通信协议支持的开发环境。

  • by jaehyodev
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 jaehyodev/mcp-client

使用说明

MCP多传输客户端

模型上下文协议(MCP)客户端实现,支持三种通信方式:stdio、SSE、Streamable HTTP

特点

  • 纱线离线镜:可以在脱机环境中安装软件包
  • 多通信方式:stdio、SSE、Streamable HTTP支持
  • 基于选项卡的UI:独立于每种通信方式的日志管理
  • 实时通知:SSE和Streamable HTTP每5秒接收一次服务器通知
  • 尾风CSS 4:时尚的UI风格

安装

1.存储库克隆

git clone <repository-url>
cd mcp-client

2.使用Yarn安装依赖性

yarn install

包是 npm_packages 缓存在目录中,可以离线重新安装。

3.验证安装Python

运行MCP服务器需要Python 3.6+。

执行

1.运行开发服务器

yarn dev

在浏览器中http://localhost:3000连接

2.运行MCP服务器

每种通信方式都需要运行单独的服务器:

Stdio服务器(无端口)

yarn server:stdio
# 또는
python src/server/mcp_server.py stdio

SSE服务器(端口8001)

yarn server:sse
# 또는
python src/server/mcp_server.py sse 8001

Streamable HTTP服务器(端口8002)

yarn server:http
# 또는
python src/server/mcp_server.py http 8002

不同通信方式的特性

1.标准(标准I/O)

特性:

  • Node.js进程间通信
  • 同步请求-响应模式
  • 最简单的结构

限制:

  • ❌ 不支持流:由于同步通信特性,无法进行
  • ❌ 不支持通知:服务器无法主动向客户端发送消息
  • ❌ 不支持浏览器:仅在Node.js环境中工作

不支持的原因: stdio是单向管道通信,只有在客户端发送请求后才能收到响应。服务器在没有客户端请求的情况下无法发送消息,因此在结构上无法进行服务器主导的通信,如流媒体或通知。

2.SSE(服务器发送事件)

特性:

  • 单向流(服务器→客户端)
  • 自动重新连接
  • 实时通知支持
  • 支持本机浏览器

支持:

  • 初始化请求
  • 单一请求-响应
  • 接收流数据
  • 每5秒通知一次服务器

3.可流式传输HTTP

特性:

  • 双向流媒体
  • ✅ 分块传输编码
  • 高效传输大量数据
  • 实时通知支持

支持:

  • 初始化请求
  • 单一请求-响应
  • 流数据收发
  • 每5秒通知一次服务器

项目结构

mcp-client/
├── .yarnrc                      # Yarn offline mirror 설정
├── npm_packages/                # 오프라인 패키지 캐시
├── src/
│   ├── app/
│   │   ├── api/
│   │   │   └── stdio/
│   │   │       └── route.ts           # Stdio API Route (Next.js)
│   │   ├── mcpClientStdioBrowser.ts   # Stdio 브라우저 클라이언트
│   │   ├── mcpClientSSE.ts            # SSE 클라이언트
│   │   └── mcpClientStreamableHttp.ts # Streamable HTTP 클라이언트
│   ├── components/
│   │   ├── McpTest.tsx                # 메인 UI 컴포넌트
│   │   └── mcp/
│   │       ├── TransportTabs.tsx      # 전송 방식 탭
│   │       ├── ConsoleLog.tsx         # 콘솔 로그 표시
│   │       └── transport/
│   │           ├── StdioControls.tsx       # Stdio 제어 버튼
│   │           ├── SSEControls.tsx         # SSE 제어 버튼
│   │           └── StreamableHttpControls.tsx  # HTTP 제어 버튼
│   ├── hooks/
│   │   ├── useTransportLogs.ts        # 로그 관리 훅
│   │   └── transport/
│   │       ├── useStdioClient.ts      # Stdio 클라이언트 훅
│   │       ├── useSSEClient.ts        # SSE 클라이언트 훅
│   │       └── useStreamableHttpClient.ts  # HTTP 클라이언트 훅
│   ├── types/
│   │   ├── mcp.ts                     # MCP 타입 정의
│   │   └── jsonrpc.ts                 # JSON-RPC 타입 정의
│   └── server/
│       └── mcp_server.py              # Python MCP 서버 (3가지 모드)
└── package.json

定义主要类型

JsonRpcRequest(禁止修改)

interface JsonRpcRequest {
    jsonrpc: "2.0";
    id: string | number;
    method: string;
    params?: {
        [key: string]: unknown;
    };
}

Json RpcResponse(禁止修改)

interface JsonRpcResponse {
    jsonrpc: "2.0";
    id: string | number;
    result?: {
        [key: string]: unknown;
    };
    error?: {
        code: number;
        message: string;
        data?: unknown;
    };
}

技术堆栈

前端

  • Next.js 16.0.3
  • 反应19.2.0
  • TypeScript 5
  • 尾风CSS 4
  • UUID v13

后端

  • Python 3.6+
  • HTTP Server(内置)
  • Threading(通知处理)

开发注意事项

  1. 禁止修改Json Rpc类型: JsonRpcRequest哇 JsonRpcResponse 类型是标准规格,请不要修改。

  2. 独立于日志管理:按每个选项卡(通信方式)独立管理日志。

  3. Node.js API필요:要在浏览器中使用stdio通信,必须构建单独的Node.js API服务器。

  4. 同时运行Python服务器:要测试所有通信方式,必须同时运行3台Python服务器。

开发命令

前端

# 개발 서버 실행
yarn dev

# 프로덕션 빌드
yarn build

# 프로덕션 서버 실행
yarn start

# Python 서버 실행
yarn server:stdio   # Stdio 서버
yarn server:sse     # SSE 서버
yarn server:http    # HTTP 서버

故障射击

CORS错误

Python服务器已经包含CORS头。如果问题仍然存在,请检查浏览器扩展。

服务器连接失败

  • 验证python服务器是否正在运行
  • 验证是否使用正确的端口(SSE:8001、HTTP:8002)
  • 检查防火墙设置

无法测试Stdio

stdio不能在浏览器中直接测试。必须在Node.js环境中单独测试或构建API服务器。

许可证

麻省理工学院