ByteNoteByteNote

字节笔记本

2026年2月21日

MCPLI:将 MCP 服务器转换为 CLI 工具

API中转
¥120

本文介绍 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(用于守护进程编排)

全局安装

bash
npm install -g mcpli

直接运行(无需安装)

bash
npx mcpli@latest <tool-command> -- <mcp-server-command> [args...]

快速开始

bash
# 安装 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

使用示例

发现和运行工具

bash
# 列出服务器支持的所有工具
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 提供多种输出格式,便于不同场景使用:

bash
# 默认 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 服务器进程:

多守护进程

支持同时运行多个独立的守护进程,每个服务器实例相互隔离:

bash
# 启动多个服务器
mcpli --daemon -- node weather-server.js &
mcpli --daemon -- node github-server.js &

守护进程超时

自动管理守护进程生命周期,避免资源泄漏:

bash
# 设置不活动时间超时(毫秒)
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 路径自动分配

调试

bash
# 启用调试模式
MCPLI_DEBUG=true mcpli get-weather --location "NYC" -- node weather-server.js

工具参数语法

MCPLI 支持多种参数传递方式:

bash
# 标准格式
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 即时升级你已有的内容

项目链接

分享: