2026年5月25日 3 分钟阅读

Mcp2cli 实战指南:一条 CLI 命令调用所有 API,Token 节省 99%

tinyash 0 条评论

MCP(Model Context Protocol)正在成为 AI Agent 连接外部工具的标准协议,但它有一个被广泛吐槽的问题:每次工具调用都要传输完整的工具 Schema(模式定义)。一个典型的 MCP 服务器可能有几十个工具,每个工具的 JSON Schema 动辄几百个 token,累计下来每个交互回合都要浪费几千甚至上万个 token。

Mcp2cli 正是为解决这个问题而生的开源工具。它把 MCP 服务器、OpenAPI 规范和 GraphQL 端点统一转换成 CLI 命令,让 AI Agent 用极其简洁的语法调用任何 API,在 token 消耗上实现了 96-99% 的压缩。项目发布在 Hacker News 上获得了 146 个点赞和大量讨论,受到开发者社区的高度关注。

核心思路:为什么 CLI 比 MCP 省 Token?

要理解 mcp2cli 的 token 节省原理,先看一个对比场景。

传统 MCP 调用方式:每次工具调用,AI Agent 需要发送完整的工具定义到 LLM。一个中等规模的文件系统 MCP 服务器可能定义 8-10 个工具,每个工具带 JSON Schema 参数定义。这些定义加起来一次对话回合就要消耗 1000-3000 token。而且——每次对话回合都要重新发送。

mcp2cli 的 CLI 方式:把工具调用变成简单的命令行参数。mcp2cli --mcp-stdio "npx server" read-file --path /tmp/hello.txt——就这么简单。Agent 只需要知道工具名称和几个参数,不用每次都传输 Schema。

根据项目的实际测试,对于一个包含 96 个工具的 MCP 服务器:

  • 默认的 --list 输出:约 1400 tokens
  • 使用 --top 10 --compact 按使用频率排序:仅 20 tokens

这不是渐进式优化,而是量级上的跨越。

安装与快速上手

mcp2cli 基于 Python,安装极其简单:

# 直接运行,无需安装
uvx mcp2cli --help

# 或全局安装
uv tool install mcp2cli

项目依赖 uv(Python 的现代包管理器),如果你的环境还没有安装 uv,先跑 curl -LsSf https://astral.sh/uv/install.sh | sh 即可。

装好后,连接一个 MCP 服务器试试:

# 列出远程 MCP 服务器的可用工具
mcp2cli --mcp https://mcp.example.com/sse --list

# 调用某个工具
mcp2cli --mcp https://mcp.example.com/sse search --query "test"

四种连接模式

mcp2cli 支持四种数据源,覆盖了几乎所有 API 形式:

1. MCP HTTP/SSE 模式

连接远程 MCP 服务器(支持 SSE 和 Streamable HTTP 传输):

mcp2cli --mcp https://mcp.example.com/sse --list

# 带认证头
mcp2cli --mcp https://mcp.example.com/sse \
  --auth-header "x-api-key:sk-..." \
  query --sql "SELECT 1"

# 搜索指定工具(不区分大小写)
mcp2cli --mcp https://mcp.example.com/sse --search "task"

mcp2cli 还内置了 OAuth 支持,自动处理令牌获取、缓存和刷新:

# 授权码 + PKCE 流程(浏览器交互)
mcp2cli --mcp https://mcp.example.com/sse --oauth --list

# 客户端凭证流程(机器对机器)
mcp2cli --mcp https://api.example.com/sse \
  --oauth-client-id "my-client-id" \
  --oauth-client-secret "my-secret" \
  --list

2. MCP stdio 模式

连接本地运行的标准 I/O MCP 服务器,这是 Claude Code、Cursor 等 AI 编码工具最常用的方式:

# 列出本地文件系统 MCP 服务器的工具
mcp2cli --mcp-stdio "npx @modelcontextprotocol/server-filesystem /tmp" --list

# 调用工具
mcp2cli --mcp-stdio "npx @modelcontextprotocol/server-filesystem /tmp" \
  read-file --path /tmp/hello.txt

# 给服务进程传递环境变量
mcp2cli --mcp-stdio "node server.js" --env API_KEY=xxx --env DEBUG=1 \
  search --query "test"

3. OpenAPI 模式

直接把 Swagger/OpenAPI 规范变成 CLI 命令,零代码生成:

# 从远程 OpenAPI 规范列出所有端点
mcp2cli --spec https://petstore3.swagger.io/api/v3/openapi.json --list

# 调用端点
mcp2cli --spec ./openapi.json --base-url https://api.example.com \
  list-pets --status available

# 从 stdin 传递 JSON body
echo '{"name": "Fido", "tag": "dog"}' | \
  mcp2cli --spec ./spec.json create-pet --stdin

这对那些只有 REST API 却没有 MCP 服务器的老项目来说简直就是救命稻草——不需要写任何适配代码,直接点对点映射。

4. GraphQL 模式

内省 GraphQL 端点,自动发现查询和变更操作:

# 列出所有查询和变更
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"

GraphQL 模式自动生成选择集和参数化查询,不需要 SDL 解析或代码生成——真正做到即连即用。

Bake 模式:告别重复参数

如果你每天都要连接同一个 API,反复输入 --spec--auth-header 等参数会很烦。mcp2cli 的 bake 模式可以保存连接配置:

# 把 OpenAPI 规范烘焙成一个命名工具
mcp2cli bake create petstore \
  --spec https://api.example.com/spec.json \
  --exclude "delete-*,update-*" \
  --methods GET,POST --cache-ttl 7200

# 使用 @ 前缀调用,一个参数都不用带
mcp2cli @petstore --list
mcp2cli @petstore list-pets --limit 10

# 安装为系统级 CLI 命令
mcp2cli bake install petstore
# 之后可以直接用 petstore list-pets --limit 10

bake install 会在 ~/.local/bin/ 创建一个独立的 shell wrapper,这样你就可以像使用系统工具一样调用它们了。对于团队协作,你还可以把 bake 配置分享给同事,大家都用同一套 API 别名。

Token 优化高级技巧

使用频率驱动的排序

mcp2cli 会记录工具调用的频率,帮助我们优先展示最常用的工具:

# 只显示使用最多的 10 个工具,紧凑格式显示
mcp2cli @myapi --list --top 10 --compact

# 按最近使用排序
mcp2cli @myapi --list --sort recent

当有使用统计数据时,--list 默认按调用频率排序。这对 AI 编码 Agent 尤其重要——Agent 在每次思考时都会调用 --list 来了解可用工具有哪些,紧凑输出能显著减少 token 消耗。

TOON 与缓存

对于 LLM 消费场景,mcp2cli 提供 TOON(Token-Efficient)格式,对大型数组比 JSON 节省 40-60% 的 token:

mcp2cli --mcp https://mcp.example.com/sse --toon list-tags

缓存方面,规范文件默认缓存 1 小时,支持自定义 TTL 和从环境变量读取密钥:

mcp2cli --spec https://api.example.com/spec.json --cache-ttl 86400 --list

mcp2cli --mcp https://mcp.example.com/sse \
  --auth-header "Authorization:env:MY_API_TOKEN" \
  --list

本地文件永不缓存。

使用场景

场景一:Agent 工具调用优化

假设你在 Claude Code 中使用文件系统 MCP 服务器。每次 Agent 需要读文件,MCP 协议都会把完整的工具列表和 Schema 塞进上下文。有了 mcp2cli,只需一条简短命令:

mcp2cli --mcp-stdio "npx @modelcontextprotocol/server-filesystem /project" \
  read-file --path src/main.py

同样的上下文窗口可以做更多实际工作,而不是被 Schema 浪费掉。

场景二:批量 API 测试

开发 REST API 时,curl 测试每个端点很麻烦——要记 URL、HTTP 方法、请求头。mcp2cli 把这一切抽象成统一 CLI 语法:

mcp2cli --spec ./openapi-dev.yaml --base-url http://localhost:8000 --list
mcp2cli --spec ./openapi-dev.yaml --base-url https://staging.api.com create-user \
  --name "Test User" --email "test@example.com"

场景三:GraphQL API 探索

GraphQL 调试工具往往需要 GUI(如 GraphiQL)。mcp2cli 让你在终端里直接探索:

mcp2cli --graphql https://api.github.com/graphql \
  --auth-header "Authorization:Bearer ghp_xxx" \
  viewer --fields "login name"

与其他方案对比

特性mcp2cliAnthropic Tool Search原生 MCP
Token 节省96-99%中等(基于缓存)
支持 OpenAPI✅ 直接
支持 GraphQL✅ 直接
OAuth 开箱即用需手动实现
离线使用
安装方式uvx 一行需要账号需 SDK
开源✅ MIT协议层开源

mcp2cli 最大的优势在于通用性——不是 MCP 协议的替代品,而是一个让各种 API 协议以统一 CLI 方式暴露给 Agent 的桥梁。

总结

mcp2cli 抓住 MCP 生态中的一个痛点——token 浪费——并用一个简洁的方案解决了它。它把 OpenAPI、GraphQL、MCP 三种 API 协议统一到了同一个 CLI 接口下,对在意 token 成本的团队来说是立竿见影的优化手段。

项目地址:github.com/knowsuchagency/mcp2cli

发表评论

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