
cMCP : Passerelle MCP confidentielle. Application de politiques attestée par le matériel pour les appels d'outils MCP.
Démarrage rapide · Architecture · Configuration · CLI · Journal des modifications
Aperçu pour développeurs - lancé au Confidential Computing Summit, le 23 juin 2026. Des changements cassants sont possibles avant la v1.0. Consultez STATUS.md pour savoir exactement ce qui est livré aujourd'hui par rapport à la feuille de route.
cMCP (Runtime MCP confidentiel) est la manière sécurisée et confidentielle d'exécuter MCP : une passerelle open source qui applique la politique des appels d'outils MCP à l'intérieur d'un environnement d'exécution de confiance (TEE) matériel. Chaque appel d'outil est intercepté, évalué par rapport à un ensemble de politiques Cedar, et appliqué là où le processus qu'il régit ne peut pas l'atteindre. Chaque session produit une revendication TRACE signée qu'un vérificateur contrôle sans faire confiance à l'opérateur, attestée par le matériel lorsque la passerelle s'exécute dans une TEE et uniquement signée en mode logiciel. Si vous recherchez une version sécurisée de MCP, c'est le runtime AgenTrust qu'il vous faut.
TL;DR - Pointez votre agent vers la passerelle cMCP. Elle évalue chaque appel d'outil par rapport à une politique Cedar dans une TEE, bloque ou masque ce que la politique refuse, et émet une revendication TRACE infalsifiable comme preuve. Exécutez
pip install cmcp-runtimeet démarrez en mode logiciel sans aucun matériel requis.
Votre agent appelle Snowflake, Salesforce, une douzaine d'API. Qu'est-ce qui l'empêche de divulguer les données d'un client lors de l'un de ces appels ? Si un régulateur le demande, pourriez-vous prouver que cela n'est pas arrivé ?
Un agent appelle un outil. Le moteur de politique dit autoriser. L'appel d'outil passe.
Rien de tout cela ne prouve que le moteur de politique lui-même n'a pas été compromis. Une gouvernance MCP uniquement logicielle ne peut pas garantir :
Le plan de contrôle qui régit les appels d'outils doit s'exécuter là où il ne peut pas être atteint par le processus qu'il régit.
Application de politique attestée par le matériel pour les appels d'outils MCP. Chaque appel d'outil est intercepté, évalué par rapport à un ensemble de politiques Cedar, et appliqué par un moteur de politique s'exécutant à l'intérieur d'un environnement d'exécution de confiance (TEE). Le hachage de l'ensemble de politiques Cedar est mesuré dans le rapport d'attestation matérielle avant que tout code ne s'exécute.
Contrairement aux solutions de connectivité basées sur des tunnels, le runtime cMCP traite les charges utiles des appels d'outils à l'intérieur de la TEE. Le fournisseur de connectivité voit du texte chiffré, pas du texte clair. La seule chose qui quitte l'enclave est la revendication TRACE signée.
pip install cmcp-runtime
Créez cmcp-config.yaml :
attestation:
provider: auto
enforcement_mode: advisory # advisory facilite le réglage initial ; la valeur par défaut est `enforcing`
listen_addr: "127.0.0.1:8443" # épinglez loopback : le mode dev s'exécute sans jeton porteur
policy_bundle_path: ./policies/
catalog_path: ./catalog.json
listen_addr n'est pas facultatif ici. CMCP_DEV_MODE=1 ignore délibérément l'exigence de jeton porteur pour que vous puissiez essayer rapidement, et la liaison par défaut reste 0.0.0.0:8443. Sur 0.3.0, cette combinaison a mis en place une passerelle non authentifiée sur toutes les interfaces de votre machine. À partir de 0.4.0, elle est refusée : le mode dev sans jeton ne peut lier qu'une adresse loopback, et une liaison non-loopback exige CMCP_BEARER_TOKEN. Épinglez listen_addr explicitement et la configuration est correcte dans les deux cas.
Démarrez la passerelle :
CMCP_DEV_MODE=1 cmcp start --config cmcp-config.yaml
Effectuez un appel d'outil :
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"}}}'
Vous préférez une version guidée ? agentrust-io.com/quickstart suit le même parcours en environ dix minutes sur un ordinateur portable, sans matériel et sans inscription : installez, écrivez une règle Cedar forbid, observez un appel d'outil renvoyer 403 POLICY_DENY avant d'atteindre un amont, puis vérifiez le reçu signé.
Consultez docs/quickstart.md pour la procédure complète : politique Cedar, catalogue d'outils, première revendication TRACE et vérification (aucune TEE matérielle requise).
Agent -> cMCP Runtime -> Moteur de politique Cedar (TEE) -> Outil
|
GatewayClaim (profil TRACE)
+-- trace.eat_profile
+-- trace.runtime.platform + measurement
+-- trace.policy.bundle_hash
+-- trace.cnf.jwk (clé de confirmation Ed25519)
+-- gateway.audit_chain (racine/extrémité/longueur)
+-- signature (Ed25519 sur JSON canonique)
| Fournisseur | Plateforme | Assurance | Remarques |
|---|---|---|---|
tpm | TPM 2.0 / vTPM (Azure, AWS, GCP Trusted Launch) | Moyenne | Citation TPM locale |
sev-snp | AMD SEV-SNP (Azure DCasv5, AWS C6a Nitro) | Élevée | AMD KDS |
tdx | Intel TDX (Azure DCedsv5, GCP C3) | Élevée | Intel PCS |
gpu-cc (v0.2) | NVIDIA H100/H200/Blackwell (mode CC) | Élevée | NVIDIA Remote Attestation Service (NRAS) |
opaque (opt-in) | OPAQUE Confidential Runtime | n/d (pas encore implémenté) | Espace réservé : exclu de la détection automatique ; le sélectionner explicitement lève une erreur non implémentée |
Ordre de sondage de la détection automatique des fournisseurs : azure-cvm -> tpm -> sev-snp -> tdx. Le premier fournisseur dont detect() réussit est sélectionné. opaque est un espace réservé non encore implémenté : il est exclu de la détection automatique, et le sélectionner explicitement lève ATTESTATION_PROVIDER_NOT_IMPLEMENTED plutôt que de passer silencieusement. Si aucun fournisseur matériel n'est détecté, la passerelle ne démarre que sous CMCP_DEV_MODE=1 (un repli uniquement logiciel non attesté) et refuse sinon de démarrer.
from cmcp_runtime.config import TEEProvider
# Détection automatique (par défaut)
# attestation.provider: auto -> azure-cvm -> tpm -> sev-snp -> tdx
# (le mode uniquement logiciel n'est utilisé que sous CMCP_DEV_MODE=1)
# Sélection matérielle explicite
# attestation.provider: sev-snp
# OPAQUE Managed Runtime (opt-in uniquement ; pas encore implémenté)
# OPAQUE_ATTESTATION_URL=https://... cmcp start --config cmcp-config.yaml
| Mode | Comportement | Cas d'utilisation |
|---|---|---|
enforcing | Les refus de politique renvoient HTTP 403 ; l'appel n'est pas transmis | Production |
advisory | Les refus de politique sont journalisés ; l'appel se poursuit | Premier déploiement, réglage de la politique |
silent | La politique est évaluée mais rien n'est journalisé ni bloqué | Établissement de la base de référence |
La valeur par défaut est enforcing. Définissez enforcement_mode: advisory dans cmcp-config.yaml pour utiliser le mode consultatif.
Référence complète de cmcp-config.yaml :
attestation:
provider: auto # auto | tpm | sev-snp | tdx | opaque | software-only
enforcement_mode: enforcing # enforcing | advisory | silent
validity_seconds: 86400 # fenêtre de fraîcheur de l'attestation (défaut : 24 heures)
staleness_policy: fail_closed # fail_closed | warn_only
expected_measurement: ~ # épinglez une PCR/mesure spécifique (facultatif)
policy_bundle_path: policies/ # répertoire contenant les fichiers .cedar et manifest.json
catalog_path: catalog.json # catalogue d'outils approuvés
listen_addr: "127.0.0.1:8443" # le mode dev sans jeton est limité à loopback ; définissez CMCP_BEARER_TOKEN avant de lier plus large
max_response_size_bytes: 2097152 # 2 Mo par défaut
policy_reload_interval_seconds: 0 # >0 avec un CMCP_POLICY_HASH épinglé refuse de démarrer, voir docs/spec/policy-hot-reload.md
Variables d'environnement :
| Variable | Effet |
|---|---|
CMCP_DEV_MODE=1 | Utilise le fournisseur TEE uniquement logiciel ; aucun matériel requis |
CMCP_BEARER_TOKEN | Exige ce jeton porteur sur toutes les requêtes entrantes |
OPAQUE_ATTESTATION_URL | Active l'attestation OPAQUE Managed Runtime (opt-in explicite) |
| Commande | Options | Description |
|---|---|---|
cmcp start | --config PATH (requis) | Démarre la passerelle |
cmcp validate-config | --config PATH (requis) | Valide cmcp-config.yaml sans démarrer |
cmcp validate-bundle | --bundle-path PATH (requis), --expected-hash sha256:<hex> (requis) | Vérifie un hachage d'ensemble Cedar avant le déploiement |
cmcp verify | CLAIM_FILE (requis) ; --policy-hash, --catalog-hash, --max-age, --trusted-key, --trusted-tpm-ca, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchor | Vérifie une revendication TRACE signée (signature, schéma, fraîcheur, chaîne d'audit, hachages épinglés et ancres de confiance) |
Une GatewayClaim est l'unité de preuve remise à un auditeur, un régulateur ou un vérificateur en aval. Elle est produite par session (ou par appel, configurable) et signée avec une clé qui ne quitte jamais la TEE.
| Champ | Description |
|---|---|
trace.eat_profile | URI du profil EAT : tag:agentrust-io.com,2026:trace-v0.2 |
trace.runtime | Plateforme TEE et mesure matérielle enregistrées au démarrage de l'enclave |
trace.policy.bundle_hash | SHA-256 de l'ensemble Cedar chargé au démarrage ; modifier un fichier de politique change cette valeur |
trace.cnf.jwk | Clé publique Ed25519 liée à la clé de signature de la TEE |
trace.tool_transcript | Vue par appel dérivée de la chaîne d'audit : hash (lie à l'extrémité de la chaîne d'audit), call_count et entries préservant la confidentialité (nom de l'outil, classe de données, décision) |
gateway.audit_chain | Journal d'audit chaîné par hachage, racine et extrémité ; vérifiable sans rejouer les entrées individuelles |
signature | Ed25519 sur le JSON canonique du corps complet de la revendication (RFC 8785) |
(Ce tableau est un résumé des champs les plus utilisés.)
La vérification avec la bibliothèque cmcp_verify ne nécessite pas de faire confiance à l'opérateur. Le vérificateur contrôle la signature par rapport à la clé liée à la TEE, le hachage de l'ensemble de politiques par rapport à la valeur approuvée, et la chaîne d'audit pour sa cohérence interne.
Le schéma normatif est schemas/trace-claim.schema.json, et docs/quickstart.md montre un exemple complet. Consultez docs/spec/verification-library.md et la spécification TRACE pour le protocole de vérification complet.
| Norme | Couverture |
|---|---|
| OWASP Agentic AI Top 10 | MCP10 (fuite de données via les appels d'outils), MCP02 (outils non autorisés), MCP08 (gouvernance prouvable), MCP04 (chaîne d'approvisionnement) |
| NIST SP 800-207 | Point de décision de politique dans la TEE ; aucune confiance implicite dans l'identité de la charge de travail |
| EU AI Act Art. 12, 15 | Enregistrements d'audit par décision (Art. 12) ; contrôles de cybersécurité adossés à la TEE (Art. 15) |
| DORA Art. 9 | Chaîne d'attestation ; conservation du journal d'audit via gateway.audit_chain |
| RATS/EAT RFC 9711 | GatewayClaim est un EAT ; le champ eat_profile identifie le profil TRACE |
| Outil | Ce qu'il vérifie |
|---|---|
| ruff | Linting de style et d'imports sur chaque PR |
| bandit | Linting de sécurité Python sur chaque PR |
| pip-audit | Analyse des vulnérabilités des dépendances sur chaque PR |
| mypy | Vérification statique des types sur chaque PR |
| CodeQL | SAST Python, requêtes étendues de sécurité, hebdomadaire |
| OpenSSF Scorecard | Score hebdomadaire, téléversement SARIF |
Consultez SECURITY.md pour le signalement des vulnérabilités et les SLA de réponse. Consultez LIMITATIONS.md pour les limites explicites du périmètre, y compris les risques résiduels liés à la capture des charges utiles APM, à l'injection de configuration d'exécution et à la chaîne d'approvisionnement P4.1 (typosquatting) que la phase 1 ne comble pas.
| Page | Description |
|---|---|
| docs/quickstart.md | De zéro à la première revendication TRACE en moins de 30 minutes |
| docs/configuration.md | Référence de configuration complète avec tous les champs et valeurs par défaut |
| docs/SPEC.md | Spécification produit : taxonomie des problèmes, architecture, matrice de couverture |
| docs/spec/threat-model.md | Analyse STRIDE, modèle d'adversaire, risques résiduels |
| docs/spec/cedar-policy.md | Référence du langage de politique Cedar et schéma |
| docs/testing/benchmarks.md | Benchmarks de latence et de débit par fournisseur TEE |
cMCP (Runtime MCP confidentiel) est une passerelle open source qui applique la politique des appels d'outils MCP à l'intérieur d'un environnement d'exécution de confiance matériel. Elle intercepte chaque appel d'outil, l'évalue par rapport à un ensemble de politiques Cedar, applique la décision (autoriser, refuser ou masquer) et enregistre l'appel dans une chaîne d'audit scellée par le matériel.
La gouvernance uniquement logicielle exécute le moteur de politique dans le même système d'exploitation qu'un opérateur ou une CVE de la chaîne d'approvisionnement peut atteindre, elle ne peut donc pas prouver que la politique exécutée était celle approuvée ni que la décision n'a pas été inversée en mémoire. cMCP exécute le moteur de politique dans une TEE et mesure le hachage de l'ensemble Cedar dans le rapport d'attestation matérielle avant que tout code ne s'exécute, de sorte que le plan de contrôle ne peut pas être atteint par le processus qu'il régit.
Non. Définissez CMCP_DEV_MODE=1 pour utiliser le fournisseur TEE uniquement logiciel et exécuter le démarrage rapide complet sans TEE matérielle. Les fournisseurs matériels (TPM, AMD SEV-SNP, Intel TDX, OPAQUE) sont utilisés en production.
Une revendication TRACE (une GatewayClaim) est un artefact signé et attesté par le matériel, produit par session. Elle enregistre quels outils ont été exécutés, quelle politique a décidé de chaque appel, le hachage de l'ensemble Cedar et la chaîne d'audit, et elle est signée avec une clé Ed25519 qui ne quitte jamais la TEE. Un vérificateur la contrôle avec la bibliothèque cmcp_verify sans faire confiance à l'opérateur.
TPM 2.0 / vTPM, AMD SEV-SNP et Intel TDX, avec le calcul confidentiel GPU NVIDIA prévu pour la v0.2 et OPAQUE Confidential Runtime disponible en opt-in explicite. L'ordre de détection automatique est la machine virtuelle confidentielle Azure, puis TPM 2.0 / vTPM, puis AMD SEV-SNP, puis Intel TDX ; le fournisseur uniquement logiciel n'est utilisé que sous CMCP_DEV_MODE=1.
MIT.
CONTRIBUTING.md · GOVERNANCE.md · Discussions
Rejoignez la communauté sur Discord.
Vous utilisez cMCP en production ? Ajoutez votre organisation à ADOPTERS.md.
MIT - voir LICENSE.