如何用 mcp2cli 把任意 API 变成 CLI 命令,告别 MCP Token 浪费
如果你用过 MCP(Model Context Protocol),一定遇到过这个问题:每次 Agent 调用工具时,都要把完整的方法签名、参数 schema 塞进上下文,一次对话轻松吃掉几万 token。Anthropic 官方也承认这是 MCP 的痛点之一。
mcp2cli 的解法非常巧妙:把 MCP server 或任意 API 包装成 CLI 命令,Agent 只需要执行一条 shell 命令,而非复杂的工具调用。根据作者的实测,这样可以节省 96-99% 的 Tool Call Token。
快速安装
mcp2cli 基于 Python,但不需要安装复杂依赖:
# 直接运行(推荐) uvx mcp2cli --help # 或全局安装 uv tool install mcp2cli
前提:需要安装
uv(Python 包管理器),比 pip 快 10-100 倍。安装方式:curl -LsSf https://astral.sh/uv/install.sh | sh
核心功能:三种 API 模式
mcp2cli 支持三种数据源,覆盖了绝大多数开发场景。
1. MCP 模式(HTTP/SSE)
连接远程 MCP Server,列出可用工具并调用:
# 列出 MCP Server 上的所有工具 mcp2cli --mcp https://mcp.example.com/sse --list # 搜索特定工具 mcp2cli --mcp https://mcp.example.com/sse --search "search" # 调用工具 mcp2cli --mcp https://mcp.example.com/sse search --query "AI agent"
支持自动 OAuth 认证和 token 持久化缓存:
mcp2cli --mcp https://api.example.com/sse --oauth --list
2. OpenAPI 模式
直接解析 OpenAPI/Swagger 规范文件,不需要 MCP 层:
# 列出所有端点
mcp2cli --spec https://petstore3.swagger.io/api/v3/openapi.json --list
# 调用 API
mcp2cli --spec ./openapi.json --base-url https://api.example.com list-pets
# POST 数据从 stdin 传入
echo '{"name": "Fido"}' | mcp2cli --spec ./spec.json create-pet --stdin
3. GraphQL 模式
自动内省 GraphQL 端点,生成查询和变更命令:
# 列出所有 query 和 mutation mcp2cli --graphql https://api.example.com/graphql --list # 执行查询 mcp2cli --graphql https://api.example.com/graphql users --limit 10 # 自定义返回字段 mcp2cli --graphql https://api.example.com/graphql users --fields "id name email"
进阶技巧
Bake 模式:持久化配置
每次都输入 --mcp 和认证参数很烦人。用 bake 保存为命名配置:
# 保存配置 mcp2cli bake create petstore --spec https://api.example.com/spec.json # 用 @ 前缀调用 mcp2cli @petstore list-pets # 安装为独立的系统命令 mcp2cli bake install petstore # 之后可以直接:petstore list-pets
这对 AI Agent 尤其有用——安装后的 bake 命令直接出现在 PATH 中,Agent 无需任何额外配置就能使用。
与 AI Coding Agent 集成
mcp2cli 提供了名为 skill 的安装包,安装后 Claude Code、Cursor、Codex 等 Agent 自动知道如何使用它:
npx skills add knowsuchagency/mcp2cli --skill mcp2cli
之后你的 Agent 就能通过以下 prompt 来调用任意 API:
mcp2cli create a skill for https://api.example.com/openapi.json
Stdio 模式:本地 MCP Server
运行本地的 MCP Server(stdin/stdout 模式):
# 连接本地文件系统 MCP mcp2cli --mcp-stdio "npx @modelcontextprotocol/server-filesystem /tmp" --list # 传递环境变量 mcp2cli --mcp-stdio "node server.js" --env API_KEY=xxx search --query "test"
魔法般的 Secret 管理
敏感信息不会暴露在进程列表中:
# 从环境变量读取密钥 mcp2cli --mcp https://api.example.com/sse \ --auth-header "Authorization:env:MY_API_TOKEN" --list # 从文件读取(适合 Docker Secrets) mcp2cli --mcp https://api.example.com/sse \ --oauth-client-secret "file:/run/secrets/client_secret" --list
为什么它能省 Token?
对比两种模式:
传统 MCP 调用:Agent 每次调用工具时,都需要在上下文中包含完整的工具定义、参数 schema、描述文本——单个工具轻松吃掉 2000+ token。
mcp2cli 方式:Agent 只需要执行 mcp2cli --mcp ... tool_name --param value 这条命令。工具定义完全在命令行这一侧,不占用 LLM 上下文窗口。
对于复杂的 MCP Server(比如有 20+ 工具的 GitHub MCP),每次交互节省的 token 量相当可观。如果一天调用 50 次,那就是 10 万 token 的差距——换算成 API 费用,差距明显。
注意事项
- 不是所有工具都适合 CLI 化:需要实时流式响应的工具(如 SSE streaming)用 CLI 包装会有延迟
- Bake 命令需定期维护:如果 API 版本更新,bake 配置可能需要重新生成
- READme 和 HN 帖子的文案略显 AI 化:工具本身好用,但文档质量被社区吐槽「AI 生成感过重」,建议直接上手试
总结
mcp2cli 解决了一个实际痛点——在 AI Agent 频繁调用外部工具的场景下,token 消耗是实实在在的成本。它不做代码生成,不引入新的协议层,只是把「调用 API 这件事」从 MCP Tool Call 变成了 Shell Command。简单、直接、有效。
如果你是重度使用 Cursor、Claude Code 或 Codex 的开发者,mcp2cli 值得放进你的工具箱。