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.jsonQué 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 serverIntercepta 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_limitymin_tierFirma 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
stderrcon[PROTECT_MCP]Recibos locales firmados opcionales — generados cuando se ejecuta con una política que contiene
signing.key_path, guardados en.protect-mcp-receipts.jsonly expuestos enhttp://127.0.0.1:9876/receiptsVerificación sin conexión — verifique recibos o paquetes con
npx @veritasacta/verifyNo 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, ejecutenpx protect-mcp inity 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
unknowna 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 |
|
| Bloquear explícitamente esta herramienta |
|
| Requisito de acceso básico |
|
| Nivel mínimo requerido si su host establece el estado de admisión |
|
| Límite de tasa (ej. |
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 helpGanchos 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 |
| CVE-2025-6514: Secuestro de proxy OAuth MCP (437K entornos) | A01, A03 |
| Agente Terraform autónomo destruye producción | A05, A06 |
| Inyección de prompt mediante issue de GitHub manipulado | A01, A02, A03 |
| Robo de datos del agente mediante abuso de herramientas salientes | A02, A04 |
| Transacción financiera no autorizada | A05, A06 |
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.jsAsignació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
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