cli2mcp
cli2mcp
ステータス: v0.1 — 初期リリース。Stdioトランスポートのみ。APIは1.0までに変更される可能性があります。
コマンドラインバイナリの --help 出力を解析し、起動時にJSONスキーマを合成することで、あらゆるCLIを Model Context Protocol ツールとして公開します。コマンド一つで、ボイラープレートは不要です。
あらゆるMCP互換クライアント(Claude Desktop、ChatGPT (OpenAI Agents SDK経由)、Cursor、Gemini CLI、Cline、Windsurf、Continue、Zed、その他 MCP stdioトランスポート をサポートするもの)で動作します。
npx cli2mcp <command>なぜこれを使うのか
既存のCLI用のMCPサーバーを書くのは機械的な作業です。SDKのインスタンス化、ツールの登録、入力スキーマの手書き、引数のマーシャリング、サブプロセスの生成、出力のフォーマットなどが必要です。新しいツールが出るたびに、バイナリごとに約80〜150行のTypeScriptを繰り返し書くことになります。
cli2mcp はこれを1つのコマンドで実行します。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
設定ファイルの場所:
OS | パス |
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 |
| 上記と同じランチャー |
stdio対応のMCPクライアント | 各クライアントのドキュメントに従う | 上記と同じランチャー: |
各プラットフォームの正確な設定パスについては、各クライアントのドキュメントを参照してください。これらは進化しており、上記の表と一致する保証はありません。
クイックスタート — コピー&ペースト用設定
以下のいずれかをクライアントの mcpServers ブロックに貼り付けてください(パスは各クライアントの項目を参照)。それぞれ、AIが直接呼び出せるMCPツールとして一般的なCLIをラップします。
{
"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ジェネレーター | n/a | OpenAPI仕様が必要 | 任意のCLIをカバーしない |
| 約10 | n/a — AIにシェルを与える | 安全でない、スキーマなし、サンドボックスなし |
| 0 | 次回起動時に自動 | なし — |
最も近いものはFastMCPの from_openapi ですが、これは任意のCLIバイナリをカバーしていません。2026年4月現在、任意の --help 出力をコマンド一つで型付きMCPツールに変換する公開ツールは他にありません。
検証済みターゲット
これらのCLIはテストスイートでカバーされているか、手動でエンドツーエンドの動作確認済みです:
CLI | ステータス | メモ |
| ✅ テスト済み | stderrのヘルプを正しくキャプチャ; |
| ✅ テスト済み | 90以上のフラグを推論; |
| ✅ フィクスチャ | バンドルされたフィクスチャに対して形状抽出を検証済み |
| ✅ 統合テスト | エンドツーエンドのMCPハンドシェイク + |
その他のPOSIXスタイルCLI(例: ffmpeg, yt-dlp, pandoc, sqlite3, imagemagick)も動作するはずですが、テストではまだカバーされていません。バグは issues に報告してください。
--help が JSON スキーマになる仕組み
ヘルプの断片 | MCPプロパティ | ||
|
| ||
|
| ||
|
| ||
`--flag <a | b | c>` | 選択肢を持つ |
繰り返し可能なフラグ |
| ||
位置引数 |
| ||
予約済み入力 | サブプロセスの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 helpstdinのパイピング
予約済み入力プロパティ 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のみを公開してください。
jq,rg,pandocは概ね安全(読み取り専用、決定論的)です。curl,ffmpeg --output,sqlite3,rm,kubectl,awsはそうではありません。AIはサンドボックス化されていません。 プロンプトインジェクション攻撃により、公開された
curlがevil.example.comをフェッチしたり、公開されたrmがファイルを削除したりする可能性があります。ファイルを扱うCLIをラップする場合は、
--cwdを使用してファイルシステムのスコープを制限してください。--envを慎重に使用してください。 モデルがアクセスすべきでない認証情報を渡さないでください。sh,bash,zsh,python -c、またはevalセマンティクスを持つものは絶対に公開しないでください。cli2mcpが提供するすべての保護策を回避してしまいます。
helpからスキーマを生成する設計は、不正な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スターの履歴
cli2mcp がMCPボイラープレートを書く時間を節約できたなら、スターを付けることで他の人が見つけやすくなります。
作者
Ronie Neubauer によって構築されました — プリンシパルエンジニア、22年以上の本番システム開発経験。
GitHub: @RonieNeubauer
ブログ: ronieneubauer.com
ライセンス
MIT © 2026 Ronie Neubauer.
This server cannot be deployed
Maintenance
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.
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
1
Related MCP Servers
- AlicenseBqualityFmaintenanceCommand line interface with secure execution and customizable security policies216,401 PyPI179MIT
- 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.238 npm12MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that publishes CLI tools on your machine for discoverability by LLMs5 npm1MIT