Cargo MCP Server

Herramientas para gestionar proyectos de Rust utilizando la herramienta de línea de comandos cargo.

Documentación

Servidor Cargo MCP

Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona herramientas para gestionar proyectos Rust utilizando la herramienta de línea de comandos cargo.

Descargo de responsabilidad

Todo este repositorio fue construido con asistencia de IA generativa, guiado por supervisión humana durante todo el proceso de desarrollo. El código, la documentación y la arquitectura fueron desarrollados de manera colaborativa entre la dirección humana y la implementación de IA.

Arquitectura

El servidor está organizado en varios módulos para facilitar su mantenimiento:

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

Características

Este servidor MCP proporciona herramientas integrales de cargo organizadas por categoría:

Herramientas de compilación

  • check - Analizar código sin producir ejecutables
  • build - Compilar el paquete actual
  • clippy - Ejecutar lints de Clippy en el paquete actual
  • fmt - Formatear código Rust usando rustfmt

Herramientas de ejecución

  • run - Ejecutar un binario o ejemplo del paquete local
  • test - Ejecutar pruebas unitarias y de integración
  • bench - Ejecutar benchmarks

Gestión de dependencias

  • add - Agregar dependencias a un archivo de manifiesto Cargo.toml
  • remove - Eliminar dependencias de un archivo de manifiesto Cargo.toml
  • update - Actualizar dependencias según lo registrado en el archivo de bloqueo local
  • tree - Mostrar una visualización de árbol de un grafo de dependencias

Gestión de proyectos

  • new - Crear un nuevo paquete cargo en
  • init - Crear un nuevo paquete cargo en un directorio existente
  • clean - Eliminar artefactos que cargo ha generado en el pasado
  • doc - Compilar la documentación de este paquete y sus dependencias

Operaciones de registro

  • search - Buscar paquetes en crates.io
  • info - Mostrar información sobre un paquete en el registro
  • install - Instalar un binario Rust
  • uninstall - Eliminar un binario Rust

Herramientas de utilidad

  • metadata - Generar las dependencias resueltas de un paquete en formato legible por máquina
  • version - Mostrar información de versión para cargo y rust

Instalación

  1. Clonar este repositorio
  2. Compilar el proyecto:
    cargo build --release
    
  3. Configurar su cliente MCP para usar el servidor. Ejemplo de configuración:
    {
      "mcpServers": {
        "cargo-mcp": {
          "command": "/path/to/cargo-mcp/target/release/cargo-mcp",
          "args": []
        }
      }
    }
    

Uso

El servidor se comunica mediante JSON-RPC sobre stdin/stdout. Está diseñado para usarse con clientes compatibles con MCP.

Ejemplos de llamadas a herramientas

Verificar un proyecto

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check",
    "arguments": {
      "working_directory": "/path/to/project",
      "all_targets": true
    }
  }
}

Compilar en modo release

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "build",
    "arguments": {
      "working_directory": "/path/to/project",
      "release": true
    }
  }
}

Ejecutar un binario específico

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "working_directory": "/path/to/project",
      "bin": "my-binary"
    }
  }
}

Formatear código

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "fmt",
    "arguments": {
      "working_directory": "/path/to/project"
    }
  }
}

Ejecutar Clippy con correcciones

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
    "name": "clippy",
    "arguments": {
      "working_directory": "/path/to/project",
      "fix": true,
      "allow_dirty": true
    }
  }
}

Agregar una dependencia

{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": {
    "name": "add",
    "arguments": {
      "working_directory": "/path/to/project",
      "dependency": "serde",
      "features": ["derive"]
    }
  }
}

Buscar paquetes

{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": {
      "working_directory": "/path/to/project",
      "query": "tokio",
      "limit": 5
    }
  }
}

Ejecutar pruebas

{
  "jsonrpc": "2.0",
  "id": 8,
  "method": "tools/call",
  "params": {
    "name": "test",
    "arguments": {
      "working_directory": "/path/to/project",
      "release": true
    }
  }
}

Parámetros de herramientas

Parámetros comunes

La mayoría de las herramientas admiten estos parámetros comunes:

  • working_directory (cadena, opcional) - Directorio de trabajo para ejecutar cargo
  • package (cadena, opcional) - Paquete sobre el que operar
  • features (matriz de cadenas, opcional) - Características a activar
  • all_features (booleano, opcional) - Activar todas las características disponibles
  • no_default_features (booleano, opcional) - No activar características predeterminadas
  • release (booleano, opcional) - Usar perfil release
  • target (cadena, opcional) - Triple de destino

Parámetros de selección de destino

Para check, build, clippy, test y bench:

  • lib (booleano, opcional) - Solo la biblioteca de este paquete
  • bin (cadena, opcional) - Solo el binario especificado
  • bins (booleano, opcional) - Todos los binarios
  • example (cadena, opcional) - Solo el ejemplo especificado
  • examples (booleano, opcional) - Todos los ejemplos
  • test (cadena, opcional) - Solo el destino de prueba especificado
  • tests (booleano, opcional) - Todas las pruebas
  • bench (cadena, opcional) - Solo el destino de benchmark especificado
  • benches (booleano, opcional) - Todos los benchmarks
  • all_targets (booleano, opcional) - Todos los destinos

Parámetros específicos de compilación

Para check y build:

  • profile (cadena, opcional) - Compilar artefactos con el perfil especificado
  • message_format (cadena, opcional) - Formato de error (human, short, json, etc.)
  • workspace (booleano, opcional) - Compilar todos los paquetes en el workspace
  • exclude (matriz de cadenas, opcional) - Excluir paquetes de la operación

Parámetros específicos de Clippy

  • fix (booleano, opcional) - Aplicar automáticamente sugerencias de lint
  • allow_dirty (booleano, opcional) - Corregir código incluso si el directorio de trabajo tiene cambios
  • allow_staged (booleano, opcional) - Corregir código incluso si el directorio de trabajo tiene cambios preparados

Parámetros específicos de pruebas

  • exact (booleano, opcional) - Coincidir exactamente con los filtros en lugar de por subcadena
  • ignored (booleano, opcional) - Ejecutar pruebas ignoradas
  • include_ignored (booleano, opcional) - Ejecutar tanto pruebas ignoradas como no ignoradas
  • jobs (entero, opcional) - Número de trabajos paralelos
  • nocapture (booleano, opcional) - No capturar stdout/stderr
  • test_threads (entero, opcional) - Número de hilos para ejecutar pruebas

Parámetros de gestión de dependencias

Parámetros de add

  • dependency (cadena, obligatorio) - Dependencia a agregar
  • dev (booleano, opcional) - Agregar como dependencia de desarrollo
  • build (booleano, opcional) - Agregar como dependencia de compilación
  • optional (booleano, opcional) - Marcar la dependencia como opcional
  • rename (cadena, opcional) - Renombrar la dependencia
  • path (cadena, opcional) - Ruta del sistema de archivos a la crate local
  • git (cadena, opcional) - Ubicación del repositorio Git
  • branch (cadena, opcional) - Rama Git
  • tag (cadena, opcional) - Etiqueta Git
  • rev (cadena, opcional) - Referencia Git
  • default_features (booleano, opcional) - Rehabilitar características predeterminadas
  • registry (cadena, opcional) - Registro a usar

Parámetros de remove

  • dependency (cadena, obligatorio) - Dependencia a eliminar
  • dev (booleano, opcional) - Eliminar como dependencia de desarrollo
  • build (booleano, opcional) - Eliminar como dependencia de compilación

Parámetros de update

  • aggressive (booleano, opcional) - Forzar la actualización de todas las dependencias
  • dry_run (booleano, opcional) - No escribir realmente el archivo de bloqueo
  • precise (cadena, opcional) - Actualizar exactamente a esta versión
  • workspace (booleano, opcional) - Actualizar todos los paquetes en el workspace

Parámetros de tree

  • duplicates (booleano, opcional) - Mostrar solo dependencias con múltiples versiones
  • edges (cadena, opcional) - Tipos de dependencias a mostrar
  • format (cadena, opcional) - Cadena de formato para imprimir dependencias
  • invert (matriz de cadenas, opcional) - Invertir grafo de dependencias
  • no_dedupe (booleano, opcional) - Repetir dependencias compartidas
  • prefix (cadena, opcional) - Cómo mostrar el árbol
  • prune (matriz de cadenas, opcional) - Podar paquetes de la visualización
  • depth (entero, opcional) - Profundidad máxima de visualización
  • charset (cadena, opcional) - Conjunto de caracteres (utf8, ascii)

Parámetros de gestión de proyectos

Parámetros de new/init

  • path (cadena, obligatorio para new) - Ruta para el nuevo paquete
  • name (cadena, opcional) - Nombre del paquete
  • bin_template (booleano, opcional) - Usar plantilla de binario
  • lib_template (booleano, opcional) - Usar plantilla de biblioteca
  • edition (cadena, opcional) - Edición a establecer
  • registry (cadena, opcional) - Registro a usar

Parámetros de doc

  • open (booleano, opcional) - Abrir documentación en el navegador
  • no_deps (booleano, opcional) - No compilar documentación para dependencias
  • document_private_items (booleano, opcional) - Documentar elementos privados
  • jobs (entero, opcional) - Número de trabajos paralelos

Parámetros de registro

Parámetros de search

  • query (cadena, obligatorio) - Consulta de búsqueda
  • limit (entero, opcional) - Limitar resultados (predeterminado: 10, máximo: 100)
  • registry (cadena, opcional) - Registro a usar

Parámetros de info

  • query (cadena, obligatorio) - Nombre del paquete
  • registry (cadena, opcional) - Registro a usar

Parámetros de install

  • query (cadena, opcional) - Nombre del paquete a instalar
  • version (cadena, opcional) - Especificar versión
  • git_url (cadena, opcional) - URL de Git desde la que instalar
  • branch_install (cadena, opcional) - Rama Git
  • tag_install (cadena, opcional) - Etiqueta Git
  • rev_install (cadena, opcional) - Commit Git
  • path_install (cadena, opcional) - Ruta local
  • bin_install (cadena, opcional) - Instalar solo el binario especificado
  • bins_install (booleano, opcional) - Instalar todos los binarios
  • example_install (cadena, opcional) - Instalar solo el ejemplo especificado
  • examples_install (booleano, opcional) - Instalar todos los ejemplos
  • force (booleano, opcional) - Forzar sobrescritura
  • no_track (booleano, opcional) - No guardar información de seguimiento
  • locked (booleano, opcional) - Afirmar que Cargo.lock no cambió
  • root (cadena, opcional) - Directorio de instalación
  • registry (cadena, opcional) - Registro a usar
  • index (cadena, opcional) - Índice de registro
  • list (booleano, opcional) - Listar paquetes instalados

Parámetros de uninstall

  • query (cadena, obligatorio) - Nombre del paquete a desinstalar
  • bin_install (cadena, opcional) - Desinstalar solo el binario especificado
  • root (cadena, opcional) - Directorio desde el que desinstalar

Parámetros de utilidad

Parámetros de metadata

  • no_deps (booleano, opcional) - No obtener dependencias
  • format_version (entero, opcional) - Versión de formato

Soporte de protocolo

Este servidor implementa la versión 2024-11-05 del protocolo MCP y admite:

  • initialize - Inicialización del servidor
  • tools/list - Listar herramientas disponibles
  • tools/call - Ejecutar comandos cargo

Desarrollo

Para contribuir a este proyecto:

  1. Clonar el repositorio
  2. Realizar sus cambios
  3. Probar con cargo check y cargo build
  4. Formatear código con cargo fmt
  5. Ejecutar lints con cargo clippy

Manejo de errores

El servidor proporciona mensajes de error detallados cuando los comandos cargo fallan, incluyendo tanto la salida stdout como stderr del proceso cargo.