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

  1. Clone este repositório
  2. Compile o projeto:
    cargo build --release
    
  3. 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 cargo
  • package (string, opcional) - Pacote no qual operar
  • features (array de strings, opcional) - Features a ativar
  • all_features (booleano, opcional) - Ativa todas as features disponíveis
  • no_default_features (booleano, opcional) - Não ativa as features padrão
  • release (booleano, opcional) - Usa o perfil release
  • target (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 pacote
  • bin (string, opcional) - Apenas o binário especificado
  • bins (booleano, opcional) - Todos os binários
  • example (string, opcional) - Apenas o exemplo especificado
  • examples (booleano, opcional) - Todos os exemplos
  • test (string, opcional) - Apenas o target de teste especificado
  • tests (booleano, opcional) - Todos os testes
  • bench (string, opcional) - Apenas o target de bench especificado
  • benches (booleano, opcional) - Todos os benches
  • all_targets (booleano, opcional) - Todos os targets

Parâmetros Específicos de Build

Para check e build:

  • profile (string, opcional) - Compila artefatos com o perfil especificado
  • message_format (string, opcional) - Formato de erro (human, short, json, etc.)
  • workspace (booleano, opcional) - Compila todos os pacotes no workspace
  • exclude (array de strings, opcional) - Exclui pacotes da operação

Parâmetros Específicos do Clippy

  • fix (booleano, opcional) - Aplica automaticamente sugestões de lint
  • allow_dirty (booleano, opcional) - Corrige o código mesmo se o diretório de trabalho tiver alterações
  • allow_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 substring
  • ignored (booleano, opcional) - Executa testes ignorados
  • include_ignored (booleano, opcional) - Executa testes ignorados e não ignorados
  • jobs (inteiro, opcional) - Número de jobs paralelos
  • nocapture (booleano, opcional) - Não captura stdout/stderr
  • test_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 adicionar
  • dev (booleano, opcional) - Adiciona como dependência de desenvolvimento
  • build (booleano, opcional) - Adiciona como dependência de build
  • optional (booleano, opcional) - Marca a dependência como opcional
  • rename (string, opcional) - Renomeia a dependência
  • path (string, opcional) - Caminho no sistema de arquivos para crate local
  • git (string, opcional) - Localização do repositório Git
  • branch (string, opcional) - Branch do Git
  • tag (string, opcional) - Tag do Git
  • rev (string, opcional) - Referência do Git
  • default_features (booleano, opcional) - Reativa as features padrão
  • registry (string, opcional) - Registro a usar

Parâmetros do remove

  • dependency (string, obrigatório) - Dependência a remover
  • dev (booleano, opcional) - Remove como dependência de desenvolvimento
  • build (booleano, opcional) - Remove como dependência de build

Parâmetros do update

  • aggressive (booleano, opcional) - Força a atualização de todas as dependências
  • dry_run (booleano, opcional) - Não grava o lockfile de fato
  • precise (string, opcional) - Atualiza exatamente para esta versão
  • workspace (booleano, opcional) - Atualiza todos os pacotes no workspace

Parâmetros do tree

  • duplicates (booleano, opcional) - Mostra apenas dependências com múltiplas versões
  • edges (string, opcional) - Tipos de dependências a exibir
  • format (string, opcional) - String de formato para imprimir dependências
  • invert (array de strings, opcional) - Inverte o grafo de dependências
  • no_dedupe (booleano, opcional) - Repete dependências compartilhadas
  • prefix (string, opcional) - Como exibir a árvore
  • prune (array de strings, opcional) - Remove pacotes da exibição
  • depth (inteiro, opcional) - Profundidade máxima de exibição
  • charset (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 pacote
  • name (string, opcional) - Nome do pacote
  • bin_template (booleano, opcional) - Usa template de binário
  • lib_template (booleano, opcional) - Usa template de biblioteca
  • edition (string, opcional) - Edition a definir
  • registry (string, opcional) - Registro a usar

Parâmetros do doc

  • open (booleano, opcional) - Abre a documentação no navegador
  • no_deps (booleano, opcional) - Não compila documentação para dependências
  • document_private_items (booleano, opcional) - Documenta itens privados
  • jobs (inteiro, opcional) - Número de jobs paralelos

Parâmetros de Registro

Parâmetros do search

  • query (string, obrigatório) - Consulta de pesquisa
  • limit (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 pacote
  • registry (string, opcional) - Registro a usar

Parâmetros do install

  • query (string, opcional) - Nome do pacote a instalar
  • version (string, opcional) - Especifica a versão
  • git_url (string, opcional) - URL do Git para instalar
  • branch_install (string, opcional) - Branch do Git
  • tag_install (string, opcional) - Tag do Git
  • rev_install (string, opcional) - Commit do Git
  • path_install (string, opcional) - Caminho local
  • bin_install (string, opcional) - Instala apenas o binário especificado
  • bins_install (booleano, opcional) - Instala todos os binários
  • example_install (string, opcional) - Instala apenas o exemplo especificado
  • examples_install (booleano, opcional) - Instala todos os exemplos
  • force (booleano, opcional) - Força sobrescrita
  • no_track (booleano, opcional) - Não salva informações de rastreamento
  • locked (booleano, opcional) - Garante que o Cargo.lock não foi alterado
  • root (string, opcional) - Diretório de instalação
  • registry (string, opcional) - Registro a usar
  • index (string, opcional) - Índice do registro
  • list (booleano, opcional) - Lista pacotes instalados

Parâmetros do uninstall

  • query (string, obrigatório) - Nome do pacote a desinstalar
  • bin_install (string, opcional) - Desinstala apenas o binário especificado
  • root (string, opcional) - Diretório de onde desinstalar

Parâmetros Utilitários

Parâmetros do metadata

  • no_deps (booleano, opcional) - Não busca dependências
  • format_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 servidor
  • tools/list - Lista ferramentas disponíveis
  • tools/call - Executa comandos do cargo

Desenvolvimento

Para contribuir com este projeto:

  1. Clone o repositório
  2. Faça suas alterações
  3. Teste com cargo check e cargo build
  4. Formate o código com cargo fmt
  5. 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.