API Anything 发布:把任意网站变成智能体可调用的 API
Turn any app/website into an API
API Anything 发布,通过记录网站自身页面发出的请求,把网站学习成可复用的 operation,智能体可用 MCP、CLI 或 TypeScript 调用并拿到 JSON。
教你的智能体一次网站。之后,它就像调用 API 一样调用该网站,而不是驱动浏览器。
API Anything 会观察网站自身页面发出的请求,并学习其中哪些部分是你的输入。它把结果保存为一个操作。你的智能体通过 MCP、CLI 或 TypeScript 用新的输入调用该操作,并通过纯 HTTP 拿回 JSON。
同一个智能体(Claude Opus 5.5),同一个提示词,同时启动。左:它通过 Playwright MCP 驱动无头 Chrome。右:它调用 API Anything 的 Google Flights 操作。以 3 倍速播放,无剪辑;计时器显示真实经过的时间。录制于 2026-09-28。MP4 · 录制方式
每个任务各运行 5 次,使用 API Anything 的智能体回答快 1.5 到 2 倍,读取的 token 大约只有一半,成本相同或更低。全部 20 个答案都正确。 方法、原始数据和局限。
安装
把这段粘贴到 Claude Code、Codex 或其他编码智能体中:
Set up API Anything for me: https://github.com/goodnight000/api-anything/blob/main/INSTALL.md
智能体会检查 Node 22.13+,构建并安装 api-anything 命令,确认调用可用,然后把 MCP 服务器和技能连接到自身。重启智能体,然后问它类似“Goodreads 给 Piranesi 打几分?”的问题。
手动安装
该包尚未发布到 npm。不要使用 npm install -g github:...,因为它在 npm 11 下会失败。
git clone https://github.com/goodnight000/api-anything.git && cd api-anything npm ci && npm install -g "$(npm pack --silent)" api-anything call hacker-news search query=sqlite
{"ok":true,"class":"ok","tier":1,"data":[{"title":"Hosting SQLite databases on GitHub Pages or any static file hoster","url":"https://phiresky.github.io/blog/2021/hosting-sqlite-databases-on-github-pages/", ...}, ...],"ms":111}tier: 1 意味着不使用浏览器的纯 HTTP。失败会返回 ok: false,其中包含 class、reason 和 next 步骤。用 codex mcp add api-anything -- api-anything mcp、claude mcp add --scope user api-anything -- api-anything mcp 或这个 MCP 条目连接智能体:
{ "mcpServers": { "api-anything": { "command": "api-anything", "args": ["mcp"] } } }通过 MCP,智能体调用操作,使用四个工具:list_sites、list_operations、call_operation 和 login。要创建操作,智能体需要一个 shell 和技能。只有在创建操作和浏览器回退时才需要 Google Chrome。设置详情。
教它一个新网站
给它带占位符的页面 URL,以及两个示例输入:
api-anything add hn-demo links \ --trigger 'https://news.ycombinator.com/from?site={domain}' \ --example domain=github.com --example2 domain=github.io --match path=/from \ --html '{"items":"tr.athing","fields":{"title":".titleline > a","url":".titleline > a@href"}}' api-anything call hn-demo links domain=arxiv.org # 30 arxiv.org stories, tier 1
无头 Chrome 为每个示例加载一次页面。请求中随输入变化的部分成为参数,其余部分存储为模板。智能体(或你)选择请求和字段。API Anything 无需 LLM 即可构建模板。 录制演示。
从意图出发映射网站
告诉智能体你需要从某个网站获取什么。技能会让它按顺序执行以下操作:
- 询问请求中任何不清楚的地方。
- 提出操作并等待你的批准。
- 用
capture --outline侦察每个页面。这是每个请求返回内容的摘要,这样智能体就不必读取完整响应。 - 构建每个操作,并用一个非示例的输入进行检查。
Goodreads 自 2020 年起就没有公开 API。一次运行耗时 6.3 分钟,花费 1.19 美元。它生成了搜索、书籍详情、某位作者的书和评论:
api-anything call goodreads searchBooks q=piranesi api-anything call goodreads getBook bookId=50202953
- 在未见过的书籍上测试。测试使用了 30 本书,构建操作期间没有人用过这些书。对于搜索找到的 29 本书,每个检查的字段都与 Chrome 渲染的页面匹配:标题、评分、评分数量和页数。全部 146 次调用都通过纯 HTTP 进行。
- 智能体对比。使用这些操作的智能体在 30.5 秒内回答了 5 本书;浏览器智能体用了 182.5 秒。对于一本书,成本只有三分之一。
- 无需智能体。一个普通脚本(
examples/reading-list.mjs)在 16 秒内构建出同样的五本书表格,无需模型。
包含内容
9 个网站上的 22 个读取操作:
google-flights:搜索、热门航班、价格日历hacker-newsx和instagram个人资料- 在
youtube、airbnb和amazon上搜索 linkedin:个人资料、公司和搜索,使用你自己的登录goodreads:搜索、图书、作者列表和评论,均由上方的探索器构建
它们只覆盖选定的功能,而非整个网站。api-anything ops <site> 列出了参数和注意事项。
工作原理
- 学习。Chrome 会记录页面针对两个示例输入发出的请求。跟随这些输入之后的请求会变成一个带槽位的模板,而 cookie 和令牌则变成对本地存储的引用。
- 调用。填充槽位,并用 Node 的
fetch发送请求。如果网站拦截了该请求,就从 Chrome 页面内部发起抓取。作为读取操作的最后手段,运行页面本身并读取它自己的响应。 - 修复。如果请求停止工作(id 轮换、字段移动),就重新学习它,并且只有在重放成功后才保存新版本。否则调用会返回错误,而不是别人的数据。
限制
- 它是一个本地工具,不是托管 API。它使用你的机器、你的网络和你的会话。
- 它只知道被教过的操作。它并不支持每个网站的所有功能。
- 修复可能会失败。它不解决 CAPTCHA,如果网站对真实 Chrome 发起挑战,你必须手动通过挑战。
- 没有捆绑任何写操作。LinkedIn 消息功能未捆绑,也未针对 LinkedIn 进行过测试。写操作仅针对本地测试夹具进行过测试,并且需要
--allow-writes。HTTP 2xx 并不能证明消息已送达。 - 凭据保存在
~/.api-anything中,而规格只保存引用,绝不保存值。请阅读每个网站的条款:你要为自己的使用方式负责。
文档
基准测试 · 演示 · 面向代理的设置 · 参考 · 设计 · 发布检查 · 贡献
MIT 许可。
来源:Hacker News · github.com
