字
字节笔记本
2026年2月22日
MCPLI:将 MCP 服务器转换为 CLI 工具
MCPLI 是一个创新的命令行工具,它能将任何基于 stdio 的 MCP(Model Context Protocol)服务器转换为功能完整的 CLI 工具。通过 MCPLI,开发者可以在保留 MCP 标准化能力的同时,获得命令行工具的简洁性、可组合性和可控性。
项目简介
MCPLI(MCP Command Line Interface)由 Cameron Cooke 开发,旨在解决 MCP 在大规模使用时的上下文膨胀问题。该项目在 GitHub 上已获得 98+ stars,采用 TypeScript 编写,遵循 MIT 开源协议。
MCP 为 AI 代理与工具的交互提供了标准方式,但在实际使用中存在一个硬性限制:每个 MCP 服务器都会带来工具描述、Schema 和元数据,AI 代理需要摄取这些信息。当安装多个服务器时,会在处理用户提示前就消耗数万 token,这不仅带来财务成本,还会占用推理空间并降低可靠性。
MCPLI 通过将 MCP 服务器转换为 CLI 工具,完美解决了这一痛点。
核心特性
- 零配置启动:指向任意 stdio-based 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:运行环境(要求 >= 22.0.0)
- MCP SDK:
@modelcontextprotocol/sdk用于 MCP 协议交互 - Zod:参数验证
- socket-activation:守护进程管理
- tsup:构建工具
- Vitest:测试框架
安装指南
前置要求
- Node.js 22+
- 任意使用 stdio-based 传输的 MCP 兼容服务器
- macOS(用于 launchd 守护进程编排)
全局安装
bash
npm install -g mcpli直接运行(无需安装)
bash
npx mcpli@latest <tool-command> -- <mcp-server-command> [args...]快速开始
bash
# 安装
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使用示例
发现和运行工具
bash
# 查看可用工具
mcpli --help -- node weather-server.js
# 查看特定工具帮助
mcpli get-weather --help -- node weather-server.js
# 基本工具调用
npx mcpli@latest <tool-command> [tool-options...] -- <mcp-server-command> [args...]输出模式
bash
# 默认:友好提取工具结果内容
mcpli get-weather --location "NYC" -- node weather-server.js
# 原始 MCP 响应(用于调试)
mcpli get-weather --location "NYC" --raw -- node weather-server.js工具发现示例输出
text
> mcpli --help -- node weather-server.js
Usage: mcpli <tool> [tool-options...] -- <mcp-server-command> [args...]
mcpli <tool> --help -- <mcp-server-command> [args...]
mcpli --help -- <mcp-server-command> [args...]
mcpli daemon <subcommand> [options]
Global Options:
--help, -h Show this help and list all available tools
--verbose Show MCP server output (stderr/logs)
--raw Print raw MCP response
--debug Enable debug output
--timeout=<seconds> Set daemon inactivity timeout (default: 1800)
Available Tools:
get-weather Get current weather information for any location
get-forecast Get weather forecast for multiple days
Daemon Commands:
daemon start Start long-lived daemon process
daemon stop Stop daemon process
daemon status Show daemon status
daemon restart Restart daemon process
daemon logs Show daemon logs
daemon log Show recent daemon logs (non-interactive)
daemon clean Clean up daemon files高级功能
进程管理
MCPLI 使用守护进程模式来保持 MCP 服务器状态:
bash
# 启动守护进程
mcpli daemon start -- node weather-server.js
# 查看守护进程状态
mcpli daemon status
# 查看日志
mcpli daemon logs
# 停止守护进程
mcpli daemon stop
# 清理守护进程文件
mcpli daemon clean多守护进程支持
MCPLI 支持同时运行多个守护进程,每个服务器实例独立管理。
守护进程超时
默认情况下,守护进程在 30 分钟(1800 秒)不活动后自动关闭。可通过 --timeout 参数自定义:
bash
mcpli get-weather --location "NYC" --timeout=3600 -- node weather-server.js环境变量
MCPLI_DEBUG:启用调试输出MCPLI_VERBOSE:显示 MCP 服务器输出
调试模式
bash
# 启用调试输出
mcpli get-weather --location "NYC" --debug -- node weather-server.js
# 显示详细输出
mcpli get-weather --location "NYC" --verbose -- node weather-server.js工具参数语法
MCPLI 支持多种参数传递方式:
bash
# 标准格式
--key value
# 等号格式
--key=value
# JSON 对象/数组(用于复杂参数)
--key='{"nested": "value"}'
--key='["item1", "item2"]'为什么使用 MCPLI?
MCP 的设计让 AI 代理能够以标准化方式与工具交互,但在大规模使用时面临上下文膨胀和可组合性限制。开发者面临两难选择:
- 按"预期"方式使用 MCP,承受巨大的推理时上下文开销和有限的 shell 级组合能力
- 放弃 MCP,改用 CLI 工具包装,虽然获得简洁、可预测、可组合的特性,但失去 MCP 的标准化优势
MCPLI 弥合了这一鸿沟:
- 两全其美:保留 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
分享: