One engine, three doors

The compliance engine, as tools an agent can call.

Attestwire speaks Model Context Protocol at https://api.attestwire.com/mcp over streamable HTTP. Nine tools: explain a rule, validate an invoice or an existing XML file, generate UBL or CII, check whether VIES is answering, research a French customer. Five of them need no API key, so an agent can be useful before anybody has signed up for anything.

Connect

Claude Code, and any client that speaks streamable HTTP
claude mcp add --transport http attestwire https://api.attestwire.com/mcp

Any other client takes the endpoint directly. It is stateless — POST only, no SSE, no session id — so there is nothing to keep alive.

If your client can only spawn a local process

@attestwire/mcp bridges stdio to the same endpoint and does nothing else, so new tools appear without upgrading it. Paste this into claude_desktop_config.json, .cursor/mcp.json, or whatever your client calls its config:

stdio alternative
{
  "mcpServers": {
    "attestwire": {
      "command": "npx",
      "args": ["-y", "@attestwire/mcp"],
      "env": { "ATTESTWIRE_API_KEY": "aw_live_..." }
    }
  }
}

ATTESTWIRE_API_KEY is optional — drop the env block and the five keyless tools still work. ATTESTWIRE_MCP_URL overrides the endpoint.

Nine tools, in three access classes

ToolAccessWhat it does
explain_rule No key One rule id — BR-DE-15, BR-CO-15, PEPPOL-EN16931-R010 — in plain English: what it requires, the business term it constrains, and a fix.
check_vies_status No key Whether EU VAT number validation is up, overall or per member state, with latency and uptime. Tells a bad VAT number apart from a down endpoint.
check_french_readiness No key Look up a French company by SIREN, SIRET or name in INSEE SIRENE open data, with its mandate dates. It cannot read the DGFiP directory registration itself; no open API exposes that.
list_approved_platforms No key The DGFiP-approved French platforms (Plateformes Agréées, ex-PDP).
issue_api_key No key Mint a free key from an email address — 100 documents a month, no signup flow, no card. Returned once and never recoverable.
validate_invoice Key · 1 doc Check a JSON invoice against EN 16931, XRechnung and Peppol BIS 3. Every failure comes back as a teaching error: rule id, business term, what the regulation requires, and a concrete fix.
validate_invoice_xml Key · 1 doc Check a file the user already has — a UBL 2.1 Invoice or a UN/CEFACT CII CrossIndustryInvoice — and report what did not reach the invoice model. Not a PDF reader: extract the XML from a Factur-X PDF first.
generate_invoice Key · 1 doc Emit UBL 2.1 or CII D16B from a JSON invoice. The profile chooses the syntax. An invalid invoice is refused rather than turned into XML that passes nothing.
get_upgrade_link Key · free Create a checkout link for a paid plan and return the URL. It buys nothing: a person still has to open the link and complete the purchase.

A metered call costs one document against the same monthly quota as the HTTP API — 100 a month on the free plan. A call that is refused for auth, quota or unreadable input costs nothing.

From keyless to keyed, in the order it actually happens

  1. Connect with no credential. explain_rule, check_vies_status, check_french_readiness, list_approved_platforms and issue_api_key answer immediately — enough to diagnose a rule id from a rejection email, or to tell a customer whether VIES is down.
  2. Ask the agent to call issue_api_key. An email address returns a working key: 100 documents a month, no card. It is shown once and only its hash is stored.
  3. The document tools open. validate_invoice, validate_invoice_xml and generate_invoice are what the key buys. Without one they return an error naming issue_api_key as the fix, so an agent gets itself unstuck.
  4. Upgrading is still a human act. get_upgrade_link needs a key, costs no documents, and returns a checkout URL. It does not buy anything: a person opens the link and completes the purchase. Compare plans →

What these tools do not do

validate_invoice_xml reads XML, not PDFs: Factur-X and ZUGFeRD are CII XML inside a PDF/A-3 container, so extract the XML first and package ours separately. Reading a file is a preflight over the parsed model, not a verdict from the receiving platform. check_french_readiness finds the company and explains its mandate; it cannot confirm the company has registered with an approved platform, which lives only in the CAPTCHA-protected DGFiP directory. Read the full limits →

Connect it now.

claude mcp add --transport http attestwire https://api.attestwire.com/mcp

Tool schemas, error shapes and transport details are in the API documentation. Or run the engine in your browser first →