cli2mcp
cli2mcp
Статус: 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>Зачем это нужно
Написание 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 |
|
Windows |
|
Linux |
|
{
"mcpServers": {
"ripgrep": {
"command": "npx",
"args": ["-y", "cli2mcp", "rg", "--name", "ripgrep"]
},
"jq": {
"command": "npx",
"args": ["-y", "cli2mcp", "jq"]
}
}
}После редактирования перезапустите Claude Desktop.
Другие клиенты
Клиент | Файл конфигурации | Формат |
ChatGPT (OpenAI Agents SDK) | Параметр |
|
Cursor |
| Тот же блок |
Cline | VS Code → Cline → MCP Settings → | Тот же блок |
Windsurf |
| Тот же блок |
Gemini CLI |
| Тот же блок |
Continue |
| Тот же загрузчик |
Zed |
| Тот же загрузчик |
Любой MCP-клиент с поддержкой stdio | согласно документации клиента | Тот же загрузчик: |
Обратитесь к документации каждого клиента для уточнения пути к конфигурации на вашей платформе — они меняются и не гарантированно соответствуют таблице выше.
Быстрый старт — готовые конфигурации
Вставьте любой из этих примеров в блок 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 |
Обертка | ~10 | н/д — дает ИИ оболочку | небезопасно, нет схемы, нет песочницы |
| 0 | автоматически при перезапуске | нет — перечитывает |
Ближайший аналог — from_openapi из FastMCP, но он не работает с произвольными CLI-бинарниками. По состоянию на апрель 2026 года нет другого опубликованного инструмента, который превращает произвольный вывод --help в типизированный MCP-инструмент одной командой.
Проверенные цели
Эти CLI-утилиты покрыты набором тестов или были проверены вручную:
CLI | Статус | Примечания |
| ✅ протестировано | help-on-stderr корректно захватывается; работает передача через |
| ✅ протестировано | выведено 90+ флагов; позиционные |
| ✅ фикстура | форма извлечения проверена на комплектной фикстуре |
| ✅ интеграционный тест | сквозное рукопожатие MCP + |
Другие POSIX-совместимые CLI (например, ffmpeg, yt-dlp, pandoc, sqlite3, imagemagick) должны работать, но еще не покрыты тестами. Сообщайте об ошибках в issues.
Как --help превращается в JSON Schema
Фрагмент справки | Свойство MCP | ||
|
| ||
|
| ||
|
| ||
`--flag <a | b | c>` |
|
Повторяемый флаг |
| ||
Позиционные аргументы |
| ||
Зарезервированный ввод |
|
Если парсинг нестандартного --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История звезд
Если cli2mcp сэкономил вам время на написании шаблонного кода MCP, звезда поможет другим найти этот инструмент.
Автор
Создано Ronie Neubauer — ведущий инженер, 22+ года разработки производственных систем.
GitHub: @RonieNeubauer
Блог: ronieneubauer.com
Вопросы и идеи: github.com/RonieNeubauer/cli2mcp/discussions
Лицензия
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.
This server cannot be installed
Maintenance
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseBqualityFmaintenanceCommand line interface with secure execution and customizable security policies2177MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes HTTP methods defined in an OpenAPI specification as tools, enabling interaction with APIs via the Model Context Protocol.8MIT
- AlicenseCqualityDmaintenanceA CLI command execution server that enables running shell commands with structured output, providing detailed execution results including stdout, stderr, exit code, and execution duration.23512MIT
- FlicenseNot gradedqualityDmaintenanceA 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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