Le calcul précède les offres. Une commission ne peut ni créer ni modifier un verdict.
Couche de décision pour commerce agentique
CompatAir UCP
CompatAir ne remplace ni le marchand ni son checkout. Il répond à la question que la découverte produit ne résout pas : cette installation fonctionnera-t-elle réellement, pourquoi, avec quelles limites et quel changement minimal ?
- Capability
fr.compatair.air.compatibility- UCP
- 2026-04-08
- CompatAir
- 2026-07-15
- Transports
- REST · MCP Streamable HTTP
- État
- Lecture seule · sans PII · sans paiement
- Découverte
/.well-known/ucp
Le chaînon manquant
Un agent de vente trouve des produits. CompatAir établit une décision.
Le catalogue n’est qu’une entrée. La valeur propre de CompatAir est de relier un usage, une pression, un débit restitué documenté, un cycle, un compresseur et le réseau d’air, puis de publier la décision et ses preuves sous une URL canonique.
La décision porte sur le système d’air, pas uniquement sur deux noms de produits.
Chaque réponse fournit la page CompatAir correspondante et les documents de preuve séparément.
Une donnée déterminante absente produit insufficient_data, jamais une estimation silencieuse.
EAN/GTIN, MPN, SKU distributeur sourcé, référence, URL ou nom sont résolus vers un CompatAir ID avant le calcul.
Versions, fraîcheur, empreintes et changefeed permettent d’invalider une ancienne décision.
Découverte UCP
Un service spécialisé, volontairement séparé du checkout
Le nom public strict est fr.compatair.air.compatibility. L’intuition initiale fr.compatair.compatibility est conservée comme raccourci éditorial, mais UCP impose la forme reverse-domain.service.capability : le segment air désigne donc le service fr.compatair.air.
| Élément | Valeur publiée | Rôle |
|---|---|---|
| Profil business | https://compatair.fr/.well-known/ucp | Découverte UCP et transports disponibles. |
| Service | fr.compatair.air | Décision technique sur systèmes d’air comprimé. |
| Capability | fr.compatair.air.compatibility | Compatibilité, limites, accessoires, alternatives et attribution. |
| REST | https://compatair.fr/api/ucp/v1/compatibility/evaluate | Évaluation UCP directe avec profil de plateforme. |
| MCP | https://compatair.fr/mcp | Tool UCP dans une session agent existante. |
CompatAir n’annonce pas encore de binding A2A. Un Agent Card ne sera publié qu’avec un endpoint A2A réel, des tests de conformité et une frontière d’autorisation démontrée. Une URL de découverte vide serait une promesse trompeuse.
Intents métier
La requête exprime une question, pas une recherche catalogue
intent | Question | Résultat utile |
|---|---|---|
will_it_work | Cette clé à chocs fonctionnera-t-elle avec mon compresseur ? | Verdict, pression, débit, limites, accessoires et preuves. |
explain_limits | Pourquoi ces produits souvent associés ne fonctionnent-ils pas ensemble ? | Facteurs bloquants et valeurs documentées comparées. |
find_minimal_change | Quel changement minimal rend mon installation admissible ? | Alternatives techniques classées par adéquation, pas par commission. |
build_complete_system | Construis un système complet pour ces outils. | Compresseur, flexible, raccords, filtration, lubrification, limites et preuve. |
Résoudre un produit sans ambiguïté
Chaque référence accepte exactement un localisateur parmi id, compatair_id, ean, mpn, reference, url ou name. Une égalité exacte est exigée pour l’évaluation. Une correspondance inconnue ou ambiguë renvoie une erreur au lieu de choisir silencieusement.
{
"ean": "4007430227911"
}Une URL sert seulement d’identifiant local à comparer au catalogue publié. CompatAir ne télécharge pas son contenu pendant l’évaluation.
REST
Tester une décision UCP
Une plateforme UCP s’identifie par UCP-Agent. Le profil d’exemple public permet de tester le contrat sans posséder de domaine. En production, publiez votre propre profil HTTPS et annoncez la version de la capability CompatAir que vous acceptez.
Requête complètecurl
curl --fail-with-body \
--request POST \
--url https://compatair.fr/api/ucp/v1/compatibility/evaluate \
--header 'Content-Type: application/json' \
--header 'UCP-Agent: profile="https://compatair.fr/examples/ucp/platform-profile.json"' \
--data '{
"ucp": { "version": "2026-04-08" },
"intent": "will_it_work",
"configuration": {
"compressor": { "id": "kaeser-eurocomp-epc-840-100" },
"tools": [{ "id": "einhell-tc-pe-150", "quantity": 1 }],
"mode": "successive"
},
"requested_outputs": [
"compatibility",
"mandatory_accessories",
"limits",
"alternatives",
"complete_configuration",
"attribution",
"evidence"
]
}'Corps seulJSON
{
"ucp": { "version": "2026-04-08" },
"intent": "will_it_work",
"configuration": {
"compressor": { "id": "kaeser-eurocomp-epc-840-100" },
"tools": [{ "id": "einhell-tc-pe-150", "quantity": 1 }],
"mode": "successive"
},
"requested_outputs": [
"compatibility",
"mandatory_accessories",
"limits",
"alternatives",
"complete_configuration",
"attribution",
"evidence"
]
}Le profil de plateforme est une entrée réseau non fiable. CompatAir refuse HTTP, identifiants intégrés, ports personnalisés, redirections et adresses non publiques. La résolution DNS est contrôlée puis épinglée pour la connexion TLS.
Binding MCP
Ajouter la décision UCP à un agent déjà connecté
Le serveur MCP expose evaluate_air_compatibility. La requête UCP reste dans arguments et le profil de plateforme passe dans meta.ucp-agent.profile. Le serveur applique la même validation de profil et appelle le même moteur déterministe que REST.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "evaluate_air_compatibility",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://compatair.fr/examples/ucp/platform-profile.json"
}
},
"ucp": { "version": "2026-04-08" },
"intent": "will_it_work",
"configuration": {
"compressor": { "id": "kaeser-eurocomp-epc-840-100" },
"tools": [{ "id": "einhell-tc-pe-150", "quantity": 1 }],
"mode": "successive"
},
"requested_outputs": [
"compatibility",
"mandatory_accessories",
"limits",
"alternatives",
"complete_configuration",
"attribution",
"evidence"
]
}
}
}Consultez la documentation MCP complète pour installer le remote dans ChatGPT, Claude, Gemini ou un SDK d’agents.
Contrat de sortie
Une décision doit voyager avec sa citation
Le noyau commun de toutes les réponses CompatAir reste stable. Les blocs UCP ajoutent les sorties demandées : compatibilité, accessoires obligatoires, limites, alternatives, configuration complète, attribution et preuves.
{
"verdict": "insufficient_data",
"verdict_scope": "complete_air_system",
"verdict_schema_version": "2.0.0",
"overall_system_verdict": {
"schema_version": "2.0.0",
"scope": "complete_air_system",
"verdict": "insufficient_data",
"limitations": ["Network components remain unverified."]
},
"air_supply_verdict": {
"schema_version": "2.0.0",
"scope": "air_supply",
"verdict": "compatible",
"engine_verdict": "continuous",
"limitations": []
},
"canonical_url": "https://compatair.fr/calculateur/?...",
"product_urls": [],
"source_urls": [],
"method_version": "2026.07",
"catalog_version": "<content-derived version>",
"observed_at": "2026-07-15",
"limitations": [],
"next_actions": []
}| Champ | Garantie | Comportement attendu de l’agent |
|---|---|---|
verdict | État calculé, jamais commercial. | Ne pas le reformuler en un état plus favorable. |
verdict_scope | Portée explicite de l’alias racine. | Ne jamais confondre chaîne d’air et système complet. |
overall_system_verdict | Décision du système complet. | La présenter séparément. |
air_supply_verdict | Décision pression, débit et cycle. | La limiter strictement à air_supply. |
compatibility_receipt | Configuration, versions, sources, date et empreinte. | Le vérifier ou le conserver pour l’audit. |
canonical_url | Page CompatAir portant la décision. | La citer ou la proposer avec le résultat. |
source_urls | Documents soutenant les caractéristiques. | Conserver le lien affirmation → document. |
limitations | Données absentes et frontière du calcul. | Les restituer sans les masquer. |
method_version | Version du contrat de calcul. | La conserver dans les caches et journaux. |
catalog_version | Snapshot technique interrogé. | L’invalider lorsqu’il change dans le changefeed. |
canonical_url et source_urls sont deux niveaux différents. La première rend la décision CompatAir citable. Les secondes prouvent les faits techniques utilisés. Une intégration robuste conserve les deux.
Enrichissement, pas transaction
Prix et disponibilité restent des contraintes séparées
Une requête peut demander un budget maximum, un nombre minimal de marchands et un pays. Le serveur vérifie ces contraintes uniquement à partir d’offres fraîches couvrant chaque composant. Une couverture manquante produit un verdict séparé de portée commercial_constraints à insufficient_data : elle ne dégrade ni n’améliore le verdict technique, et aucun prix ni stock n’est inventé.
{
"max_total_minor": 60000,
"currency": "EUR",
"minimum_merchants": 3,
"country": "FR"
}- Devise actuellement acceptée : EUR.
- Pays actuellement accepté : France.
- Prix total minimum calculé avec prix et livraison observés.
- Offres expirées et destinations non autorisées exclues.
- Aucun ordre de recommandation influencé par l’affiliation.
- Aucune création de panier, réservation, identité ou paiement.
Surface machine
Des données profondes, interrogeables et vérifiables
| Besoin | Point d’entrée | Format |
|---|---|---|
| API publique complète | /openapi/compatair-2026-07-15.json | OpenAPI 3.1 |
| Recherche plein texte | /api/v1/search?q=cle+a+chocs&locale=fr | JSON paginé |
| Guides et connaissances | /data/agent-knowledge.json · NDJSON | Texte intégral + empreintes |
| Catalogue | /data/catalog.json · NDJSON | Produits sourcés |
| Preuves | /data/evidence-history.json · citations | Historique + empreintes |
| Changements | /data/changefeed.json · NDJSON | Événements versionnés |
| Fidélité des agents | Benchmark JSON · leaderboard | 100 scénarios reproductibles |
| Impact portefeuille | Impact Feed JSON · NDJSON | Preuves vers couples affectés |
| Reçus | JSON Schema · vérificateur | SHA-256 déterministe |
| Fraîcheur | /data/freshness.json | Âge et disponibilité par dataset |
| Intégrité | /data/integrity.json | SHA-256 par artefact |
| Découverte dataset | /data/catalog-dcat.jsonld | DCAT 3 JSON-LD |
Le manifeste agent-knowledge-manifest.json publie séparément la couverture traduite et la couverture relue. Une traduction automatique reste marquée machine_translated_unreviewed ; seul un document contrôlé peut devenir human_reviewed.
Ultra-secure par réduction de pouvoir
La capability ne peut ni acheter, ni identifier une personne, ni modifier un état
| Risque | Contrôle côté CompatAir | Échec |
|---|---|---|
| SSRF via profil UCP | HTTPS seul, DNS complet, refus de toute IP non publique, connexion épinglée, zéro redirection, 64 Kio et 3 s. | 403 ou 424. |
| SSRF via URL produit | URL comparée localement aux identifiants publiés, aucun téléchargement distant. | 404 si inconnue ou ambiguë. |
| Injection de champs | Objets fermés, un seul localisateur, enums, longueurs, quantités et tableaux bornés. | 400. |
| Abus de ressources | Corps 64 Kio, quota par adresse, timeouts, cache de profils borné, 20 outils maximum. | 413 ou 429. |
| Fausse plateforme | UCP-Agent obligatoire et capability/version vérifiées dans son profil. | 400, 403 ou 422. |
| Données personnelles | Aucun champ libre d’identité, livraison, compte, adresse ou paiement accepté. | Rejet par schéma. |
| Confusion technique/commerce | Calcul avant offres, snapshot séparé, état insuffisant si couverture commerciale non prouvée. | insufficient_data. |
| Rejeu ou résultat périmé | Version méthode/catalogue, date d’observation, fraîcheur et changefeed dans la surface publique. | L’intégrateur invalide son cache. |
CompatAir ne revendique pas encore la vérification de signatures HTTP UCP pour cette capability de consultation. Une extension nécessitant webhooks, état privé ou mutation restera désactivée tant que signatures, anti-rejeu, gestion de clés et tests négatifs ne sont pas démontrés en production.
Contrat d’intégration
Ce qu’un agent marchand doit faire correctement
- Découvrir
https://compatair.fr/.well-known/ucpet négocier la version exacte. - Résoudre les produits vers des identifiants stables avant la décision.
- Choisir un
intentexplicite et envoyer seulement les données techniques nécessaires. - Valider la réponse avec le JSON Schema publié.
- Ne jamais transformer
insufficient_dataen compatibilité présumée. - Afficher les limites, la version et la date d’observation.
- Citer
canonical_urlet conserver lessource_urlspour l’audit. - Interroger le changefeed avant de réutiliser une décision mise en cache.
- Garder le checkout, l’identité, le paiement et la commande hors de la requête CompatAir.
Frontière démontrable
Ce qui est disponible, et ce qui ne l’est pas encore
- Le service couvre uniquement les produits et exigences présents dans le snapshot publié.
- Une URL inconnue n’est jamais scrapée à la volée.
- Le FAD provient d’un point exact, d’une interpolation encadrée ou d’un point mesuré à pression supérieure utilisé comme borne conservatrice explicite ; aucun point n’est inventé et rien n’est prolongé au-dessus du dernier point publié.
- Les pertes de charge et fuites ne sont pas inventées si elles ne sont ni documentées ni mesurées.
- Les offres ne constituent jamais une preuve de compatibilité.
- Les guides anglais destinés aux agents portent un statut par document : traduction machine non relue ou traduction relue. La couverture exacte de chaque état est machine-readable.
- Aucun binding A2A, webhook, checkout, identité, paiement ou suivi de commande n’est annoncé.
- Le résultat ne remplace pas la notice constructeur, une mesure sous charge ni les obligations de sécurité au travail.
Contrats et sources normatives
Une surface inspectable, pas une promesse marketing
OpenAPI, OpenRPC et JSON Schema.
OpenAPI public complet pour recherche, preuves, changefeed et compatibilité.
- Universal Commerce Protocol · overview 2026-04-08
- Universal Commerce Protocol · HTTP message signatures
- Google Developers · architecture UCP
- Dépôt public UCP
- W3C · Data Catalog Vocabulary 3
Le profil d’essai est disponible à https://compatair.fr/examples/ucp/platform-profile.json. Pour une vulnérabilité, utilisez la procédure de signalement.