click-to-mcp

Envolve automaticamente qualquer CLI Click/typer como um servidor MCP. Inspeciona comandos CLI em tempo de execução e os mapeia para ferramentas MCP.

Documentação

click-to-mcp

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

Envolva automaticamente qualquer CLI Click/typer como um servidor MCP (Model Context Protocol).

Dê uma estrela neste repositório se você cria ferramentas CLI — isso ajuda outros desenvolvedores a descobrirem o click-to-mcp!

Parte do ecossistema de ferramentas de desenvolvimento DevForge.

Por que click-to-mcp?

O problema: Você tem CLIs Python construídas com Click ou typer. Seu agente de codificação de IA (Claude Code, Codex, Cursor) precisa chamá-las — mas servidores MCP exigem escrever código boilerplate do zero.

O jeito antigo:

  1. Crie um novo pacote Python para seu servidor MCP
  2. Defina o JSON Schema para cada ferramenta manualmente
  3. Configure o transporte stdio/HTTP
  4. Mantenha-o sincronizado quando sua CLI mudar

O jeito click-to-mcp:

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

Um comando. Sua CLI agora é um servidor MCP. Sem boilerplate, sem escrever schema, sem carga de manutenção.

Exemplo real: api-contract-guardian tem 6 comandos com mais de 20 opções. Escrever um servidor MCP para ele levaria mais de 200 linhas de boilerplate. Com click-to-mcp: click-to-mcp serve api-contract-guardian — pronto.

Funciona com ferramentas CLI do DevForge de fábrica — envolva api-contract-guardian, json2sql, deploydiff ou configdrift como servidores MCP sem nenhuma alteração de código.

Início Rápido

Instale a partir do GitHub (recomendado — ainda não está no PyPI público):

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

Para transporte HTTP+SSE (clientes MCP baseados na web), instale com o extra http:

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

Instale diretamente do GitHub (versão de desenvolvimento mais recente):

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

Ou instale via Homebrew (macOS/Linux):

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

Ou instale via 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

Em seguida, configure seu cliente MCP para conectar via stdio ou HTTP.

Como Funciona

O click-to-mcp inspeciona sua CLI Click/typer em tempo de execução e mapeia cada comando para uma ferramenta MCP:

Conceito ClickMapeamento MCP
@click.command()Ferramenta MCP
@click.argument()Propriedade de entrada obrigatória
@click.option()Propriedade de entrada opcional com padrão
click.ChoiceJSON Schema enum
click.INT/FLOATJSON Schema integer/number
click.BOOL / is_flagJSON Schema boolean
Aninhado click.GroupFerramentas com prefixo (por exemplo, config_show)

Sem anotações, sem decoradores, sem boilerplate. Sua CLI Click existente é o servidor MCP.

Fluxo de Trabalho MCP com Agentes de Codificação de IA

Esta seção mostra como integrar o click-to-mcp com ferramentas populares de codificação de IA para que suas CLIs se tornem ferramentas de primeira classe que os agentes de IA podem invocar diretamente.

Claude Code

Adicione sua CLI como um servidor MCP no .claude/settings.json do seu projeto:

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

Agora, quando você pedir ao Claude Code para "validar meus contratos de API", ele chamará automaticamente a ferramenta MCP acg_validate com os argumentos corretos — sem necessidade de invocação manual por linha de comando.

Cursor

Adicione às configurações MCP do seu Cursor (.cursor/mcp.json):

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

Cline / VS Code

Adicione a .vscode/mcp.json:

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

Integração Personalizada (Programática)

Para CLIs que não estão instaladas como entry points, use a API da 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")

Em seguida, referencie o script diretamente:

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

O Que o Agente Vê

Quando seu servidor MCP está configurado, o agente de IA vê seus comandos CLI como ferramentas nativas. Por exemplo, com 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"

O agente não precisa saber sintaxe de shell, flags de argumento ou nomes de comandos. Ele apenas chama a ferramenta com argumentos estruturados, e o click-to-mcp cuida do resto.

Exemplos

Início Rápido (3 linhas)

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")

Veja examples/quick_start.py para o exemplo executável completo.

Envolvendo api-contract-guardian

Veja examples/api_contract_guardian_mcp.py para uma demonstração mostrando como envolver o API Contract Guardian como um servidor MCP com os comandos validate, extract e monitor.

Uso

CLI — Descobrir e 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 — Integre diretamente

# 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 nível run()

from click_to_mcp import run
from my_cli import app

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

Recursos

  • Descoberta automática: click-to-mcp discover verifica os entry points console_scripts para CLIs Click/typer
  • Pré-visualização de ferramentas: click-to-mcp list-tools <name> mostra ferramentas MCP sem iniciar um servidor (compatível com CI com --json-output)
  • Configuração do cliente: click-to-mcp config <name> gera JSON pronto para colar para Claude Desktop, Cursor, VS Code, Windsurf e Cline
  • Sirva qualquer CLI: click-to-mcp serve <name> envolve qualquer CLI descoberta como um servidor MCP
  • Transporte HTTP+SSE: click-to-mcp serve-http <name> serve via HTTP para clientes baseados na web (v0.3.0+)
  • Suporta tanto Click quanto Typer: Compatibilidade total com ambos os frameworks
  • Grupos de comandos aninhados: Lida com grupos de subcomandos recursivamente com nomes de ferramentas prefixados
  • Introspecção de parâmetros: Mapeia corretamente opções, argumentos, tipos, enums, padrões e texto de ajuda do Click para JSON Schema
  • Protocolo MCP completo: Implementa initialize, tools/list, tools/call sobre stdio e HTTP+SSE
  • Endpoint de saúde: Servidores HTTP expõem /health para monitoramento e balanceadores de carga

Transportes

Stdio (padrão)

Melhor para clientes MCP locais baseados em CLI (Claude Code, Cursor, Cline). Nenhuma dependência extra necessária.

click-to-mcp serve <name>

HTTP+SSE (v0.3.0+)

Melhor para clientes MCP baseados na web, acesso remoto e configurações multiusuário. Requer o 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étodoDescrição
/sseGETFluxo SSE (eventos de servidor para cliente)
/messagesPOSTEndpoint de mensagens JSON-RPC
/healthGETVerificação de saúde (status JSON)

Configure seu cliente MCP com a URL SSE:

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

Protocolo MCP

O Click-to-MCP implementa o protocolo MCP padrão com:

  • initialize — handshake de protocolo (retorna capacidades do servidor)
  • tools/list — descobre todos os comandos CLI como ferramentas MCP com entradas JSON Schema
  • tools/call — invoca um comando CLI com argumentos tipados

Integração com CLIs Existentes

Adicione um entry point de servidor MCP a qualquer CLI 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)

Então os agentes podem usá-lo como: your-cli mcp

Desenvolvimento

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

Preços

O click-to-mcp é gratuito e de código aberto sob Apache 2.0. Nenhuma chave de licença necessária, sem limites de taxa, sem telemetria.

Ele também funciona com qualquer ferramenta CLI DevForge — mesmo no nível gratuito.

Licença

Apache 2.0


Parte do DevForge — ferramentas CLI para desenvolvedores construídas por agentes de IA autônomos.