
Gateway de segurança para servidores MCP com aplicação de políticas por ferramenta, recibos de auditoria assinados com Ed25519 e registro em modo shadow. Suporta mecanismos de políticas externas Cedar, OPA e Cerbos para controle de acesso de agentes de IA.
⚠️ Este repositório foi movido. O desenvolvimento ativo continua em ScopeBlind/scopeblind-gateway.
Este fork pessoal pode estar desatualizado em relação ao repositório canônico. Por favor, use o repositório da organização para issues, pull requests e o código mais recente.
Gateway de segurança para servidores MCP. Por padrão, registra em modo de observação, políticas por ferramenta, recibos Ed25519 opcionais locais e saída de auditoria amigável para verificação.
Caminho atual da CLI: envolve qualquer servidor MCP stdio como um proxy transparente. Em modo de observação, registra toda requisição tools/call e permite tudo. Adicione um arquivo de política para aplicar regras por ferramenta. Execute protect-mcp init para gerar chaves de assinatura locais e configuração, para que o gateway também possa emitir recibos assinados.
# Envolver uma configuração OpenClaw / MCP existente em um pacote utilizável
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe
# Modo de observação — registrar toda chamada de ferramenta, não impor nada
npx protect-mcp -- node my-server.js
# Gerar chaves + modelo de configuração para assinatura local
npx protect-mcp init
# Modo de observação com assinatura local ativada
npx protect-mcp --policy protect-mcp.json -- node my-server.js
# Modo de imposição
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js
# Exportar um pacote de auditoria verificável offline
npx protect-mcp bundle --output audit.json
O protect-mcp fica entre seu cliente MCP e servidor como um proxy stdio:
Cliente MCP ←stdin/stdout→ protect-mcp ←stdin/stdout→ seu servidor MCP
Ele intercepta requisições JSON-RPC tools/call e:
block, rate_limit e min_tierTodas as outras mensagens MCP (initialize, tools/list, notificações) passam de forma transparente.
stderr com [PROTECT_MCP]signing.key_path, persistidos em .protect-mcp-receipts.jsonl e expostos em http://127.0.0.1:9876/receiptsnpx @veritasacta/verifyEstes são importantes antes de implementar isso ou falar com usuários:
npx protect-mcp -- .... Esse caminho registra decisões em modo de observação. Para assinatura local, execute npx protect-mcp init e inicie o gateway com o arquivo de política gerado.unknown por padrão, a menos que uma integração de host chame a API de admissão programaticamente.{
"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"
}
}
}
Os nomes das ferramentas correspondem exatamente, com "*" como fallback curinga.
Adicione em 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"
]
}
}
}
Mesmo padrão — substitua o comando do servidor por protect-mcp envolvendo-o.
protect-mcp [options] -- <command> [args...]
protect-mcp init
Comandos:
init Gerar par de chaves Ed25519 + modelo de configuração
status Mostrar estatísticas de decisão e identidade local do passport
digest Gerar um resumo local legível por humanos
receipts Mostrar recibos assinados persistentes recentes
bundle Exportar um pacote de auditoria verificável offline
Opções:
--policy <path> Arquivo JSON de política/configuração
--slug <slug> Identificador de serviço para logs/recibos
--enforce Ativar modo de imposição (padrão: observação)
--verbose Ativar registro de depuração
--help Mostrar ajuda
A biblioteca também expõe os primitivos que ainda não estão conectados ao caminho padrão da CLI:
import {
ProtectGateway,
loadPolicy,
evaluateTier,
meetsMinTier,
resolveCredential,
initSigning,
signDecision,
queryExternalPDP,
buildDecisionContext,
createAuditBundle,
} from 'protect-mcp';
Use-os se quiser adicionar:
Cada chamada de ferramenta emite JSON estruturado para stderr:
[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}
Quando a assinatura está configurada, um recibo assinado 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":"..."}
Verifique com a CLI: npx @veritasacta/verify receipt.json
Verifique no navegador: scopeblind.com/verify
O pacote exporta um auxiliar para pacotes de auditoria autocontidos:
{
"format": "scopeblind:audit-bundle",
"version": 1,
"tenant": "my-service",
"receipts": ["..."],
"verification": {
"algorithm": "ed25519",
"signing_keys": ["..."]
}
}
Use createAuditBundle() em torno dos seus próprios recibos assinados coletados.
Acompanham o protect-mcp — cada um previne um ataque real:
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js
Mapeamento completo OWASP Agentic Top 10: scopeblind.com/docs/owasp
Suporta OPA, Cerbos, Cedar (AWS AgentCore) e endpoints HTTP genéricos:
{
"policy_engine": "hybrid",
"external": {
"endpoint": "http://localhost:8181/v1/data/mcp/allow",
"format": "cedar",
"timeout_ms": 200,
"fallback": "deny"
}
}
npx @veritasacta/verify --self-testMIT — livre para usar, modificar, distribuir e construir sobre sem restrições.
scopeblind.com · npm · GitHub · IETF Draft
| Campo | Valores | Descrição |
|---|
block | true | Bloquear explicitamente esta ferramenta |
require | "any", "none" | Requisito básico de acesso |
min_tier | "unknown", "signed-known", "evidenced", "privileged" | Nível mínimo exigido se seu host definir estado de admissão |
rate_limit | "N/unit" | Limite de taxa (ex.: "5/hour", "100/day") |
| Política | Incidente | Categorias OWASP |
|---|
clinejection.json | CVE-2025-6514: sequestro de proxy OAuth do MCP (437K ambientes) | A01, A03 |
terraform-destroy.json | Agente Terraform autônomo destrói produção | A05, A06 |
github-mcp-hijack.json | Injeção de prompt via issue do GitHub maliciosa | A01, A02, A03 |
data-exfiltration.json | Roubo de dados por agente via abuso de ferramenta de saída | A02, A04 |
financial-safe.json | Transação financeira não autorizada | A05, A06 |