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
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:
- Crear un nuevo paquete de Python para tu servidor MCP
- Definir JSON Schema para cada herramienta manualmente
- Configurar el transporte stdio/HTTP
- 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 Click | Mapeo MCP |
|---|---|
@click.command() | Herramienta MCP |
@click.argument() | Propiedad de entrada requerida |
@click.option() | Propiedad de entrada opcional con valor predeterminado |
click.Choice | JSON Schema enum |
click.INT/FLOAT | JSON Schema integer/number |
click.BOOL / is_flag | JSON Schema boolean |
click.Group anidados | Herramientas 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 discoverescanea los puntos de entrada deconsole_scriptsen 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/callsobre stdio y HTTP+SSE - Endpoint de salud: Los servidores HTTP exponen
/healthpara 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:
| Endpoint | Método | Descripción |
|---|---|---|
/sse | GET | Flujo SSE (eventos de servidor a cliente) |
/messages | POST | Endpoint de mensajes JSON-RPC |
/health | GET | Verificació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 Schematools/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.