io.github.Illouminus/apifacts is an MCP server that verified facts and typed fixes for failing third-party API calls (Stripe, GitHub, Google…). Its tool list has not been published yet over stdio and sse, requires no API key, and scores 60/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"apifacts": {
"args": [
"--from",
"apifacts[mcp]",
"apifacts",
"mcp"
],
"command": "uvx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Verified facts and typed fixes for failing third-party API calls (Stripe, GitHub, Google…)
This server supports HTTP transport. Be the first to test it - help the community know if it works.
Five weighted categories - click any category to see the underlying evidence.
No known CVEs.
Checked apifacts against OSV.dev.
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in other
deja-vu: local memory over the session histories of forty-three coding agents.
MCP WordPress Remote proxy server
专门为 agent 打造的 agent 搜索工具,具备多语言搜索能力,覆盖中文/英文/学术/代码/购物/金融/新闻/百科。
Searchable football data provider documentation for AI coding agents. Like Context7 for football data.
MCP Security Weekly
Get CVE alerts and security updates for io.github.Illouminus/apifacts and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
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.
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".
pip install apifacts-pytest # pytest plugin: a test failing on an HTTP error prints the known facts
uvx apifacts check https://api.stripe.com/v1/charges -X GET --status 401 # CLI (and library)
npx skills add Illouminus/apifacts # agent skill: on an API error, ask the registry first
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.
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):
- uses: Illouminus/apifacts/action@v0
with:
run: pytest -q # same exit code as without the action; scanned only when it fails
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.
One tool, check(target, method, status, body), over stdio; no resources, no prompts. Claude Code:
claude mcp add apifacts -- uvx --from 'apifacts[mcp]' apifacts mcp
Claude Desktop, Cursor and other clients (mcpServers in their JSON config):
{"mcpServers": {"apifacts": {"command": "uvx", "args": ["--from", "apifacts[mcp]", "apifacts", "mcp"]}}}
apifacts mcp --offline answers from the snapshot packaged in the wheel and sends nothing.
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.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).
curl -s https://apifacts.dev/v0/check \
-H 'Content-Type: application/json' \
-d '{"target": {"method": "POST", "url": "https://api.stripe.com/v1/payment_intents"},
"error": {"status": 400, "body_excerpt": "Keys for idempotent requests can only be used with the same parameters they were first used with."}}'
The response is never empty: facts, observed, and an unknown.reason when nothing matches.
The API is live at https://apifacts.dev (/v0/check, /v0/services, /openapi.json, /healthz;
facts.baillot.dev, the old address,