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
- Clonar este repositorio
- Compilar el proyecto:
cargo build --release - 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 cargopackage(cadena, opcional) - Paquete sobre el que operarfeatures(matriz de cadenas, opcional) - Características a activarall_features(booleano, opcional) - Activar todas las características disponiblesno_default_features(booleano, opcional) - No activar características predeterminadasrelease(booleano, opcional) - Usar perfil releasetarget(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 paquetebin(cadena, opcional) - Solo el binario especificadobins(booleano, opcional) - Todos los binariosexample(cadena, opcional) - Solo el ejemplo especificadoexamples(booleano, opcional) - Todos los ejemplostest(cadena, opcional) - Solo el destino de prueba especificadotests(booleano, opcional) - Todas las pruebasbench(cadena, opcional) - Solo el destino de benchmark especificadobenches(booleano, opcional) - Todos los benchmarksall_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 especificadomessage_format(cadena, opcional) - Formato de error (human, short, json, etc.)workspace(booleano, opcional) - Compilar todos los paquetes en el workspaceexclude(matriz de cadenas, opcional) - Excluir paquetes de la operación
Parámetros específicos de Clippy
fix(booleano, opcional) - Aplicar automáticamente sugerencias de lintallow_dirty(booleano, opcional) - Corregir código incluso si el directorio de trabajo tiene cambiosallow_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 subcadenaignored(booleano, opcional) - Ejecutar pruebas ignoradasinclude_ignored(booleano, opcional) - Ejecutar tanto pruebas ignoradas como no ignoradasjobs(entero, opcional) - Número de trabajos paralelosnocapture(booleano, opcional) - No capturar stdout/stderrtest_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 agregardev(booleano, opcional) - Agregar como dependencia de desarrollobuild(booleano, opcional) - Agregar como dependencia de compilaciónoptional(booleano, opcional) - Marcar la dependencia como opcionalrename(cadena, opcional) - Renombrar la dependenciapath(cadena, opcional) - Ruta del sistema de archivos a la crate localgit(cadena, opcional) - Ubicación del repositorio Gitbranch(cadena, opcional) - Rama Gittag(cadena, opcional) - Etiqueta Gitrev(cadena, opcional) - Referencia Gitdefault_features(booleano, opcional) - Rehabilitar características predeterminadasregistry(cadena, opcional) - Registro a usar
Parámetros de remove
dependency(cadena, obligatorio) - Dependencia a eliminardev(booleano, opcional) - Eliminar como dependencia de desarrollobuild(booleano, opcional) - Eliminar como dependencia de compilación
Parámetros de update
aggressive(booleano, opcional) - Forzar la actualización de todas las dependenciasdry_run(booleano, opcional) - No escribir realmente el archivo de bloqueoprecise(cadena, opcional) - Actualizar exactamente a esta versiónworkspace(booleano, opcional) - Actualizar todos los paquetes en el workspace
Parámetros de tree
duplicates(booleano, opcional) - Mostrar solo dependencias con múltiples versionesedges(cadena, opcional) - Tipos de dependencias a mostrarformat(cadena, opcional) - Cadena de formato para imprimir dependenciasinvert(matriz de cadenas, opcional) - Invertir grafo de dependenciasno_dedupe(booleano, opcional) - Repetir dependencias compartidasprefix(cadena, opcional) - Cómo mostrar el árbolprune(matriz de cadenas, opcional) - Podar paquetes de la visualizacióndepth(entero, opcional) - Profundidad máxima de visualizacióncharset(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 paquetename(cadena, opcional) - Nombre del paquetebin_template(booleano, opcional) - Usar plantilla de binariolib_template(booleano, opcional) - Usar plantilla de bibliotecaedition(cadena, opcional) - Edición a establecerregistry(cadena, opcional) - Registro a usar
Parámetros de doc
open(booleano, opcional) - Abrir documentación en el navegadorno_deps(booleano, opcional) - No compilar documentación para dependenciasdocument_private_items(booleano, opcional) - Documentar elementos privadosjobs(entero, opcional) - Número de trabajos paralelos
Parámetros de registro
Parámetros de search
query(cadena, obligatorio) - Consulta de búsquedalimit(entero, opcional) - Limitar resultados (predeterminado: 10, máximo: 100)registry(cadena, opcional) - Registro a usar
Parámetros de info
query(cadena, obligatorio) - Nombre del paqueteregistry(cadena, opcional) - Registro a usar
Parámetros de install
query(cadena, opcional) - Nombre del paquete a instalarversion(cadena, opcional) - Especificar versióngit_url(cadena, opcional) - URL de Git desde la que instalarbranch_install(cadena, opcional) - Rama Gittag_install(cadena, opcional) - Etiqueta Gitrev_install(cadena, opcional) - Commit Gitpath_install(cadena, opcional) - Ruta localbin_install(cadena, opcional) - Instalar solo el binario especificadobins_install(booleano, opcional) - Instalar todos los binariosexample_install(cadena, opcional) - Instalar solo el ejemplo especificadoexamples_install(booleano, opcional) - Instalar todos los ejemplosforce(booleano, opcional) - Forzar sobrescriturano_track(booleano, opcional) - No guardar información de seguimientolocked(booleano, opcional) - Afirmar que Cargo.lock no cambióroot(cadena, opcional) - Directorio de instalaciónregistry(cadena, opcional) - Registro a usarindex(cadena, opcional) - Índice de registrolist(booleano, opcional) - Listar paquetes instalados
Parámetros de uninstall
query(cadena, obligatorio) - Nombre del paquete a desinstalarbin_install(cadena, opcional) - Desinstalar solo el binario especificadoroot(cadena, opcional) - Directorio desde el que desinstalar
Parámetros de utilidad
Parámetros de metadata
no_deps(booleano, opcional) - No obtener dependenciasformat_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 servidortools/list- Listar herramientas disponiblestools/call- Ejecutar comandos cargo
Desarrollo
Para contribuir a este proyecto:
- Clonar el repositorio
- Realizar sus cambios
- Probar con
cargo checkycargo build - Formatear código con
cargo fmt - 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.