字节笔记本

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 代理能够以标准化方式与工具交互,但在大规模使用时面临上下文膨胀和可组合性限制。开发者面临两难选择:

  1. 按"预期"方式使用 MCP,承受巨大的推理时上下文开销和有限的 shell 级组合能力
  2. 放弃 MCP,改用 CLI 工具包装,虽然获得简洁、可预测、可组合的特性,但失去 MCP 的标准化优势

MCPLI 弥合了这一鸿沟

  • 两全其美:保留 MCP 服务器和能力模型,但以可预测的 CLI 命令形式使用
  • 默认可组合:将结果通过管道传递给 jq、grep、awk、curl 等工作流工具
  • 控制上下文:停止自动注入大型工具 Schema,改为提供精简的示例驱动提示
  • 标准帮助和可发现性:MCPLI 从 MCP Schema 自动生成工具帮助,保持 CLI 自文档化和一致性
  • 保护现有投资:无需修改服务器——MCPLI 即时升级已有内容

项目链接

分享: