Skip to main content
Glama
andreolf
by andreolf

mcp-audit

npm audit для MCP-серверов. Укажите MCP-сервер и получите оценку безопасности (A–F), охватывающую отсутствие аутентификации, поверхность SSRF, инструменты с высокими привилегиями, склонные к инъекциям описания инструментов и утекшие секреты.

Почему это существует (данные 2026 года): из ~7 000 публичных MCP-серверов 41% не требуют аутентификации, 36,7% имеют поверхность SSRF, только 8,5% используют OAuth, и 30+ CVE были поданы за один 60-дневный период. Количество серверов насыщено (22k+); уровень безопасности — нет. Другие инструменты (например, mcp-scan от Invariant) проверяют один сервер глубоко — mcpaudit добавляет пакетное аудирование реестра: укажите его на официальный MCP-реестр и оцените всю экосистему сразу.

npm i -g @andreolf/mcpaudit    # then: mcpaudit <url>
# or zero-install:  npx @andreolf/mcpaudit <url>

Безопасно ли его запускать? Да по замыслу: mcpaudit отправляет только initialize (только чтение) + рукопожатие tools/list и проверяет объявленные инструменты. Он никогда не выполняет код сканируемого сервера, если вы явно не передадите --allow-exec для запуска локального/npm-сервера.

⚠️ Эвристический сканер. Результаты описывают поверхность (например, "нет аутентификации", "предоставляет инструмент для получения URL"), а не доказанные эксплойты — чистый отчет не является гарантией безопасности. Сканируйте только серверы, которые вам разрешено тестировать, и ответственно сообщайте о находках. См. SECURITY.md.

Использование

Сканирование удаленного сервера (Streamable HTTP):

node bin/mcp-audit.js https://example.com/mcp
node bin/mcp-audit.js https://example.com/mcp --header "Authorization: Bearer $TOKEN" --json

Сканирование опубликованного сервера (запущен через npx -y <пакет>):

node bin/mcp-audit.js --npm @modelcontextprotocol/server-filesystem --timeout 20000

Сканирование локального сервера, запущенного командой (stdio):

node bin/mcp-audit.js --cmd "node my-server.js"

Требуется Node 18+ (использует глобальный fetch). Ноль зависимостей. Установка: npm i -g @andreolf/mcpaudit, затем mcpaudit <url> — или npx @andreolf/mcpaudit <url>.

Коды выхода: 0 чисто · 1 критическая/высокая находка · 2 не удалось отсканировать / неправильное использование. Подходит для CI.

Related MCP server: mcp-security-audit

Пакетный режим (запуск аудита)

Сканируйте множество серверов и получите таблицу лидеров по наихудшим результатам + сводную статистику для запускающего поста:

node bin/mcp-audit-batch.js targets.txt --out audit.md

targets.txt — это одна цель на строку (https://…, npm:<пакет> или cmd:<команда>; допускаются комментарии #).

⚠️ Безопасность: сканирование npm:/cmd: сервера запускает код этого сервера на вашей машине. Пакетный режим по умолчанию только HTTP и ПРОПУСКАЕТ локальные/npm-цели, если вы не передадите --allow-exec — делайте это только внутри песочницы/контейнера, которому доверяете. Массовый запуск непроверенных пакетов — это риск удаленного выполнения кода.

Вывод включает ключевые цифры ("X% доступных HTTP-серверов принимают initialize без аутентификации"), которые становятся основой запускающего поста.

Полный конвейер запуска

Извлеките цели из официального MCP-реестра (только обнаружение — никогда не выполняет сервер), затем проверьте их:

node bin/mcp-audit-fetch.js --max 300 --out targets.txt   # HTTP remotes = safe to scan
node bin/mcp-audit-batch.js targets.txt --concurrency 8 --out audit.md

mcpaudit-fetch выводит конечные точки реестра HTTP как сканируемые строки, а npm-пакеты как закомментированные строки (включите с помощью --include-npm, затем --allow-exec в песочнице). Реальный запуск первых 30 серверов реестра показал, что 50% принимают initialize без аутентификации — именно такие цифры лежат в основе запускающего поста.

Использование в CI (GitHub Action)

Ограничьте безопасность вашего MCP-сервера в каждом PR. Запустите свой сервер, затем укажите действие на него:

- name: Start my MCP server
  run: node my-server.js &   # or docker run ..., then wait for it to be ready

- name: Security-audit the MCP server
  uses: andreolf/mcp-audit@v1
  with:
    url: http://localhost:3000/mcp
    fail-on: D                      # fail the job on grade D or worse (default: F)
    # header: "Authorization: Bearer ${{ secrets.MCP_TOKEN }}"   # optional

Задание выводит оценку A–F и результаты, и завершается ошибкой, если оценка равна или ниже fail-on. На сканируемом сервере ничего не выполняется — отправляется только рукопожатие только для чтения.

Тест

npm test   # spawns the mock insecure server (stdio + batch) and asserts findings — 12 checks

Что проверяется (начальные эвристики — расширяйте их)

  • no-auth — сервер принимает initialize без учетных данных (критично)

  • ssrf-surface — инструменты, принимающие URL / выполняющие исходящие запросы (высоко)

  • high-privilege-tool — инструменты типа exec/shell/delete/write-file (высоко)

  • injection-in-description — формулировки переопределения/инъекции в описаниях инструментов (средне)

  • leaked-secret — строки, похожие на токены/ключи, в метаданных инструментов (критично)

Архитектура

bin/mcp-audit.js   CLI entry (arg parsing, exit codes for CI)
src/scan.js        orchestrator
src/mcpClient.js   MCP Streamable-HTTP transport: initialize + tools/list
src/checks.js      heuristic security checks -> findings
src/report.js      grading (A–F), badge, Markdown/JSON output

План развития (превратите этот скелет в вирусную вещь)

  1. ✅ Транспорты stdio + npm — сканирование локальных (--cmd) и опубликованных (--npm, через npx) серверов, а не только удаленных URL. Это открывает возможность сканирования топ-серверов реестра для запускающего аудита. (PyPI/uvx эквивалент — небольшое дополнение.)

  2. Обнаружение статического ключа vs OAuth — проверка вызова аутентификации / формата токена.

  3. Более глубокий SSRF-зонд — фактический вызов инструментов типа fetch по внутреннему канареечному URL в песочнице.

  4. ✅ Пакетный режим + таблица лидеров — mcpaudit-batch targets.txt → ранжированный отчет + ключевые цифры. Этот ранжированный отчет и есть артефакт запуска: "Мы проверили 200 наиболее устанавливаемых MCP-серверов."

  5. ✅ Получатель реестра (mcpaudit-fetch) — извлекает HTTP-цели из официального MCP-реестра (только обнаружение, никогда не выполняет). npm-пакеты выводятся закомментированными. --include-npm для включения.

  6. Встраиваемый значок — MCP Security: A значок в стиле shields.io, который серверы добавляют в свой README (сигнал ранжирования 2026 года и бесплатное распространение для вас).

  7. Присутствие в реестре — список на mcp.so, smithery.ai, glama.ai, PulseMCP, официальном MCP-реестре и PR в punkpeye/awesome-mcp-servers. Подготовьте один пакет метаданных, отправьте во все.

Лицензия

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Security scanner for MCP servers. Detects prompt injection, command injection, auth bypass, and excessive permissions across tools, resources, and prompts.
    5 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Security auditor for MCP servers that enumerates tools, resources, and prompts, scans for injection patterns, classifies risk levels, and produces a scored report (0-100, grades A-F).
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Security scanner for MCP servers — vet an MCP before you wire it into an agent. Detects prompt-injection, credential exfiltration (via taint analysis), RCE, and supply-chain risks, and catches cross-server exfil chains no single server reveals. Zero-dependency local CLI, SARIF output, CI-gateable, no account.
    19 npm
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    Security scanner and MCP server that catches dangerous patterns in MCP servers and AI agent projects, such as leaked secrets, shell execution, and prompt-injection text. Runs as both a CLI and MCP server with CI-friendly severity gates.
    2
    1
    MIT