Data infrastructure for AI agents

CompatAir MCP

A public, deterministic and read-only MCP server for identifying pneumatic products, checking compatibility, building complete systems and tracing every decision back to evidence. The agent orchestrates. The documented engine decides the verdict.

Endpoint
https://compatair.fr/mcp
Transport
Streamable HTTP · JSON-RPC 2.0
Main surface
7 decision-core tools · 12.8 KB measured
Contracts
MCP 3.0.0 · verdicts 2.0.0 · method 2026.07
Dataset scope
22,400 explorable · 20,860 fixed verdicts
Authentication
None · public data · read-only
Status
Versions exposed by the service

The verifiable difference

A technical decision service, not a conversational wrapper

CompatAir never asks a language model to guess whether two products work together. The server returns inputs, method, verdict, limitations, evidence and the matching web page in a structured response.

22,400 combinations are explorable, not precomputed. The snapshot contains 20,860 audited verdicts for 149 fixed-flow tools. The remaining 1,540 combinations require an action rate or volume and target time. Machine data also publishes normalized MPNs, EAN/GTIN, evidenced distributor SKUs, field-level coverage, source roles and the data freshness SLA.

DeterministicThe same pair and snapshot produce the same verdict.
Source-backedCritical specifications retain their documents and observation dates.
Fail closedA missing decisive fact becomes insufficient_data.
A canonical page in every result

canonical_url gives the agent a human-readable CompatAir page to cite.

Evidence remains distinct

source_urls identifies the documents used. It does not replace the canonical result page.

Commerce is isolated

Prices and availability use separate tools. Commission cannot create or change a verdict.

Explicit versions

Method, catalog and observation dates travel with each result and appear in the changefeed.

Stable identifiers

Products and configurations receive a CompatAir ID independent of the displayed commercial name.

Progressive selection

Seven tools form the decision-core profile. Four advanced tools and nine legacy tools live on separate endpoints.

Quickstart

Test the protocol without an SDK

These requests use the current Streamable HTTP transport. Each JSON-RPC message is sent in a new POST and advertises both response media types required by the protocol.

1 · Initializecurl

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 · Discover 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 · Identify a product by 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" }
    }
  }'

The server is stateless at the protocol layer and returns JSON responses. A GET /mcp therefore receives 405 Method Not Allowed, which is the specified behavior when the server does not expose a server-initiated SSE stream.

Verified integrations

ChatGPT, Claude, Gemini and agent SDKs

The endpoint is identical in every client. Configuration vocabulary, permissions and execution location are the only differences.

ChatGPT

  1. In ChatGPT, open Settings → Security and login, then turn on Developer mode.
  2. Open Settings → Plugins or chatgpt.com/plugins, select the + button and create a developer-mode app using https://compatair.fr/mcp. The CompatAir server does not require authentication.
  3. In a new chat, select the app and test a positive case, an incompatible case and an insufficient_data case. Repeat the check in Deep Research when that surface is available in your workspace.

Menus and permissions depend on the plan and workspace policy. Before publishing, an administrator should review permissions and tool changes.

Official reference: OpenAI · Connect in ChatGPT.

Claude Code

CLI installation

HTTP is the recommended transport for remote MCP servers.

claude mcp add --transport http compatair https://compatair.fr/mcp
claude mcp get compatair
# In Claude Code: /mcp

Project .mcp.json

Claude Code asks for project trust before using this configuration.

{
  "mcpServers": {
    "compatair": {
      "type": "http",
      "url": "https://compatair.fr/mcp"
    }
  }
}

Use --scope project to share the configuration. streamable-http is also accepted as an alias of http. Official reference: Connect Claude Code to tools via MCP.

Gemini Interactions API

Remote MCP in the Interactions API accepts Streamable HTTP servers and can restrict the exposed surface with allowed_tools.

Python

from google import genai

client = genai.Client()
interaction = client.interactions.create(
    model="gemini-3.5-flash",
    input="Is this impact wrench compatible with my compressor?",
    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);

Check currently supported models in Google’s Gemini Remote MCP documentation.

OpenAI Agents SDK

In Python, HostedMCPTool lets the Responses API call the public server. In JavaScript, MCPServerStreamableHttp connects the application process directly to it.

Python · Hosted MCP

import asyncio
from agents import Agent, HostedMCPTool, Runner

async def main() -> None:
    agent = Agent(
        name="Compressed air advisor",
        instructions=(
            "Preserve verdict, limitations and source_urls. "
            "Always cite 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, "Explain this CompatAir verdict")
    print(result.final_output)

asyncio.run(main())

JavaScript · direct connection

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();
}

Official references: Python Agents SDK and JavaScript Agents SDK.

Agent-to-user contract

Every result is verifiable and citable

Every tool publishes an outputSchema. Results are returned both as structuredContent and as serialized JSON in a text block for older clients.

{
  "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": []
}
FieldPurposeAgent rule
verdictNormalized technical state.Never upgrade or soften it.
verdict_scopeScope of the backward-compatible root verdict.Never extend it to another scope.
overall_system_verdictComplete-system verdict, including the distribution network.Keep it distinct from air-supply capacity.
air_supply_verdictPressure, FAD and duty-cycle decision under air_supply.Never present it as complete-system validation.
compatibility_receiptVersioned SHA-256-verifiable receipt.Retain it with audited or shared decisions.
canonical_urlCompatAir page for this result.Cite or offer it to the user.
product_urlsRelevant product pages.Use them for product context.
source_urlsEvidence documents used.Preserve claim-to-source links.
method_versionCalculation contract version.Retain it in caches and traces.
catalog_versionTechnical snapshot queried.Compare it through the changefeed.
observed_atSnapshot observation date.Do not present it as real-time data.
limitationsMissing data and result boundaries.Expose all of them.
next_actionsSafe checks or next pages.Only suggest actions returned by the server.

canonical_url is the CompatAir reference. source_urls contains the documents supporting the data. Merging these two layers would break traceability.

MCP 3.0.0 surface

A short main surface and two explicit extensions

A general client ingests seven compact schemas. Exhaustive contracts remain available from compatair://responses/schema. Audit and synchronization tools use the extended profile; historical contracts use legacy.

ProfileEndpointUse
decision-corehttps://compatair.fr/mcpOrientation, identification, decision, complete system, alternatives, corpus and offers.
extendedhttps://compatair.fr/mcp/extendedDetailed evidence, explanations, complete comparisons and changefeed.
legacyhttps://compatair.fr/mcp/legacyTemporary migration surface for nine historical tools.
AirGraph toolCapability
orient_decisionReturns the smallest suitable tool and profile when the next action is unclear.
evaluate_air_compatibilityExposes the fr.compatair.air.compatibility UCP capability for intent-based transaction enrichment without touching checkout state.
identify_productMatches a name, URL, EAN/GTIN, MPN, evidenced distributor SKU, reference or CompatAir ID without fetching the supplied URL.
build_complete_air_systemAssembles compressor, tools, hose, connectors, filtration and lubrication from documented requirements only.
explain_compatibility_verdictBreaks down pressure, flow, duty cycle and missing-data factors.
find_compatible_alternativesReturns the smallest verified compressor substitution without commission-based ordering.
compare_complete_systemsCompares two to five technical configurations without a commercial score.
get_compatibility_evidenceReturns the specifications, references and AirGraph edges used by one verdict.
search_knowledgeSearches guides, glossary, methods and product pages within the published CompatAir corpus.
get_current_offersReturns fresh allowlisted commercial observations separately from the technical verdict.
get_changefeedReports visible method, catalog and offer versions since a supplied date or version.

Recommended decision-core profile

A general integration loads only these seven tools. The profile, endpoints and legacy successors are also available at compatair://tools/core-profile.

  • orient_decision
  • identify_product
  • evaluate_air_compatibility
  • build_complete_air_system
  • find_compatible_alternatives
  • search_knowledge
  • get_current_offers

Advanced tools loaded on demand

  • get_compatibility_evidence
  • explain_compatibility_verdict
  • compare_complete_systems
  • get_changefeed

Maintained legacy tools

They remain available from https://compatair.fr/mcp/legacy, but each definition carries fr.compatair/lifecycle=legacy and an explicit fr.compatair/successor.

  • search_tools
  • get_tool_requirements
  • search_compressors
  • get_compressor_specs
  • size_compressor
  • check_compatibility
  • compare_compressors
  • find_accessories
  • find_offers

Context resources

  • compatair://catalog/version
  • compatair://methodology
  • compatair://tools/taxonomy
  • compatair://confidence-scale
  • compatair://affiliation-policy
  • compatair://engine/version
  • compatair://airgraph/schema
  • compatair://responses/schema
  • compatair://tools/core-profile
  • compatair://receipts/schema
  • compatair://changefeed/current

Reusable prompts

  • choisir_un_compresseur
  • auditer_une_installation
  • comparer_des_configurations

Sector data model

AirGraph connects demand, distribution and evidence

The graph does more than connect one tool to one compressor. It models technical requirements, distribution components, verdicts and evidence under stable identifiers.

Product

ca:compressor:<id> and ca:tool:<id>.

Configuration

ca:configuration:<digest> depends on the compressor, sorted tools and usage mode.

Requirement

ca:requirement:<id> carries a documented pressure, flow or component fact.

A missing requirement remains missing. CompatAir does not infer pressure drop from an unknown hose and never converts intake displacement into FAD. The graph also records this absence in limitations.

Decisions can be frozen into a compatibility_receipt. Response fidelity is measurable with the public 100-scenario benchmark. MCP profile and tool selection are tested separately with the 50-request agent-selection suite, without publishing a score before execution through real models and tokenizers. Evidence changes are mapped to portfolios through the Compatibility Impact Feed.

Trust boundary

A public server designed to limit its own power

The service’s strongest defense is its narrow scope. CompatAir MCP cannot modify state, accepts no secrets, fetches no user-supplied URL and exposes neither the proprietary engine nor the filesystem.

RiskEnforced control
DNS rebinding and browser callsLoopback binding behind the HTTPS proxy. A present Origin must be allowlisted or the server returns 403.
SSRFidentify_product parses identifiers and URL segments only. It never downloads remote content.
Tool abuseAll tools are functionally read-only. MCP annotations describe this, while the server enforces it.
Oversized input64 KiB body limit, 2,048-character URL limit, bounded fields, arrays, cursors and identifiers.
Basic denial of service120 requests per minute per client address, 10-second server timeouts and bounded sockets.
Exfiltration or retentionTools retain no free text. Usage counters are aggregated and addresses are temporary rate-limit keys only.
Merchant redirectsHTTPS-only, explicit merchant and destination allowlists, maximum 48-hour offer freshness.
Commercial influenceTechnical calculation runs before offers. Offers use a separate snapshot and tool.

No authentication is intentional for this public resource with no user data and no write action. Any future private or personalized feature must establish a new boundary, use resource-appropriate authorization and reject third-party token passthrough.

References: transport specification and MCP security best practices.

Reusable checklist

What a production MCP server should be able to demonstrate

This list audits CompatAir and can also be used to review any remote server. A tool annotation or documentation claim is never sufficient evidence on its own.

  • A single Streamable HTTP endpoint and a server.json manifest using remotes.
  • Closed, bounded input schemas validated before processing.
  • A conforming outputSchema and structuredContent for every tool.
  • A text fallback for older clients.
  • Annotations that match the server’s actual authority.
  • Origin validation, loopback binding and an HTTPS proxy for remote access.
  • Documented rate limits, timeouts, maximum sizes and pagination.
  • A clear split between protocol errors and tool execution errors.
  • An explicit policy for data, logs, secrets and retention.
  • Stable identifiers, method versions and dated snapshots.
  • A canonical page and retained evidence in every domain result.
  • A changefeed for safe cache and decision invalidation.
  • Negative tests for origins, media types, JSON, arguments, quotas and destinations.
  • Human-readable and machine-readable documentation released together.

The specification states that clients must treat tool annotations as untrusted unless the server itself is trusted. Clients should also validate structured results and keep a human in the loop for sensitive operations. See the MCP tools specification.

Operational honesty

What the server refuses to assume

  • Intake displacement is never presented as free air delivery.
  • FAD is compared at the required pressure with no extrapolation outside a documented curve.
  • Leaks and pressure drop are added only from explicit measurements.
  • Per-action demand requires an action rate. Inflation requires volume, pressures and target time.
  • A complete system remains insufficient_data when decisive hose, connector, filtration or lubrication requirements are undocumented.
  • An absent, expired or non-allowlisted offer is never replaced or invented.
  • An MCP result does not replace a manufacturer manual, an in-load measurement, pressure-equipment rules or workplace safety requirements.

Diagnostics

Understand HTTP responses

StatusTypical causeCorrection
400Invalid JSON, JSON-RPC, protocol version or tool argument.Check the request shape and tool schema.
403A present Origin is not allowlisted.Use a trusted client or the official origin.
405GET /mcp or another unsupported method.Use POST. No server-initiated SSE stream is exposed.
406Incomplete Accept header.Include application/json, text/event-stream.
413Body larger than 64 KiB.Reduce input and paginate.
415Non-JSON Content-Type.Send application/json.
429More than 120 requests per minute from one address.Honor Retry-After: 60 and cache stable lists.
5xxUnavailable snapshot or internal error.Check service status, retry and never convert failure into a verdict.

Discovery and governance

Versions, manifest and reference documents

The registry manifest versioned with CompatAir declares the official remote through remotes:

{
  "name": "io.github.bluetouff/compatair",
  "version": "3.0.0",
  "remotes": [{
    "type": "streamable-http",
    "url": "https://compatair.fr/mcp"
  }]
}

CompatAir MCP 3.0.0 keeps https://compatair.fr/mcp as the Registry main remote. The repository requires an exact match between the manifest version, the version returned by initialize and the Registry entry before publication is considered complete.

For an agent

llms.txt summarizes non-negotiable interpretation rules and entry points.

For a cache

get_changefeed and compatair://changefeed/current expose visible versions.

The complete text contract remains available in llms-full.txt. The version compatibility matrix separates product, MCP server, engine, method and schema versions.

Normative and integration sources

To report a data or integration issue, use the contact page. For a vulnerability, follow the security policy.