
apifacts
io.github.IllouminusPublished by GitHub account Illouminusv0.2.1Updated Oct 27, 2026
Verified facts and typed fixes for failing third-party API calls (Stripe, GitHub, Google…)
Overview
Exposes one check tool that returns verified, dated facts and typed fixes about how third-party APIs, SDKs and CLIs actually behave when a call fails.
- What you can do
- Look up a failing third-party API call: send the target, method, status and body excerpt, and get matching verified facts with typed fixes.
- Read what scheduled probes observed for a registered endpoint template, plus an unknown reason when nothing matches.
- Answer offline from a snapshot packaged with the package, without sending anything.
- Scan logs for failed HTTP calls printed by requests, httpx, gh, axios or curl -f and query each one.
- When to use it
- Useful when an assistant is debugging errors from third-party APIs such as Stripe, GitHub or Google and the official docs do not explain the observed behavior, or when a CI build fails on an HTTP call and the known traps should be surfaced.
- Requirements
- Runs locally over stdio as a Python package launched with uvx (apifacts with the mcp extra), so Python and uv are needed. No authentication, environment variables or headers are declared. Online lookups need network access to the apifacts.dev API; offline mode needs none.
Installation
In SourceWeft
- Open apifacts in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
apifacts
A verified changelog of reality for AI agents. An open registry of typed, dated facts about what third-party machine interfaces (HTTP APIs, SDK packages, CLIs) actually do today, as opposed to what their docs say.
Why
Interfaces change, docs lag, and nobody tells the agent. Every session pays tokens to rediscover the
same traps: a 200 with an empty array instead of a 429, a rate limit reported as status: 0 in the
body, an SDK release that silently dropped a field. Documentation tools answer "give me the right docs";
apifacts answers "the docs are wrong about this endpoint right now, here is the verified difference".
Install
Both packages are on PyPI, carry the same version and ship together from one tag
(release). The plugin sends nothing until a test fails. The skill
(skills/apifacts/SKILL.md) tells Claude Code and other agents when to
call apifacts check and how to read the answer.
CI
Agents that fix a red build read the failing step's log, the annotations and the job summary. The
GitHub Action puts the known facts in all three (action/README.md):
Anywhere else, pipe a log through apifacts scan (uvx apifacts scan build.log): it finds the
failed HTTP calls that requests, httpx, gh, axios and curl -f print, and asks about each.
MCP
One tool, check(target, method, status, body), over stdio; no resources, no prompts. Claude Code:
Claude Desktop, Cursor and other clients (mcpServers in their JSON config):
apifacts mcp --offline answers from the snapshot packaged in the wheel and sends nothing.
How a fact is verified
- One fact per YAML file in
facts/<service>/, with a kind (error_meaning,rate_limit,breaking_change, ...), the exact error signal, a one-sentence claim, dimensions (env,plan,region,account_state) and evidence. - Truth comes only from deterministic probes: declarative HTTP steps and assertions that our runner executes on a schedule. No language model is called anywhere in the verification path.
- Fixes are data, not advice: members of a closed vocabulary with typed parameters (no free text, no shell, no foreign URLs), rendered to one English sentence by us.
- A probe in another environment never refutes a fact; it adds a dimension.
Calling check()
One endpoint answers and learns at the same time: the request is the contribution. Send the target and, optionally, the error you got; receive matching facts with typed fixes and what the probes observe. If the target matches a registered template, a normalized observation is stored (no bodies, headers, query strings or raw IPs).
The response is never empty: facts, observed, and an unknown.reason when nothing matches.
Status
The API is live at https://apifacts.dev (/v0/check, /v0/services, /openapi.json, /healthz;
facts.baillot.dev, the old address, redirects there). The registry covers the services and facts listed at
apifacts.dev/registry, each fact page showing how it was
established; /llms.txt describes the API for agents. Design contracts
live in docs/specs/.
Running your own copy: the API reads facts/ and services/ once, at startup, so after a git pull
restart it; ops/deploy.sh checks out, syncs and restarts in one step.
Contributing
Calling check() is contributing. Pull requests are for humans and API producers: see
CONTRIBUTING.md. Producer signatures are always free.
License
Code: MIT. Data (facts/ and the generated fact pages): CC BY 4.0.
Source: README.md at commit 98e9701
Tools
0Version history
1- v0.2.1LatestOct 26, 2026
Score
50% 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 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts