2026年5月26日 2 分钟阅读

如何用 mcp2cli 把任意 API 变成 CLI 命令,告别 MCP Token 浪费

tinyash 0 条评论

如果你用过 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 值得放进你的工具箱。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。