canonical_url permet à l’agent de citer la page CompatAir qui porte le résultat humainement vérifiable.
Infrastructure de données pour agents IA
CompatAir MCP
Un serveur MCP public, déterministe et en lecture seule pour identifier des produits pneumatiques, vérifier une compatibilité, construire un système complet et remonter jusqu’aux preuves. L’agent orchestre. Le moteur documenté décide du verdict.
- Endpoint
https://compatair.fr/mcp- Transport
- Streamable HTTP · JSON-RPC 2.0
- Surface principale
- 7 tools decision-core · 12,8 Ko mesurés
- Contrats
- MCP 3.0.0 · verdicts 2.0.0 · méthode 2026.07
- Périmètre
- 22 400 explorables · 20 860 verdicts fixes
- Authentification
- Aucune · données publiques · lecture seule
Le différenciateur vérifiable
Un service de décision technique, pas une surcouche conversationnelle
CompatAir ne demande jamais au modèle de deviner si deux produits fonctionnent ensemble. Le serveur expose les entrées, la méthode, le verdict, les limites, les sources et la page web correspondante dans une réponse structurée.
22 400 combinaisons sont explorables, pas pré-calculées. Le snapshot contient 20 860 verdicts audités pour les 149 outils à débit fixe. Les 1 540 combinaisons restantes exigent une cadence ou un volume et un temps cible. Le catalogue machine publie aussi les MPN normalisés, EAN/GTIN, SKU distributeur sourcés, la couverture champ par champ, le rôle des sources et le SLA de fraîcheur.
insufficient_data.source_urls désigne les documents utilisés. Ces URL ne remplacent pas la page canonique et réciproquement.
Prix et disponibilité passent par des tools séparés. Une commission ne peut ni créer ni modifier un verdict.
Méthode, catalogue et observation voyagent avec le résultat et sont consultables par changefeed.
Produits et configurations reçoivent un CompatAir ID indépendant du nom commercial affiché.
Sept tools forment le profil decision-core. Quatre tools avancés et neuf tools legacy vivent sur des endpoints séparés.
Démarrage rapide
Tester le protocole sans SDK
Ces requêtes utilisent le transport Streamable HTTP courant. Chaque requête JSON-RPC part dans un nouveau POST et annonce les deux types de réponse acceptés par le protocole.
1 · Initialisercurl
curl --request POST 'https://compatair.fr/mcp' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json, text/event-stream' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-11-25",
"capabilities": {},
"clientInfo": { "name": "example-client", "version": "1.0.0" }
}
}'2 · Découvrir les toolscurl
curl --request POST 'https://compatair.fr/mcp' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json, text/event-stream' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'3 · Identifier un produit par EANcurl
curl --request POST 'https://compatair.fr/mcp' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json, text/event-stream' \
--header 'MCP-Protocol-Version: 2025-11-25' \
--data '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "identify_product",
"arguments": { "ean": "4006825660630" }
}
}'Le serveur est sans session au niveau protocolaire. Il répond en JSON. Un GET /mcp reçoit donc 405 Method Not Allowed, le comportement prévu par la spécification lorsqu’aucun flux SSE serveur n’est proposé.
Intégrations vérifiées
ChatGPT, Claude, Gemini et SDK d’agents
L’URL reste la même dans tous les clients. Seuls le vocabulaire de configuration, les permissions et le lieu d’exécution changent.
ChatGPT
- Dans ChatGPT, ouvrez Réglages → Sécurité et connexion, puis activez le mode développeur.
- Ouvrez Réglages → Plugins ou chatgpt.com/plugins, sélectionnez le bouton + et créez une app en mode développeur avec l’URL
https://compatair.fr/mcp. Le serveur CompatAir ne demande aucune authentification. - Dans une nouvelle conversation, sélectionnez l’app et testez un cas concluant, un cas incompatible et un cas
insufficient_data. Répétez le contrôle dans Deep Research si cette surface est disponible dans votre espace de travail.
Les menus et les droits dépendent du plan et des règles de l’espace de travail. Avant publication, l’administrateur doit examiner les permissions et les changements de tools.
Référence officielle : OpenAI · Connect in ChatGPT.
Claude Code
Installation par CLI
Le transport HTTP est recommandé pour un serveur distant.
claude mcp add --transport http compatair https://compatair.fr/mcp
claude mcp get compatair
# Dans Claude Code : /mcpConfiguration de projet .mcp.json
Le projet devra être approuvé dans Claude Code avant utilisation.
{
"mcpServers": {
"compatair": {
"type": "http",
"url": "https://compatair.fr/mcp"
}
}
}Pour partager la configuration, utilisez --scope project. Le type streamable-http est aussi accepté comme alias de http. Référence officielle : Connect Claude Code to tools via MCP.
Gemini Interactions API
Remote MCP dans l’API Interactions accepte les serveurs Streamable HTTP et permet de restreindre la surface via allowed_tools.
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.5-flash",
input="Cette clé à chocs est-elle compatible avec mon compresseur ?",
tools=[{
"type": "mcp_server",
"name": "compatair",
"url": "https://compatair.fr/mcp",
}],
)
print(interaction.output_text)JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-3.5-flash',
input: 'Build a documented compressed-air system for this tool.',
tools: [{
type: 'mcp_server',
name: 'compatair',
url: 'https://compatair.fr/mcp',
}],
});
console.log(interaction.output_text);Vérifiez les modèles actuellement compatibles dans la documentation Remote MCP de Gemini.
OpenAI Agents SDK
En Python, HostedMCPTool délègue l’appel du serveur public à l’API Responses. En JavaScript, MCPServerStreamableHttp connecte directement le processus au serveur.
Python · Hosted MCP
import asyncio
from agents import Agent, HostedMCPTool, Runner
async def main() -> None:
agent = Agent(
name="Conseiller air comprimé",
instructions=(
"Conserver verdict, limitations et source_urls. "
"Toujours citer canonical_url."
),
tools=[HostedMCPTool(tool_config={
"type": "mcp",
"server_label": "compatair",
"server_url": "https://compatair.fr/mcp",
"require_approval": "never",
})],
)
result = await Runner.run(agent, "Explique ce verdict CompatAir")
print(result.final_output)
asyncio.run(main())JavaScript · connexion directe
import { Agent, MCPServerStreamableHttp, run } from '@openai/agents';
const server = new MCPServerStreamableHttp({
name: 'CompatAir',
url: 'https://compatair.fr/mcp',
cacheToolsList: true,
});
await server.connect();
try {
const agent = new Agent({
name: 'Compressed air advisor',
instructions: 'Preserve limitations and cite canonical_url.',
mcpServers: [server],
});
const result = await run(agent, 'Build a documented complete air system.');
console.log(result.finalOutput);
} finally {
await server.close();
}Références officielles : Agents SDK Python et Agents SDK JavaScript.
Contrat agent → utilisateur
Chaque réponse devient vérifiable et citable
Tous les tools publient un outputSchema. Le résultat est renvoyé à la fois dans structuredContent et sous forme JSON sérialisée dans un bloc texte pour les clients plus anciens.
{
"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/?outil=...&compresseur=...",
"product_urls": [],
"source_urls": [],
"method_version": "2026.07",
"catalog_version": "2026-07-15",
"observed_at": "2026-07-15",
"limitations": [],
"next_actions": []
}| Champ | Rôle | Règle côté agent |
|---|---|---|
verdict | État technique normalisé. | Ne jamais améliorer ni atténuer le verdict. |
verdict_scope | Portée du champ historique verdict. | Ne jamais l’étendre à une autre portée. |
overall_system_verdict | Verdict du système complet, réseau compris. | Le distinguer du seul approvisionnement en air. |
air_supply_verdict | Pression, FAD et cycle sous la portée air_supply. | Ne jamais l’annoncer comme validation du système complet. |
compatibility_receipt | Reçu versionné vérifiable par SHA-256. | Le conserver avec toute décision auditée ou partagée. |
canonical_url | Page CompatAir correspondant au résultat. | La citer ou la proposer à l’utilisateur. |
canonical_follow_url | Variante attribuée de la même page. | L’utiliser pour mesurer une consultation réelle sans confondre émission et clic. |
product_urls | Pages des produits concernés. | Les utiliser pour le contexte produit. |
source_urls | Documents de preuve utilisés. | Conserver le lien entre affirmation et source. |
method_version | Version du contrat de calcul. | La conserver dans les caches et traces. |
catalog_version | Snapshot technique interrogé. | Comparer cette valeur via le changefeed. |
observed_at | Date d’observation du snapshot. | Ne pas la présenter comme une date temps réel. |
limitations | Données manquantes et frontières du résultat. | Les restituer sans les masquer. |
next_actions | Vérifications ou pages suivantes. | Proposer uniquement les actions réellement renvoyées. |
canonical_url est la référence CompatAir. source_urls contient les documents qui soutiennent les données. Fusionner ces deux niveaux détruirait la traçabilité.
Surface MCP 3.0.0
Une surface principale courte, deux extensions explicites
Un client généraliste n’ingère que sept schémas compacts. Les contrats exhaustifs restent lisibles dans compatair://responses/schema. Les outils d’audit et de synchronisation passent par le profil extended ; les anciens contrats passent par legacy.
| Profil | Endpoint | Usage |
|---|---|---|
| decision-core | https://compatair.fr/mcp | Orientation, identification, décision, système, alternatives, corpus et offres. |
| extended | https://compatair.fr/mcp/extended | Preuves détaillées, explication, comparaison complète et changefeed. |
| legacy | https://compatair.fr/mcp/legacy | Migration temporaire des neuf anciens tools et successeurs explicites. |
| Tool AirGraph | Ce qu’il apporte |
|---|---|
orient_decision | Retourne le plus petit tool et le profil adaptés lorsque la prochaine action n’est pas évidente. |
evaluate_air_compatibility | Expose la capability UCP fr.compatair.air.compatibility pour répondre à une intention métier et enrichir une transaction sans toucher au checkout. |
identify_product | Retrouve un produit par nom, URL, EAN/GTIN, MPN, SKU distributeur sourcé, référence ou CompatAir ID sans télécharger l’URL fournie. |
build_complete_air_system | Assemble compresseur, outils, flexible, raccords, filtration et lubrification uniquement depuis les exigences documentées. Le verdict système complet reste insufficient_data tant que les pertes réelles du réseau ne sont pas vérifiées. |
explain_compatibility_verdict | Décompose pression, débit, cycle d’utilisation et données manquantes. |
find_compatible_alternatives | Propose la plus petite substitution de compresseur vérifiée, sans ordre influencé par une commission. |
compare_complete_systems | Compare de deux à cinq configurations techniques sans score commercial. |
get_compatibility_evidence | Expose les caractéristiques, références et arêtes AirGraph utilisées pour un verdict. |
search_knowledge | Recherche guides, glossaire, méthodes et fiches dans le seul corpus CompatAir publié. |
get_current_offers | Retourne les observations commerciales fraîches et autorisées, séparées du verdict. |
get_changefeed | Signale les versions de méthode, catalogue et offres visibles depuis une date ou une version. |
Profil decision-core recommandé
Une intégration généraliste ne charge que ces sept tools. Le profil, ses endpoints et les successeurs legacy sont aussi lisibles dans compatair://tools/core-profile.
orient_decisionidentify_productevaluate_air_compatibilitybuild_complete_air_systemfind_compatible_alternativessearch_knowledgeget_current_offers
Tools avancés à charger à la demande
get_compatibility_evidenceexplain_compatibility_verdictcompare_complete_systemsget_changefeed
Tools historiques maintenus
Ils restent disponibles sur https://compatair.fr/mcp/legacy, mais chaque définition porte fr.compatair/lifecycle=legacy et un fr.compatair/successor explicite.
search_toolsget_tool_requirementssearch_compressorsget_compressor_specssize_compressorcheck_compatibilitycompare_compressorsfind_accessoriesfind_offers
Ressources de contexte
compatair://catalog/versioncompatair://methodologycompatair://tools/taxonomycompatair://confidence-scalecompatair://affiliation-policycompatair://engine/versioncompatair://airgraph/schemacompatair://responses/schemacompatair://tools/core-profilecompatair://receipts/schemacompatair://changefeed/current
Prompts réutilisables
choisir_un_compresseurauditer_une_installationcomparer_des_configurations
Modèle de données sectoriel
L’AirGraph relie le besoin, le réseau et la preuve
Le graphe ne relie pas seulement un outil à un compresseur. Il décrit les exigences techniques, les composants du réseau, le verdict et les preuves sous des identifiants stables.
ca:compressor:<id> et ca:tool:<id>.
ca:configuration:<digest> dépend du compresseur, des outils triés et du mode.
ca:requirement:<id> porte une pression, un débit ou un composant documenté.
Une exigence absente reste absente. Par exemple, CompatAir ne déduit pas une perte de charge à partir d’un flexible inconnu et ne transforme pas un débit aspiré en FAD. Le graphe encode aussi cette absence dans limitations.
Les décisions peuvent être figées dans un compatibility_receipt. La fidélité des réponses se mesure sur le benchmark public de 100 scénarios. La sélection du bon profil et du bon tool MCP se teste séparément sur le banc de 50 requêtes agentiques, sans publier de score avant exécution avec de vrais modèles et tokenizers. Les changements de preuve sont reliés aux portefeuilles dans le Compatibility Impact Feed.
Frontière de confiance
Un serveur public conçu pour réduire sa propre puissance
La meilleure défense de cette surface est son périmètre. Le MCP CompatAir ne modifie rien, ne reçoit aucun secret, ne télécharge aucune URL utilisateur et ne donne pas accès au moteur propriétaire ni au système de fichiers.
| Risque | Contrôle appliqué |
|---|---|
| DNS rebinding et appels navigateur | Écoute locale derrière le proxy HTTPS. Une origine présente doit appartenir à la liste autorisée, sinon réponse 403. |
| SSRF | identify_product analyse uniquement des identifiants et segments d’URL. Aucun contenu distant n’est téléchargé. |
| Abus de tool | Tous les tools sont réellement en lecture seule. Les annotations MCP le déclarent mais le serveur impose aussi cette frontière. |
| Entrées démesurées | Corps limité à 64 Kio, URL à 2 048 caractères, champs, tableaux, curseurs et identifiants bornés. |
| Déni de service élémentaire | 120 requêtes par minute et par adresse client, délais serveur de 10 secondes et sockets bornées. |
| Exfiltration ou rétention | Aucun texte libre n’est conservé par les tools. Les compteurs d’usage sont agrégés et l’adresse ne sert que temporairement au quota. |
| Redirection marchande | HTTPS obligatoire, marchands et destinations explicitement autorisés, fraîcheur maximale de 48 heures. |
| Contournement par le commerce | Calcul technique avant offres. Les offres utilisent un snapshot et un tool séparés. |
L’absence d’authentification est volontaire pour cette ressource publique sans donnée utilisateur ni action d’écriture. Toute future fonction privée ou personnalisée devra changer de frontière, employer une autorisation adaptée à la ressource et refuser le passage direct de jetons tiers.
Références : spécification des transports et bonnes pratiques de sécurité MCP.
Checklist réutilisable
Ce qu’un serveur MCP de production devrait pouvoir démontrer
Cette liste sert à auditer CompatAir, mais aussi à évaluer un autre serveur distant. Une annotation ou une promesse documentaire n’est jamais une preuve suffisante à elle seule.
- Un endpoint unique Streamable HTTP et un manifeste
server.jsonavecremotes. - Des schémas d’entrée fermés, bornés et validés avant tout traitement.
- Un
outputSchemaet unstructuredContentconformes pour chaque tool. - Une représentation texte de secours pour les clients plus anciens.
- Des annotations cohérentes avec la puissance réelle du serveur.
- Une validation d’Origin, une écoute locale et un proxy HTTPS pour les remotes.
- Des quotas, délais, tailles maximales et paginations documentés.
- Une séparation nette entre erreurs de protocole et erreurs d’exécution.
- Une politique explicite de données, journaux, secrets et rétention.
- Des identifiants stables, versions de méthode et snapshots datés.
- Une page canonique et des preuves conservées dans chaque résultat métier.
- Un changefeed pour invalider proprement caches et décisions anciennes.
- Des tests négatifs pour origines, types MIME, JSON, arguments, quotas et destinations.
- Une documentation humaine et machine lisible, maintenue dans les mêmes versions.
La spécification rappelle que les clients doivent considérer les annotations des tools comme non fiables tant que le serveur n’est pas lui-même digne de confiance. Les clients devraient aussi valider les résultats structurés et conserver un humain dans la boucle pour les opérations sensibles. Voir la spécification MCP des tools.
Honnêteté opérationnelle
Ce que le serveur refuse de supposer
- Un débit aspiré n’est jamais présenté comme un débit d’air effectivement restitué.
- 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 fuites et pertes de charge ne sont ajoutées que depuis une mesure explicite.
- Un besoin par action exige une cadence. Un gonflage exige le volume, les pressions et le temps cible.
- Un système complet reste
insufficient_datasi flexible, raccord, filtration ou lubrification déterminants ne sont pas documentés. - Une offre absente, expirée ou hors liste blanche n’est ni remplacée ni inventée.
- Un résultat MCP ne remplace pas une notice constructeur, une mesure en charge, les règles relatives aux équipements sous pression ou la sécurité au travail.
Diagnostic
Comprendre les réponses HTTP
| Statut | Cause habituelle | Correction |
|---|---|---|
| 400 | JSON, JSON-RPC, version de protocole ou argument invalide. | Vérifier la forme de la requête et le schéma du tool. |
| 403 | En-tête Origin présent mais non autorisé. | Utiliser un client de confiance ou l’origine officielle. |
| 405 | GET /mcp ou méthode non prise en charge. | Utiliser POST. Aucun flux SSE serveur n’est ouvert. |
| 406 | Accept incomplet. | Inclure application/json, text/event-stream. |
| 413 | Corps supérieur à 64 Kio. | Réduire les entrées et paginer. |
| 415 | Content-Type différent de JSON. | Envoyer application/json. |
| 429 | Plus de 120 requêtes par minute pour la même adresse. | Respecter Retry-After: 60 et mettre en cache les listes stables. |
| 5xx | Snapshot indisponible ou erreur interne. | Consulter l’état du service puis réessayer sans transformer l’échec en verdict. |
Découverte et gouvernance
Versions, manifeste et documents de référence
Le manifeste de registre versionné avec CompatAir déclare le remote officiel sous la propriété remotes :
{
"name": "io.github.bluetouff/compatair",
"version": "3.0.0",
"remotes": [{
"type": "streamable-http",
"url": "https://compatair.fr/mcp"
}]
}CompatAir MCP 3.0.0 conserve https://compatair.fr/mcp comme remote principal du Registry. Le dépôt exige une correspondance exacte entre la version du manifeste, la version retournée par initialize et l’entrée Registry avant de considérer la publication complète.
llms.txt résume les règles non négociables et les points d’entrée.
Enveloppe commune, contrats exhaustifs par tool en ressource, AirGraph et reçus sont servis à leurs URI stables.
get_changefeed et compatair://changefeed/current exposent les versions visibles.
Le contrat textuel complet reste disponible dans llms-full.txt. La matrice de compatibilité des versions distingue version produit, serveur MCP, moteur, méthode et schémas.
Sources normatives et intégrations
- MCP Registry · publication des serveurs distants
- MCP · transport Streamable HTTP
- MCP · tools, schémas et résultats structurés
- MCP · bonnes pratiques de sécurité
- OpenAI · connecter un serveur MCP dans ChatGPT
- Anthropic · MCP dans Claude Code
- Google · Remote MCP dans Gemini
Pour signaler une donnée ou une intégration défaillante, utilisez la page de contact. Pour une vulnérabilité, suivez la politique de sécurité.