Skip to main content
Glama

cli2mcp

npm version npm downloads CI node license

状态: v0.1 — 早期版本。仅支持 Stdio 传输。API 在 1.0 版本前可能会发生变化。

通过解析命令行二进制文件的 --help 输出并在启动时合成 JSON Schema,将任何命令行二进制文件公开为 Model Context Protocol 工具。一条命令,无需样板代码。

适用于 任何兼容 MCP 的客户端 — Claude Desktop、ChatGPT(通过 OpenAI Agents SDK)、Cursor、Gemini CLI、Cline、Windsurf、Continue、Zed 以及任何支持 MCP stdio 传输 的客户端。

npx cli2mcp <command>

cli2mcp demo


为什么

为现有的 CLI 编写 MCP 服务器是一项机械性工作:实例化 SDK、注册工具、手写输入模式、编组参数、生成子进程、格式化输出。每个二进制文件大约需要 80–150 行 TypeScript 代码,随着新工具的出现不断重复。

cli2mcp 只需一条命令即可完成。CLI 自身的 --help 是模式的真理来源 — 如果 rg 明天增加了一个标志,AI 明天就能看到它,无需更改代码。


Related MCP server: MCP-OpenAPI

安装

npm install -g cli2mcp
# or invoke without installing
npx cli2mcp <command>

需要 Node.js 22+。


配置您的 MCP 客户端

cli2mcp 由您的客户端作为 stdio 子进程启动。为您想要公开的每个 CLI 添加一个条目。

Claude Desktop

配置文件位置:

操作系统

路径

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "ripgrep": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "rg", "--name", "ripgrep"]
    },
    "jq": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "jq"]
    }
  }
}

编辑后重启 Claude Desktop。

其他客户端

客户端

配置文件

格式

ChatGPT (OpenAI Agents SDK)

MCPServerStdio 参数 — 参见 OpenAI Agents 文档

command: "npx", args: ["-y", "cli2mcp", "<cli>"]

Cursor

.cursor/mcp.json (项目) 或 ~/.cursor/mcp.json (全局)

与上述相同的 mcpServers

Cline

VS Code → Cline → MCP Settings → cline_mcp_settings.json

与上述相同的 mcpServers

Windsurf

~/.codeium/windsurf/mcp_config.json

与上述相同的 mcpServers

Gemini CLI

~/.gemini/settings.json

与上述相同的 mcpServers

Continue

~/.continue/config.jsonexperimental.modelContextProtocolServers

相同的启动器

Zed

~/.config/zed/settings.jsoncontext_servers

相同的启动器

任何支持 stdio 的 MCP 客户端

按照客户端文档

相同的启动器:npx -y cli2mcp <command>

请参考每个客户端的文档以获取您平台上确切的配置路径 — 它们会不断演进,不保证与上表一致。


快速上手 — 复制粘贴配置

将以下任何内容放入您客户端的 mcpServers 块中(上文已列出各客户端路径)。每一个都将一个流行的 CLI 封装为 AI 可以直接调用的 MCP 工具。

{
  "mcpServers": {
    "ripgrep": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "rg", "--name", "ripgrep",
               "--description", "Recursively search files with regex"]
    },
    "jq": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "jq",
               "--description", "Query and transform JSON via stdin"]
    },
    "pandoc": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "pandoc",
               "--description", "Convert documents between markup formats"]
    },
    "sqlite3": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "sqlite3",
               "--description", "Run SQL against a SQLite database file",
               "--cwd", "/path/to/safe/dir"]
    },
    "yt-dlp": {
      "command": "npx",
      "args": ["-y", "cli2mcp", "yt-dlp",
               "--description", "Download media from URLs",
               "--cwd", "/path/to/downloads",
               "--timeout", "300000"]
    }
  }
}

每个 CLI 必须已经安装并位于 PATH 中。cli2mcp 不会为您安装它们。


对比

方法

每个 CLI 的代码行数

新标志处理

维护

手写 MCP 服务器 (TypeScript SDK)

~80–150

手动编辑模式

每个 CLI 的发布周期

OpenAPI → MCP 生成器

不适用

需要 OpenAPI 规范

不覆盖任意 CLI

bash / sh 封装为工具

~10

不适用 — 给 AI 一个 shell

不安全,无模式,无沙箱

cli2mcp <command>

0

下次启动自动处理

无 — 重新读取 --help

最接近的是 FastMCP 的 from_openapi — 它不覆盖任意 CLI 二进制文件。截至 2026 年 4 月,没有其他已发布的工具能通过一条命令将任意 --help 输出转换为类型化的 MCP 工具。


已验证的目标

这些 CLI 已被测试套件覆盖或已手动进行端到端验证:

CLI

状态

备注

jq

✅ 已测试

正确捕获 stderr 上的帮助信息;stdin 管道工作正常

ripgrep (rg)

✅ 已测试

推断出 90+ 个标志;处理了 args 位置参数

curl

✅ 固定测试

形状提取已针对捆绑的固定数据进行验证

node

✅ 集成测试

端到端 MCP 握手 + tools/call

其他 POSIX 风格的 CLI(例如 ffmpegyt-dlppandocsqlite3imagemagick预期可以工作,但尚未被测试覆盖。请在 issues 中报告错误。


--help 如何变为 JSON Schema

帮助片段

MCP 属性

--flag

boolean

--flag <value> / <file> / <path>

string

--flag <n> / <ms> / <size>

number

`--flag <a

b

c>`

带有选项的 string 枚举

可重复标志

array<string>

位置参数

args: array<string>

保留输入 stdin

管道传输至子进程 stdin 的 string

当在非传统的 --help 上解析失败时,cli2mcp 会回退到单个可变参数 args 位置,因此该工具仍然可用 — 模型只是获得了一个自由格式的参数列表,而不是类型化的标志。


选项

cli2mcp <command> [options]

  --name <name>         Tool name shown to the AI           (default: <command>)
  --description <text>  Tool description shown to the AI    (default: first --help line)
  --timeout <ms>        Subprocess timeout per call         (default: 60000)
  --cwd <path>          Working directory for subprocess    (default: process.cwd())
  --env <KEY=VALUE>     Extra environment variables         (repeatable)
  --stderr <mode>       stderr handling:
                          include  →  appended to tool output (default)
                          drop     →  discarded
                          error    →  any stderr → isError: true
  -h, --help            Show help

管道传输 stdin

保留输入属性 stdin 被管道传输至子进程:

{ "args": [".name"], "stdin": "{\"name\": \"cli2mcp\"}" }

工作原理

cli2mcp rg
   │
   ├─ 1. spawn: rg --help          →  capture stdout + stderr
   ├─ 2. parse help text           →  CliShape { flags, positionals, description }
   ├─ 3. synthesize JSON Schema    →  inputSchema
   ├─ 4. register one MCP tool     →  name: "rg", schema: <above>
   └─ 5. start stdio MCP server    →  await client connection

On tools/call:
   { args, flags, stdin? }  →  argv builder  →  execa(rg, argv, { stdin })
                                                           │
                                          stdout (+ stderr) → content[text]

非零退出 → { isError: true, content: [{ type: "text", text: <stderr> }] }(除非 --stderr drop)。


安全性

cli2mcp 允许 AI 代理调用您公开的 CLI,并使用代理选择的参数。您需要为您公开的 CLI 在您的机器上能做什么负责。

实用指南:

  • 仅公开您能接受其影响范围的 CLI。 jqrgpandoc 大多是安全的(只读、确定性)。curlffmpeg --outputsqlite3rmkubectlaws 则不然。

  • AI 没有沙箱。 提示词注入攻击可能导致公开的 curl 获取 evil.example.com,公开的 rm 删除文件等。

  • 在封装涉及文件的 CLI 时,使用 --cwd 来限制文件系统范围。

  • 谨慎使用 --env 不要传递模型不应该接触的凭据。

  • 永远不要公开 shbashzshpython -c 或任何具有 eval 语义的内容 — 这会绕过 cli2mcp 提供的所有保护措施。

基于帮助信息的模式设计 降低 了格式错误 argv 的风险,但并没有消除滥用的风险。将每个公开的 CLI 视为委托的能力,而不是沙箱。


故障排除

CLI 没有 --help 标志。 cli2mcp 仍将以单个 args 位置参数启动。AI 可以自由传递参数;您失去了类型化标志推断。

模式生成为空 / 错误。 手动运行 cli2mcp <command> 并检查 tools/list 响应(使用 npx @modelcontextprotocol/inspector)。最常见的原因是非标准的帮助格式(没有 --long-form 标志,列对齐错误)。请附上 <command> --help 的输出提交 issue。

子进程挂起。 默认的 60 秒超时将终止它。通过 --timeout 增加时间。如果您的 CLI 是交互式的(等待 TTY),cli2mcp 无法提供帮助 — 请改用 stdin 管道输入。

标志未被传递。 设置 --stderr include(默认值)并检查 content[].text。如果标志没有出现在 argv 中,说明帮助解析器未能提取它 — 请提交 issue。


贡献

欢迎提交错误报告和补丁。新 CLI 的固定数据(test/fixtures/help/<cli>.txt + 形状测试)是最高效的贡献方式。

pnpm install
pnpm test         # vitest
pnpm typecheck    # tsc --noEmit
pnpm lint         # biome check

Star 历史

Star History Chart

如果 cli2mcp 为您节省了一个下午编写 MCP 样板代码的时间,点个 Star 可以帮助其他人找到它。


作者

Ronie Neubauer 构建 — 首席工程师,拥有 22 年以上生产系统交付经验。


许可证

MIT © 2026 Ronie Neubauer。

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that exposes HTTP methods defined in an OpenAPI specification as tools, enabling interaction with APIs via the Model Context Protocol.
    8
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    A CLI command execution server that enables running shell commands with structured output, providing detailed execution results including stdout, stderr, exit code, and execution duration.
    2
    35
    12
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A server implementation for the Model Context Protocol (MCP) that allows Claude AI to execute commands through a command-line interface, enabling direct system interactions from within Claude.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RonieNeubauer/cli2mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server