Коротко
Статья рассказывает о mcpgawk — инструменте, который сравнивает описания и схемы MCP-инструментов с ранее одобренными и блокирует изменившиеся до вызова. Это важно, потому что агент получает описания инструментов как инструкции, а проверка только по известным подозрительным фразам не ловит новые виды атак.
Контекст
Автор представляет mcpgawk как локальную защиту для пользователей MCP-агентов: проблема в том, что MCP-сервер может изменить описание инструмента после одобрения, а агент прочитает новый текст при следующем сеансе. В статье также упоминается учебный сервер issues-mcp и наблюдения за изменениями реальных серверов.
Главное
- Клиенты вроде Claude Code, Cursor и Codex получают через tools/list названия инструментов, описания и схемы входных данных; модель использует эти сведения, выбирая, что и как вызвать.
- По наблюдениям автора, MCP-сервер resend менялся 6 раз за период нескольких недель, версии npm росли с 2.12 до 2.19, а набор инструментов — с 85 до 103.
- Среди новых инструментов resend названы update-api-key, share-email и replay-webhook-event; автор считает эти изменения легитимными, но отмечает, что их не одобряли повторно.
- В примере issues-mcp версия 1.4.2 содержала обычное описание get_issue, а в 1.4.3 к нему добавили указание прочитать ~/.aws/credentials и передать содержимое в аргументе context.
- mcpgawk 0.1.66 обнаружил добавленную фразу как INJECTION SIGNATURE, но автор подчёркивает: обнаружение по шаблонам само по себе ненадёжно.
- Защита сравнивает отпечаток инструмента — имя, описание, схему и аннотации — с версией, которую пользователь одобрил.
- Если инструмент изменился или появился после одобрения, PreToolUse hook блокирует вызов. Поддерживаются Claude Code, Cursor, Codex, Windsurf, Gemini CLI и Kimi.
- Для разбора изменений используются команды mcpgawk changes и mcpgawk decide; решение о доверии требует участия человека у терминала.
Как сделано
mcpgawk сканирует MCP-серверы и сохраняет отпечатки их инструментов. При каждом сканировании или непрерывном мониторинге он обновляет сведения о серверах. Перед вызовом MCP-инструмента агентский PreToolUse hook сверяет текущий отпечаток с одобренным и отказывает, если инструмент изменился или появился позже.
Для проверки изменения пользователь запускает mcpgawk decide: локальная страница показывает старое и новое описания и предлагает Keep blocking или Trust this change. Установка и запуск: uv tool install mcpgawk && mcpgawk — команда находит серверы, сканирует их и включает защиту. Автор также советует закреплять версии серверов и применять mcpgawk verify для наблюдения за их поведением в песочнице.
Результаты
В описанном сценарии изменённый get_issue был бы заблокирован до вызова, а агент получил бы сообщение о том, что содержимое инструмента изменилось с момента одобрения. Автор заявляет, что mcpgawk бесплатен, работает локально и не загружает сведения о серверах. Численных результатов тестирования эффективности защиты статья не приводит.
Ограничения
Отпечатки не обнаруживают изменение кода сервера, если набор инструментов и их описания остались прежними; автор приводит postmark-mcp как пример такой формы атаки и рекомендует закреплять версии и проверять фактическое поведение через mcpgawk verify. Проверка по подозрительным фразам не покрывает новые формулировки. Статья не приводит независимой оценки эффективности, подробностей о стоимости эксплуатации или тестов на широкий набор атак.
Что взять себе
- Описания MCP-инструментов — часть контекста модели, поэтому их стоит рассматривать как потенциально изменяемые инструкции.
- Для контроля изменений полезнее сравнивать одобренные отпечатки инструментов, а не полагаться только на список подозрительных фраз.
- Настройте проверку до вызова и оставьте принятие новых изменений за человеком.
- Отпечатки не заменяют закрепление версий и проверку поведения сервера, если его код может измениться без изменения описаний.
Читать оригинал, если…
Откройте исходник, если нужны документация mcpgawk, детали настройки хуков или разбор примеров изменений MCP-серверов.