Skip to main content
Glama

cli2mcp

npm version npm downloads CI node license

ステータス: 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>

cli2mcp demo


なぜこれを使うのか

既存の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

~/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 docs を参照

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.json → experimental.modelContextProtocolServers

上記と同じランチャー

Zed

~/.config/zed/settings.json → context_servers

上記と同じランチャー

stdio対応のMCPクライアント

各クライアントのドキュメントに従う

上記と同じランチャー: npx -y cli2mcp <command>

各プラットフォームの正確な設定パスについては、各クライアントのドキュメントを参照してください。これらは進化しており、上記の表と一致する保証はありません。


クイックスタート — コピー&ペースト用設定

以下のいずれかをクライアントの 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をカバーしない

bash / sh をツールとしてラップ

約10

n/a — AIにシェルを与える

安全でない、スキーマなし、サンドボックスなし

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(例: ffmpeg, yt-dlp, pandoc, sqlite3, imagemagick)も動作するはずですが、テストではまだカバーされていません。バグは issues に報告してください。


--help が JSON スキーマになる仕組み

ヘルプの断片

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

サブプロセスの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のみを公開してください。 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

スターの履歴

Star History Chart

cli2mcp がMCPボイラープレートを書く時間を節約できたなら、スターを付けることで他の人が見つけやすくなります。


作者

Ronie Neubauer によって構築されました — プリンシパルエンジニア、22年以上の本番システム開発経験。


ライセンス

MIT © 2026 Ronie Neubauer.

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
    38 npm
    12
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that publishes CLI tools on your machine for discoverability by LLMs
    5 npm
    1
    MIT