LLMs are notorious for filling in the blanks with plausible lies, and standard tool-calling often just passes the buck to the model. A new pattern called evidence envelopes aims to fix this by returning structured data that explicitly marks what is known, unknown, or conflicting. The implementation is FACTRAIL MCP, an open-source (Apache-2.0) server that wraps French company data from INSEE and BODACC registries.

The Problem With Bare Values

When an agent asks a tool for a fact, it usually gets back a bare value with no source, no date, and no way of saying it couldn't find the information. The model then has to work out which part of the text is the fact, often inventing a source or silently ignoring missing fields. FACTRAIL changes the contract: the tool returns a JSON envelope where every fact is tied to specific evidence IDs, retrieval timestamps, and support levels. If a field cannot be resolved, it appears in a fields_unresolved list with a reason, forcing the agent to report the gap instead of guessing.

Inside the Evidence Envelope

The envelope schema (version 1.2) includes a status field that can be supported, contradicted, insufficient_evidence, stale, or conflicting_sources. It also contains facts, evidence, coverage, conflicts, and freshness metadata. For example, a verification of Γ‰lectricitΓ© de France (SIREN 552081317) returned authoritative data for the legal name and address from INSEE Sirene, but marked legal_form as an unsupported_fact. The top-level status became insufficient_evidence, signaling to the agent that the answer is partial. This structure prevents the model from confidently stating a complete answer when one piece is missing.

Receipts and Integrity

Each response includes a receipt_id, a content-addressed hash that allows agents to re-fetch the exact same observation later. This isn't a blockchain signature; it is an integrity check. If the server recomputes the hash and it doesn't match, the envelope was altered. This allows for auditing: you can prove what the agent knew at a specific time, even if the underlying registry data changes later. The server is stateless, so the receipt is the only persistent link between a query and its evidence.

Integration and Limits

The hosted endpoint at https://mcp.factrail.online/mcp is free, read-only, and requires no account or API key, though it is rate-limited to 60 MCP requests per minute per IP. It supports Streamable HTTP and works with standard MCP clients like Claude Desktop, Cursor, and VS Code via the mcp-remote bridge. The server currently covers French companies and beta EU import assessments, but it does not provide general web search or global company data. Self-hosting is possible via the Python package, but requires your own INSEE API key.

Key Takeaways

  • Agents should be given tools that return evidence, not just answers, to reduce hallucination.
  • The insufficient_evidence status is more valuable than a guessed value; write agents to propagate this uncertainty.
  • Use receipt_id to audit agent decisions and ensure data integrity over time.
  • Always call factrail_capabilities first to check live scope and avoid using beta features as authoritative sources.

The Bottom Line

FACTRAIL proves that structured uncertainty is the only way to trust agent output in regulated industries. Stop letting models hallucinate confidence where none exists.