
cMCP: Puerta de enlace MCP confidencial. Aplicación de políticas atestiguada por hardware para llamadas a herramientas MCP.
Inicio rápido · Arquitectura · Configuración · CLI · Registro de cambios
Vista previa para desarrolladores - lanzado en la Cumbre de Computación Confidencial, 23 de junio de 2026. Puede tener cambios disruptivos antes de v1.0. Consulta STATUS.md para saber exactamente qué se incluye hoy frente a lo que está en la hoja de ruta.
cMCP (Runtime MCP Confidencial) es la forma segura y confidencial de ejecutar MCP: una puerta de enlace de código abierto que aplica la política de llamadas a herramientas MCP dentro de un Entorno de Ejecución Confiable (TEE) de hardware. Cada llamada a una herramienta es interceptada, evaluada contra un paquete de políticas Cedar y aplicada donde el proceso que gobierna no puede alcanzarla. Cada sesión produce una Reclamación TRACE firmada que un verificador comprueba sin confiar en el operador, con atestación de hardware cuando la puerta de enlace se ejecuta en un TEE y solo firmada en modo software. Si buscas una versión segura de MCP, este es el runtime de AgenTrust para ello.
En resumen - Apunta tu agente a la Puerta de Enlace cMCP. Evalúa cada llamada a una herramienta contra una política Cedar dentro de un TEE, bloquea o redacta lo que la política deniega y emite una Reclamación TRACE a prueba de manipulaciones como prueba. Ejecuta
pip install cmcp-runtimey comienza en modo software sin necesidad de hardware.
Tu agente llama a Snowflake, Salesforce, una docena de APIs. ¿Qué impide que filtre los datos de un cliente en una de esas llamadas? Si un regulador lo pregunta, ¿podrías demostrar que no ocurrió?
Un agente llama a una herramienta. El motor de políticas dice permitir. La llamada a la herramienta se realiza.
Nada de eso demuestra que el propio motor de políticas no estuviera comprometido. La gobernanza de MCP solo por software no puede garantizar:
El plano de control que gobierna las llamadas a herramientas debe ejecutarse donde no pueda ser alcanzado por el proceso que gobierna.
Aplicación de políticas con atestación de hardware para llamadas a herramientas MCP. Cada llamada a una herramienta es interceptada, evaluada contra un paquete de políticas Cedar y aplicada por un motor de políticas que se ejecuta dentro de un Entorno de Ejecución Confiable (TEE). El hash del paquete de políticas se mide en el informe de atestación de hardware antes de que se ejecute cualquier código.
A diferencia de las soluciones de conectividad basadas en túneles, el Runtime cMCP procesa los payloads de llamadas a herramientas dentro del TEE. El proveedor de conectividad ve texto cifrado, no texto plano. Lo único que sale del enclave es la reclamación TRACE firmada.
pip install cmcp-runtime
Crea cmcp-config.yaml:
attestation:
provider: auto
enforcement_mode: advisory # advisory facilita el ajuste inicial; el valor predeterminado es `enforcing`
listen_addr: "127.0.0.1:8443" # fija loopback: el modo dev se ejecuta sin token bearer
policy_bundle_path: ./policies/
catalog_path: ./catalog.json
listen_addr no es opcional aquí. CMCP_DEV_MODE=1 omite deliberadamente el requisito del token bearer para que puedas probar rápidamente, y el enlace predeterminado sigue siendo 0.0.0.0:8443. En 0.3.0 esa combinación levantaba una puerta de enlace no autenticada en todas las interfaces de tu máquina. Desde 0.4.0 se rechaza: el modo dev sin token solo puede enlazar una dirección de loopback, y un enlace no-loopback requiere CMCP_BEARER_TOKEN. Fija listen_addr explícitamente y la configuración será correcta en ambos casos.
Inicia la puerta de enlace:
CMCP_DEV_MODE=1 cmcp start --config cmcp-config.yaml
Haz una llamada a una herramienta:
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"}}}'
¿Prefieres una versión guiada? agentrust-io.com/quickstart recorre el mismo camino en unos diez minutos en un portátil, sin hardware y sin registro: instala, escribe una regla Cedar forbid, observa cómo una llamada a una herramienta devuelve 403 POLICY_DENY antes de llegar a un upstream y luego verifica el recibo firmado.
Consulta docs/quickstart.md para el tutorial completo: política Cedar, catálogo de herramientas, primera Reclamación TRACE y verificación (sin necesidad de TEE de hardware).
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)
Orden de sondeo de detección automática de proveedores: azure-cvm -> tpm -> sev-snp -> tdx. Se selecciona el primer proveedor cuyo detect() tenga éxito. opaque es un marcador de posición aún no implementado: está excluido de la detección automática y seleccionarlo explícitamente genera ATTESTATION_PROVIDER_NOT_IMPLEMENTED en lugar de fallar silenciosamente. Si no se detecta ningún proveedor de hardware, la puerta de enlace solo se inicia bajo CMCP_DEV_MODE=1 (un respaldo solo de software sin atestación) y, de lo contrario, se niega a iniciarse.
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
| Modo | Comportamiento | Caso de uso |
|---|
El valor predeterminado es enforcing. Establece enforcement_mode: advisory en cmcp-config.yaml para usar el modo advisory.
Referencia 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 # ventana de frescura de la atestación (predeterminado: 24 horas)
staleness_policy: fail_closed # fail_closed | warn_only
expected_measurement: ~ # fija un PCR/medición específico (opcional)
policy_bundle_path: policies/ # directorio que contiene archivos .cedar y manifest.json
catalog_path: catalog.json # catálogo de herramientas aprobadas
listen_addr: "127.0.0.1:8443" # el modo dev sin token es solo-loopback; establece CMCP_BEARER_TOKEN antes de enlazar más amplio
max_response_size_bytes: 2097152 # 2 MB predeterminado
policy_reload_interval_seconds: 0 # >0 con CMCP_POLICY_HASH fijado se niega a iniciar, consulta docs/spec/policy-hot-reload.md
Variables de entorno:
| Variable | Efecto |
|---|---|
CMCP_DEV_MODE=1 | Usa el proveedor TEE solo de software; no requiere hardware |
CMCP_BEARER_TOKEN | Exige este token bearer en todas las solicitudes entrantes |
OPAQUE_ATTESTATION_URL | Habilita la atestación del Runtime Gestionado OPAQUE (opt-in explícito) |
Una GatewayClaim es la unidad de prueba entregada a un auditor, regulador o verificador downstream. Se produce por sesión (o por llamada, configurable) y se firma con una clave que nunca sale del TEE.
(Esta tabla es un resumen de los campos más utilizados.)
La verificación con la biblioteca cmcp_verify no requiere confiar en el operador. El verificador comprueba la firma contra la clave vinculada al TEE, el hash del paquete de políticas contra el valor aprobado y la cadena de auditoría para verificar su consistencia interna.
El esquema normativo es schemas/trace-claim.schema.json, y docs/quickstart.md muestra un ejemplo completo. Consulta docs/spec/verification-library.md y la especificación TRACE para el protocolo de verificación completo.
Consulta SECURITY.md para la notificación de vulnerabilidades y los SLA de respuesta. Consulta LIMITATIONS.md para conocer los límites explícitos del alcance, incluidos los riesgos residuales de captura de payloads APM, inyección de configuración en tiempo de ejecución y cadena de suministro P4.1 (typosquat) que la Fase 1 no cierra.
cMCP (Runtime MCP Confidencial) es una puerta de enlace de código abierto que aplica la política de llamadas a herramientas MCP dentro de un Entorno de Ejecución Confiable de hardware. Intercepta cada llamada a una herramienta, la evalúa contra un paquete de políticas Cedar, aplica la decisión (permitir, denegar o redactar) y registra la llamada en una cadena de auditoría sellada por hardware.
La gobernanza solo por software ejecuta el motor de políticas en el mismo sistema operativo al que un operador o una CVE de la cadena de suministro puede acceder, por lo que no puede demostrar que la política ejecutada fuera la aprobada ni que la decisión no se alterara en memoria. cMCP ejecuta el motor de políticas dentro de un TEE y mide el hash del paquete Cedar en el informe de atestación de hardware antes de que se ejecute cualquier código, de modo que el plano de control no puede ser alcanzado por el proceso que gobierna.
No. Establece CMCP_DEV_MODE=1 para usar el proveedor TEE solo de software y ejecutar el inicio rápido completo sin un TEE de hardware. Los proveedores de hardware (TPM, AMD SEV-SNP, Intel TDX, OPAQUE) se usan en producción.
Una Reclamación TRACE (una GatewayClaim) es un artefacto firmado y atestado por hardware producido por sesión. Registra qué herramientas se ejecutaron, qué política decidió cada llamada, el hash del paquete Cedar y la cadena de auditoría, y se firma con una clave Ed25519 que nunca sale del TEE. Un verificador la comprueba con la biblioteca cmcp_verify sin confiar en el operador.
TPM 2.0 / vTPM, AMD SEV-SNP e Intel TDX, con computación confidencial de GPU NVIDIA planificada para v0.2 y Runtime Confidencial OPAQUE disponible como opt-in explícito. El orden de detección automática es VM confidencial de Azure, luego TPM 2.0 / vTPM, luego AMD SEV-SNP, luego Intel TDX; el proveedor solo de software se usa únicamente bajo CMCP_DEV_MODE=1.
MIT.
CONTRIBUTING.md · GOVERNANCE.md · Discusiones
Únete a la comunidad en Discord.
¿Usas cMCP en producción? Añade tu organización a ADOPTERS.md.
MIT - consulta LICENSE.
| Proveedor | Plataforma | Garantía | Notas |
|---|
tpm | TPM 2.0 / vTPM (Azure, AWS, GCP Trusted Launch) | Media | Cita 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 | Servicio de Atestación Remota de NVIDIA (NRAS) |
opaque (opt-in) | Runtime Confidencial OPAQUE | n/d (aún no implementado) | Marcador de posición: excluido de la detección automática; seleccionarlo explícitamente genera un error de no implementado |
enforcing | Las denegaciones de políticas devuelven HTTP 403; la llamada no se reenvía | Producción |
advisory | Las denegaciones de políticas se registran; la llamada continúa | Primer despliegue, ajuste de políticas |
silent | La política se evalúa pero no se registra ni bloquea nada | Establecimiento de línea base |
| Comando | Banderas | Descripción |
|---|
cmcp start | --config PATH (obligatorio) | Inicia la puerta de enlace |
cmcp validate-config | --config PATH (obligatorio) | Valida cmcp-config.yaml sin iniciar |
cmcp validate-bundle | --bundle-path PATH (obligatorio), --expected-hash sha256:<hex> (obligatorio) | Verifica un hash de paquete Cedar antes del despliegue |
cmcp verify | CLAIM_FILE (obligatorio); --policy-hash, --catalog-hash, --max-age, --trusted-key, --trusted-tpm-ca, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchor | Verifica una Reclamación TRACE firmada (firma, esquema, frescura, cadena de auditoría, hashes fijados y anclas de confianza) |
| Campo | Descripción |
|---|
trace.eat_profile | URI de perfil EAT: tag:agentrust-io.com,2026:trace-v0.2 |
trace.runtime | Plataforma TEE y medición de hardware registradas en el arranque del enclave |
trace.policy.bundle_hash | SHA-256 del paquete Cedar cargado al iniciar; cambiar cualquier archivo de política cambia este valor |
trace.cnf.jwk | Clave pública Ed25519 vinculada a la clave de firma del TEE |
trace.tool_transcript | Vista por llamada derivada de la cadena de auditoría: hash (vincula a la punta de la cadena de auditoría), call_count y entries que preservan la privacidad (nombre de la herramienta, clase de datos, decisión) |
gateway.audit_chain | Raíz y punta del registro de auditoría encadenado por hash; verificable sin reproducir entradas individuales |
signature | Ed25519 sobre JSON canónico del cuerpo completo de la reclamación (RFC 8785) |
| Estándar | Cobertura |
|---|
| OWASP Agentic AI Top 10 | MCP10 (fuga de datos mediante llamadas a herramientas), MCP02 (herramientas no autorizadas), MCP08 (gobernanza demostrable), MCP04 (cadena de suministro) |
| NIST SP 800-207 | Punto de decisión de políticas dentro del TEE; sin confianza implícita en la identidad de la carga de trabajo |
| EU AI Act Art. 12, 15 | Registros de auditoría por decisión (Art. 12); controles de ciberseguridad respaldados por TEE (Art. 15) |
| DORA Art. 9 | Cadena de atestación; retención de registros de auditoría mediante gateway.audit_chain |
| RATS/EAT RFC 9711 | GatewayClaim es un EAT; el campo eat_profile identifica el perfil TRACE |
| Herramienta | Qué comprueba |
|---|
| ruff | Linting de estilo e importaciones en cada PR |
| bandit | Linting de seguridad de Python en cada PR |
| pip-audit | Escaneo de vulnerabilidades de dependencias en cada PR |
| mypy | Comprobación estática de tipos en cada PR |
| CodeQL | SAST de Python, consultas de seguridad extendidas, semanal |
| OpenSSF Scorecard | Puntuación semanal, carga SARIF |
| Página | Descripción |
|---|
| docs/quickstart.md | De cero a la primera Reclamación TRACE en menos de 30 minutos |
| docs/configuration.md | Referencia completa de configuración con todos los campos y valores predeterminados |
| docs/SPEC.md | Especificación del producto: taxonomía de problemas, arquitectura, matriz de cobertura |
| docs/spec/threat-model.md | Análisis STRIDE, modelo de adversario, riesgos residuales |
| docs/spec/cedar-policy.md | Referencia del lenguaje de políticas Cedar y esquema |
| docs/testing/benchmarks.md | Puntos de referencia de latencia y rendimiento por proveedor TEE |