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
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:
- Crie um novo pacote Python para seu servidor MCP
- Defina o JSON Schema para cada ferramenta manualmente
- Configure o transporte stdio/HTTP
- 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 Click | Mapeamento MCP |
|---|---|
@click.command() | Ferramenta MCP |
@click.argument() | Propriedade de entrada obrigatória |
@click.option() | Propriedade de entrada opcional com padrão |
click.Choice | JSON Schema enum |
click.INT/FLOAT | JSON Schema integer/number |
click.BOOL / is_flag | JSON Schema boolean |
Aninhado click.Group | Ferramentas 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 discoververifica os entry pointsconsole_scriptspara 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/callsobre stdio e HTTP+SSE - Endpoint de saúde: Servidores HTTP expõem
/healthpara 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:
| Endpoint | Método | Descrição |
|---|---|---|
/sse | GET | Fluxo SSE (eventos de servidor para cliente) |
/messages | POST | Endpoint de mensagens JSON-RPC |
/health | GET | Verificaçã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 Schematools/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.