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 等)可能需要手動补充