Skip to main content
Glama

cli2mcp

npm version npm downloads CI node license

Статус: v0.1 — ранняя версия. Поддерживается только транспорт stdio. API может измениться до версии 1.0.

Превратите любую консольную утилиту в инструмент Model Context Protocol, анализируя её вывод --help и синтезируя JSON-схему при запуске. Одна команда, никакого шаблонного кода.

Работает с любым MCP-совместимым клиентом — Claude Desktop, ChatGPT (через OpenAI Agents SDK), Cursor, Gemini CLI, Cline, Windsurf, Continue, Zed и любым другим, поддерживающим транспорт MCP stdio.

npx cli2mcp <command>

cli2mcp demo


Зачем это нужно

Написание MCP-сервера для уже имеющейся CLI-утилиты — это рутинная работа: инициализация SDK, регистрация инструмента, написание схемы ввода вручную, маршалинг аргументов, запуск подпроцесса, форматирование вывода. Примерно 80–150 строк TypeScript на каждый бинарный файл, и так каждый раз при появлении новых инструментов.

cli2mcp делает это одной командой. Собственный вывод --help утилиты является источником истины для схемы — если завтра в rg добавят флаг, ИИ увидит его завтра без изменения кода.


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

Тот же загрузчик

Любой MCP-клиент с поддержкой stdio

согласно документации клиента

Тот же загрузчик: npx -y cli2mcp <command>

Обратитесь к документации каждого клиента для уточнения пути к конфигурации на вашей платформе — они меняются и не гарантированно соответствуют таблице выше.


Быстрый старт — готовые конфигурации

Вставьте любой из этих примеров в блок mcpServers вашего клиента (пути указаны выше для каждого клиента). Каждый из них оборачивает популярную CLI-утилиту в 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

н/д — дает ИИ оболочку

небезопасно, нет схемы, нет песочницы

cli2mcp <command>

0

автоматически при перезапуске

нет — перечитывает --help

Ближайший аналог — from_openapi из FastMCP, но он не работает с произвольными CLI-бинарниками. По состоянию на апрель 2026 года нет другого опубликованного инструмента, который превращает произвольный вывод --help в типизированный MCP-инструмент одной командой.


Проверенные цели

Эти CLI-утилиты покрыты набором тестов или были проверены вручную:

CLI

Статус

Примечания

jq

✅ протестировано

help-on-stderr корректно захватывается; работает передача через stdin

ripgrep (rg)

✅ протестировано

выведено 90+ флагов; позиционные args обрабатываются

curl

✅ фикстура

форма извлечения проверена на комплектной фикстуре

node

✅ интеграционный тест

сквозное рукопожатие MCP + tools/call

Другие POSIX-совместимые CLI (например, ffmpeg, yt-dlp, pandoc, sqlite3, imagemagick) должны работать, но еще не покрыты тестами. Сообщайте об ошибках в issues.


Как --help превращается в JSON Schema

Фрагмент справки

Свойство MCP

--flag

boolean

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

string

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

number

`--flag <a

b

c>`

string enum с выбором

Повторяемый флаг

array<string>

Позиционные аргументы

args: array<string>

Зарезервированный ввод stdin

string передается в stdin подпроцесса

Если парсинг нестандартного --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 позволяет ИИ-агенту вызывать CLI-утилиты, которые вы предоставляете, с аргументами, выбранными агентом. Вы несете ответственность за то, что эти утилиты могут сделать на вашем компьютере.

Практические рекомендации:

  • Предоставляйте доступ только к тем CLI, радиус поражения которых вы принимаете. jq, rg, pandoc в основном безопасны (только чтение, детерминированы). curl, ffmpeg --output, sqlite3, rm, kubectl, aws — нет.

  • ИИ не находится в песочнице. Атака через инъекцию промпта может заставить curl обратиться к evil.example.com, rm — удалить файлы и т.д.

  • Используйте --cwd для ограничения области файловой системы при оборачивании CLI, работающих с файлами.

  • Используйте --env осознанно. Не передавайте учетные данные, к которым модель не должна иметь доступа.

  • Никогда не предоставляйте доступ к sh, bash, zsh, python -c или чему-либо с семантикой eval — это обходит все меры защиты, предоставляемые cli2mcp.

Дизайн «схема из справки» снижает риск неправильного формирования argv, но не устраняет риск злоупотребления. Относитесь к каждой предоставленной CLI-утилите как к делегированной возможности, а не как к песочнице.


Устранение неполадок

У CLI нет флага --help. cli2mcp все равно запустится с одним позиционным аргументом args. ИИ сможет свободно передавать аргументы; вы теряете типизацию флагов.

Схема получилась пустой или неверной. Запустите cli2mcp <command> вручную и проверьте ответ tools/list (используйте npx @modelcontextprotocol/inspector). Самая частая причина — нестандартное форматирование справки (отсутствие флагов --long-form, смещенные столбцы). Откройте issue, приложив вывод <command> --help.

Подпроцесс зависает. Тайм-аут по умолчанию в 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 History Chart

Если cli2mcp сэкономил вам время на написании шаблонного кода MCP, звезда поможет другим найти этот инструмент.


Автор

Создано 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