MCP代理日志工具

一个用于代理MCP客户端与服务器通信并记录交互日志的工具,适用于测试和故障排除场景。

  • by strowk
  • Go
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 strowk/mcptee

使用说明

mcptee 的

一个简单的工具,将MCP客户端的输入代理到MCP服务器,并将输出返回给客户端,同时逐行记录到文件中,用前缀“in:”和“out:”指示数据的方向,从而得到一个通常有效的YAML文件。

在每个“in:”之前,工具都会打印 --- 以及使文件成为多文档YAML的换行符,因此通常请求/响应的每个组合都是一个单独的文档。

这对于测试和排除MCP客户端和服务器的故障非常方便。

安装

npm

npm install -g @strowk/mcptee

Github发布

从 发布 页面并放入您的PATH

从源代码构建

go install github.com/strowk/mcptee@latest

用法

mcptee <out-file> <command> [args...]

一些例子:

mcptee ./server_log.yaml mcp-k8s-go

mcptee ./server_log.yaml npx @strowk/mcp-k8s

您可能会用相应的客户端配置它。例如,对于克劳德:

{
    "mcpServers": {
        "my_server": {
            "command": "mcptee",
            "args": ["/path/to/log_file.yaml", "npx", "my_mcp_server"]
        }
    }
}

示例

例如,如果你有一个运行在docker中的postgres服务器:

docker run --rm --name postgres-mcp-test -e POSTGRES_PASSWORD=thesecret -p 7777:5432 postgres:latest

,您想用mcp服务器postgres测试它(在另一个终端中运行它):

mcptee log.yaml npx @modelcontextprotocol/server-postgres postgres://postgres:thesecret@localhost:7777

现在逐一发送这些:

{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"testing","version":"0.0.1"}}}

{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query", "arguments": {"sql": "SELECT datname FROM pg_database"} }}

您应该在中看到输出 log.yaml 文件如下:

---
in: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"testing","version":"0.0.1"}}}
out: {"result":{"protocolVersion":"2024-11-05","capabilities":{"resources":{},"tools":{}},"serverInfo":{"name":"example-servers/postgres","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
---
in: {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}
out: {"result":{"tools":[{"name":"query","description":"Run a read-only SQL query","inputSchema":{"type":"object","properties":{"sql":{"type":"string"}}}}]},"jsonrpc":"2.0","id":1}
---
in: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"query", "arguments": {"sql": "SELECT datname FROM pg_database"} }}
out: {"result":{"content":[{"type":"text","text":"[\n  {\n    \"datname\": \"postgres\"\n  },\n  {\n    \"datname\": \"template1\"\n  },\n  {\n    \"datname\": \"template0\"\n  }\n]"}],"isError":false},"jsonrpc":"2.0","id":1}