字节笔记本
2026年2月21日
MCPLI:将 MCP 服务器转换为 CLI 工具
本文介绍 MCPLI,一个将 stdio 协议的 MCP 服务器转换为命令行工具的 TypeScript 项目。MCPLI 让任何基于 stdio 的 MCP 服务器都能变成可发现、可脚本化、对 AI Agent 友好的 CLI 工具,支持将工具作为自然命令运行,并使用标准 bash 工具组合输出。
项目简介
MCPLI(MCP CLI Interface)是由 Cameron Cooke 开发的开源项目,截至目前在 GitHub 上已获得 98 stars。该项目使用 TypeScript 编写,采用 MIT 许可证开源。
MCP(Model Context Protocol)为 AI Agent 与工具之间的通信提供了标准方式,但在实际使用中存在一些限制:每个 MCP 服务器都会带来工具描述、schema 和元数据,Agent 需要预先加载这些信息。安装多个服务器后,可能在处理第一个用户提示前就消耗数万个 token。
MCPLI 解决了这个问题,它将任何 stdio 协议的 MCP 服务器转换为一流的 CLI 工具,让你既能保留 MCP 的能力模型,又能以可预测、可组合的 CLI 命令形式使用它们。
核心特性
- 零配置启动 — 指向任何 stdio 协议的 MCP 服务器,立即获得 CLI 访问能力
- 持久化守护进程 — 维护一个后台守护进程,确保 MCP 保持状态,重复调用时复用同一实例
- 自然语法 — 工具变成命令:
mcpli get-weather --location "NYC" -- node weather-server.js - 自动生成帮助 —
mcpli --help -- <server>列出所有工具;mcpli <tool> --help -- <server>显示参数说明 - 干净输出 — 结构化 JSON 输出,便于 shell 管道处理
- 灵活参数 — 支持
--key value和--key=value格式,数组和对象可使用 JSON 格式 - 可取消 — Ctrl+C 取消当前工具请求,守护进程保持运行
技术栈
- TypeScript — 主要开发语言
- Node.js 18+ — 运行环境要求
- stdio 传输 — MCP 通信协议
- launchd — macOS 守护进程管理
安装指南
前置要求
- Node.js 18 或更高版本
- 任何使用 stdio 传输的 MCP 兼容服务器
- macOS(用于守护进程编排)
全局安装
npm install -g mcpli直接运行(无需安装)
npx mcpli@latest <tool-command> -- <mcp-server-command> [args...]快速开始
# 安装 mcpli
npm install -g mcpli
# 查看帮助
mcpli --help -- node weather-server.js
# 查看工具帮助
mcpli get-weather --help -- node weather-server.js
# 运行工具
mcpli get-weather --location "San Francisco" -- node weather-server.js使用示例
发现和运行工具
# 列出服务器支持的所有工具
mcpli --help -- node weather-server.js
# 查看特定工具的参数说明
mcpli get-weather --help -- node weather-server.js
# 运行工具
mcpli get-weather --location "NYC" -- node weather-server.js
# 使用 JSON 格式传递复杂参数
mcpli search-repos --query '{"language": "typescript", "stars": ">1000"}' -- node github-server.js输出模式
MCPLI 提供多种输出格式,便于不同场景使用:
# 默认 JSON 输出
mcpli get-weather --location "NYC" -- node weather-server.js
# 管道到 jq 处理
mcpli get-weather --location "NYC" -- node weather-server.js | jq .temperature
# 结合 grep 过滤
mcpli list-tools -- node server.js | grep -i "weather"高级功能
进程管理
MCPLI 使用守护进程模式管理 MCP 服务器进程:
多守护进程
支持同时运行多个独立的守护进程,每个服务器实例相互隔离:
# 启动多个服务器
mcpli --daemon -- node weather-server.js &
mcpli --daemon -- node github-server.js &守护进程超时
自动管理守护进程生命周期,避免资源泄漏:
# 设置不活动时间超时(毫秒)
MCPLI_DAEMON_TIMEOUT=300000 mcpli get-weather --location "NYC" -- node weather-server.js环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
MCPLI_DAEMON_TIMEOUT | 守护进程不活动超时时间(毫秒) | 300000 |
MCPLI_DEBUG | 启用调试日志 | false |
MCPLI_SOCKET_PATH | 自定义 Unix socket 路径 | 自动分配 |
调试
# 启用调试模式
MCPLI_DEBUG=true mcpli get-weather --location "NYC" -- node weather-server.js工具参数语法
MCPLI 支持多种参数传递方式:
# 标准格式
mcpli tool-name --param value -- node server.js
# 等号格式
mcpli tool-name --param=value -- node server.js
# JSON 格式(用于复杂类型)
mcpli tool-name --config '{"key": "value", "array": [1,2,3]}' -- node server.js
# 布尔值
mcpli tool-name --enable-feature -- node server.js为什么使用 MCPLI?
MCP 提供了一个标准方式让 Agent 与工具通信,但在大规模使用时面临上下文和可组合性的限制。每个 MCP 服务器都带来工具描述、schema 和元数据,Agent 需要预先加载这些信息。安装几个包含数十个工具的服务器后,可能在处理第一个用户提示前就消耗数万个 token。
这给开发者带来两难选择:
- 按"预期"方式使用 MCP,接受巨大的推理时上下文开销和有限的 shell 级组合能力
- 放弃 MCP,改用 CLI 工具包装,提供简洁的 AGENTS.md 示例,高效、可预测、可组合,但失去 MCP 的标准化
MCPLI 弥合了这一鸿沟,它将任何 stdio 协议的 MCP 服务器转换为一流的 CLI 工具,让你获得:
- 两全其美:保留 MCP 服务器和能力模型,但以可预测的 CLI 命令形式使用
- 默认可组合:将结果管道到 jq、grep、awk、curl 或工作流需要的任何工具
- 上下文控制:停止自动注入大型工具 schema,改为提供简洁的示例驱动提示
- 标准帮助和可发现性:mcpli 从 MCP schema 自动生成工具帮助,保持 CLI 自文档化和一致性
- 保护现有投资:无需服务器更改 — MCPLI 即时升级你已有的内容
项目链接
- GitHub 仓库: https://github.com/cameroncooke/mcpli
- npm 包: https://www.npmjs.com/package/mcpli
- 许可证: MIT