JSON-RPC客户端工具

一个基于Express.js的客户端工具,用于通过JSON-RPC与MCP服务器文件系统进行交互,提供请求构造、发送和日志记录功能。

  • by stopsopa
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 stopsopa/mcp

使用说明

MCP JSON-RPC客户端

概述

这是一个简单的基于Express.js的客户端,用于通过stdio上的JSON-RPC与模型上下文协议(MCP)服务器文件系统进行交互。

特性

  • 生成MCP服务器文件系统进程
  • 提供用于构造和发送JSON-RPC请求的web界面
  • 处理stdio上的请求/响应通信
  • 用于记录所有流量的透明JSON-RPC拦截代理
  • 带有持续时间指标的请求/响应日志记录

演示

https://stopsopa.github.io/mcp

[!警告] 在github上,它可以为请求提供示例有效载荷,但由于github页面的静态特性,没有服务器为其供电。 但服务器可以在本地轻松启动以测试响应。

设置

  1. 安装依赖项:
npm install
  1. 运行客户端:
npm run start

or

xx
  1. 打开http://localhost:3000在浏览器中

用法

  • 在文本区域输入有效的JSON-RPC 2.0请求,或使用按钮调出示例请求
  • 点击“发送请求”将请求提交给MCP服务器
  • 在“响应”部分查看响应

拦截代理

该项目包括一个透明的JSON-RPC拦截代理(intercept.js)该日志记录客户端和MCP服务器之间的所有通信。

运作原理

mcp-client.js → intercept.js → MCP filesystem server
              ↓ logs to ./var/

代理人:

  • 拦截客户端和服务器之间的所有stdin/stdout流量
  • 解析以换行符分隔的JSON-RPC消息
  • 按ID匹配请求和响应
  • 记录完整的请求/响应对,包括时间戳和持续时间
  • 透明地转发所有数据(零协议影响)

日志文件

日志存储在 ./var/ 带有时间戳文件名的目录:

./var/2025-01-26T14-30-15-log.log

每个日志条目包括:

2025-01-26T14:30:15.123Z
REQUEST:
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}
RESPONSE:
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": { ... }
}
DURATION: 45ms
================================================================================

配置

默认情况下,拦截代理在 mcp-client.js。要禁用它,请修改spawn调用:

// WITH intercept (default)
const proc = spawn("node", ["intercept.js", "--", "node", "node_modules/.bin/mcp-server-filesystem", "."], {...});

// WITHOUT intercept
const proc = spawn("node", ["node_modules/.bin/mcp-server-filesystem", "."], {...});

独立使用

拦截代理可以与任何通过stdio使用JSON-RPC的命令一起使用:

node intercept.js -- <command> [args...]

例子:

node intercept.js -- node my-jsonrpc-server.js

开发人员注意事项

https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem用作主MCP服务器

mcp-stdio_copy.ts是https://github.com/modelcontextprotocol/servers/blob/2025.9.25/src/filesystem/index.ts我通常会给克劳德喂食,以便更好地推理。

提示

当MCP检查器(npx@modelcontextprotocol/Inspector)显示它发送了请求时:

{
  "method": "tools/call",
  "params": {
    "name": "create-user",
    "arguments": {
      "name": "Szymon",
      "email": "sd@gmail.com",
      "address": "my address",
      "phone": "123"
    },
    "_meta": {
      "progressToken": 1
    }
  }
}

它实际上已经发送

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params":{
    "name": "create-user",
    "arguments":{
      "name": "Szymon",
      "email": "sd@gmail.com",
      "address": "my address",
      "phone": "123"
    },
    "_meta": {
      "progressToken": 1
    }
  }
}

…没什么大不了的,但我们必须记得补充 "jsonrpc": "2.0" & "id": 2 我们自己在手动制作请求时。

[!警告] 同样,当MCP检查器显示响应时,它也会忽略 "jsonrpc": "2.0" & "id": 2 在回复中