click-to-mcp

Envuelve automáticamente cualquier CLI de Click/typer como un servidor MCP. Inspecciona los comandos CLI en tiempo de ejecución y los mapea a herramientas MCP.

Documentación

click-to-mcp

CI PyPI GitHub stars Awesome MCP Server Awesome Codex CLI Open Source Alternative Glama skills.sh

Envuelve automáticamente cualquier CLI de Click/typer como un servidor MCP (Model Context Protocol).

⭐ Dale una estrella a este repositorio si construyes herramientas CLI — ¡ayuda a otros desarrolladores a descubrir click-to-mcp!

Parte del ecosistema de herramientas para desarrolladores DevForge.

¿Por qué click-to-mcp?

El problema: Tienes CLIs de Python construidos con Click o typer. Tu agente de codificación con IA (Claude Code, Codex, Cursor) necesita llamarlos — pero los servidores MCP requieren escribir código repetitivo desde cero.

La forma antigua:

  1. Crear un nuevo paquete de Python para tu servidor MCP
  2. Definir JSON Schema para cada herramienta manualmente
  3. Configurar el transporte stdio/HTTP
  4. Mantenerlo sincronizado cuando tu CLI cambia

La forma click-to-mcp:

pip install git+https://github.com/Coding-Dev-Tools/click-to-mcp.git
click-to-mcp serve your-cli

Un solo comando. Tu CLI ahora es un servidor MCP. Sin código repetitivo, sin escribir esquemas, sin carga de mantenimiento.

Ejemplo real: api-contract-guardian tiene 6 comandos con más de 20 opciones. Escribir un servidor MCP para ello tomaría más de 200 líneas de código repetitivo. Con click-to-mcp: click-to-mcp serve api-contract-guardian — listo.

Funciona con herramientas CLI de DevForge de inmediato — envuelve api-contract-guardian, json2sql, deploydiff o configdrift como servidores MCP sin cambios en el código.

Inicio Rápido

Instala desde GitHub (recomendado — aún no está en PyPI público):

pip install git+https://github.com/Coding-Dev-Tools/click-to-mcp.git

Para transporte HTTP+SSE (clientes MCP basados en web), instala con el extra http:

pip install "click-to-mcp[http] @ git+https://github.com/Coding-Dev-Tools/click-to-mcp.git"

Instala directamente desde GitHub (última versión de desarrollo):

pip install git+https://github.com/Coding-Dev-Tools/click-to-mcp.git

O instala vía Homebrew (macOS/Linux):

brew tap Coding-Dev-Tools/tap
brew install click-to-mcp

O instala vía Scoop (Windows):

scoop bucket add Coding-Dev-Tools https://github.com/Coding-Dev-Tools/scoop-bucket
scoop install click-to-mcp
# Discover all Click/typer CLIs installed in your environment
click-to-mcp discover

# List the MCP tools that would be exposed from a CLI (without starting a server)
click-to-mcp list-tools api-contract-guardian
click-to-mcp list-tools --all --json-output   # all CLIs, JSON for CI

# Serve a specific CLI as an MCP server (stdio transport)
click-to-mcp serve api-contract-guardian

# Serve over HTTP+SSE (for web-based MCP clients)
click-to-mcp serve-http api-contract-guardian --port 8000

# Or serve the built-in demo
click-to-mcp demo            # stdio
click-to-mcp demo-http       # HTTP+SSE on port 8000

# Generate MCP client configuration (copy-paste ready JSON)
click-to-mcp config api-contract-guardian
click-to-mcp config api-contract-guardian --client cursor
click-to-mcp config api-contract-guardian --transport http --port 9000
click-to-mcp config --all --client vscode

Luego configura tu cliente MCP para conectarse vía stdio o HTTP.

Cómo Funciona

click-to-mcp inspecciona tu CLI de Click/typer en tiempo de ejecución y mapea cada comando a una herramienta MCP:

Concepto de ClickMapeo MCP
@click.command()Herramienta MCP
@click.argument()Propiedad de entrada requerida
@click.option()Propiedad de entrada opcional con valor predeterminado
click.ChoiceJSON Schema enum
click.INT/FLOATJSON Schema integer/number
click.BOOL / is_flagJSON Schema boolean
click.Group anidadosHerramientas con prefijo (ej. config_show)

Sin anotaciones, sin decoradores, sin código repetitivo. Tu CLI de Click existente es el servidor MCP.

Flujo de Trabajo MCP con Agentes de Codificación con IA

Esta sección muestra cómo integrar click-to-mcp con herramientas populares de codificación con IA para que tus CLIs se conviertan en herramientas de primera clase que los agentes de IA puedan invocar directamente.

Claude Code

Añade tu CLI como servidor MCP en el archivo .claude/settings.json de tu proyecto:

{
  "mcpServers": {
    "api-contract-guardian": {
      "command": "click-to-mcp",
      "args": ["serve", "api-contract-guardian"]
    },
    "json2sql": {
      "command": "click-to-mcp",
      "args": ["serve", "json2sql"]
    },
    "deploydiff": {
      "command": "click-to-mcp",
      "args": ["serve", "deploydiff"]
    }
  }
}

Ahora, cuando le pidas a Claude Code que "valide mis contratos de API", llamará automáticamente a la herramienta MCP acg_validate con los argumentos correctos — sin necesidad de invocación manual desde la línea de comandos.

Cursor

Añade a la configuración MCP de Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "api-contract-guardian": {
      "command": "click-to-mcp",
      "args": ["serve", "api-contract-guardian"]
    }
  }
}

Cline / VS Code

Añade a .vscode/mcp.json:

{
  "servers": {
    "api-contract-guardian": {
      "command": "click-to-mcp",
      "args": ["serve", "api-contract-guardian"]
    }
  }
}

Integración Personalizada (Programática)

Para CLIs que no están instalados como puntos de entrada, usa la API de la biblioteca:

# my_mcp_server.py
from click_to_mcp import run
from my_cli import app  # Your Click/typer CLI

run(app, prefix="my-cli", name="my-cli-mcp")

Luego referencia el script directamente:

{
  "mcpServers": {
    "my-cli": {
      "command": "python",
      "args": ["my_mcp_server.py"]
    }
  }
}

Lo que Ve el Agente

Cuando tu servidor MCP está configurado, el agente de IA ve tus comandos CLI como herramientas nativas. Por ejemplo, con api-contract-guardian:

Agent: "I need to validate the API contract against the staging server."
→ Calls MCP tool: acg_validate
  Arguments: { "spec_file": "openapi.yaml", "base_url": "https://staging.api.com", "strict": true, "output_format": "json" }
← Result: "Validating openapi.yaml against https://staging.api.com...\n✓ All contracts pass"

El agente no necesita saber sintaxis de shell, banderas de argumentos o nombres de comandos. Simplemente llama a la herramienta con argumentos estructurados, y click-to-mcp se encarga del resto.

Ejemplos

Inicio Rápido (3 líneas)

import click
from click_to_mcp import run

@click.group()
def my_cli():
    """My awesome CLI tool."""
    pass

@my_cli.command()
@click.argument("name")
@click.option("--loud", is_flag=True, help="Shout the greeting")
def hello(name: str, loud: bool):
    """Say hello to someone."""
    msg = f"Hello, {name}!"
    if loud:
        msg = msg.upper()
    click.echo(msg)

if __name__ == "__main__":
    run(my_cli, prefix="my-cli", name="my-cli-mcp")

Consulta examples/quick_start.py para el ejemplo ejecutable completo.

Envolviendo api-contract-guardian

Consulta examples/api_contract_guardian_mcp.py para una demostración que muestra cómo envolver API Contract Guardian como servidor MCP con los comandos validate, extract y monitor.

Uso

CLI — Descubrir y Servir

# List all installed Click/typer CLIs
click-to-mcp discover

# Serve a specific CLI as an MCP server over stdio
click-to-mcp serve <name>

# Serve over HTTP+SSE (requires pip install "click-to-mcp[http] @ git+https://github.com/Coding-Dev-Tools/click-to-mcp.git")
click-to-mcp serve-http <name> --port 8000

# Serve the built-in demo
click-to-mcp demo            # stdio
click-to-mcp demo-http       # HTTP+SSE

# Version info
click-to-mcp --version

Biblioteca — Integrar directamente

# my_cli.py
import click
from click_to_mcp import serve_stdio

@click.group()
def cli():
    """My CLI tool."""
    pass

@cli.command()
@click.argument("file")
@click.option("--verbose", is_flag=True)
def validate(file: str, verbose: bool) -> None:
    """Validate a file."""
    click.echo(f"Validating {file}...")

# Run as MCP server
serve_stdio(cli, name="my-cli", description="My CLI as MCP server")

Biblioteca — API de alto nivel run()

from click_to_mcp import run
from my_cli import app

# Automatically detects Click/typer instances
run(app, prefix="my-cli")

Características

  • Auto-descubrimiento: click-to-mcp discover escanea los puntos de entrada de console_scripts en busca de CLIs de Click/typer
  • Vista previa de herramientas: click-to-mcp list-tools <name> muestra las herramientas MCP sin iniciar un servidor (compatible con CI mediante --json-output)
  • Configuración de cliente: click-to-mcp config <name> genera JSON listo para pegar para Claude Desktop, Cursor, VS Code, Windsurf y Cline
  • Servir cualquier CLI: click-to-mcp serve <name> envuelve cualquier CLI descubierto como servidor MCP
  • Transporte HTTP+SSE: click-to-mcp serve-http <name> sirve sobre HTTP para clientes basados en web (v0.3.0+)
  • Soporta tanto Click como Typer: Compatibilidad completa con ambos frameworks
  • Grupos de comandos anidados: Maneja grupos de subcomandos recursivamente con nombres de herramientas con prefijo
  • Introspección de parámetros: Mapea correctamente opciones, argumentos, tipos, enums, valores predeterminados y texto de ayuda de Click a JSON Schema
  • Protocolo MCP completo: Implementa initialize, tools/list, tools/call sobre stdio y HTTP+SSE
  • Endpoint de salud: Los servidores HTTP exponen /health para monitoreo y balanceadores de carga

Transportes

Stdio (predeterminado)

Mejor para clientes MCP locales basados en CLI (Claude Code, Cursor, Cline). No se necesitan dependencias adicionales.

click-to-mcp serve <name>

HTTP+SSE (v0.3.0+)

Mejor para clientes MCP basados en web, acceso remoto y configuraciones multiusuario. Requiere el extra [http].

# Install HTTP dependencies
pip install "click-to-mcp[http] @ git+https://github.com/Coding-Dev-Tools/click-to-mcp.git"

# Start an HTTP+SSE server
click-to-mcp serve-http <name> --host 127.0.0.1 --port 8000

Endpoints:

EndpointMétodoDescripción
/sseGETFlujo SSE (eventos de servidor a cliente)
/messagesPOSTEndpoint de mensajes JSON-RPC
/healthGETVerificación de salud (estado JSON)

Configura tu cliente MCP con la URL SSE:

{
  "mcpServers": {
    "my-cli": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

Protocolo MCP

Click-to-MCP implementa el protocolo MCP estándar con:

  • initialize — handshake del protocolo (devuelve las capacidades del servidor)
  • tools/list — descubre todos los comandos CLI como herramientas MCP con entradas JSON Schema
  • tools/call — invoca un comando CLI con argumentos tipados

Integración con CLIs Existentes

Añade un punto de entrada de servidor MCP a cualquier CLI de Click/typer:

# cli.py — add a subcommand to run as MCP server
import typer
from click_to_mcp import run

app = typer.Typer(...)

@app.command()
def mcp():
    """Run as an MCP server over stdio."""
    from click_to_mcp import run
    run(app)

Luego los agentes pueden usarlo como: your-cli mcp

Desarrollo

git clone https://github.com/Coding-Dev-Tools/click-to-mcp
cd click-to-mcp
pip install -e ".[dev,http]"
python -m pytest tests/ -v          # 100+ tests covering adapter, server, HTTP, config, and CLI
click-to-mcp demo                    # starts MCP stdio server for demo CLI
click-to-mcp demo-http               # starts MCP HTTP+SSE server on port 8000

Precios

click-to-mcp es gratis y de código abierto bajo Apache 2.0. Sin clave de licencia requerida, sin límites de tasa, sin telemetría.

También funciona con cualquier herramienta CLI de DevForge — incluso en el plan gratuito.

Licencia

Apache 2.0


Parte de DevForge — herramientas CLI para desarrolladores construidas por agentes de IA autónomos.