mcpsnoop: 用于调试 MCP 流量的透明代理和 TUI

mcpsnoop: 用于调试 MCP 流量的透明代理和 TUI

mcpsnoop 通过充当透明代理,为 AI 客户端(如 Claude DesktopCursorClaude Code)与 Model Context Protocol (MCP) 服务器之间的通信提供实时可见性。

与作为独立客户端连接的传统检查器不同,mcpsnoop 直接位于数据路径中,在发生时捕获每一个工具调用、响应和通知。

解决 MCP 可视化缺口

调试 MCP 服务器的主要挑战在于,官方工具(如 MCP Inspector)是作为独立的客户端运行的。这意味着它们无法看到用户真实 AI 客户端生成的实际流量。当工具触发失败、能力不匹配或请求挂起时,开发人员通常被迫依赖于在 /tmp 中手动查看日志并进行猜测。

mcpsnoop 通过包装服务器命令来消除这一缺口。它在客户端和服务器之间逐字转发字节,同时将每个 JSON-RPC 帧的副本流式传输到实时终端 UI。

这确保了开发人员可以看到真实客户端发送的内容以及服务器返回的内容。

核心功能与调试能力

实时流量监控与分析

mcpsnoop 提供 JSON-RPC 帧的彩色编码实时流,包括请求、响应和通知。关键监控功能包括:

  • 挂起调用检测:正在进行的请求会被标记为 PENDING 并带有实时计时器,使卡住的工具立即显而易见。
  • 错误标记:该工具会标记标准的 JSON-RPC 错误以及工具层级的 result.isError 标志。
  • 帧检查:用户可以使用 enter 键深入查看任何一个帧,以查看具有全文搜索功能的格式化 JSON。
  • 能力检查:通过按下 c,开发人员可以验证客户端与服务器在初始握手期间达成的确切能力。

使用重放进行快速迭代

mcpsnoop 最强大的功能之一是能够针对服务器的一个全新的、隔离的实例重新运行任何捕获到的工具调用。这允许开发人员在无需通过 AI 客户端手动再次触发操作的情况下,对工具逻辑进行迭代。

高级过滤

为了管理高流量,mcpsnoop 支持基于查询的过滤系统。用户可以通过组合以空格分隔的标记来缩小流范围:

  • 特定字段过滤器tool:method:id:kind:dir:status:
  • 示例:像 tool:search status:slow 这样的查询可以专门隔离出对搜索工具发出的慢速调用。

架构与实现

mcpsnoop 实现为一个单一的二进制文件,具有两个不同的角色:

  1. Shim:当以 mcpsnoop -- <server> 运行时,它充当 AI 客户端生成的透明代理。
  2. Hub/TUI:当以 mcpsnoop 运行且不带参数时,它启动终端界面。

这两个组件通过一个众所周知的套接字和磁盘日志进行通信。由于 TUI 会从磁盘回填过去的会话,因此 UI 可以在 AI 客户端启动之前或之后打开。

对于 streamable-HTTP 服务器,mcpsnoop 可以使用以下命令作为反向代理运行: mcpsnoop http --target http://localhost:3000/mcp --listen :7000

与其他 MCP 工具的对比

特性 MCP Inspector mcp-trace mcpsnoop
能看到真实的客户端-服务器流量
交互式终端 UI
零配置 / 无标志
能力检查器 部分
重放捕获的调用
单一二进制文件(无运行时依赖) 不同

安装

mcpsnoop 可以通过 Go、Homebrew 或下载预构建的二进制文件进行安装:

  • Gogo install github.com/kerlenton/mcpsnoop/cmd/mcpsnoop@latest
  • Homebrewbrew tap kerlenton/mcpsnoop && brew install mcpsnoop

社区洞察

虽然该工具因填补了 AI 客户端工作流中关键的可视化缺口而受到称赞,但社区讨论建议了未来增长的潜在领域:

"远程调试和事后调试支持可能会很有用。有很多 AI 审计代理……例如 Aegis 和 LiteLLM,它们是预执行防火墙,可以添加加密审计追踪。"

其他用户建议通过添加基于浏览器的界面进行数据浏览,或者为 Wireshark 本身创建一个 MCP 服务器,从而进一步将网络分析集成到协议中。

Sources