Cargo MCP Server
Ferramentas para gerenciar projetos Rust usando a ferramenta de linha de comando cargo.
Documentação
Cargo MCP Server
Um servidor Model Context Protocol (MCP) que fornece ferramentas para gerenciar projetos Rust usando a ferramenta de linha de comando cargo.
Aviso
Este repositório inteiro foi construído com assistência de IA generativa, guiado por supervisão humana durante todo o processo de desenvolvimento. O código, a documentação e a arquitetura foram desenvolvidos de forma colaborativa entre direção humana e implementação por IA.
Arquitetura
O servidor está organizado em vários módulos para facilitar a manutenção:
src/
├── main.rs # Entry point
├── lib.rs # Library exports
├── server.rs # MCP server implementation
├── tools/
│ ├── mod.rs # Tool module exports
│ ├── definitions.rs # Main tool registry
│ ├── schemas.rs # Common schema utilities
│ ├── build_tools.rs # Build-related tools (check, build, clippy, fmt)
│ ├── execution_tools.rs # Execution tools (run, test, bench)
│ ├── dependency_tools.rs # Dependency management (add, remove, update, tree)
│ ├── project_tools.rs # Project management (new, init, clean, doc)
│ ├── registry_tools.rs # Registry operations (search, info, install, uninstall)
│ ├── utility_tools.rs # Utility tools (metadata, version)
│ └── executor.rs # Command execution logic
├── types.rs # Data structures and types
└── error.rs # Error handling
Recursos
Este servidor MCP fornece ferramentas abrangentes do cargo organizadas por categoria:
Ferramentas de Build
- check - Analisa o código sem produzir executáveis
- build - Compila o pacote atual
- clippy - Executa lints do Clippy no pacote atual
- fmt - Formata código Rust usando rustfmt
Ferramentas de Execução
- run - Executa um binário ou exemplo do pacote local
- test - Executa testes unitários e de integração
- bench - Executa benchmarks
Gerenciamento de Dependências
- add - Adiciona dependências a um arquivo de manifesto Cargo.toml
- remove - Remove dependências de um arquivo de manifesto Cargo.toml
- update - Atualiza dependências conforme registrado no arquivo de lock local
- tree - Exibe uma visualização em árvore de um grafo de dependências
Gerenciamento de Projetos
- new - Cria um novo pacote cargo em
- init - Cria um novo pacote cargo em um diretório existente
- clean - Remove artefatos que o cargo gerou no passado
- doc - Compila a documentação deste pacote e de suas dependências
Operações de Registro
- search - Pesquisa pacotes em crates.io
- info - Exibe informações sobre um pacote no registro
- install - Instala um binário Rust
- uninstall - Remove um binário Rust
Ferramentas Utilitárias
- metadata - Gera as dependências resolvidas de um pacote em formato legível por máquina
- version - Exibe informações de versão do cargo e do rust
Instalação
- Clone este repositório
- Compile o projeto:
cargo build --release - Configure seu cliente MCP para usar o servidor. Exemplo de configuração:
{ "mcpServers": { "cargo-mcp": { "command": "/path/to/cargo-mcp/target/release/cargo-mcp", "args": [] } } }
Uso
O servidor se comunica via JSON-RPC por stdin/stdout. Ele foi projetado para ser usado com clientes compatíveis com MCP.
Exemplos de Chamadas de Ferramentas
Verificar um projeto
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "check",
"arguments": {
"working_directory": "/path/to/project",
"all_targets": true
}
}
}
Compilar em modo release
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "build",
"arguments": {
"working_directory": "/path/to/project",
"release": true
}
}
}
Executar um binário específico
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"working_directory": "/path/to/project",
"bin": "my-binary"
}
}
}
Formatar código
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "fmt",
"arguments": {
"working_directory": "/path/to/project"
}
}
}
Executar Clippy com correções
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "clippy",
"arguments": {
"working_directory": "/path/to/project",
"fix": true,
"allow_dirty": true
}
}
}
Adicionar uma dependência
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "add",
"arguments": {
"working_directory": "/path/to/project",
"dependency": "serde",
"features": ["derive"]
}
}
}
Pesquisar pacotes
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"working_directory": "/path/to/project",
"query": "tokio",
"limit": 5
}
}
}
Executar testes
{
"jsonrpc": "2.0",
"id": 8,
"method": "tools/call",
"params": {
"name": "test",
"arguments": {
"working_directory": "/path/to/project",
"release": true
}
}
}
Parâmetros das Ferramentas
Parâmetros Comuns
A maioria das ferramentas suporta estes parâmetros comuns:
working_directory(string, opcional) - Diretório de trabalho para executar o cargopackage(string, opcional) - Pacote no qual operarfeatures(array de strings, opcional) - Features a ativarall_features(booleano, opcional) - Ativa todas as features disponíveisno_default_features(booleano, opcional) - Não ativa as features padrãorelease(booleano, opcional) - Usa o perfil releasetarget(string, opcional) - Target triple
Parâmetros de Seleção de Target
Para check, build, clippy, test e bench:
lib(booleano, opcional) - Apenas a biblioteca deste pacotebin(string, opcional) - Apenas o binário especificadobins(booleano, opcional) - Todos os bináriosexample(string, opcional) - Apenas o exemplo especificadoexamples(booleano, opcional) - Todos os exemplostest(string, opcional) - Apenas o target de teste especificadotests(booleano, opcional) - Todos os testesbench(string, opcional) - Apenas o target de bench especificadobenches(booleano, opcional) - Todos os benchesall_targets(booleano, opcional) - Todos os targets
Parâmetros Específicos de Build
Para check e build:
profile(string, opcional) - Compila artefatos com o perfil especificadomessage_format(string, opcional) - Formato de erro (human, short, json, etc.)workspace(booleano, opcional) - Compila todos os pacotes no workspaceexclude(array de strings, opcional) - Exclui pacotes da operação
Parâmetros Específicos do Clippy
fix(booleano, opcional) - Aplica automaticamente sugestões de lintallow_dirty(booleano, opcional) - Corrige o código mesmo se o diretório de trabalho tiver alteraçõesallow_staged(booleano, opcional) - Corrige o código mesmo se o diretório de trabalho tiver alterações em stage
Parâmetros Específicos de Teste
exact(booleano, opcional) - Corresponde exatamente aos filtros em vez de por substringignored(booleano, opcional) - Executa testes ignoradosinclude_ignored(booleano, opcional) - Executa testes ignorados e não ignoradosjobs(inteiro, opcional) - Número de jobs paralelosnocapture(booleano, opcional) - Não captura stdout/stderrtest_threads(inteiro, opcional) - Número de threads para executar testes
Parâmetros de Gerenciamento de Dependências
Parâmetros do add
dependency(string, obrigatório) - Dependência a adicionardev(booleano, opcional) - Adiciona como dependência de desenvolvimentobuild(booleano, opcional) - Adiciona como dependência de buildoptional(booleano, opcional) - Marca a dependência como opcionalrename(string, opcional) - Renomeia a dependênciapath(string, opcional) - Caminho no sistema de arquivos para crate localgit(string, opcional) - Localização do repositório Gitbranch(string, opcional) - Branch do Gittag(string, opcional) - Tag do Gitrev(string, opcional) - Referência do Gitdefault_features(booleano, opcional) - Reativa as features padrãoregistry(string, opcional) - Registro a usar
Parâmetros do remove
dependency(string, obrigatório) - Dependência a removerdev(booleano, opcional) - Remove como dependência de desenvolvimentobuild(booleano, opcional) - Remove como dependência de build
Parâmetros do update
aggressive(booleano, opcional) - Força a atualização de todas as dependênciasdry_run(booleano, opcional) - Não grava o lockfile de fatoprecise(string, opcional) - Atualiza exatamente para esta versãoworkspace(booleano, opcional) - Atualiza todos os pacotes no workspace
Parâmetros do tree
duplicates(booleano, opcional) - Mostra apenas dependências com múltiplas versõesedges(string, opcional) - Tipos de dependências a exibirformat(string, opcional) - String de formato para imprimir dependênciasinvert(array de strings, opcional) - Inverte o grafo de dependênciasno_dedupe(booleano, opcional) - Repete dependências compartilhadasprefix(string, opcional) - Como exibir a árvoreprune(array de strings, opcional) - Remove pacotes da exibiçãodepth(inteiro, opcional) - Profundidade máxima de exibiçãocharset(string, opcional) - Conjunto de caracteres (utf8, ascii)
Parâmetros de Gerenciamento de Projetos
Parâmetros do new/init
path(string, obrigatório para new) - Caminho para o novo pacotename(string, opcional) - Nome do pacotebin_template(booleano, opcional) - Usa template de bináriolib_template(booleano, opcional) - Usa template de bibliotecaedition(string, opcional) - Edition a definirregistry(string, opcional) - Registro a usar
Parâmetros do doc
open(booleano, opcional) - Abre a documentação no navegadorno_deps(booleano, opcional) - Não compila documentação para dependênciasdocument_private_items(booleano, opcional) - Documenta itens privadosjobs(inteiro, opcional) - Número de jobs paralelos
Parâmetros de Registro
Parâmetros do search
query(string, obrigatório) - Consulta de pesquisalimit(inteiro, opcional) - Limita resultados (padrão: 10, máx: 100)registry(string, opcional) - Registro a usar
Parâmetros do info
query(string, obrigatório) - Nome do pacoteregistry(string, opcional) - Registro a usar
Parâmetros do install
query(string, opcional) - Nome do pacote a instalarversion(string, opcional) - Especifica a versãogit_url(string, opcional) - URL do Git para instalarbranch_install(string, opcional) - Branch do Gittag_install(string, opcional) - Tag do Gitrev_install(string, opcional) - Commit do Gitpath_install(string, opcional) - Caminho localbin_install(string, opcional) - Instala apenas o binário especificadobins_install(booleano, opcional) - Instala todos os bináriosexample_install(string, opcional) - Instala apenas o exemplo especificadoexamples_install(booleano, opcional) - Instala todos os exemplosforce(booleano, opcional) - Força sobrescritano_track(booleano, opcional) - Não salva informações de rastreamentolocked(booleano, opcional) - Garante que o Cargo.lock não foi alteradoroot(string, opcional) - Diretório de instalaçãoregistry(string, opcional) - Registro a usarindex(string, opcional) - Índice do registrolist(booleano, opcional) - Lista pacotes instalados
Parâmetros do uninstall
query(string, obrigatório) - Nome do pacote a desinstalarbin_install(string, opcional) - Desinstala apenas o binário especificadoroot(string, opcional) - Diretório de onde desinstalar
Parâmetros Utilitários
Parâmetros do metadata
no_deps(booleano, opcional) - Não busca dependênciasformat_version(inteiro, opcional) - Versão do formato
Suporte a Protocolo
Este servidor implementa o protocolo MCP versão 2024-11-05 e suporta:
initialize- Inicialização do servidortools/list- Lista ferramentas disponíveistools/call- Executa comandos do cargo
Desenvolvimento
Para contribuir com este projeto:
- Clone o repositório
- Faça suas alterações
- Teste com
cargo checkecargo build - Formate o código com
cargo fmt - Execute lints com
cargo clippy
Tratamento de Erros
O servidor fornece mensagens de erro detalhadas quando comandos do cargo falham, incluindo a saída de stdout e stderr do processo do cargo.