
Gateway di sicurezza per server MCP con applicazione delle policy per strumento, ricevute di audit firmate Ed25519 e logging in modalità shadow. Supporta i motori di policy esterni Cedar, OPA e Cerbos per il controllo di accesso degli agenti AI.
⚠️ Questo repository è stato spostato. Lo sviluppo attivo continua su ScopeBlind/scopeblind-gateway.
Questo fork personale potrebbe essere in ritardo rispetto al repository canonico. Si prega di utilizzare il repository dell'organizzazione per problemi, pull request e il codice più recente.
Gateway di sicurezza per server MCP. Registrazione in modalità ombra per impostazione predefinita, politiche per strumento, ricevute Ed25519 locali opzionali e output di audit facilmente verificabile.
Percorso attuale da riga di comando: avvolgi qualsiasi server MCP stdio come proxy trasparente. In modalità ombra registra ogni richiesta tools/call e permette tutto. Aggiungi un file di policy per applicare regole per strumento. Esegui protect-mcp init per generare chiavi di firma locali e configurazione in modo che il gateway possa anche emettere ricevute firmate.
# 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
protect-mcp si posiziona tra il tuo client e server MCP come proxy stdio:
MCP Client ←stdin/stdout→ protect-mcp ←stdin/stdout→ your MCP server
Intercetta le richieste JSON-RPC tools/call e:
block, rate_limit e min_tierTutti gli altri messaggi MCP (initialize, tools/list, notifiche) passano in modo trasparente.
stderr con [PROTECT_MCP]signing.key_path, archiviate in .protect-mcp-receipts.jsonl e esposte su http://127.0.0.1:9876/receiptsnpx @veritasacta/verifyQuesti sono importanti prima di implementarlo o parlarne agli utenti:
npx protect-mcp -- .... Quel percorso registra le decisioni in modalità ombra. Per la firma locale, esegui npx protect-mcp init e poi avvia il gateway con il file di policy generato.unknown a meno che un'integrazione host non chiami programmaticamente l'API di ammissione.{
"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"
}
}
}
I nomi degli strumenti corrispondono esattamente, con "*" come fallback wildcard.
Aggiungi 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"
]
}
}
}
Stesso schema — sostituisci il comando del server con protect-mcp che lo avvolge.
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
La libreria espone anche i primitivi che non sono ancora integrati nel percorso CLI predefinito:
import {
ProtectGateway,
loadPolicy,
evaluateTier,
meetsMinTier,
resolveCredential,
initSigning,
signDecision,
queryExternalPDP,
buildDecisionContext,
createAuditBundle,
} from 'protect-mcp';
Usali se vuoi aggiungere:
Ogni chiamata di strumento emette JSON strutturato su stderr:
[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}
Quando la firma è configurata, una ricevuta firmata segue:
[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":"..."}
Verifica con la CLI: npx @veritasacta/verify receipt.json
Verifica nel browser: scopeblind.com/verify
Il pacchetto esporta un helper per bundle di audit autonomi:
{
"format": "scopeblind:audit-bundle",
"version": 1,
"tenant": "my-service",
"receipts": ["..."],
"verification": {
"algorithm": "ed25519",
"signing_keys": ["..."]
}
}
Utilizza createAuditBundle() intorno alle tue ricevute firmate raccolte.
Inclusi con protect-mcp — ognuno previene un attacco reale:
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js
Mappatura completa OWASP Agentic Top 10: scopeblind.com/docs/owasp
Supporta OPA, Cerbos, Cedar (AWS AgentCore) e endpoint HTTP generici:
{
"policy_engine": "hybrid",
"external": {
"endpoint": "http://localhost:8181/v1/data/mcp/allow",
"format": "cedar",
"timeout_ms": 200,
"fallback": "deny"
}
}
npx @veritasacta/verify --self-testMIT — libero da usare, modificare, distribuire e su cui costruire senza restrizioni.
scopeblind.com · npm · GitHub · IETF Draft
| Campo | Valori | Descrizione |
|---|
block | true | Blocca esplicitamente questo strumento |
require | "any", "none" | Requisito di accesso di base |
min_tier | "unknown", "signed-known", "evidenced", "privileged" | Livello minimo richiesto se il tuo host imposta lo stato di ammissione |
rate_limit | "N/unit" | Limite di frequenza (es. "5/hour", "100/day") |
| Policy | Incidente | Categorie OWASP |
|---|
clinejection.json | CVE-2025-6514: hijack del proxy OAuth MCP (437K ambienti) | A01, A03 |
terraform-destroy.json | L'agente Terraform autonomo distrugge la produzione | A05, A06 |
github-mcp-hijack.json | Iniezione di prompt tramite issue GitHub manipolata | A01, A02, A03 |
data-exfiltration.json | Furto di dati dell'agente tramite abuso di strumento in uscita | A02, A04 |
financial-safe.json | Transazione finanziaria non autorizzata | A05, A06 |