关于 apifacts
apifacts 是面向 Agent 和开发者的注册库,记录经验证的 HTTP API、SDK 与 CLI 行为事实,帮助诊断第三方接口错误。其 MCP 工具根据确定性探测返回已知事实和类型化修复方案。
主要功能
- 01经验证的 API 行为事实
- 02针对已知错误的类型化修复
- 03按环境和账户状态区分事实
- 04定时执行的确定性探测
- 05CLI、pytest 插件和 Agent 技能
适用场景
- 01诊断意外的第三方 API 响应
- 02检查限流和破坏性变更行为
- 03HTTP 测试失败时查看已知事实
MCP 相关
通过 stdio 提供一个 `check(target, method, status, body)` 工具,返回匹配事实、类型化修复方案和探测结果。离线模式使用 wheel 内置的快照。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
apifacts
面向 AI Agent 的、经过验证的现实变更日志。 一个开放注册库,收录关于第三方机器接口(HTTP API、SDK 包、CLI)实际行为的带类型、注明日期的事实,而非其文档所述内容。
为什么
接口会变,文档会滞后,却没有人告诉 Agent。每次会话都要花费 token 重新发现同样的陷阱:返回 200 和空数组,而不是 429;在响应体中将速率限制报告为 status: 0;SDK 发布版本悄悄移除了某个字段。文档工具会回答“给我正确的文档”;apifacts 则会回答“文档对这个端点的描述现在有误,以下是经过验证的差异”。
安装
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
两个包都发布在 PyPI 上,版本相同,并从同一个标签一起发布
(发布)。插件只有在测试失败后才会发送内容。技能
(skills/apifacts/SKILL.md)会告诉 Claude Code 和其他 Agent 何时调用
apifacts check,以及如何读取结果。
MCP
通过 stdio 调用一个工具 check(target, method, status, body);没有资源,也没有提示词。Claude Code:
claude mcp add apifacts -- uvx --from 'apifacts[mcp]' apifacts mcp
Claude Desktop、Cursor 和其他客户端(在其 JSON 配置中设置 mcpServers):
{"mcpServers": {"apifacts": {"command": "uvx", "args": ["--from", "apifacts[mcp]", "apifacts", "mcp"]}}}
apifacts mcp --offline 会根据 wheel 中打包的快照作答,不会发送任何内容。
如何验证事实
facts/<service>/中每个 YAML 文件记录一条事实,包含类型(error_meaning、rate_limit、breaking_change等)、确切的错误信号、一句话声明、维度(env、plan、region、account_state)和证据。- 事实只来自确定性探测:由我们的运行器按计划执行的声明式 HTTP 步骤和断言。验证过程中不会调用任何语言模型。
- 修复方案是数据,而非建议:从封闭词汇表中选取,并使用带类型的参数(不含自由文本、shell 命令或外部 URL),由我们将其生成一句英文。
- 在其他环境中进行的探测永远不会推翻事实;它只会增加一个维度。
调用 check()
一个端点既能作答,也能同时学习:请求本身就是贡献。发送目标,并可选地附上遇到的错误;即可收到匹配的事实、带类型的修复方案,以及探测观察到的内容。如果目标匹配已注册的模板,就会存储规范化后的观察结果(不含响应体、标头、查询字符串或原始 IP)。
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."}}'
响应永远不会为空:如果没有匹配项,会返回 facts、observed,以及 unknown.reason。
状态
API 已在 https://apifacts.dev 上线(/v0/check、/v0/services、/openapi.json、/healthz;
旧地址 facts.baillot.dev 会重定向至此)。注册库涵盖 apifacts.dev/registry 中列出的服务和事实;每个事实页面都会说明其确立方式;/llms.txt 为 Agent 描述了 API。设计约定位于 docs/specs/。
运行自己的副本:API 会在启动时读取一次 facts/ 和 services/,因此执行 git pull 后需要重启;ops/deploy.sh 可一步完成检出、同步和重启。
贡献
调用 check() 就是在贡献。拉取请求面向人类和 API 提供方:请参阅
CONTRIBUTING.md。提供方签名始终免费。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。