
Шлюз безопасности для MCP-серверов с пополитикой применения политик для каждого инструмента, аудиторскими квитанциями, подписанными Ed25519, и ведением журнала в теневом режиме. Поддерживает внешние механизмы политик Cedar, OPA и Cerbos для контроля доступа AI-агентов.
⚠️ Этот репозиторий перемещён. Активная разработка продолжается в ScopeBlind/scopeblind-gateway.
Этот личный форк может отставать от канонического репозитория. Пожалуйста, используйте основной репозиторий для вопросов, pull request'ов и актуального кода.
Шлюз безопасности для MCP-серверов. По умолчанию работает в теневом режиме с записью журнала, поддерживает политики для каждого инструмента, опциональное локальное подписание на Ed25519 и удобный для верификации аудит.
Текущий путь CLI: обёртка любого stdio MCP-сервера в прозрачный прокси. В теневом режиме записывает каждый вызов tools/call и пропускает всё. Добавьте файл политики для применения правил для каждого инструмента. Выполните protect-mcp init для генерации локальных ключей подписи и конфигурации, чтобы шлюз также мог выдавать подписанные квитанции.
# Оборачивание существующей конфигурации OpenClaw / MCP в пригодный пакет
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe
# Теневой режим — логировать каждый вызов инструмента, ничего не применять
npx protect-mcp -- node my-server.js
# Генерация ключей и шаблона конфигурации для локального подписания
npx protect-mcp init
# Теневой режим с включённым локальным подписанием
npx protect-mcp --policy protect-mcp.json -- node my-server.js
# Режим принуждения
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js
# Экспорт офлайн-верифицируемого аудит-пакета
npx protect-mcp bundle --output audit.json
protect-mcp располагается между вашим MCP-клиентом и сервером в качестве stdio-прокси:
MCP Client ←stdin/stdout→ protect-mcp ←stdin/stdout→ your MCP server
Он перехватывает JSON-RPC запросы tools/call и:
block, rate_limit и min_tierВсе остальные сообщения MCP (initialize, tools/list, уведомления) проходят прозрачно.
stderr с пометкой [PROTECT_MCP]signing.key_path, сохраняются в .protect-mcp-receipts.jsonl и доступны по адресу http://127.0.0.1:9876/receiptsnpx @veritasacta/verifyЭто важно учитывать перед развёртыванием или обсуждением с пользователями:
npx protect-mcp -- .... Этот путь логирует решения в теневом режиме. Для локального подписания выполните npx protect-mcp init, затем запустите шлюз с сгенерированным файлом политики.unknown, если интеграция с хостом не вызывает API допуска программно.{
"default_tier": "unknown",
"tools": {
"dangerous_tool": { "block": true },
"admin_tool": { "min_tier": "signed-known", "rate_limit": "5/hour" },
"read_tool": { "require": "any", "rate_limit": "100/hour" },
"*": { "rate_limit": "500/hour" }
},
"signing": {
"key_path": "./keys/gateway.json",
"issuer": "protect-mcp",
"enabled": true
},
"credentials": {
"internal_api": {
"inject": "env",
"name": "INTERNAL_API_KEY",
"value_env": "INTERNAL_API_KEY"
}
}
}
Имена инструментов сопоставляются точно, с "*" в качестве подстановочного знака.
Добавьте в claude_desktop_config.json:
{
"mcpServers": {
"my-protected-server": {
"command": "npx",
"args": [
"-y", "protect-mcp",
"--policy", "/path/to/protect-mcp.json",
"--enforce",
"--", "node", "my-server.js"
]
}
}
}
Та же схема — замените команду сервера на protect-mcp, оборачивающую его.
protect-mcp [options] -- <command> [args...]
protect-mcp init
Commands:
init Generate Ed25519 keypair + config template
status Show decision stats and local passport identity
digest Generate a local human-readable summary
receipts Show recent persisted signed receipts
bundle Export an offline-verifiable audit bundle
Options:
--policy <path> Policy/config JSON file
--slug <slug> Service identifier for logs/receipts
--enforce Enable enforcement mode (default: shadow)
--verbose Enable debug logging
--help Show help
Библиотека также предоставляет примитивы, которые ещё не встроены в стандартный путь CLI:
import {
ProtectGateway,
loadPolicy,
evaluateTier,
meetsMinTier,
resolveCredential,
initSigning,
signDecision,
queryExternalPDP,
buildDecisionContext,
createAuditBundle,
} from 'protect-mcp';
Используйте их, если хотите добавить:
Каждый вызов инструмента выводит структурированный JSON в stderr:
[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}
Если подписание настроено, за ним следует подписанная квитанция:
[PROTECT_MCP_RECEIPT] {"v":2,"type":"decision_receipt","algorithm":"ed25519","kid":"...","issuer":"protect-mcp","issued_at":"2026-03-22T00:00:00Z","payload":{"tool":"read_file","decision":"allow","policy_digest":"...","mode":"shadow","request_id":"..."},"signature":"..."}
Проверьте с помощью CLI: npx @veritasacta/verify receipt.json
Проверьте в браузере: scopeblind.com/verify
Пакет включает помощника для самодостаточных аудит-пакетов:
{
"format": "scopeblind:audit-bundle",
"version": 1,
"tenant": "my-service",
"receipts": ["..."],
"verification": {
"algorithm": "ed25519",
"signing_keys": ["..."]
}
}
Используйте createAuditBundle() для ваших собственных собранных подписанных квитанций.
Поставляются с protect-mcp — каждый предотвращает реальную атаку:
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js
Полное соответствие OWASP Agentic Top 10: scopeblind.com/docs/owasp
Поддерживает OPA, Cerbos, Cedar (AWS AgentCore) и универсальные HTTP-эндпоинты:
{
"policy_engine": "hybrid",
"external": {
"endpoint": "http://localhost:8181/v1/data/mcp/allow",
"format": "cedar",
"timeout_ms": 200,
"fallback": "deny"
}
}
npx @veritasacta/verify --self-testMIT — свободно используйте, изменяйте, распространяйте и создавайте производные без ограничений.
scopeblind.com · npm · GitHub · IETF Draft
| Поле | Значения | Описание |
|---|
block | true | Явно заблокировать этот инструмент |
require | "any", "none" | Базовое требование доступа |
min_tier | "unknown", "signed-known", "evidenced", "privileged" | Минимальный уровень допуска, если хост устанавливает состояние допуска |
rate_limit | "N/unit" | Ограничение частоты (например, "5/hour", "100/day") |
| Политика | Инцидент | Категории OWASP |
|---|
clinejection.json | CVE-2025-6514: Угон OAuth-прокси MCP (437 тыс. сред) | A01, A03 |
terraform-destroy.json | Автономный Terraform-агент уничтожает продакшен | A05, A06 |
github-mcp-hijack.json | Инъекция промптов через сфабрикованный GitHub-issue | A01, A02, A03 |
data-exfiltration.json | Кража данных агентом через злоупотребление исходящими инструментами | A02, A04 |
financial-safe.json | Неавторизованная финансовая транзакция | A05, A06 |