Skip to main content
Glama
elang2

mcp-audit-gateway

mcp-audit

DOI

Ваш ИИ-агент вчера совершил 847 вызовов инструментов. Можете ли вы проверить, что он делал?

Защищённый от вмешательства журнал аудита для вызовов инструментов ИИ-агента.

Настройка (10 секунд)

До:

{
  "command": "npx",
  "args": ["@modelcontextprotocol/server-github"]
}

После:

{
  "command": "npx",
  "args": ["mcp-audit", "wrap", "--", "npx", "@modelcontextprotocol/server-github"]
}

Теперь каждый вызов инструмента криптографически подписан и связан хеш-цепочкой. Больше ничего не меняется. MCP-сервер работает точно так же, как и раньше.

Related MCP server: DCL Evaluator

Что это делает

$ mcp-audit tail

✓ 14:32:01 github/create_pr                 234ms  bf7a2f62
✓ 14:32:03 github/list_issues                89ms  a1c4e890
✗ 14:32:05 fs/delete_file                    12ms  c3d9f012
✓ 14:32:08 github/merge_pr                  456ms  e5f6a7b8

Каждая запись подписана с помощью HMAC-SHA256 и связана с предыдущей записью. Внесите изменения в любую запись — и проверка не пройдёт. Удалите запись — и цепочка разорвётся.

Проверка целостности

$ mcp-audit verify ~/.mcp-audit/audit.jsonl

Results:
  Total records: 847
  Valid: 847
  Invalid: 0

All records verified successfully.

Как это работает

┌────────────┐       ┌───────────┐       ┌────────────┐
│ MCP Client │──────▶│ mcp-audit │──────▶│ MCP Server │
│ (Claude,   │◀──────│   wrap    │◀──────│ (any)      │
│  Cursor)   │       └─────┬─────┘       └────────────┘
└────────────┘             │
                           ▼
                    ~/.mcp-audit/
                    audit.jsonl

Команда wrap запускает ваш MCP-сервер как дочерний процесс и располагается между клиентом и сервером на stdio. Она прозрачно пересылает ВСЕ сообщения. Только ответы tools/call подписываются и записываются в журнал. Всё остальное проходит без изменений.

При первом запуске ключ подписи автоматически генерируется в ~/.mcp-audit/key.hex. Никакой настройки не требуется.

Формат записи аудита

{
  "id": "bf7a2f62-4d0f-4cce-afd2-cbfbf7bca2a5",
  "timestamp": "2026-08-16T14:32:01.000Z",
  "method": "tools/call",
  "toolName": "github/create_pr",
  "args": {"title": "Fix bug", "body": "..."},
  "durationMs": 234,
  "success": true,
  "previousHash": "8a3f2b...",
  "attestation": "7c4d9e..."
}

attestation — это подпись HMAC-SHA256 по каноническим полям записи. previousHash — это SHA-256 предыдущей записи. Вместе они обнаруживают вмешательство, нарушение порядка и неполноту.

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

claude_desktop_config.json:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["mcp-audit", "wrap", "--", "npx", "@modelcontextprotocol/server-github"]
    },
    "filesystem": {
      "command": "npx",
      "args": ["mcp-audit", "wrap", "--", "npx", "@modelcontextprotocol/server-filesystem", "/tmp"]
    }
  }
}

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

.claude/hooks/mcp-servers.json или напрямую в команде вашего MCP-сервера — добавьте префикс mcp-audit wrap --.

CLI

mcp-audit wrap -- <cmd> [args]    # Wrap any MCP server
mcp-audit tail                    # Live stream of tool calls
mcp-audit verify <log>            # Verify chain integrity
mcp-audit serve [config]          # Full gateway (policy + OTel)
mcp-audit keygen [dir]            # Generate Ed25519 key pair

Полный режим шлюза

Для команд, которым также нужны контроль доступа, ограничение скорости и маршрутизация между несколькими серверами:

mcp-audit serve gateway.config.json

Полный шлюз добавляет:

  • Политический движок (ACL на основе glob, ограничения скорости для каждого принципала)

  • Пространства имён инструментов для нескольких вышестоящих MCP-серверов

  • Экспорт трассировок и метрик OpenTelemetry

  • Управление работоспособностью вышестоящих серверов с автоматическим переподключением

  • Подписи Ed25519 (сильнее, чем HMAC, переносимая проверка)

См. конфигурацию шлюза для полной схемы.

Установка

npm install -g @mcp-audit-gateway/core

Это устанавливает CLI mcp-audit глобально. Или используйте без установки:

npx @mcp-audit-gateway/core wrap -- <your mcp server command>

Слой аттестации

Подсистема подписи и проверки выходит за рамки пофайлового HMAC. Она обеспечивает доказательство вмешательства при ротации журналов, восстановлении после сбоев и многофайловых цепочках.

Контрольные записи позволяют потребителю обнаружить усечение хвоста, сохраняя один хеш во внешнем хранилище. Цепочка продолжается при ротации файлов (без тихого сброса). Принудительные перезапуски создают подписанные записи chain_break вместо тихого начала с нуля.

Каноническая форма типизирована и инъективна, избегает проблемы форматирования чисел с плавающей запятой в JCS, полностью отвергая небезопасные числа, и доказала межъязыковую совместимость с помощью 46 конформационных векторов (JS + Python). См. SECURITY-DESIGN.md для полной спецификации и модели угроз.

Дифференциальное тестирование между SDK

MCP имеет 10 официальных SDK и не имеет меж-SDK конформационного тестирования. Мы создали дифференциальный стенд в стиле Wycheproof, который запускает 40 тестов на граничные случаи сериализации во всех 10 SDK и сообщает, где они расходятся.

Результаты: 26 расхождений на уровне проводов в 8 различных сериализаторах. Шесть различных представлений 1e20. Три несовместимых алгоритма упорядочивания ключей. TypeScript молча теряет точность целых чисел при 2^53+1. C# экранирует HTML-символы, которые не экранирует ни один другой SDK. Python SDK выдаёт разные байты в разных версиях pydantic-core для одного и того же пути кода.

./test/vectors/cross-sdk-diff.sh              # full matrix (stdlib + SDK)
./test/vectors/cross-sdk-diff.sh --layer sdk  # SDK-wire-level only
./test/vectors/cross-sdk-diff.sh --json       # structured output

Канонизация аудиторского шлюза была разработана так, чтобы быть невосприимчивой ко всем 26 классам расхождений: только безопасные целые числа, явный порядок полей, отклонение суррогатов. См. SDK-AUDIT.md для полной таблицы расхождений и методологии.

Соответствие

Эта реализация удовлетворяет следующим свойствам (проверено межъязыковыми конформационными векторами и модульными тестами):

  • Инъективная каноническая форма (без коллизий дайджестов между типами)

  • Межъязыковая эквивалентность сортировки (порядок кодовых единиц UTF-16)

  • Отклонение непарных суррогатов

  • Непрерывность хеш-цепочки при ротации журналов

  • Обнаружение внедрённого состояния при запуске

  • Отсутствие ложных срабатываний после легитимного разрыва цепочки

  • Отказ при повреждённом или слишком большом входе

  • Сегментированная монотонность на границах chain_break

  • Полнота, закреплённая за потребителем, через контрольные записи

  • Инициализация с ограниченной памятью (лимит 1 МБ)

Соответствие APS action-ref-v1: 51/51 векторов пройдено (пересчёт JCS + сравнение дайджестов с отказом при ошибке).

Тестирование

npm test                                    # unit tests
node test/vectors/verify-checkpoint.mjs     # JS conformance vectors
python3 test/vectors/verify-checkpoint.py   # Python conformance vectors
node test/vectors/aps-action-ref-v1.mjs     # 51 APS vectors
./test/vectors/cross-sdk-diff.sh            # 10-SDK differential test

Лицензия

MIT

Фикстуры соответствия APS (test/vectors/aps-action-ref-v1-vectors.json) адаптированы из исходников Apache-2.0. См. test/vectors/SOURCE.md для сведений о происхождении и условиях.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
1dRelease cycle
5Releases (12mo)
Commit activity

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Bitcoin-anchored, tamper-evident audit log for AI agents — record, disclose and verify actions.

  • Hash-chained HMAC-signed audit log MCP for A2A (agent-to-agent) calls. Every tool-call, agent-ha...

  • Etch is a signed audit chain for AI agent decisions, offline-verifiable against pinned public keys.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/elang2/mcp-audit-gateway'

If you have feedback or need assistance with the MCP directory API, please join our Discord server