mcpsnoop: 用於偵錯 MCP 流量的透明代理與 TUI
mcpsnoop: 用於偵錯 MCP 流量的透明代理與 TUI
mcpsnoop 透過作為透明代理,為 AI 客戶端(例如 Claude Desktop、Cursor 或 Claude Code)與 Model Context Protocol (MCP) 伺服器之間的通訊提供即時的可視化能力。與傳統以獨立客戶端身份連接的檢查器不同,mcpsnoop 直接位於數據路徑中,在發生時即捕捉每一次的工具調用、回應與通知。
解決 MCP 可視化缺口
偵錯 MCP 伺服器的主要挑戰在於官方工具(如 MCP Inspector)是以獨立客戶端的方式運作。這意味著它們無法看到使用者真實 AI 客戶端所產生的實際流量。當工具無法觸發、功能不匹配或請求掛起時,開發者往往被迫依賴於在 /tmp 中手動查看日誌並進行猜測。
mcpsnoop 透過封裝伺服器指令來消除此缺口。它在客戶端與伺服器之間逐字轉發位元組,同時將每個 JSON-RPC 框架的副本串流到即時終端機使用者介面 (TUI)。這確保了開發者能看到真實客戶端發送的內容以及伺服器回傳的內容。
核心功能與偵錯能力
即時流量監控與分析
mcpsnoop 提供顏色編碼的 JSON-RPC 框架即時串流,包括請求、回應與通知。關鍵監控功能包括:
- 掛起調用偵測 (Hung-Call Detection):進行中的請求會被標記為
PENDING並附帶即時計時器,使卡住的工具變得一目了然。 - 錯誤標記 (Error Flagging):該工具會標記標準的 JSON-RPC 錯誤以及工具層級的
result.isError標記。 - 框架檢查 (Frame Inspection):使用者可以深入查看任何框架(使用
enter鍵)以檢視美化後的 JSON 並具備全文搜尋功能。 - 功能檢查 (Capability Inspection):透過按下
c鍵,開發者可以驗證客戶端與伺服器在初始握手期間所達成的確切功能。
使用重播進行快速迭代
mcpsnoop 最強大的功能之一是能夠針對伺服器的全新、隔離實例重新執行任何捕捉到的工具調用。這讓開發者可以在無需透過 AI 客戶端手動再次觸發動作的情況下,對工具邏輯進行迭代。
進階過濾
為了管理高流量的數據,mcpsnoop 支援基於查詢的過濾系統。使用者可以組合以空格分隔的標記來縮小串流範圍:
- 特定欄位過濾器:
tool:、method:、id:、kind:、dir:與status:。 - 範例:像
tool:search status:slow這樣的查詢可以專門隔離出對搜尋工具發出的慢速調用。
架構與實作
mcpsnoop 被實作為單一二進位檔,具有兩個不同的角色:
- Shim (封裝層):當以
mcpsnoop -- <server>執行時,它作為 AI 客戶端所啟動的透明代理。 - The Hub/TUI (中心/TUI):當以
mcpsnoop且不帶參數執行時,它會啟動終端機介面。
這兩個組件透過一個廣為人知的 socket 與磁碟日誌進行通訊。由於 TUI 會從磁碟回填過去的會話,因此無論是在 AI 客戶端啟動之前或之後開啟 UI 都可以。
對於可串流的 HTTP 伺服器,mcpsnoop 可以使用以下指令作為反向代理運作:
mcpsnoop http --target http://localhost:3000/mcp --listen :7000
與其他 MCP 工具的比較
| 功能 | MCP Inspector | mcp-trace | mcpsnoop |
|---|---|---|---|
| 看見真實客戶端–伺服器流量 | 否 | 是 | 是 |
| 互動式終端機 UI | 否 | 是 | 是 |
| 零配置 / 無需參數 | 否 | 否 | 是 |
| 功能檢查器 | 部分 | 否 | Yes |
| 重播捕捉到的調用 | 否 | 否 | 是 |
| 單一二進位檔 (無執行環境依賴) | 否 | 變動 | 是 |
安裝
mcpsnoop 可以透過 Go、Homebrew 或下載預建的二進位檔來安裝:
- Go:
go install github.com/kerlenton/mcpsnoop/cmd/mcpsnoop@latest - Homebrew:
brew tap kerlenton/mcpsnoop && brew install mcpsnoop
社群洞察
雖然該工具因填補了 AI 客戶端工作流中關鍵的可視化缺口而受到讚譽,但社群討論也提出了未來成長的潛在領域:
"遠端偵錯與事後分析偵錯支援可能會很有用。目前有很多 AI 稽核代理... 例如 Aegis 與 LiteLLM,它們是執行前防火牆,能增加加密稽核軌跡。"
其他使用者也建議透過增加瀏覽器介面進行數據瀏覽,或為 Wireshark 本身建立一個 MCP 伺服器,以進一步將網路分析整合進該協定。