Retour aux mises à jour
New releaseAug 31, 2026

cmcp v0.4.0

cMCP : Passerelle MCP confidentielle. Application de politiques attestée par le matériel pour les appels d'outils MCP.

Partager

cMCP

cMCP : Runtime MCP confidentiel

Appliquez la politique des outils MCP dans une TEE, là où l'agent qu'elle régit ne peut pas l'atteindre

Documentation

Démarrage rapide · Architecture · Configuration · CLI · Journal des modifications

CI License: MIT PyPI OpenSSF Scorecard Discord

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-runtime et 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é ?


Le problème

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 :

  • Que la politique Cedar sur le disque est celle qui a été exécutée. Un administrateur malveillant peut remplacer l'ensemble après approbation ; le contrôle de hachage s'exécute dans le même système d'exploitation que celui que l'administrateur contrôle.
  • Que la décision d'autoriser/refuser n'a pas été inversée en mémoire. Une CVE de la chaîne d'approvisionnement dans l'évaluateur s'exécute dans le même espace d'adressage que l'attaquant.
  • Que le journal d'audit reflète ce qui s'est réellement passé. Toute partie détenant la clé de signature logicielle peut reconstruire une chaîne d'audit valide après coup.

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.


Démarrage rapide

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).


Comment cela fonctionne

  1. L'agent envoie chaque appel d'outil à la passerelle cMCP au lieu de l'envoyer directement aux serveurs MCP.
  2. Au démarrage, la passerelle mesure le hachage de l'ensemble de politiques Cedar dans le rapport d'attestation matérielle. Aucun code ne s'exécute avant cette mesure.
  3. Chaque appel d'outil entrant est évalué par le moteur de politique Cedar s'exécutant à l'intérieur de la TEE. Le résultat est autoriser, refuser ou masquer. L'appel et sa décision sont ajoutés à la chaîne d'audit scellée par le matériel.
  4. À la fin de la session, la passerelle produit une revendication TRACE : un artefact signé et attesté par le matériel qui enregistre quels outils ont été exécutés, quelle politique a décidé de chaque appel, et la chaîne d'audit complète. Un vérificateur contrôle cela sans faire confiance à l'opérateur.
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)

Fournisseurs matériels

FournisseurPlateformeAssuranceRemarques
tpmTPM 2.0 / vTPM (Azure, AWS, GCP Trusted Launch)MoyenneCitation TPM locale
sev-snpAMD SEV-SNP (Azure DCasv5, AWS C6a Nitro)ÉlevéeAMD KDS
tdxIntel TDX (Azure DCedsv5, GCP C3)ÉlevéeIntel PCS
gpu-cc (v0.2)NVIDIA H100/H200/Blackwell (mode CC)ÉlevéeNVIDIA Remote Attestation Service (NRAS)
opaque (opt-in)OPAQUE Confidential Runtimen/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

Modes d'application

ModeComportementCas d'utilisation
enforcingLes refus de politique renvoient HTTP 403 ; l'appel n'est pas transmisProduction
advisoryLes refus de politique sont journalisés ; l'appel se poursuitPremier déploiement, réglage de la politique
silentLa 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.


Configuration

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 :

VariableEffet
CMCP_DEV_MODE=1Utilise le fournisseur TEE uniquement logiciel ; aucun matériel requis
CMCP_BEARER_TOKENExige ce jeton porteur sur toutes les requêtes entrantes
OPAQUE_ATTESTATION_URLActive l'attestation OPAQUE Managed Runtime (opt-in explicite)

Référence CLI

CommandeOptionsDescription
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 verifyCLAIM_FILE (requis) ; --policy-hash, --catalog-hash, --max-age, --trusted-key, --trusted-tpm-ca, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchorVérifie une revendication TRACE signée (signature, schéma, fraîcheur, chaîne d'audit, hachages épinglés et ancres de confiance)

Revendications TRACE

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.

ChampDescription
trace.eat_profileURI du profil EAT : tag:agentrust-io.com,2026:trace-v0.2
trace.runtimePlateforme TEE et mesure matérielle enregistrées au démarrage de l'enclave
trace.policy.bundle_hashSHA-256 de l'ensemble Cedar chargé au démarrage ; modifier un fichier de politique change cette valeur
trace.cnf.jwkClé publique Ed25519 liée à la clé de signature de la TEE
trace.tool_transcriptVue 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_chainJournal d'audit chaîné par hachage, racine et extrémité ; vérifiable sans rejouer les entrées individuelles
signatureEd25519 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.


Alignement sur les normes

NormeCouverture
OWASP Agentic AI Top 10MCP10 (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-207Point de décision de politique dans la TEE ; aucune confiance implicite dans l'identité de la charge de travail
EU AI Act Art. 12, 15Enregistrements d'audit par décision (Art. 12) ; contrôles de cybersécurité adossés à la TEE (Art. 15)
DORA Art. 9Chaîne d'attestation ; conservation du journal d'audit via gateway.audit_chain
RATS/EAT RFC 9711GatewayClaim est un EAT ; le champ eat_profile identifie le profil TRACE

Sécurité

OutilCe qu'il vérifie
ruffLinting de style et d'imports sur chaque PR
banditLinting de sécurité Python sur chaque PR
pip-auditAnalyse des vulnérabilités des dépendances sur chaque PR
mypyVérification statique des types sur chaque PR
CodeQLSAST Python, requêtes étendues de sécurité, hebdomadaire
OpenSSF ScorecardScore 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.


Documentation

PageDescription
docs/quickstart.mdDe zéro à la première revendication TRACE en moins de 30 minutes
docs/configuration.mdRéférence de configuration complète avec tous les champs et valeurs par défaut
docs/SPEC.mdSpécification produit : taxonomie des problèmes, architecture, matrice de couverture
docs/spec/threat-model.mdAnalyse STRIDE, modèle d'adversaire, risques résiduels
docs/spec/cedar-policy.mdRéférence du langage de politique Cedar et schéma
docs/testing/benchmarks.mdBenchmarks de latence et de débit par fournisseur TEE

FAQ

Qu'est-ce que cMCP ?

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.

En quoi cMCP diffère-t-il de la gouvernance MCP uniquement logicielle ?

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.

Ai-je besoin d'un matériel spécial pour l'essayer ?

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.

Qu'est-ce qu'une revendication TRACE ?

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.

Quels fournisseurs TEE sont pris en charge ?

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.

Sous quelle licence cMCP est-il distribué ?

MIT.


Contribution

CONTRIBUTING.md · GOVERNANCE.md · Discussions

Rejoignez la communauté sur Discord.

Vous utilisez cMCP en production ? Ajoutez votre organisation à ADOPTERS.md.


Licence

MIT - voir LICENSE.

Catégories