MCP (模型上下文协议) 服务器的透明日志代理。记录Claude Code 和后端服务器之间所有的MCP流量到本地文件,以支持调试和分析。
@modelcontextprotocol/sdk 构建对于macOS或Linux用户,可以通过Homebrew最简单地安装:
# 添加Tap并安装
brew tap rayven122/tumiki-proxy https://github.com/rayven122/tumiki-proxy
brew install tumiki-proxy
# 更新
brew update
brew upgrade tumiki-proxy
详情请参阅Homebrew安装指南。
从GitHub的Releases页面下载适用于您平台的预构建二进制文件:
# macOS (ARM64)
curl -L -o tumiki-proxy https://github.com/rayven122/tumiki-proxy/releases/latest/download/tumiki-proxy-macos-arm64
chmod +x tumiki-proxy
# macOS (x64)
curl -L -o tumiki-proxy https://github.com/rayven122/tumiki-proxy/releases/latest/download/tumiki-proxy-macos-x64
chmod +x tumiki-proxy
# Linux (x64)
curl -L -o tumiki-proxy https://github.com/rayven122/tumiki-proxy/releases/latest/download/tumiki-proxy-linux-x64
chmod +x tumiki-proxy
# Windows (x64)
# 在PowerShell中运行:
Invoke-WebRequest -Uri "https://github.com/rayven122/tumiki-proxy/releases/latest/download/tumiki-proxy-win-x64.exe" -OutFile "tumiki-proxy.exe"
# 克隆仓库
git clone https://github.com/rayven122/tumiki-proxy.git
cd tumiki-proxy
# 使用Bun安装依赖并编译
bun install
bun run build
# 生成独立二进制文件
bun run build:binary
# → 生成tumiki-proxy二进制文件
# 克隆仓库
git clone https://github.com/rayven122/tumiki-proxy.git
cd tumiki-proxy
# 安装依赖并编译
npm install
npm run build
# 通过Node.js执行
node dist/index.js [args...]
当与本地MCP服务器通过stdin/stdout通信时:
# 指定日志文件的位置
export TUMIKI_LOG_FILE="./mcp-filesystem.log"
# 通过代理运行基于stdio的MCP服务器
tumiki-proxy npx -y @modelcontextprotocol/server-filesystem /path/to/dir
当访问可通过HTTP访问的远程MCP服务器时:
export TUMIKI_LOG_FILE="./mcp-context7.log"
export CONTEXT7_API_KEY="your-api-key" # 可选
tumiki-proxy --http https://mcp.context7.com/mcp
推荐使用 .mcp.json 文件进行设置。请在项目根目录放置 .mcp.json 文件。
.mcp.json){
"mcpServers": {
"filesystem": {
"command": "./tumiki-proxy",
"args": [
"npx",
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/dir"
],
"env": {
"TUMIKI_LOG_FILE": "/tmp/mcp-filesystem.log"
}
},
"context7": {
"command": "./tumiki-proxy",
"args": [
"--http",
"https://mcp.context7.com/mcp"
],
"env": {
"TUMIKI_LOG_FILE": "/tmp/mcp-context7.log",
"CONTEXT7_API_KEY": "your-api-key"
}
}
}
}
注意: 如果使用二进制版本,请指定相对路径或绝对路径如 ./tumiki-proxy。如果使用Node.js版本,请将 node dist/index.js 作为命令,并将实际命令放在args的第一个位置。
| 变量 | 必需 | 默认值 | 描述 |
|---|---|---|---|
TUMIKI_LOG_FILE | 是 | - | 日志文件的路径 |
TUMIKI_LOG_BUFFER_SIZE | 否 | 1000 | 在丢弃前队列中的最大条目数 |
TUMIKI_LOG_BATCH_SIZE | 否 | 100 | 达到此大小后刷新 |
TUMIKI_LOG_BATCH_TIMEOUT_MS | 否 | 100 | 刷新间隔(毫秒) |
| 变量 | 描述 |
|---|---|
CONTEXT7_API_KEY | Context7专用API密钥 |
MCP_API_KEY | 通用MCP API密钥 |
API_KEY | 回退用API密钥 |
export TUMIKI_LOG_FILE="./mcp.log"
export TUMIKI_LOG_BUFFER_SIZE=500
export TUMIKI_LOG_BATCH_SIZE=50
export TUMIKI_LOG_BATCH_TIMEOUT_MS=200
tumiki-proxy your-mcp-server
日志以换行符分隔的JSON(NDJSON)格式记录:
{"timestamp":"2024-01-15T10:30:00.000Z","type":"request","direction":"client→backend","backendCmd":"npx","message":{"jsonrpc":"2.0","id":1,"method":"tools/list"},"raw":"{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}"}
{"timestamp":"2024-01-15T10:30:00.100Z","type":"response","direction":"backend→client","backendCmd":"npx","message":{"jsonrpc":"2.0","id":1,"result":{"tools":[...]}},"raw":"{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":{\"tools\":[...]}}"}
{"timestamp":"2024-01-15T10:30:00.150Z","type":"info","backendCmd":"--http","message":"Connected using StreamableHTTP transport"}
request: 客户端 → 后端(Claude Code → MCP服务器)response: 后端 → 客户端(MCP服务器 → Claude Code)stderr: 后端的错误输出(仅stdio模式)info: 代理生命周期事件(启动、结束、连接信息)error: 代理错误┌─────────────┐
│ Claude Code │
└──────┬──────┘
│ stdin/stdout (JSON-RPC)
↓
┌────────────────────┐
│ tumiki-proxy │
│ ┌──────────────┐ │
│ │ FileLogger │──┼─→ 本地日志文件 (NDJSON)
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │ spawn + pipe │ │
│ └──────────────┘ │
└────────┬───────────┘
│ stdin/stdout (透明)
↓
┌─────────────────┐
│ MCP Server │
│ (stdio) │
└─────────────────┘
┌─────────────┐
│ Claude Code │
└──────┬──────┘
│ stdin/stdout
↓
┌────────────────────┐
│ tumiki-proxy │
│ ┌──────────────┐ │
│ │ FileLogger │──┼─→ 本地日志文件 (NDJSON)
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │ Stdio Server │ │
│ │ Transport │ │
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │StreamableHTTP│ │
│ │/SSE Client │ │
│ └──────────────┘ │
└────────┬───────────┘
│ Streamable HTTP/SSE
↓
┌─────────────────┐
│ MCP Server │
│ (HTTP) │
└─────────────────┘
可以在日志文件中查看传输选择:
# 当使用Streamable HTTP时
{"type":"info","message":"Connected using StreamableHTTP transport"}
# 当回退到SSE时
{"type":"info","message":"StreamableHTTP connection failed, falling back to SSE transport"}
{"type":"info","message":"Connected using SSE transport"}
症状: MCP服务器处于失败状态
诊断与解决办法:
API密钥问题(需要认证的服务器)
CONTEXT7_API_KEY、MCP_API_KEY 或 API_KEY)传输连接错误
检查事项:
TUMIKI_LOG_FILE 环境变量# 安装依赖
bun install
# 编译TypeScript
bun run build
# 监控模式
bun run dev
# 生成独立二进制文件
bun run build:binary
# → 生成tumiki-proxy二进制文件 (约57MB)
# → 包含Bun运行时的完整独立可执行文件
# → 不需要外部运行时,快速启动
# 清理构建产物
rm -rf dist tumiki-proxy
# 安装依赖
npm install
# 编译TypeScript
npm run build
# 监控模式
npm run dev
# 清理构建产物
rm -rf dist
二进制构建:
Node.js版本:
node dist/index.js欢迎贡献!请随意提交Pull Request。
MIT License - 详情请参阅LICENSE文件