cMCP (Confidential MCP)

Gateway MCP confidencial que executa MCP dentro de um TEE (TPM, AMD SEV-SNP, Intel TDX, NVIDIA H100 CC, runtime OPAQUE), transportando a política Cedar para o enclave e emitindo registros de atestação TRACE assinados.

Documentação

cMCP

cMCP: Runtime Confidencial do MCP

Aplique a política de ferramentas do MCP dentro de um TEE, onde o agente que ela governa não consegue alcançá-lo

Documentation

Início Rápido · Arquitetura · Configuração · CLI · Changelog

CI License: MIT PyPI OpenSSF Scorecard Discord

Prévia para Desenvolvedores - lançado na Cúpula de Computação Confidencial, em 23 de junho de 2026. Pode haver mudanças que quebram compatibilidade antes da v1.0. Consulte STATUS.md para saber exatamente o que está disponível hoje versus o que está no roadmap.

cMCP (Runtime Confidencial do MCP) é a forma segura e confidencial de executar MCP: um gateway de código aberto que aplica a política de chamadas de ferramentas do 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 AgenTrust para isso.

Resumo - Aponte seu agente para o Gateway cMCP. Ele avalia cada chamada de ferramenta contra uma política Cedar dentro de um TEE, bloqueia ou edita o que a política nega e emite uma Reivindicação TRACE à prova de adulteração como prova. Execute pip install cmcp-runtime e 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 vazou?


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 de MCP apenas 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 sistema operacional que o administrador controla.
  • Que a decisão de permitir/negar não foi alterada na memória. Uma CVE na cadeia de suprimentos no avaliador roda no mesmo espaço de endereço que o atacante.
  • Que o log de auditoria reflete o que realmente aconteceu. Qualquer parte que detenha a chave de assinatura do software pode reconstruir uma cadeia de auditoria válida depois do fato.

O plano de controle que governa as chamadas de ferramentas deve rodar onde não possa ser alcançado pelo processo que governa.

Aplicação de política com atestação de hardware para chamadas de ferramentas do 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 de qualquer código rodar.

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 eases first-run tuning; the default is `enforcing`
listen_addr: "127.0.0.1:8443"  # pin loopback: dev mode runs without a bearer token
policy_bundle_path: ./policies/
catalog_path: ./catalog.json

listen_addr não é opcional aqui. CMCP_DEV_MODE=1 deliberadamente ignora o requisito de token de portador 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 de desenvolvimento sem token só pode fazer bind em um endereço de loopback, e um bind fora de 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

  1. O agente envia cada chamada de ferramenta para o Gateway cMCP em vez de diretamente para os servidores MCP.
  2. 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 roda antes dessa medição.
  3. Cada chamada de ferramenta recebida é avaliada pelo mecanismo de políticas Cedar rodando dentro do TEE. O resultado é permitir, negar ou editar. A chamada e sua decisão são anexadas à cadeia de auditoria selada por hardware.
  4. Ao final da sessão, o gateway produz uma Reivindicação TRACE: um artefato assinado e atestado por hardware que registra quais ferramentas rodaram, 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

ProvedorPlataformaGarantiaNotas
tpmTPM 2.0 / vTPM (Azure, AWS, GCP Trusted Launch)MédiaCitação TPM local
sev-snpAMD SEV-SNP (Azure DCasv5, AWS C6a Nitro)AltaAMD KDS
tdxIntel TDX (Azure DCedsv5, GCP C3)AltaIntel PCS
gpu-cc (v0.2)NVIDIA H100/H200/Blackwell (modo CC)AltaServiço de Atestação Remota NVIDIA (NRAS)
opaque (opt-in)Runtime Confidencial OPAQUEn/d (ainda não implementado)Placeholder: excluído da detecção automática; selecioná-lo explicitamente gera um erro de não implementado

Ordem de sondagem da detecção automática de provedores: 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 inicia apenas sob CMCP_DEV_MODE=1 (um fallback apenas por software, sem atestação) e, caso contrário, recusa-se a iniciar.

from cmcp_runtime.config import TEEProvider

# Auto-detect (default)
# attestation.provider: auto  ->  azure-cvm -> tpm -> sev-snp -> tdx
# (software-only is used only under CMCP_DEV_MODE=1)

# Explicit hardware selection
# attestation.provider: sev-snp

# OPAQUE Managed Runtime (opt-in only; not yet implemented)
# OPAQUE_ATTESTATION_URL=https://... cmcp start --config cmcp-config.yaml

Modos de aplicação

ModoComportamentoCaso de uso
enforcingNegativas de política retornam HTTP 403; a chamada não é encaminhadaProdução
advisoryNegativas de política são registradas; a chamada prosseguePrimeira implantação, ajuste de política
silentA política é avaliada, mas nada é registrado ou bloqueadoLinha de base

O padrão é enforcing. Defina enforcement_mode: advisory em cmcp-config.yaml para usar o modo consultivo.


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           # attestation freshness window (default: 24 hours)
  staleness_policy: fail_closed     # fail_closed | warn_only
  expected_measurement: ~           # pin a specific PCR/measurement (optional)

policy_bundle_path: policies/       # directory containing .cedar files and manifest.json
catalog_path: catalog.json          # approved tool catalog

listen_addr: "127.0.0.1:8443"     # tokenless dev mode is loopback-only; set CMCP_BEARER_TOKEN before binding wider
max_response_size_bytes: 2097152    # 2 MB default
policy_reload_interval_seconds: 0   # >0 with a pinned CMCP_POLICY_HASH refuses to start, see docs/spec/policy-hot-reload.md

Variáveis de ambiente:

VariávelEfeito
CMCP_DEV_MODE=1Usa provedor TEE apenas por software; sem necessidade de hardware
CMCP_BEARER_TOKENExige este token de portador em todas as solicitações recebidas
OPAQUE_ATTESTATION_URLHabilita atestação do Runtime Gerenciado OPAQUE (opt-in explícito)

Referência da CLI

ComandoFlagsDescriçã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 um hash de pacote Cedar antes da implantação
cmcp verifyCLAIM_FILE (obrigatório); --policy-hash, --catalog-hash, --max-age, --trusted-key, --trusted-tpm-ca, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchorVerifica uma Reivindicação TRACE assinada (assinatura, esquema, atualidade, 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.

CampoDescrição
trace.eat_profileURI do perfil EAT: tag:agentrust-io.com,2026:trace-v0.2
trace.runtimePlataforma TEE e medição de hardware registradas na inicialização do enclave
trace.policy.bundle_hashSHA-256 do pacote Cedar carregado na inicialização; alterar qualquer arquivo de política muda este valor
trace.cnf.jwkChave pública Ed25519 vinculada à chave de assinatura do TEE
trace.tool_transcriptVisão por chamada derivada da cadeia de auditoria: hash (vincula-se ao topo da cadeia de auditoria), call_count e entries que preserva privacidade (nome da ferramenta, classe de dados, decisão)
gateway.audit_chainRaiz e topo do log de auditoria com encadeamento por hash; verificável sem reproduzir entradas individuais
signatureEd25519 sobre JSON canônico do corpo completo da reivindicação (RFC 8785)

(Esta tabela é um resumo dos campos mais usados.)

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

NormaCobertura
OWASP Agentic AI Top 10MCP10 (vazamento de dados via chamadas de ferramentas), MCP02 (ferramentas não autorizadas), MCP08 (governança comprovável), MCP04 (cadeia de suprimentos)
NIST SP 800-207Ponto 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, 15Registros de auditoria por decisão (Art. 12); controles de cibersegurança com suporte TEE (Art. 15)
DORA Art. 9Cadeia de atestação; retenção de logs de auditoria via gateway.audit_chain
RATS/EAT RFC 9711GatewayClaim é um EAT; o campo eat_profile identifica o perfil TRACE

Segurança

FerramentaO que verifica
ruffLint de estilo e importações em todo PR
banditLint de segurança Python em todo PR
pip-auditVarredura de vulnerabilidades de dependências em todo PR
mypyVerificação estática de tipos em todo PR
CodeQLSAST Python, consultas de segurança estendidas, semanal
OpenSSF ScorecardPontuaçã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 resolve.


Documentação

PáginaDescrição
docs/quickstart.mdDo zero à primeira Reivindicação TRACE em menos de 30 minutos
docs/configuration.mdReferência completa de configuração com todos os campos e padrões
docs/SPEC.mdEspecificação do produto: taxonomia de problemas, arquitetura, matriz de cobertura
docs/spec/threat-model.mdAnálise STRIDE, modelo de adversário, riscos residuais
docs/spec/cedar-policy.mdReferência da linguagem de políticas Cedar e esquema
docs/testing/benchmarks.mdBenchmarks de latência e throughput por provedor TEE

FAQ

O que é cMCP?

cMCP (Runtime Confidencial do MCP) é um gateway de código aberto que aplica a política de chamadas de ferramentas do 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 editar) e registra a chamada em uma cadeia de auditoria selada por hardware.

Como o cMCP é diferente da governança de MCP apenas por software?

Governança somente por software executa o mecanismo de políticas no mesmo sistema operacional que um operador ou um CVE da cadeia de suprimentos pode alcançar, portanto não consegue provar que a política executada era a aprovada ou que a decisão não foi alterada na memória. O cMCP executa o mecanismo de políticas dentro de um TEE e mede o hash do pacote Cedar no relatório de atestação de hardware antes de qualquer código ser executado, de modo que o plano de controle não pode ser alcançado pelo processo que ele governa.

Preciso de hardware especial para experimentar?

Não. Defina CMCP_DEV_MODE=1 para usar o provedor de TEE somente por software e execute o quickstart completo sem um TEE de hardware. Provedores de hardware (TPM, AMD SEV-SNP, Intel TDX, OPAQUE) são usados em produção.

O que é uma TRACE Claim?

Uma TRACE Claim (uma GatewayClaim) é um artefato assinado e atestado por hardware, produzido por sessão. Ela 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 valida com a biblioteca cmcp_verify sem confiar no operador.

Quais provedores de 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 o OPAQUE Confidential Runtime disponível como opção explícita. A ordem de detecção automática é: VM confidencial do Azure, 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 o cMCP em produção? Adicione sua organização a ADOPTERS.md.


Licença

MIT - veja LICENSE.