
Подписанные Ed25519 квитанции + политики Cedar для ИИ-агентов. Финансовый мандатный шлюз (Legate), пакеты доказательств, 3 IETF Internet-Drafts. npx protect-mcp
Шлюз политик Cedar с отказом по умолчанию плюс подписанные квитанции для вызовов инструментов ИИ-агента.
protect-mcp — это шлюз, который стоит перед вызовами инструментов ИИ-агента. Он проверяет
каждый вызов на соответствие политике Cedar,
блокирует то, что нарушает правила, до его выполнения и подписывает
проверяемую офлайн квитанцию Ed25519 о каждом решении. Настроенный шлюз работает локально и не отправляет телеметрию решений.
Отдельный адаптер координации подключается к хостинговому сервису совместной работы ScopeBlind;
его запросы и возвращаемые записи имеют путь данных, описанный ниже. Оба
распространяются под лицензией MIT.
Для работы с общим репозиторием используйте клиентские проекты: люди согласуют задание и ограничения, агенты готовят проверки, и обе стороны утверждают точную версию, прежде чем получатель владельца сможет изменить репозиторий. Рабочий процесс с репозиторием ниже включает настройку и пять ограниченных инструментов агента.
would_deny: true, так что сбой никогда не остаётся незамеченным.serve --enforce и doctor запускают при старте
самопроверку и отказываются взводить шлюз, если не могут показать, что заведомо запрещённое
действие действительно отклоняется. Шлюз, который не может доказать, что отклоняет, не запускается.@veritasacta/verify.
Проверка подписи не требует сетевых запросов. Утверждения о выполнении по-прежнему
зависят от идентифицированного оператора шлюза.# 1. Generate an Ed25519 keypair, config template, and sample policy.
npx protect-mcp init
# 2. Print a shadow-mode client configuration, then apply it in your MCP host.
# This command prints configuration and exits; it does not launch the server.
npx protect-mcp wrap -- node your-mcp-server.js
# 3. Reopen the host and use its tools, then inspect the local-only dashboard.
npx protect-mcp dashboard --open
# 4. Draft a reviewable policy from observed calls.
npx protect-mcp recommend --write
# 5. When reviewed, restart the wrapper in enforce mode with that policy.
npx protect-mcp --policy protect-mcp.recommended.json --enforce -- node your-mcp-server.js
Для Claude Desktop сначала выполните пробный запуск патча конфигурации, а затем примените его:
npx protect-mcp wrap --claude-desktop
npx protect-mcp wrap --claude-desktop --write
npx protect-mcp dashboard --open
Панель управления привязывается к 127.0.0.1, читает только локальные файлы журналов и квитанций и ничего не загружает. Используйте npx protect-mcp connect, только если вам явно нужна размещённая панель ScopeBlind.
Если вы предпочитаете вызывать шлюз как инструменты, а не подключать хуки Claude Code, запустите его как MCP-сервер:
npx protect-mcp mcp
Он говорит на MCP через stdio и предоставляет четыре инструмента только для чтения, весь цикл:
evaluate_action: принять решение по предложенному вызову инструмента на основе встроенной политики Cedar, с отказом при сбое (любая ошибка политики — DENY). Возвращает { allowed, decision, reason, policy_digest }.sign_decision: превратить решение в подписанную квитанцию Ed25519 (отказ подписывает gateway_restraint, разрешение — decision_receipt). Возвращает квитанцию и её открытый ключ; генерирует эфемерный ключ, если вы его не предоставили.verify_receipt: проверить подписанную квитанцию офлайн с помощью открытого ключа. Возвращает { valid, error, type, kid, issuer }.self_test: доказать это, без входных данных. Известное запрещённое действие отклоняется, затем подписанная квитанция проходит полный цикл, а подделанная копия не проходит.Направьте на него любой MCP-хост, например Claude Desktop:
{
"mcpServers": {
"protect-mcp": { "command": "npx", "args": ["-y", "protect-mcp", "mcp"] }
}
}
Квитанции побайтово совместимы с теми, которые шлюз подписывает во время выполнения, поэтому квитанция, созданная здесь, использует тот же конверт Acta. Возможности верификации и совместимость канонизации зависят от версии верификатора; используйте API verifyReceipt шлюза для поведения соответствия, описанного ниже.
Это дерево исходного кода исправляет дефект упорядочивания целочисленных ключей, присутствовавший вплоть до 0.14.0: подписи и хеши цепочек теперь используют прямую эмиссию членов JCS, сохраняя ASCII-профиль объектных ключей шлюза. Ключи, выглядящие как числа, например "10", предшествуют "2", в том числе внутри вложенных объектов. Не-JSON значения и недопустимый Unicode отклоняются.
Обычные JSON-квитанции, кодировка которых не изменилась, продолжают проходить верификацию. Исторические квитанции, подписанные со старым порядком числовых ключей, помечаются как legacy_non_jcs_signature; строгая верификация не считает их действительными JCS. Для явной проверки исторической совместимости используйте verifyReceipt(receipt, publicKey, { allowLegacyNumericKeys: true }) и проверьте поля canonicalization и warning. Тогда его hash — это исходный исторический хеш. Сохраняйте исходные квитанции и связи цепочки: пересчёт старой квитанции с числовыми ключами через receiptHash теперь даёт её JCS-хеш и может разорвать историческую цепочку. Эти изменения включены в 0.15.0.
Версия 0.25.0 включает переиспользуемый профиль агента. Откройте
Начните через своего агента
для команды настройки с отображаемым сервисом ключом полномочий. Сверьте этот ключ
с доверенным источником перед подключением. Например:
npx --yes [email protected] coordination agent setup \
--client claude-code \
--profile ~/.scopeblind/agent.json \
--endpoint https://scopeblind.com/api/coordination \
--authority-key PINNED_64_HEX_AUTHORITY_KEY
Используйте --client codex или --client json для этих инструкций по регистрации.
Setup выводит конфигурацию; примените её в вашем клиенте, затем переоткройте этот клиент.
Приватный профиль содержит ключ агента и отдельно ограниченные соединения, с
правами доступа к файлам 600. Setup не предоставляет разрешений на задачи и не копирует ключ
человеческого браузера. Зарегистрированный сервер запускает coordination agent --profile FILE.
Попросите вашего агента подготовить общую задачу-счёт для вашего рассмотрения. Поток инструмента таков: