Skip to main content
Glama
tomjwxf

protect-mcp

⚠️ Este repositorio se ha movido. El desarrollo activo continúa en ScopeBlind/scopeblind-gateway.

Este fork personal puede estar desactualizado respecto al repositorio canónico. Por favor, utilice el repositorio de la organización para problemas, solicitudes de extracción (pull requests) y el código más reciente.

protect-mcp

Puerta de enlace de seguridad para servidores MCP. Registros en modo sombra por defecto, políticas por herramienta, recibos locales opcionales con Ed25519 y salida de auditoría fácil de verificar.

Ruta actual de la CLI: envuelve cualquier servidor MCP stdio como un proxy transparente. En modo sombra, registra cada solicitud tools/call y permite que todo pase. Añada un archivo de política para aplicar reglas por herramienta. Ejecute protect-mcp init para generar claves de firma locales y configuración, de modo que la puerta de enlace también pueda emitir recibos firmados.

Inicio rápido

# 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

Qué hace

protect-mcp se sitúa entre su cliente MCP y el servidor como un proxy stdio:

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

Intercepta las solicitudes JSON-RPC tools/call y:

  • Modo sombra (por defecto): registra cada llamada a herramienta y permite que todo pase

  • Modo de cumplimiento: aplica reglas de política por herramienta como block, rate_limit y min_tier

  • Firma local opcional: cuando la firma está configurada, emite un recibo firmado con Ed25519 junto con el registro estructurado

Todos los demás mensajes MCP (initialize, tools/list, notificaciones) pasan de forma transparente.

Qué incluye hoy

  • Políticas por herramienta — bloquee herramientas destructivas, limite la tasa de las costosas y adjunte requisitos de nivel mínimo

  • Registros de decisión estructurados — cada decisión se emite a stderr con [PROTECT_MCP]

  • Recibos locales firmados opcionales — generados cuando se ejecuta con una política que contiene signing.key_path, guardados en .protect-mcp-receipts.jsonl y expuestos en http://127.0.0.1:9876/receipts

  • Verificación sin conexión — verifique recibos o paquetes con npx @veritasacta/verify

  • No se requiere cuenta — claves locales, política local, proceso local

Límites de capacidad actuales

Esto es importante antes de implementar esto o hablar con los usuarios:

  • La firma no es automática en la ruta básica npx protect-mcp -- .... Esa ruta registra decisiones en modo sombra. Para la firma local, ejecute npx protect-mcp init y luego inicie la puerta de enlace con el archivo de política generado.

  • Las comprobaciones de política conscientes del nivel están activas, pero la admisión de manifiestos no está conectada a la ruta CLI/stdio por defecto. La CLI establece las sesiones como unknown a menos que una integración de host llame a la API de admisión mediante programación.

  • La configuración de credenciales actualmente valida las referencias de credenciales respaldadas por variables de entorno y registra etiquetas de credenciales en registros/recibos. La inyección genérica por llamada en herramientas stdio arbitrarias es específica del adaptador y no la realiza la ruta de proxy por defecto.

  • Los adaptadores PDP externos y los ayudantes de paquetes de auditoría existen como utilidades exportadas. Aún no están completamente conectados a la ruta CLI por defecto.

Archivo de política

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

Reglas de política

Campo

Valores

Descripción

block

true

Bloquear explícitamente esta herramienta

require

"any", "none"

Requisito de acceso básico

min_tier

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

Nivel mínimo requerido si su host establece el estado de admisión

rate_limit

"N/unit"

Límite de tasa (ej. "5/hour", "100/day")

Los nombres de las herramientas coinciden exactamente, con "*" como comodín de respaldo.

Configuración del cliente MCP

Claude Desktop

Añada a 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

El mismo patrón: reemplace el comando del servidor con protect-mcp envolviéndolo.

Opciones de 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

Ganchos programáticos

La biblioteca también expone las primitivas que aún no están conectadas a la ruta CLI por defecto:

import {
  ProtectGateway,
  loadPolicy,
  evaluateTier,
  meetsMinTier,
  resolveCredential,
  initSigning,
  signDecision,
  queryExternalPDP,
  buildDecisionContext,
  createAuditBundle,
} from 'protect-mcp';

Úselas si desea añadir:

  • admisión de manifiesto antes de que comience una sesión

  • un PDP externo (OPA, Cerbos o un webhook HTTP genérico)

  • integraciones personalizadas mediadas por credenciales

  • exportación de paquetes de auditoría alrededor de su propio almacén de recibos

Registros de decisión y recibos

Cada llamada a herramienta emite JSON estructurado a stderr:

[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}

Cuando la firma está configurada, sigue un recibo firmado:

[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":"..."}

Verifique con la CLI: npx @veritasacta/verify receipt.json Verifique en el navegador: scopeblind.com/verify

Paquetes de auditoría

El paquete exporta un ayudante para paquetes de auditoría autónomos:

{
  "format": "scopeblind:audit-bundle",
  "version": 1,
  "tenant": "my-service",
  "receipts": ["..."],
  "verification": {
    "algorithm": "ed25519",
    "signing_keys": ["..."]
  }
}

Use createAuditBundle() alrededor de sus propios recibos firmados recopilados.

Filosofía

  • Primero sombra. Vea lo que hacen los agentes antes de aplicar nada.

  • Los recibos superan a los registros solo de panel. Los artefactos firmados deben ser verificables de forma independiente.

  • Mantenga las afirmaciones ajustadas. La ruta CLI por defecto aún no hace todo lo que la arquitectura a largo plazo soportará.

  • Capa sobre la autenticación existente. No desmonte su pila solo para añadir control y evidencia.

Paquetes de políticas anclados a incidentes

Se envían con protect-mcp: cada uno previene un ataque real:

Política

Incidente

Categorías OWASP

clinejection.json

CVE-2025-6514: Secuestro de proxy OAuth MCP (437K entornos)

A01, A03

terraform-destroy.json

Agente Terraform autónomo destruye producción

A05, A06

github-mcp-hijack.json

Inyección de prompt mediante issue de GitHub manipulado

A01, A02, A03

data-exfiltration.json

Robo de datos del agente mediante abuso de herramientas salientes

A02, A04

financial-safe.json

Transacción financiera no autorizada

A05, A06

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

Asignación completa de OWASP Agentic Top 10: scopeblind.com/docs/owasp

BYOPE: Motores de política externos

Soporta OPA, Cerbos, Cedar (AWS AgentCore) y puntos finales HTTP genéricos:

{
  "policy_engine": "hybrid",
  "external": {
    "endpoint": "http://localhost:8181/v1/data/mcp/allow",
    "format": "cedar",
    "timeout_ms": 200,
    "fallback": "deny"
  }
}

Estándares y PI

  • IETF Internet-Draft: draft-farley-acta-signed-receipts-00 — Recibos de decisión firmados para control de acceso máquina a máquina

  • Estado de la patente: 4 patentes provisionales australianas pendientes (2025-2026) que cubren recibos de decisión con divulgación configurable, puerta de enlace de llamada a herramientas, manifiestos de agente e identidad portátil

  • Verificación: Licencia MIT — npx @veritasacta/verify --self-test

Licencia

MIT: libre de usar, modificar, distribuir y construir sobre él sin restricciones.

scopeblind.com · npm · GitHub · IETF Draft

Install Server
A
security – no known vulnerabilities
A
license - permissive license
C
quality - C tier

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/tomjwxf/scopeblind-gateway'

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