
Wireshark для MCP. Прозрачный прокси, который показывает каждый реальный вызов инструмента между вашим AI-клиентом и вашими MCP-серверами, в реальном времени в вашем терминале.
Wireshark для MCP. Прозрачный прокси, который показывает каждый реальный вызов инструмента между вашим AI-клиентом и вашими MCP-серверами, в реальном времени в вашем терминале.
Официальный MCP Inspector подключается как собственный клиент, поэтому он никогда не видит, что ваш клиент (Cursor, Claude Code, Codex) на самом деле отправляет вашему серверу. А всё, что ждёт поступления запроса, не может показать вызов, который модель так и не сделала или сделала с неверными аргументами. Когда инструмент молча не вызывается, возможности не совпадают или вызов просто зависает, вам остаётся копаться в логах и гадать.
mcpsnoop вместо этого находится в реальном пути данных. Оберните им команду вашего сервера и наблюдайте за каждым JSON-RPC кадром в реальном времени, пока ваш реальный клиент и сервер общаются.
Эта страница также является листингом для mcpsnoop GitHub Action, так что вот всё о нём. Он проверяет захваченную сессию, оформляет каждую находку как code scanning alert и завершает задачу с ошибкой на том, что вы задали в качестве условия.```yaml permissions: security-events: write contents: read
steps:
Закрепите нужный вам релиз. Самый новый — на
[странице релизов](https://github.com/kerlenton/mcpsnoop/releases). Каждый вход,
что означают коды выхода и как подключить его без действия, описаны
в разделе [The GitHub Action](#the-github-action) ниже.
## Быстрый старт
Посмотрите сразу, без какой-либо настройки.```bash
mcpsnoop demo
Чтобы использовать это по-настоящему, оберните ваш сервер в MCP-конфиг вашего клиента.```json { "mcpServers": { "my-server": { "command": "mcpsnoop", "args": ["--", "node", "build/index.js"] } } }
Всё, что идёт после `--`, — это команда, которая обычно запускает ваш сервер. Подставьте вместо неё то, что вы уже используете, например `python server.py`, `npx -y @scope/server` или скомпилированный бинарный файл.
В Claude Desktop вам не придётся вносить эту правку вручную.```bash
mcpsnoop wrap my-server # route my-server through mcpsnoop
mcpsnoop unwrap my-server # put it back
wrap находит claude_desktop_config.json, копирует его в
claude_desktop_config.json.mcpsnoop.bak при первом запуске и перезаписывает только
запись этого одного сервера, поэтому ваше форматирование и все остальные серверы остаются нетронутыми.
Внутри перезаписанной записи ключи возвращаются в алфавитном порядке. unwrap
восстанавливает файл и удаляет резервную копию, как только ни один сервер больше не обёрнут.
Перезапустите Claude Desktop после любого из этих действий, поскольку MCP-серверы запускаются один раз
при старте.
Затем используйте ваш клиент как обычно и откройте интерфейс.```bash mcpsnoop
No flags, no socket paths, no startup order to remember. The shim and the UI find
each other on their own, and the UI backfills past sessions from disk.
For a streamable-HTTP server, run mcpsnoop as a reverse proxy.```bash
mcpsnoop http --target http://localhost:3000/mcp --listen :7000
Статус HTTP каждого ответа отображается в потоке, поэтому ответ, который не несёт
собственного сообщения JSON-RPC, всё равно остаётся видимым кадром, а не пустотой:
вызов 401, 403 при отклонённом Origin, 202, подтверждающий уведомление,
и 502, когда целевой сервер вообще недоступен. Заголовок WWW-Authenticate ответа 401 сохраняется дословно и показывается в инспекторе,
поскольку он указывает схему аутентификации и метаданные ресурса для дальнейших действий. Фильтруйте по
статусу с помощью status:401 в TUI или по любой ошибке с помощью status:err. Код 4xx
или 5xx считается ошибкой, поэтому обычный запуск mcpsnoop check завершится неудачей.
Нет собственного сервера? Попробуйте вживую против опубликованного тестового сервера, управляемого вашим собственным клиентом. Чтобы просмотреть сеанс после его завершения, см. просмотр прошлых сеансов из журналов.
Если вы используете одни и те же флаги shim в рамках проекта, поместите их в
файл .mcpsnoop.toml в текущем рабочем каталоге.```toml
label = "filesystem"
trace-file = "trace.jsonl"
redact-secrets = true
redact-key = "token,authorization"
redact-value = "sk-[A-Za-z0-9]+"
redact-path = "$.params.arguments.password"
no-trace = false
Повторите `redact-key`, `redact-value` и `redact-path` на отдельных строках, чтобы добавить
несколько значений каждого типа.
Это все ключи, которые он поддерживает.
Файл ищется только в текущей рабочей директории, а не в родительских
директориях.
Явные флаги командной строки переопределяют значения из файла конфигурации.
## Команды
| Команда | Что она делает |
|---|---|
| `mcpsnoop -- <server>` | обернуть stdio-сервер как прозрачный прокси-слой |
| `mcpsnoop` | открыть интерактивный TUI |
| `mcpsnoop http --target <url>` | проксировать потоковый HTTP-сервер |
| `mcpsnoop export` | отобразить сессию в json, html, text, har или otlp |
| `mcpsnoop check` | завершить CI с ошибкой при ошибках, невалидных фреймах, предупреждениях, несоответствиях маршрутизации, зависших вызовах, поздних результатах или превышении бюджета задержки |
| `mcpsnoop baseline` | просмотреть, принять или сбросить доверенные определения инструментов |
| `mcpsnoop diff` | сравнить инструменты и вызовы между двумя захваченными сессиями |
| `mcpsnoop open` | открыть сохранённую сессию в TUI |
| `mcpsnoop inventory` | вывести список всех серверов, которые запускались через mcpsnoop на этой машине |
| `mcpsnoop stats` | свернуть все сохранённые захваты в одну строку на сервер и инструмент |
| `mcpsnoop prune` | удалить сохранённые журналы сессий старше заданного порога |
| `mcpsnoop wrap <server>` | направить один из серверов Claude Desktop через mcpsnoop |
| `mcpsnoop unwrap <server>` | вернуть запись этого сервера в исходное состояние |
| `mcpsnoop remote <user@host>` | вывести команду SSH-туннеля |
| `mcpsnoop demo` | воспроизвести сценарную сессию |
Выполните `mcpsnoop help` для полного списка или `mcpsnoop help <command>` для флагов конкретной команды.
## Сравнение
| | MCP Inspector | mcpsnoop |
|---|:---:|:---:|
| Видит ваш реальный трафик клиента и сервера | нет | да |
| Отмечает зависшие вызовы и ошибки потока | нет | да |
| Отмечает посторонний вывод, повреждающий поток | нет | да |
| Отмечает некорректные JSON-RPC фреймы | нет | да |
| Обнаруживает расхождение определений инструментов после утверждения | нет | да |
| Интерактивный терминальный интерфейс | нет | да |
| Без конфигурации, без флагов и порядка | нет | да |
| Инспектор возможностей | частично | да |
| Воспроизведение захваченного вызова | нет | да, через stdio и HTTP |
| Экспорт сессии (json / html / text / otlp) | нет | да |
| Один бинарный файл, без зависимостей времени выполнения | нет | да |
## Установка
### npm