FACTRAIL

io.github.baronsigmaPublished by GitHub account baronsigmav2.4.1Updated Oct 25, 2026

Evidence infrastructure for agents: source-backed company verification and beta import assessment.

VerifiedStreamable HTTPWeb executableFinanceBusiness & Commerce

Overview

AI-generated overview

FACTRAIL is a remote evidence service that lets an assistant verify French companies by SIREN/SIRET and run beta EU import assessments, returning sourced, audIT

What you can do
Discover capabilities, supported subjects, sources and limits before calling other tools (factrail_capabilities). Verify French company facts such as status, legal name and head office from SIREN/SIRET, with provenance, freshness, conflicts and coverage (factrail_verify). Run a beta EU import assessment covering tariff classification, duties and related evidence (factrail_assess). Re-fetch a prior result by receipt ID and check its content integrity (factrail_get_receipt). Legacy compatibility tools for older integrations remain callable but are deprecated.
When to use it
Use it when a workflow supplies a French SIREN or SIRET and needs a traceable answer about whether the company exists, is active, or its legal name or head office. Also useful for beta, explicitly provisional import and tariff exploration. It is not for general web search, news fact-checking, non-French registries, sanctions checks or binding customs rulings.
Requirements
A remote Streamable HTTP endpoint; no package install or API key is declared for the hosted service. Running it locally needs Python 3.11 or newer, an INSEE_API_KEY for live French company lookups, and optionally FACTRAIL_CACHE_PATH for durable receipts. Network access to the endpoint is required.
Before you install
Results are evidence, not truth: receipts prove content integrity only, not that a statement is correct. Import assessment is beta, tariff and VAT values are curated or provisional, no official TARIC snapshot is installed, and results are not binding customs rulings. Caller input is not verified, and unresolved fields should be passed on as unknown. FACTRAIL alone is not a legally sufficient KYC/KYB system. The README mentions a separate pay-per-call Apify channel.

Installation

In SourceWeft

  1. Open FACTRAIL in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.baronsigma%2Ffactrail/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "factrail": {
      "type": "http",
      "url": "https://mcp.factrail.online/mcp"
    }
  }
}

README

FACTRAIL

Evidence infrastructure for AI agents.

FACTRAIL gives agents structured, source-backed real-world evidence with provenance, freshness, conflicts, support levels, coverage, unresolved dependencies, and reusable receipts. It is a public beta: capabilities are defined and inspectable, and unsupported scope or failed sources are represented explicitly.

FACTRAIL is a Python Model Context Protocol server. This repository contains package version 2.4.1, the Evidence Contract, tests, operator tooling, and the static site. Hosted deployments may run a different release; inspect the live tools/list and factrail_capabilities results before relying on deployed capabilities.

Connect via MCP

Endpoint: https://mcp.factrail.online/mcp (Streamable HTTP)

json
{  "mcpServers": {    "factrail": {      "url": "https://mcp.factrail.online/mcp"    }  }}

Client configuration varies. Website: factrail.online · Health: healthz.

Why FACTRAIL

Agents should not have to choose between blindly trusting model output and rebuilding source verification from scratch. FACTRAIL provides an evidence layer between agents and real-world data sources. Instead of returning only an answer, it can return what was established, where it came from, how current it is, what remains unresolved, and a receipt another agent can inspect later.

The principle is simple: unknown is better than invented. Caller input is not automatically verified. Derived values inherit the quality of their dependencies. Conflicts, stale data, and source failures remain visible. A capability exposes its limits programmatically.

When an agent should use FACTRAIL

  • Use it when a user or workflow gives a French SIREN/SIRET, or asks whether a French company exists, is active, or what its legal name or head office is, and the answer must be traceable.
  • Use factrail_capabilities first to learn current coverage. Use factrail_get_receipt to re-check a previous result.
  • Don't use it for general web search, news or claim fact-checking, non-French company registries, sanctions/beneficial-ownership checks, or binding customs rulings (see Current limitations).
  • When the envelope lists unresolved fields, pass them on as unknown. Do not fill them from model memory.

Core MCP tools

New integrations should use the generic primitives:

ToolPurpose
factrail_capabilitiesDiscover available capability IDs, operations, versions, inputs, fields, sources, dynamic source state, and limitations. Call this first.
factrail_verifyVerify structured facts for a supported subject. Currently supports company_fr.
factrail_assessAssess a structured real-world situation. Currently supports import (Beta).
factrail_get_receiptRetrieve a prior EvidenceEnvelope by receipt ID and check content integrity.

Compatibility tools remain available: verify_french_company, assess_import, and experimental/compatibility-only analyze_company. New clients should prefer the generic tools. analyze_company does not synthesize unavailable finance, credit, rating, risk, recommendation, executive-count, or confidence values; unavailable fields remain null/unavailable.

Available today: French company verification

The company_fr capability is FACTRAIL's strongest current resolver. It verifies supported French company and establishment information by SIREN or SIRET using INSEE / Sirene and BODACC records. Depending on source records, fields can include identifiers, legal and trade names, status, legal form, NAF/activity code, head office, creation/cessation dates, diffusion status, and BODACC events. No field is guaranteed to exist for every entity.

For current company status and current legal name, INSEE/Sirene current registry data takes precedence over BODACC publication evidence. Lower-priority evidence is retained rather than silently discarded. This can support supplier verification, vendor onboarding, procurement, CRM enrichment, marketplace onboarding, and company/KYB-support workflows. FACTRAIL alone is not a legally sufficient KYC/KYB compliance system.

Example input to factrail_verify (replace the placeholder with an identifier you are authorized to check):

json
{  "subject_type": "company_fr",  "identifier": "<9-digit SIREN or 14-digit SIRET>",  "fields": ["status", "legal_name", "head_office"]}

The actual source response depends on the requested identifier, source availability, and record coverage. FACTRAIL does not fabricate a sample result here.

Beta: trade and import assessment

factrail_assess currently supports assessment_type="import". It accepts structured concepts such as origin, destination, product description, classification or known HS/customs code, goods value, quantity, customs/VAT references, compliance inputs, and freight/insurance values. The result separates caller input, source evidence, classification candidates, and deterministic calculations. Coverage can be partial or provisional.

There is no authoritative EU Member-State VAT integration or complete authoritative landed-cost chain. Curated VAT and tariff values stay marked curated/provisional; derived calculations inherit dependency quality (derived_provisional when their inputs are provisional). Trade assessment is not a binding customs ruling and classification candidates are not definitive customs classification.

Official EU TARIC status

FACTRAIL has infrastructure for validated official European Commission TARIC snapshot ingestion: offline package doctor, strict/compatible parsing, acceptance reporting, hashes/fingerprints, semantic checks, normalized SQLite index, atomic activation, and last-good/stale handling. No genuine Commission TARIC snapshot is currently installed (not_installed). FACTRAIL does not currently serve authoritative live TARIC tariff coverage.

Access2Markets is secondary/supporting evidence, never authoritative TARIC. Curated FACTRAIL tariff references are provisional. No stable official automatic-download endpoint was confirmed, so automatic fetch is unavailable at this time. Operator-supplied official files can be diagnosed and ingested offline; monthly snapshot ingestion is supported, while daily-delta application is deferred.

For operator procedures see TARIC snapshot acceptance and operations and the distribution discovery notes. Detailed tariff calculation is outside the current TARIC snapshot foundation.

Evidence Contract

The canonical EvidenceEnvelope includes schema_version, status, subject, facts, evidence sources, conflicts, coverage, freshness, receipt_id, and generated_at. The current schema is EvidenceEnvelope 1.2; it is independent of the package version.

  • Status can be supported, contradicted, insufficient_evidence, stale, or conflicting_sources; results are not reduced to a boolean.
  • Support levels describe evidence quality: authoritative, supported, derived_supported, derived_provisional, curated, and caller_input. Caller input is not externally verified.
  • Coverage distinguishes requested, resolved, and unresolved fields. Missing input, unsupported fields, and unavailable sources are different states.
  • Freshness records observation times and stale status.
  • Conflicts preserve competing source assertions; field-specific authority policy may resolve a conflict without deleting its lower-priority evidence.
  • Source outcomes distinguish success, partial response, source error/unavailable, source not integrated, disabled lookup, and not required.

A deterministic calculation does not become authoritative merely because its arithmetic is deterministic. Authoritative inputs may support a derived_supported result; provisional inputs produce derived_provisional results.

Receipts

A receipt ID (fr_…) is content-addressed using deterministic canonical hashing. On retrieval, FACTRAIL recomputes the hash and rejects altered content with an integrity error. Supported historical canonicalization remains available. Receipts make an evidence observation reusable and traceable; they provide content integrity, not a digital signature, blockchain record, immutable global ledger entry, or proof that a statement is universally true. The state_fingerprint identifies substantive state across observations. See Evidence Core design.

Sources and trust principles

FACTRAIL's source hierarchy is explicit: official records may be authoritative for defined fields, secondary sources remain secondary, curated references remain curated, and caller input remains input. Source identity, retrieval time, content hashes where available, support level, and source status accompany evidence. Historical publication evidence does not automatically determine current state.

FACTRAIL follows these principles:

  1. Never manufacture evidence; unknown is better than invented.
  2. Caller input is not automatically verified.
  3. Derived values inherit the support quality of their dependencies.
  4. Conflicting sources remain visible.
  5. Source failures and stale evidence are explicit.
  6. Secondary evidence is not silently promoted to authoritative.
  7. Receipts protect content integrity, not philosophical truth.
  8. Capability limits are exposed programmatically.

Quick start: discover, verify, retrieve

Use factrail_capabilities first with {}. The live result identifies currently supported capability IDs and dynamic source state. Then a company verification call uses:

json
{  "subject_type": "company_fr",  "identifier": "<SIREN or SIRET>",  "fields": ["status", "legal_name"]}

To retrieve the result later, pass its actual receipt_id:

json
{"receipt_id":"<receipt_id returned by FACTRAIL>"}

MCP tool calls wrap these argument objects in their normal client protocol. See request examples for generic verify, receipt, and import inputs. Examples use placeholders and do not assert fabricated output.

Run locally

Requires Python 3.11 or newer.

bash
python3 -m venv .venv. .venv/bin/activatepip install -e '.[dev]'cp .env.example .env# Set INSEE_API_KEY in .env for live French company lookups.python3 -m factrail.mcp_http_server

HTTP defaults to port 8765. Use FACTRAIL_HOST and FACTRAIL_PORT to change the bind address and port. Local MCP endpoint: POST http://localhost:8765/mcp; health endpoint: /healthz. For stdio clients, run python3 -m factrail.mcp_server.

Get an INSEE key through the INSEE API portal. Default SQLite cache is /tmp/factrail_cache.db; set FACTRAIL_CACHE_PATH to a persistent path for durable receipts. The server includes per-client rate limiting and stale cache fallback for company lookups.

Public HTTP settings

VariableDefaultMeaning
FACTRAIL_ALLOWED_HOSTSlocalhost/loopbackHost allowlist (DNS-rebinding protection, 421 on mismatch).
FACTRAIL_ALLOWED_ORIGINSunsetComma-separated Origin allowlist. Unset: requests carrying an Origin header are rejected (403); Origin-less API clients work. *: any Origin allowed, CORS enabled; Host check stays on.
FACTRAIL_RATE_LIMIT_PER_MIN60Requests per window per client (0 disables). The client is CF-Connecting-IP, then the first X-Forwarded-For entry, trusted only when the direct peer is loopback.
FACTRAIL_RATE_WINDOW_SECONDS60Sliding window length.
FACTRAIL_RATE_BLOCK_AFTER30Rejected requests within one window before a temporary block (0 disables).
FACTRAIL_RATE_BLOCK_SECONDS300Block duration.
FACTRAIL_GATEWAY_USER_AGENTSSmitheryBotCase-insensitive User-Agent substrings identifying MCP gateways (a Smithery CF-Worker header also counts).
FACTRAIL_GATEWAY_RATE_LIMIT_PER_MIN600Requests per window for each gateway bucket.
FACTRAIL_GATEWAY_RATE_BLOCK_AFTER0Block threshold for gateway buckets (0 = never block).
FACTRAIL_GATEWAY_CLIENT_HEADERunsetHeader a gateway uses to forward an end-user id; when present, gateway traffic is keyed per end user.
FACTRAIL_HIDE_LEGACY_TOOLSoffHide deprecated legacy tools from tools/list (they stay callable).

Excess requests receive HTTP 429 with a JSON body and Retry-After. A static server card is served at /.well-known/mcp/server-card.json.

Current limitations

FACTRAIL does not currently provide arbitrary natural-language fact checking, general web search or URL fetching, news verification, broad global company verification, dedicated beneficial ownership/sanctions/EORI resolvers, authoritative installed EU TARIC data, authoritative EU VAT integration, complete authoritative landed-cost results, arbitrary regulatory verification, signed receipts, blockchain receipts, global immutable evidence ledgers, continuous evidence watches, or general-purpose LLM reasoning over unknown claims.

Deployment and development

For operators, see the deployment checklist, TARIC acceptance guide, and distribution notes. Release history: CHANGELOG. The static site is in site/ and needs no build step.

bash
python3 -m pytest -qpython3 -m compileall -q factrail testspython3 -m factrail.evidence.demand --days 7

The offline suite uses mocks and fixtures; live tests follow the project's --live convention and require external access. Demand telemetry stores normalized categories and linkage, not raw IP addresses, full User-Agent strings, request arguments, authorization headers, or full Evidence envelopes. It helps identify requested capabilities and evidence gaps.

The Apify Actor wrapper is a thin distribution/payment channel for the canonical MCP service; it does not change FACTRAIL's source adapters or evidence behavior.

Public discovery surfaces

Related: Fallback agent tools

Fallback agent tools applies the same rule (tools should report what they checked) to a different question: where to get data. Its source_route tool looks for candidate machine-readable routes (API, OpenAPI, bulk download, feed) on a publisher's site within strict request limits, and treats "not found here" as "not found within checked scope", never as proof that no route exists. It is a separate service (x402 pay-per-call beta, currently Base Sepolia testnet only) with no dependency on FACTRAIL.

License

Code and documentation are licensed under Apache License 2.0. Source data remains subject to publisher terms, including INSEE and BODACC open-data licenses.

Source: README.md at commit 3759490

Tools

7

factrail_capabilities

FACTRAIL Capabilities

Use when you need to discover what FACTRAIL can verify or assess before calling another tool. Returns available capabilities, inputs, fields, sources, versions, and limitations; call first to inspect current coverage and source state.

Parametersoperationcapability

factrail_assess

Assess EU Import (Beta)

Use when you need a source-backed assessment of importing a product into the EU (tariff classification, duties, and related evidence). Returns an EvidenceEnvelope; import assessment is Beta and results expose source coverage and support levels.

Parametersparametersrequiredassessment_typerequired

factrail_verify

Verify French Company

Use when you need verified, source-backed facts about a French company from its SIREN or SIRET. Returns Evidence with provenance, freshness, coverage, conflicts, and a reusable receipt.

Parametersfieldsidentifierrequiredsubject_typerequired

factrail_get_receipt

Get Evidence Receipt

Use when you need to re-fetch or audit a previously returned FACTRAIL result by its receipt ID. Recomputes the stored EvidenceEnvelope's content hash and rejects altered content; this checks integrity, not truth.

Parametersreceipt_idrequired

verify_french_company

[Deprecated] French Company Lookup

Deprecated: use factrail_verify instead. Use when an older integration still expects the legacy flat French company lookup by SIREN/SIRET; kept callable for compatibility only.

Parametersidentifierrequired

assess_import

[Deprecated] EU Import Assessment

Deprecated: use factrail_assess instead. Use when an older integration still expects the legacy beta EU import assessment format; coverage may be partial or provisional and this is not a binding customs result.

Parametersmodelproductrequiredcurrencyrequiredincotermmaterialquantityrequiredweight_kgdimensionsgoods_valuerequiredfreight_costmanufacturerknown_hs_code+6 more

analyze_company

[Deprecated] Company Analysis

Deprecated: use factrail_verify instead. Use only when an older integration still calls this experimental tool; financial and credit data sources are unavailable and returned fields are null.

Parameterssirencompany_namecountry_code

Version history

3
  1. v2.4.1LatestSep 29, 2026
  2. v2.4.0Sep 29, 2026
  3. v1.3.3Sep 23, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts