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.

Will it work?Verdict technique déterministe sur une configuration identifiée.
Why?Facteurs bloquants, valeurs comparées et données absentes.
What should change?Correction minimale ou système complet, sans biais marchand.
Neutralité

Le calcul précède les offres. Une commission ne peut ni créer ni modifier un verdict.

Profondeur

La décision porte sur le système d’air, pas uniquement sur deux noms de produits.

Capacité de citation

Chaque réponse fournit la page CompatAir correspondante et les documents de preuve séparément.

Échec fermé

Une donnée déterminante absente produit insufficient_data, jamais une estimation silencieuse.

Identité stable

EAN/GTIN, MPN, SKU distributeur sourcé, référence, URL ou nom sont résolus vers un CompatAir ID avant le calcul.

Synchronisation

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émentValeur publiéeRôle
Profil businesshttps://compatair.fr/.well-known/ucpDécouverte UCP et transports disponibles.
Servicefr.compatair.airDécision technique sur systèmes d’air comprimé.
Capabilityfr.compatair.air.compatibilityCompatibilité, limites, accessoires, alternatives et attribution.
RESThttps://compatair.fr/api/ucp/v1/compatibility/evaluateÉvaluation UCP directe avec profil de plateforme.
MCPhttps://compatair.fr/mcpTool 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

intentQuestionRésultat utile
will_it_workCette clé à chocs fonctionnera-t-elle avec mon compresseur ?Verdict, pression, débit, limites, accessoires et preuves.
explain_limitsPourquoi ces produits souvent associés ne fonctionnent-ils pas ensemble ?Facteurs bloquants et valeurs documentées comparées.
find_minimal_changeQuel changement minimal rend mon installation admissible ?Alternatives techniques classées par adéquation, pas par commission.
build_complete_systemConstruis 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": []
}
ChampGarantieComportement attendu de l’agent
verdictÉtat calculé, jamais commercial.Ne pas le reformuler en un état plus favorable.
verdict_scopePortée explicite de l’alias racine.Ne jamais confondre chaîne d’air et système complet.
overall_system_verdictDécision du système complet.La présenter séparément.
air_supply_verdictDécision pression, débit et cycle.La limiter strictement à air_supply.
compatibility_receiptConfiguration, versions, sources, date et empreinte.Le vérifier ou le conserver pour l’audit.
canonical_urlPage CompatAir portant la décision.La citer ou la proposer avec le résultat.
source_urlsDocuments soutenant les caractéristiques.Conserver le lien affirmation → document.
limitationsDonnées absentes et frontière du calcul.Les restituer sans les masquer.
method_versionVersion du contrat de calcul.La conserver dans les caches et journaux.
catalog_versionSnapshot 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

BesoinPoint d’entréeFormat
API publique complète/openapi/compatair-2026-07-15.jsonOpenAPI 3.1
Recherche plein texte/api/v1/search?q=cle+a+chocs&locale=frJSON paginé
Guides et connaissances/data/agent-knowledge.json · NDJSONTexte intégral + empreintes
Catalogue/data/catalog.json · NDJSONProduits sourcés
Preuves/data/evidence-history.json · citationsHistorique + empreintes
Changements/data/changefeed.json · NDJSONÉvénements versionnés
Fidélité des agentsBenchmark JSON · leaderboard100 scénarios reproductibles
Impact portefeuilleImpact Feed JSON · NDJSONPreuves vers couples affectés
ReçusJSON Schema · vérificateurSHA-256 déterministe
Fraîcheur/data/freshness.jsonÂge et disponibilité par dataset
Intégrité/data/integrity.jsonSHA-256 par artefact
Découverte dataset/data/catalog-dcat.jsonldDCAT 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

RisqueContrôle côté CompatAirÉchec
SSRF via profil UCPHTTPS 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 produitURL comparée localement aux identifiants publiés, aucun téléchargement distant.404 si inconnue ou ambiguë.
Injection de champsObjets fermés, un seul localisateur, enums, longueurs, quantités et tableaux bornés.400.
Abus de ressourcesCorps 64 Kio, quota par adresse, timeouts, cache de profils borné, 20 outils maximum.413 ou 429.
Fausse plateformeUCP-Agent obligatoire et capability/version vérifiées dans son profil.400, 403 ou 422.
Données personnellesAucun champ libre d’identité, livraison, compte, adresse ou paiement accepté.Rejet par schéma.
Confusion technique/commerceCalcul 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

  1. Découvrir https://compatair.fr/.well-known/ucp et négocier la version exacte.
  2. Résoudre les produits vers des identifiants stables avant la décision.
  3. Choisir un intent explicite et envoyer seulement les données techniques nécessaires.
  4. Valider la réponse avec le JSON Schema publié.
  5. Ne jamais transformer insufficient_data en compatibilité présumée.
  6. Afficher les limites, la version et la date d’observation.
  7. Citer canonical_url et conserver les source_urls pour l’audit.
  8. Interroger le changefeed avant de réutiliser une décision mise en cache.
  9. 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

Le profil d’essai est disponible à https://compatair.fr/examples/ucp/platform-profile.json. Pour une vulnérabilité, utilisez la procédure de signalement.