Skip to main content
Glama
tomjwxf

protect-mcp

by tomjwxf

⚠️ Этот репозиторий перемещен. Активная разработка продолжается в ScopeBlind/scopeblind-gateway.

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

protect-mcp

Шлюз безопасности для MCP-серверов. По умолчанию работает в теневом режиме с логированием, поддерживает политики для каждого инструмента, опциональные локальные квитанции Ed25519 и удобный для проверки аудит-вывод.

Текущий путь CLI: оберните любой stdio MCP-сервер как прозрачный прокси. В теневом режиме он логирует каждый запрос tools/call и разрешает всё. Добавьте файл политики для применения правил к конкретным инструментам. Запустите protect-mcp init для генерации локальных ключей подписи и конфигурации, чтобы шлюз также мог выдавать подписанные квитанции.

Быстрый старт

# Wrap an existing OpenClaw / MCP config into a usable pack
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe

# Shadow mode — log every tool call, enforce nothing
npx protect-mcp -- node my-server.js

# Generate keys + config template for local signing
npx protect-mcp init

# Shadow mode with local signing enabled
npx protect-mcp --policy protect-mcp.json -- node my-server.js

# Enforce mode
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js

# Export an offline-verifiable audit bundle
npx protect-mcp bundle --output audit.json

Related MCP server: protect-mcp

Что он делает

protect-mcp располагается между вашим MCP-клиентом и сервером в качестве stdio-прокси:

MCP Client ←stdin/stdout→ protect-mcp ←stdin/stdout→ your MCP server

Он перехватывает JSON-RPC запросы tools/call и:

  • Теневой режим (по умолчанию): логирует каждый вызов инструмента и разрешает всё.

  • Режим принудительного применения: применяет правила политики для каждого инструмента, такие как block, rate_limit и min_tier.

  • Опциональная локальная подпись: при настроенной подписи выдает квитанцию, подписанную Ed25519, вместе со структурированным логом.

Все остальные сообщения MCP (initialize, tools/list, уведомления) проходят прозрачно.

Что доступно сегодня

  • Политики для каждого инструмента — блокировка деструктивных инструментов, ограничение частоты для дорогостоящих и установка требований к минимальному уровню доступа.

  • Структурированные логи решений — каждое решение выводится в stderr с пометкой [PROTECT_MCP].

  • Опциональные локальные подписанные квитанции — генерируются при запуске с политикой, содержащей signing.key_path, сохраняются в .protect-mcp-receipts.jsonl и доступны по адресу http://127.0.0.1:9876/receipts.

  • Автономная проверка — проверка квитанций или пакетов с помощью npx @veritasacta/verify.

  • Учетная запись не требуется — локальные ключи, локальная политика, локальный процесс.

Текущие границы возможностей

Важно ознакомиться с этим перед внедрением или обсуждением с пользователями:

  • Подпись не выполняется автоматически при базовом запуске npx protect-mcp -- .... Этот путь логирует решения в теневом режиме. Для локальной подписи запустите npx protect-mcp init, а затем запустите шлюз с созданным файлом политики.

  • Проверки политик с учетом уровня доступа работают, но допуск на основе манифеста не встроен в стандартный путь CLI/stdio. CLI по умолчанию устанавливает сессии как unknown, если интеграция хоста не вызывает API допуска программно.

  • Конфигурация учетных данных в настоящее время проверяет ссылки на учетные данные из переменных окружения и записывает метки учетных данных в логи/квитанции. Общая инъекция для каждого вызова в произвольные stdio-инструменты зависит от адаптера и не выполняется стандартным путем прокси.

  • Внешние адаптеры PDP и вспомогательные средства для аудита существуют как экспортируемые утилиты. Они еще не полностью интегрированы в стандартный путь CLI.

Файл политики

{
  "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"
    }
  }
}

Правила политики

Поле

Значения

Описание

block

true

Явно заблокировать этот инструмент

require

"any", "none"

Базовое требование доступа

min_tier

"unknown", "signed-known", "evidenced", "privileged"

Минимальный уровень, требуемый, если ваш хост устанавливает состояние допуска

rate_limit

"N/unit"

Ограничение частоты (например, "5/hour", "100/day")

Имена инструментов должны совпадать точно, "*" используется как подстановочный знак (wildcard).

Конфигурация MCP-клиента

Claude Desktop

Добавьте в 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"
      ]
    }
  }
}

Cursor / VS Code

Тот же шаблон — замените команду сервера на protect-mcp, оборачивающую её.

Опции CLI

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';

Используйте их, если хотите добавить:

  • допуск на основе манифеста перед началом сессии

  • внешний PDP (OPA, Cerbos или общий HTTP-вебхук)

  • интеграции с брокером учетных данных

  • экспорт пакета аудита вокруг вашего собственного хранилища квитанций

Логи решений и квитанции

Каждый вызов инструмента выводит структурированный 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() вокруг ваших собственных собранных подписанных квитанций.

Философия

  • Сначала теневой режим. Посмотрите, что делают агенты, прежде чем что-либо принудительно ограничивать.

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

  • Держите требования строгими. Стандартный путь CLI пока не поддерживает всё, что будет поддерживать архитектура в долгосрочной перспективе.

  • Наслаивайте поверх существующей аутентификации. Не переделывайте свой стек только ради добавления контроля и доказательств.

Пакеты политик, привязанные к инцидентам

Поставляются вместе с protect-mcp — каждый предотвращает реальную атаку:

Политика

Инцидент

Категории OWASP

clinejection.json

CVE-2025-6514: Перехват MCP OAuth прокси (437 тыс. сред)

A01, A03

terraform-destroy.json

Автономный агент Terraform уничтожает продакшн

A05, A06

github-mcp-hijack.json

Инъекция промпта через специально созданный issue в GitHub

A01, A02, A03

data-exfiltration.json

Кража данных агентом через злоупотребление исходящим инструментом

A02, A04

financial-safe.json

Несанкционированная финансовая транзакция

A05, A06

npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js

Полная карта OWASP Agentic Top 10: scopeblind.com/docs/owasp

BYOPE: Внешние движки политик

Поддерживает 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"
  }
}

Стандарты и интеллектуальная собственность

  • IETF Internet-Draft: draft-farley-acta-signed-receipts-00 — Подписанные квитанции решений для контроля доступа между машинами

  • Статус патента: 4 австралийских предварительных патента на рассмотрении (2025-2026), охватывающих квитанции решений с настраиваемым раскрытием информации, шлюз вызова инструментов, манифесты агентов и портативную идентификацию

  • Проверка: Лицензия MIT — npx @veritasacta/verify --self-test

Лицензия

MIT — свободно для использования, изменения, распространения и создания производных работ без ограничений.

scopeblind.com · npm · GitHub · IETF Draft

Available Tools

5 tools
delete_fileB

Delete a file from the filesystem

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path to delete

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description does not disclose that deletion is irreversible or mention behavior for missing paths or directories, which is critical for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded, but could be improved by including context about irreversibility without significant length increase.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no output schema or annotations, the description lacks completeness: no mention of return values, errors, or required permissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the parameter description 'File path to delete' is already clear; the description adds no extra meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'delete' and the resource 'file from the filesystem', distinguishing it from sibling tools like read_file (read) and write_file (write).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives, no context about prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deployC

Deploy the application to production

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoDeployment reason
environmentYesTarget environment

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description fails to disclose behavioral traits like destructiveness, auth requirements, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely short (5 words), but underspecified – conciseness should not sacrifice necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description does not explain return values, side effects, or deployment process outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already well-documented. Description adds no extra meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'deploy the application to production' – clear verb and resource, but slightly misleading as schema allows staging also. No confusion with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives, no prerequisites or when-not-to-use mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_fileB

Read the contents of a file

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path to read

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only mentions reading without specifying encoding, size limits, existence requirements, or return format, leaving behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise single-sentence description that is front-loaded and efficient with no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite simplicity, description lacks details on return format, error handling, and behavioral constraints, which are critical for an agent invoking a file read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'path' described as 'File path to read'; description adds no additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'read' and resource 'contents of a file', distinguishing it from sibling tools like write_file and delete_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives; usage is implied by the name and description but lacks context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_fileC

Write content to a file

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path to write
contentYesContent to write

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose important behavioral traits such as whether the file is overwritten, permissions required, or error handling. Without annotations, the description carries the full burden, and it is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, to-the-point sentence with no wasted words. It earns its place by conveying the core action concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple file write tool, the description lacks completeness. It does not mention return values, overwrite behavior, or any constraints, making it less useful for an AI agent to fully understand the tool's effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both parameters, so the description adds no extra meaning. Baseline 3 is appropriate; the schema already documents path and content adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Write content to a file' clearly states the verb 'Write' and the resource 'content to a file', distinguishing it from sibling tools like read_file and delete_file. However, it does not specify whether it overwrites or appends, which would add more precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. An explicit mention of use cases or exclusions (e.g., when to use deploy instead) is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observeddelete_file
    • First observeddeploy
    • First observedread_file
    • First observedweb_search
    • First observedwrite_file

TDQS

B3.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct action: file operations (delete, read, write), deployment, and web search. There is no overlap or ambiguity between them.

Naming Consistency4/5

Most tools follow verb_noun pattern (delete_file, read_file, write_file, web_search), but 'deploy' lacks a noun, breaking the consistent pattern slightly.

Tool Count4/5

5 tools is a reasonable count, but the mix of file management, deployment, and web search seems odd for a single server scope.

Completeness2/5

The tool set lacks obvious necessary operations for any single domain: e.g., no update for files, no environment or config for deployment, making it incomplete for a coherent purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for offline verification of signed artifacts — receipts, manifests, and audit bundles. MIT licensed, works without accounts or API calls. Tools: self_test, verify_receipt, verify_bundle, explain_artifact.
    4
    64 npm
    5
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Security gateway for MCP servers. Wraps any MCP server with per-tool policies (Cedar + JSON), Ed25519-signed decision receipts, human approval gates, and trust tiers. Shadow mode by default — logs everything, blocks nothing.
    789 npm
    9
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Security gateway for MCP tool calls. Sits between your LLM client and MCP servers, enforcing per-tool policies (allow/block/approve/read-only), logging every call, and pausing dangerous operations for human approval in terminal or Slack.
    2 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Self-hosted MCP gateway that applies deterministic, compiled policy to tool discovery, invocation, and outbound data flow, with no model in the enforcement path. Every decision emits a hash-chained receipt sealed with Ed25519 and verifiable using public keys only.
    Apache 2.0