Skip to main content
Glama

cli2mcp

npm version npm downloads CI node license

Status: v0.1 — frühe Veröffentlichung. Nur Stdio-Transport. APIs können sich vor 1.0 noch ändern.

Stellen Sie jedes Befehlszeilen-Binary als Model Context Protocol-Tool bereit, indem Sie dessen --help-Ausgabe parsen und beim Start ein JSON-Schema synthetisieren. Ein Befehl, kein Boilerplate.

Funktioniert mit jedem MCP-kompatiblen Client — Claude Desktop, ChatGPT (via OpenAI Agents SDK), Cursor, Gemini CLI, Cline, Windsurf, Continue, Zed und allem anderen, das den MCP stdio transport unterstützt.

npx cli2mcp <command>

cli2mcp demo


Warum

Das Schreiben eines MCP-Servers für ein CLI, das Sie bereits besitzen, ist mechanische Arbeit: SDK instanziieren, Tool registrieren, Eingabeschema von Hand schreiben, Argumente marshallen, Subprozess starten, Ausgabe formatieren. Etwa 80–150 Zeilen TypeScript pro Binary, die sich immer wiederholen, wenn neue Tools herauskommen.

cli2mcp erledigt das mit einem Befehl. Das --help des CLIs selbst ist die Quelle der Wahrheit für das Schema — wenn rg morgen ein Flag hinzufügt, sieht die KI es morgen ohne Codeänderungen.


Related MCP server: MCP-OpenAPI

Installation

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

Erfordert Node.js 22+.


Konfigurieren Sie Ihren MCP-Client

cli2mcp wird von Ihrem Client als Stdio-Subprozess gestartet. Fügen Sie einen Eintrag pro CLI hinzu, das Sie bereitstellen möchten.

Claude Desktop

Speicherort der Konfigurationsdatei:

OS

Pfad

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"]
    }
  }
}

Starten Sie Claude Desktop nach dem Bearbeiten neu.

Andere Clients

Client

Konfigurationsdatei

Format

ChatGPT (OpenAI Agents SDK)

MCPServerStdio Parameter — siehe OpenAI Agents docs

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

Cursor

.cursor/mcp.json (Projekt) oder ~/.cursor/mcp.json (global)

Gleicher mcpServers-Block wie oben

Cline

VS Code → Cline → MCP Settings → cline_mcp_settings.json

Gleicher mcpServers-Block

Windsurf

~/.codeium/windsurf/mcp_config.json

Gleicher mcpServers-Block

Gemini CLI

~/.gemini/settings.json

Gleicher mcpServers-Block

Continue

~/.continue/config.jsonexperimental.modelContextProtocolServers

Gleicher Launcher

Zed

~/.config/zed/settings.jsoncontext_servers

Gleicher Launcher

Jeder stdio-fähige MCP-Client

gemäß der Dokumentation des Clients

Gleicher Launcher: npx -y cli2mcp <command>

Beziehen Sie sich auf die Dokumentation des jeweiligen Clients für den genauen Konfigurationspfad auf Ihrer Plattform — diese entwickeln sich weiter und es gibt keine Garantie, dass sie mit der obigen Tabelle übereinstimmen.


Schnelle Erfolge — Copy-Paste-Konfigurationen

Fügen Sie einen dieser Blöcke in den mcpServers-Block Ihres Clients ein (Pfade siehe oben pro Client). Jeder davon verpackt ein beliebtes CLI als MCP-Tool, das eine KI direkt aufrufen kann.

{
  "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"]
    }
  }
}

Jedes CLI muss bereits installiert sein und sich im PATH befinden. cli2mcp installiert diese nicht für Sie.


Vergleich

Ansatz

LOC pro CLI

Umgang mit neuen Flags

Wartung

Handgeschriebener MCP-Server (TypeScript SDK)

~80–150

manuelle Schema-Bearbeitung

pro-CLI Release-Zyklus

OpenAPI → MCP Generatoren

n/a

erfordert eine OpenAPI-Spezifikation

deckt keine beliebigen CLIs ab

bash / sh als Tool verpacken

~10

n/a — gibt der KI eine Shell

unsicher, kein Schema, keine Sandbox

cli2mcp <command>

0

automatisch beim nächsten Start

keine — liest --help neu ein

Der nächste Nachbar ist FastMCPs from_openapi — es deckt keine beliebigen CLI-Binaries ab. Stand April 2026 gibt es kein anderes veröffentlichtes Tool, das eine beliebige --help-Ausgabe mit einem Befehl in ein typisiertes MCP-Tool verwandelt.


Verifizierte Ziele

Diese CLIs werden durch die Test-Suite abgedeckt oder wurden manuell von Ende zu Ende getestet:

CLI

Status

Notizen

jq

✅ getestet

help-on-stderr korrekt erfasst; stdin-Piping funktioniert

ripgrep (rg)

✅ getestet

90+ Flags abgeleitet; args positional verarbeitet

curl

✅ Fixture

Form-Extraktion gegen gebündeltes Fixture validiert

node

✅ Integrationstest

Ende-zu-Ende MCP-Handshake + tools/call

Andere POSIX-artige CLIs (z. B. ffmpeg, yt-dlp, pandoc, sqlite3, imagemagick) sollten voraussichtlich funktionieren, sind aber noch nicht durch Tests abgedeckt. Melden Sie Fehler in den Issues.


Wie --help zu einem JSON-Schema wird

Hilfe-Fragment

MCP-Eigenschaft

--flag

boolean

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

string

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

number

`--flag <a

b

c>`

string Enum mit Auswahlmöglichkeiten

Wiederholbares Flag

array<string>

Positionale Argumente

args: array<string>

Reservierte Eingabe stdin

string an Subprozess-stdin weitergeleitet

Wenn das Parsen bei einem unkonventionellen --help fehlschlägt, greift cli2mcp auf ein einzelnes variadisches args-Positional zurück, sodass das Tool weiterhin nutzbar ist — das Modell erhält lediglich eine freie Argumentliste anstelle von typisierten Flags.


Optionen

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

Piping von stdin

Die reservierte Eingabeeigenschaft stdin wird an den Subprozess weitergeleitet:

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

Funktionsweise

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]

Nicht-null-Exit → { isError: true, content: [{ type: "text", text: <stderr> }] } (außer --stderr drop).


Sicherheit

cli2mcp ermöglicht es einem KI-Agenten, die von Ihnen bereitgestellten CLIs mit den vom Agenten gewählten Argumenten aufzurufen. Sie sind dafür verantwortlich, was diese CLIs auf Ihrem Computer tun können.

Praktische Hinweise:

  • Stellen Sie nur CLIs bereit, deren Wirkungsbereich Sie akzeptieren. jq, rg, pandoc sind weitgehend sicher (schreibgeschützt, deterministisch). curl, ffmpeg --output, sqlite3, rm, kubectl, aws sind es nicht.

  • Die KI ist nicht in einer Sandbox. Ein Prompt-Injection-Angriff könnte dazu führen, dass ein bereitgestelltes curl evil.example.com abruft, ein bereitgestelltes rm Dateien löscht usw.

  • Verwenden Sie --cwd, um den Dateisystembereich einzuschränken, wenn Sie CLIs verpacken, die auf Dateien zugreifen.

  • Verwenden Sie --env bewusst. Geben Sie keine Anmeldeinformationen weiter, auf die das Modell nicht zugreifen sollte.

  • Stellen Sie niemals sh, bash, zsh, python -c oder irgendetwas mit eval-Semantik bereit — das umgeht alle Sicherheitsvorkehrungen, die cli2mcp bietet.

Das Schema-aus-Hilfe-Design reduziert das Risiko von fehlerhaftem argv, aber es eliminiert nicht das Risiko des Missbrauchs. Behandeln Sie jedes bereitgestellte CLI als delegierte Fähigkeit, nicht als Sandbox.


Fehlerbehebung

Das CLI hat kein --help-Flag. cli2mcp startet trotzdem mit einem einzelnen args-Positional. Die KI kann Argumente frei übergeben; Sie verlieren die typisierte Flag-Ableitung.

Das Schema ist leer / falsch. Führen Sie cli2mcp <command> manuell aus und untersuchen Sie die tools/list-Antwort (verwenden Sie npx @modelcontextprotocol/inspector). Die häufigste Ursache ist eine nicht standardmäßige Hilfe-Formatierung (keine --long-form-Flags, falsch ausgerichtete Spalten). Eröffnen Sie ein Issue mit der angehängten <command> --help-Ausgabe.

Der Subprozess hängt. Das Standard-Timeout von 60s beendet ihn. Erhöhen Sie es über --timeout. Wenn Ihr CLI interaktiv ist (auf ein TTY wartet), kann cli2mcp nicht helfen — leiten Sie die Eingabe stattdessen über stdin weiter.

Flag wird nicht übergeben. Setzen Sie --stderr include (Standard) und untersuchen Sie content[].text. Wenn das Flag nicht in argv erscheint, konnte der Hilfe-Parser es nicht extrahieren — erstellen Sie ein Issue.


Mitwirken

Fehlerberichte und Patches sind willkommen. Fixtures für neue CLIs (test/fixtures/help/<cli>.txt + ein Form-Test) sind die Beiträge mit der größten Hebelwirkung.

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

Star-Verlauf

Star History Chart

Wenn cli2mcp Ihnen einen Nachmittag Arbeit beim Schreiben von MCP-Boilerplate erspart hat, hilft ein Stern anderen Leuten, es zu finden.


Autor

Erstellt von Ronie Neubauer — Principal Engineer, über 22 Jahre Erfahrung in der Bereitstellung von Produktionssystemen.


Lizenz

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