Cargo MCP

Interactúa con proyectos de Rust usando comandos de Cargo como build,

Documentación

Servidor Cargo MCP

Un servidor Model Context Protocol (MCP) que proporciona herramientas para ejecutar comandos de Cargo. Este servidor permite a los agentes de IA interactuar con proyectos de Rust a través de Cargo, habilitando compilaciones automatizadas, pruebas, generación de documentación y más.

Características

El servidor proporciona las siguientes herramientas de Cargo:

  • cargo_build - Compilar un proyecto de Rust con Cargo
  • cargo_test - Ejecutar pruebas para un proyecto de Rust
  • cargo_run - Ejecutar un binario de Rust
  • cargo_check - Verificar un proyecto en busca de errores sin compilar
  • cargo_clippy - Ejecutar el linter Clippy
  • cargo_fmt - Formatear código Rust usando rustfmt
  • cargo_doc - Generar documentación
  • cargo_clean - Limpiar artefactos de compilación
  • cargo_tree - Mostrar el árbol de dependencias
  • cargo_update - Actualizar dependencias en Cargo.lock
  • cargo_bench - Ejecutar benchmarks

Instalación

Requisitos previos

  • Python 3.8 o superior
  • Rust y Cargo instalados en su sistema
  • Acceso para instalar paquetes de Python

Instalar desde el código fuente

  1. Clonar este repositorio:
git clone <repository-url>
cd cargo-mcp
  1. Instalar el paquete:
pip install -e .

Uso

Con Claude Desktop

Agregue el servidor a su claude_desktop_config.json:

MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "cargo-mcp": {
      "command": "cargo-mcp"
    }
  }
}

Con otros clientes MCP

El servidor se puede usar con cualquier cliente compatible con MCP. Inicie el servidor usando:

cargo-mcp

Pruebas con MCP Inspector

Puede probar el servidor usando MCP Inspector:

npx @modelcontextprotocol/inspector cargo-mcp

Documentación de herramientas

cargo_build

Compilar un proyecto de Rust con Cargo.

Parámetros:

  • release (booleano, opcional): Compilar en modo release con optimizaciones
  • features (arreglo, opcional): Lista de características a activar
  • target (cadena, opcional): Compilar para el triple de destino dado
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace (se detecta automáticamente si no se proporciona)

cargo_test

Ejecutar pruebas para un proyecto de Rust.

Parámetros:

  • test_name (cadena, opcional): Nombre de la prueba específica a ejecutar
  • release (booleano, opcional): Ejecutar pruebas en modo release
  • features (arreglo, opcional): Lista de características a activar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_run

Ejecutar un binario de Rust.

Parámetros:

  • bin_name (cadena, opcional): Nombre del binario a ejecutar (para proyectos con múltiples binarios)
  • args (arreglo, opcional): Argumentos a pasar al binario
  • release (booleano, opcional): Ejecutar en modo release
  • features (arreglo, opcional): Lista de características a activar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_check

Verificar un proyecto de Rust en busca de errores sin compilarlo.

Parámetros:

  • features (arreglo, opcional): Lista de características a activar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_clippy

Ejecutar el linter Clippy en un proyecto de Rust.

Parámetros:

  • fix (booleano, opcional): Aplicar automáticamente las correcciones sugeridas
  • features (arreglo, opcional): Lista de características a activar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_fmt

Formatear código Rust usando rustfmt.

Parámetros:

  • check (booleano, opcional): Verificar si los archivos están formateados sin modificarlos
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_doc

Generar documentación para un proyecto de Rust.

Parámetros:

  • open (booleano, opcional): Abrir la documentación en el navegador después de generarla
  • no_deps (booleano, opcional): No compilar documentación para dependencias
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_clean

Limpiar artefactos de compilación.

Parámetros:

  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_tree

Mostrar el árbol de dependencias.

Parámetros:

  • package (cadena, opcional): Paquete para mostrar el árbol
  • features (arreglo, opcional): Lista de características a activar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_update

Actualizar dependencias en Cargo.lock.

Parámetros:

  • package (cadena, opcional): Paquete específico a actualizar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

cargo_bench

Ejecutar benchmarks.

Parámetros:

  • bench_name (cadena, opcional): Nombre del benchmark específico a ejecutar
  • features (arreglo, opcional): Lista de características a activar
  • workspace_path (cadena, opcional): Ruta a la raíz del workspace

Detección de estructura del proyecto

El servidor detecta automáticamente proyectos de Rust buscando archivos Cargo.toml. Recorre el árbol de directorios hacia arriba desde el directorio de trabajo actual para encontrar el archivo Cargo.toml más cercano y usa ese directorio como raíz del workspace.

Puede anular este comportamiento proporcionando el parámetro workspace_path a cualquier herramienta.

Manejo de errores

El servidor proporciona mensajes de error detallados y registros para la resolución de problemas:

  • Verifica si Cargo está instalado y disponible en PATH
  • Valida que Cargo.toml exista en el directorio de destino
  • Captura tanto stdout como stderr de los comandos de Cargo
  • Proporciona información detallada de ejecución de comandos

Desarrollo

Configuración

  1. Clonar el repositorio
  2. Instalar dependencias de desarrollo:
pip install -e ".[dev]"

Pruebas

Ejecutar pruebas usando pytest:

pytest

Formato de código

Formatear código usando black:

black src/

Lint del código usando ruff:

ruff check src/

Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para más detalles.

Contribuciones

¡Las contribuciones son bienvenidas! No dude en enviar un Pull Request.

Soporte

Para problemas y preguntas: