
cmcp v0.4.0
cMCP: Gateway MCP Confidencial. Aplicação de políticas atestadas por hardware para chamadas de ferramentas MCP.
cMCP: Runtime MCP Confidencial
Aplique a política de ferramentas MCP dentro de um TEE, onde o agente que ela governa não consegue alcançá-la
Início Rápido · Arquitetura · Configuração · CLI · Changelog
Pré-visualização para Desenvolvedores - lançado na Confidential Computing Summit, 23 de junho de 2026. Pode haver mudanças disruptivas antes da v1.0. Consulte STATUS.md para saber exatamente o que está disponível hoje versus o que está no roadmap.
cMCP (Runtime MCP Confidencial) é a forma segura e confidencial de executar MCP: um gateway de código aberto que aplica a política de chamadas de ferramentas MCP dentro de um Ambiente de Execução Confiável (TEE) de hardware. Cada chamada de ferramenta é interceptada, avaliada contra um pacote de políticas Cedar e aplicada onde o processo que ela governa não consegue alcançá-la. Cada sessão produz uma Reivindicação TRACE assinada que um verificador confere sem confiar no operador, com atestação de hardware quando o gateway roda em um TEE e apenas assinada no modo de software. Se você procura uma versão segura do MCP, este é o runtime da AgenTrust para isso.
TL;DR - Aponte seu agente para o Gateway cMCP. Ele avalia cada chamada de ferramenta contra uma política Cedar dentro de um TEE, bloqueia ou redige o que a política nega e emite uma Reivindicação TRACE à prova de adulteração como prova. Execute
pip install cmcp-runtimee comece no modo de software sem necessidade de hardware.
Seu agente chama Snowflake, Salesforce, uma dúzia de APIs. O que impede que ele vaze os dados de um cliente em uma dessas chamadas? Se um regulador perguntar, você conseguiria provar que não?
O problema
Um agente chama uma ferramenta. O mecanismo de política diz permitir. A chamada de ferramenta passa.
Nada disso prova que o próprio mecanismo de política não foi comprometido. A governança MCP somente por software não pode garantir:
- Que a política Cedar no disco é a que foi executada. Um administrador mal-intencionado pode trocar o pacote após a aprovação; a verificação de hash roda dentro do mesmo SO que o administrador controla.
- Que a decisão de permitir/negar não foi alterada em memória. Uma CVE na cadeia de suprimentos no avaliador roda no mesmo espaço de endereçamento que o atacante.
- Que o log de auditoria reflete o que realmente aconteceu. Qualquer parte que detenha a chave de assinatura de software pode reconstruir uma cadeia de auditoria válida posteriormente.
O plano de controle que governa as chamadas de ferramentas deve rodar onde não pode ser alcançado pelo processo que governa.
Aplicação de política com atestação de hardware para chamadas de ferramentas MCP. Cada chamada de ferramenta é interceptada, avaliada contra um pacote de políticas Cedar e aplicada por um mecanismo de política rodando dentro de um Ambiente de Execução Confiável (TEE). O hash do pacote de políticas é medido no relatório de atestação de hardware antes que qualquer código seja executado.
Diferente de soluções de conectividade baseadas em túnel, o Runtime cMCP processa os payloads das chamadas de ferramentas dentro do TEE. O provedor de conectividade vê texto cifrado, não texto puro. A única coisa que sai do enclave é a reivindicação TRACE assinada.
Início Rápido
pip install cmcp-runtime
Crie cmcp-config.yaml:
attestation:
provider: auto
enforcement_mode: advisory # advisory facilita o ajuste inicial; o padrão é `enforcing`
listen_addr: "127.0.0.1:8443" # fixe loopback: o modo dev roda sem token bearer
policy_bundle_path: ./policies/
catalog_path: ./catalog.json
listen_addr não é opcional aqui. CMCP_DEV_MODE=1 deliberadamente ignora o requisito de token bearer para que você possa testar rapidamente, e o bind padrão ainda é 0.0.0.0:8443. Na versão 0.3.0 essa combinação criava um gateway não autenticado em todas as interfaces da sua máquina. A partir da 0.4.0 isso é recusado: o modo dev sem token só pode fazer bind em endereço loopback, e um bind não-loopback exige CMCP_BEARER_TOKEN. Fixe listen_addr explicitamente e a configuração estará correta em ambos os casos.
Inicie o gateway:
CMCP_DEV_MODE=1 cmcp start --config cmcp-config.yaml
Faça uma chamada de ferramenta:
curl -X POST http://localhost:8443/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"salesforce.contacts","arguments":{"query":"Acme Corp"},"_cmcp":{"session_id":"s1","workflow_id":"demo-agent"}}}'
Prefere uma versão guiada? agentrust-io.com/quickstart percorre o mesmo caminho em cerca de dez minutos em um laptop, sem hardware e sem cadastro: instale, escreva uma regra Cedar forbid, veja uma chamada de ferramenta retornar 403 POLICY_DENY antes de chegar a um upstream e, em seguida, verifique o recibo assinado.
Consulte docs/quickstart.md para o passo a passo completo: política Cedar, catálogo de ferramentas, primeira Reivindicação TRACE e verificação (sem necessidade de TEE de hardware).
Como funciona
- O agente envia cada chamada de ferramenta ao Gateway cMCP em vez de diretamente aos servidores MCP.
- Na inicialização, o gateway mede o hash do pacote de políticas Cedar no relatório de atestação de hardware. Nenhum código é executado antes dessa medição.
- Cada chamada de ferramenta recebida é avaliada pelo mecanismo de políticas Cedar rodando dentro do TEE. O resultado é permitir, negar ou redigir. A chamada e sua decisão são anexadas à cadeia de auditoria selada por hardware.
- Ao final da sessão, o gateway produz uma Reivindicação TRACE: um artefato assinado e atestado por hardware que registra quais ferramentas foram executadas, qual política decidiu cada chamada e a cadeia de auditoria completa. Um verificador confere isso sem confiar no operador.
Agent -> cMCP Runtime -> Cedar Policy Engine (TEE) -> Tool
|
GatewayClaim (TRACE Profile)
+-- trace.eat_profile
+-- trace.runtime.platform + measurement
+-- trace.policy.bundle_hash
+-- trace.cnf.jwk (Ed25519 confirmation key)
+-- gateway.audit_chain (root/tip/length)
+-- signature (Ed25519 over canonical JSON)
Provedores de hardware
| Provedor | Plataforma | Garantia | Notas |
|---|---|---|---|
tpm | TPM 2.0 / vTPM (Azure, AWS, GCP Trusted Launch) | Média | Quote TPM local |
sev-snp | AMD SEV-SNP (Azure DCasv5, AWS C6a Nitro) | Alta | AMD KDS |
tdx | Intel TDX (Azure DCedsv5, GCP C3) | Alta | Intel PCS |
gpu-cc (v0.2) | NVIDIA H100/H200/Blackwell (modo CC) | Alta | NVIDIA Remote Attestation Service (NRAS) |
opaque (opt-in) | OPAQUE Confidential Runtime | n/d (ainda não implementado) | Placeholder: excluído da detecção automática; selecioná-lo explicitamente gera erro de não implementado |
Ordem de sondagem da detecção automática de provedor: azure-cvm -> tpm -> sev-snp -> tdx. O primeiro provedor cujo detect() for bem-sucedido é selecionado. opaque é um placeholder ainda não implementado: é excluído da detecção automática, e selecioná-lo explicitamente gera ATTESTATION_PROVIDER_NOT_IMPLEMENTED em vez de falhar silenciosamente. Se nenhum provedor de hardware for detectado, o gateway só inicia sob CMCP_DEV_MODE=1 (um fallback somente por software sem atestação) e, caso contrário, recusa-se a iniciar.
from cmcp_runtime.config import TEEProvider
# Detecção automática (padrão)
# attestation.provider: auto -> azure-cvm -> tpm -> sev-snp -> tdx
# (somente por software é usado apenas sob CMCP_DEV_MODE=1)
# Seleção explícita de hardware
# attestation.provider: sev-snp
# OPAQUE Managed Runtime (somente opt-in; ainda não implementado)
# OPAQUE_ATTESTATION_URL=https://... cmcp start --config cmcp-config.yaml
Modos de aplicação
| Modo | Comportamento | Caso de uso |
|---|---|---|
enforcing | Negativas de política retornam HTTP 403; a chamada não é encaminhada | Produção |
advisory | Negativas de política são registradas; a chamada prossegue | Primeira implantação, ajuste de política |
silent | A política é avaliada, mas nada é registrado ou bloqueado | Baseline |
O padrão é enforcing. Defina enforcement_mode: advisory em cmcp-config.yaml para usar o modo advisory.
Configuração
Referência completa de cmcp-config.yaml:
attestation:
provider: auto # auto | tpm | sev-snp | tdx | opaque | software-only
enforcement_mode: enforcing # enforcing | advisory | silent
validity_seconds: 86400 # janela de frescor da atestação (padrão: 24 horas)
staleness_policy: fail_closed # fail_closed | warn_only
expected_measurement: ~ # fixe um PCR/measurement específico (opcional)
policy_bundle_path: policies/ # diretório contendo arquivos .cedar e manifest.json
catalog_path: catalog.json # catálogo de ferramentas aprovadas
listen_addr: "127.0.0.1:8443" # o modo dev sem token é somente loopback; defina CMCP_BEARER_TOKEN antes de fazer bind em um escopo maior
max_response_size_bytes: 2097152 # padrão de 2 MB
policy_reload_interval_seconds: 0 # >0 com CMCP_POLICY_HASH fixado recusa iniciar, consulte docs/spec/policy-hot-reload.md
Variáveis de ambiente:
| Variável | Efeito |
|---|---|
CMCP_DEV_MODE=1 | Usa o provedor TEE somente por software; sem necessidade de hardware |
CMCP_BEARER_TOKEN | Exige este token bearer em todas as requisições recebidas |
OPAQUE_ATTESTATION_URL | Habilita a atestação OPAQUE Managed Runtime (opt-in explícito) |
Referência da CLI
| Comando | Flags | Descrição |
|---|---|---|
cmcp start | --config PATH (obrigatório) | Inicia o gateway |
cmcp validate-config | --config PATH (obrigatório) | Valida cmcp-config.yaml sem iniciar |
cmcp validate-bundle | --bundle-path PATH (obrigatório), --expected-hash sha256:<hex> (obrigatório) | Verifica o hash de um pacote Cedar antes da implantação |
cmcp verify | CLAIM_FILE (obrigatório); --policy-hash, --catalog-hash, --max-age, --trusted-key, --trusted-tpm-ca, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchor | Verifica uma Reivindicação TRACE assinada (assinatura, esquema, frescor, cadeia de auditoria, hashes fixados e âncoras de confiança) |
Reivindicações TRACE
Uma GatewayClaim é a unidade de prova entregue a um auditor, regulador ou verificador downstream. É produzida por sessão (ou por chamada, configurável) e assinada com uma chave que nunca sai do TEE.
| Campo | Descrição |
|---|---|
trace.eat_profile | URI do perfil EAT: tag:agentrust-io.com,2026:trace-v0.2 |
trace.runtime | Plataforma TEE e measurement de hardware registrados na inicialização do enclave |
trace.policy.bundle_hash | SHA-256 do pacote Cedar carregado na inicialização; alterar qualquer arquivo de política altera este valor |
trace.cnf.jwk | Chave pública Ed25519 vinculada à chave de assinatura do TEE |
trace.tool_transcript | Visão por chamada derivada da cadeia de auditoria: hash (vincula-se ao topo da cadeia de auditoria), call_count e entries que preservam privacidade (nome da ferramenta, classe de dados, decisão) |
gateway.audit_chain | Log de auditoria com encadeamento por hash, raiz e topo; verificável sem reproduzir entradas individuais |
signature | Ed25519 sobre o JSON canônico do corpo completo da reivindicação (RFC 8785) |
(Esta tabela é um resumo dos campos mais utilizados.)
A verificação com a biblioteca cmcp_verify não exige confiar no operador. O verificador confere a assinatura contra a chave vinculada ao TEE, o hash do pacote de políticas contra o valor aprovado e a cadeia de auditoria quanto à consistência interna.
O esquema normativo é schemas/trace-claim.schema.json, e docs/quickstart.md mostra um exemplo completo. Consulte docs/spec/verification-library.md e a especificação TRACE para o protocolo completo de verificação.
Alinhamento com normas
| Norma | Cobertura |
|---|---|
| OWASP Agentic AI Top 10 | MCP10 (vazamento de dados via chamadas de ferramentas), MCP02 (ferramentas não autorizadas), MCP08 (governança comprovável), MCP04 (cadeia de suprimentos) |
| NIST SP 800-207 | Ponto de decisão de política dentro do TEE; sem confiança implícita na identidade da carga de trabalho |
| EU AI Act Art. 12, 15 | Registros de auditoria por decisão (Art. 12); controles de cibersegurança com suporte TEE (Art. 15) |
| DORA Art. 9 | Cadeia de atestação; retenção de logs de auditoria via gateway.audit_chain |
| RATS/EAT RFC 9711 | GatewayClaim é um EAT; o campo eat_profile identifica o perfil TRACE |
Segurança
| Ferramenta | O que verifica |
|---|---|
| ruff | Lint de estilo e imports em cada PR |
| bandit | Lint de segurança Python em cada PR |
| pip-audit | Varredura de vulnerabilidades de dependências em cada PR |
| mypy | Verificação estática de tipos em cada PR |
| CodeQL | SAST Python, consultas security-extended, semanal |
| OpenSSF Scorecard | Pontuação semanal, upload SARIF |
Consulte SECURITY.md para relato de vulnerabilidades e SLAs de resposta. Consulte LIMITATIONS.md para limites explícitos de escopo, incluindo riscos residuais de captura de payload APM, injeção de configuração em runtime e cadeia de suprimentos P4.1 (typosquat) que a Fase 1 não elimina.
Documentação
| Página | Descrição |
|---|---|
| docs/quickstart.md | Do zero à primeira Reivindicação TRACE em menos de 30 minutos |
| docs/configuration.md | Referência completa de configuração com todos os campos e padrões |
| docs/SPEC.md | Especificação do produto: taxonomia de problemas, arquitetura, matriz de cobertura |
| docs/spec/threat-model.md | Análise STRIDE, modelo de adversário, riscos residuais |
| docs/spec/cedar-policy.md | Referência da linguagem de políticas Cedar e esquema |
| docs/testing/benchmarks.md | Benchmarks de latência e throughput por provedor TEE |
FAQ
O que é cMCP?
cMCP (Runtime MCP Confidencial) é um gateway de código aberto que aplica a política de chamadas de ferramentas MCP dentro de um Ambiente de Execução Confiável de hardware. Ele intercepta cada chamada de ferramenta, avalia contra um pacote de políticas Cedar, aplica a decisão (permitir, negar ou redigir) e registra a chamada em uma cadeia de auditoria selada por hardware.
Como o cMCP difere da governança MCP somente por software?
A governança somente por software roda o mecanismo de política no mesmo SO que um operador ou uma CVE na cadeia de suprimentos pode alcançar, portanto não pode provar que a política executada era a aprovada ou que a decisão não foi alterada em memória. O cMCP roda o mecanismo de política dentro de um TEE e mede o hash do pacote Cedar no relatório de atestação de hardware antes que qualquer código seja executado, de modo que o plano de controle não pode ser alcançado pelo processo que governa.
Preciso de hardware especial para testar?
Não. Defina CMCP_DEV_MODE=1 para usar o provedor TEE somente por software e execute o início rápido completo sem um TEE de hardware. Os provedores de hardware (TPM, AMD SEV-SNP, Intel TDX, OPAQUE) são usados em produção.
O que é uma Reivindicação TRACE?
Uma Reivindicação TRACE (uma GatewayClaim) é um artefato assinado e atestado por hardware produzido por sessão. Registra quais ferramentas foram executadas, qual política decidiu cada chamada, o hash do pacote Cedar e a cadeia de auditoria, e é assinada com uma chave Ed25519 que nunca sai do TEE. Um verificador a confere com a biblioteca cmcp_verify sem confiar no operador.
Quais provedores TEE são suportados?
TPM 2.0 / vTPM, AMD SEV-SNP e Intel TDX, com computação confidencial em GPU NVIDIA planejada para a v0.2 e OPAQUE Confidential Runtime disponível como opt-in explícito. A ordem de detecção automática é Azure confidential VM, depois TPM 2.0 / vTPM, depois AMD SEV-SNP, depois Intel TDX; o provedor somente por software é usado apenas sob CMCP_DEV_MODE=1.
Sob qual licença o cMCP está?
MIT.
Contribuindo
CONTRIBUTING.md · GOVERNANCE.md · Discussões
Junte-se à comunidade no Discord.
Usando cMCP em produção? Adicione sua organização ao ADOPTERS.md.
Licença
MIT - consulte LICENSE.