api2cli:讓 Claude 把任意 API 變成 CLI,再把用法說明書也一起寫了
api2cli 是一個 Claude Code Skill,能把任意 API 變成可用的 CLI 工具,並進一步生成 SKILL.md——讓未來的 Claude 會話無需閱讀代碼即可直接使用這個 CLI。套娃兩層:Claude 把 API 變成 CLI,再把「怎麼用這個 CLI」的說明書也寫了。
使用方式極簡:你只需告訴 Claude「給我把 Resend API 包裝成 CLI」,Claude 會自動發現所有端點(支持文檔頁面、實時 URL 探測、peek-api 抓包三種方式),生成一個基於 Commander.js 的 CLI 工具,輸出雙模式——終端直接運行時人類可讀,管道傳輸時自動切換爲 JSON 格式,方便 AI Agent 使用。
核心價值在於「可複用性」:生成的 SKILL.md 會告訴未來的 Claude 所有可用命令和常見工作流,一次生成、永久可用,任何 Claude Code 會話都能直接拿來用,完全不需要重新讀 API 文檔。
核心概念
api2cli 解决的是一个「工具可發現性」的問題:你有一个 API,想让 Claude Agent 用它,但每次都要让 Claude 重新读文档太慢了。通過 api2cli,你可以一次性生成 CLI + Skill,之後所有會话都能直接调用。
生成的產物
1. Commander.js CLI
特點:
- **双模式输出**:终端運行时人类可读,管道时自動切换 JSON
- **自文档化**:不带参數運行时输出所有命令列表
- **完整 API 客户端**:内置認证、分页、重試(指數退避)、速率限制、缓存
- **Agent 友好错误**:错误信息包含修复建议(next_actions)
示例(Resend 邮件 API):
# 终端直接運行(人类可读)
$ npx tsx scripts/resend.ts domains list
ID Domain Status
re_abc123 example.com verified
# 管道传输(Agent 可读)
$ npx tsx scripts/resend.ts domains list | cat
{
"ok": true,
"result": { "domains": [...] },
"next_actions": [
{ "command": "resend domains get re_abc123" }
]
}
2. SKILL.md
生成的 SKILL.md 會放在 `.claude/skills/{service}/` 目录,内容包括:
- 所有可用命令(带参數说明)
- 常见多步骤工作流
- 正确的触發短语(让 Claude 自動激活)
- 認证配置方法
端點發現方式
| 方式 | 适用場景 |
|------|----------|
| 文档页面解析 | 公開 API 文档 |
| 實时 URL 探測 | 有 Base URL + 凭证的 API |
| peek-api 抓包 | 需要抓取網絡流量來發現内部端點 |
安装使用
# 克隆仓库
git clone https://github.com/alexknowshtml/api2cli.git
# 将 skill 复制到你的项目
cp -r api2cli/skill/ /path/to/your/project/.claude/skills/api2cli/
然後在 Claude Code 中说:
给我把 Resend API 包装成 CLI
把這个文档页面的 API 生成 CLI:https://docs.example.com/api
适用場景
- **自動化工具链**:把各种 SaaS API 变成 Claude 可以调用的工具
- **团队共享**:生成一次 Skill,团队所有人的 Claude Code 都能用
- **内部 API**:用 peek-api 抓包發現公司内部 API 的端點,然後生成 CLI
- **測試和调試**:双模式输出让手動測試和 Agent 调用都很方便
局限性
- 需要 Claude Code 才能運行(不是独立工具)
- 生成质量依赖 API 文档的完整度
- 复杂認证流程(OAuth 2.0 等)可能需要手動补充