Dart MCP Server
Un servidor MCP que expone comandos del SDK de Dart para el desarrollo asistido por IA.
Documentación
Dart MCP Server
Un servidor de Model Context Protocol (MCP) distribuible que expone comandos del SDK de Dart para desarrollo asistido por IA. Este servidor cierra la brecha entre los asistentes de codificación con IA y los flujos de trabajo de desarrollo Dart/Flutter mediante la implementación del Model Context Protocol (MCP).
Características
Este servidor MCP proporciona acceso fluido a los siguientes comandos del SDK de Dart:
| Comando | Descripción |
|---|---|
dart-analyze | Analizar código Dart en busca de errores, advertencias y lints |
dart-compile | Compilar Dart a varios formatos (exe, instantáneas AOT/JIT, JavaScript) |
dart-create | Crear nuevos proyectos Dart a partir de plantillas |
dart-doc | Generar documentación de API para proyectos Dart |
dart-fix | Aplicar correcciones automáticas al código fuente Dart |
dart-format | Formatear código fuente Dart según las guías de estilo |
dart-info | Mostrar información de diagnóstico sobre las herramientas Dart instaladas |
dart-package | Trabajar con paquetes (get, add, upgrade, outdated, etc.) |
dart-run | Ejecutar programas Dart con soporte para pasar argumentos |
dart-test | Ejecutar pruebas con soporte para opciones de filtrado y reporte |
Beneficios Clave
- Manejo Inteligente de Rutas: Resuelve automáticamente rutas relativas a rutas absolutas, asegurando que los comandos funcionen correctamente independientemente del directorio de trabajo
- Detección Automática de Proyectos: Identifica proyectos Dart/Flutter en ubicaciones comunes como directorios de inicio y espacios de trabajo
- Soporte Multiplataforma: Funciona en macOS, Linux y Windows
- Configuración Cero: Funciona de inmediato con valores predeterminados sensatos
- Integración MCP: Compatible con cualquier cliente MCP, incluyendo Windsurf, Cline y otras implementaciones del Model Context Protocol
Requisitos Previos
- Node.js: 18.x o superior
- Dart SDK: 3.0 o superior instalado y disponible en tu PATH
Instalación
Instalación mediante Smithery
Para instalar Dart MCP Server para Claude Desktop automáticamente a través de Smithery:
npx -y @smithery/cli install @egyleader/dart-mcp --client claude
Usando npx (recomendado)
El servidor se puede ejecutar directamente sin instalación usando npx:
npx @egyleader/dart-mcp-server
Instalación Global
Para un acceso más fácil, puedes instalar el servidor globalmente:
npm install -g @egyleader/dart-mcp-server
Luego ejecútalo usando:
dart-mcp-server
Desde el Código Fuente
# Clone the repository
git clone https://github.com/egyleader/dart-mcp-server.git
cd dart-mcp-server
# Install dependencies
npm install
# Build the project
npm run build
# Run the server
node dist/index.js
Integración con Clientes MCP
Configuración de Windsurf / IDE Codeium
Para usar este servidor MCP con Windsurf o el IDE Codeium, agrega lo siguiente a tu archivo mcp_config.json (típicamente ubicado en ~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"dart": {
"command": "npx",
"args": [
"-y",
"@egyleader/dart-mcp-server"
]
}
}
}
Variables de Entorno
DART_MCP_VERBOSE: Establécelo a cualquier valor para habilitar el registro detallado (verbose) para depuración
Ejemplos de Uso de Herramientas MCP
Aquí hay ejemplos de cómo usar las herramientas MCP proporcionadas por el servidor. Estos ejemplos muestran los parámetros que se pueden pasar a cada herramienta.
dart-analyze
Analizar código Dart en busca de errores, advertencias y lints:
{
"path": "lib/main.dart",
"options": ["--fatal-infos", "--fatal-warnings"]
}
dart-compile
Compilar código Dart a varios formatos:
{
"path": "lib/main.dart",
"format": "exe",
"output": "build/app",
"options": ["--verbose"]
}
Formatos soportados: exe, aot-snapshot, jit-snapshot, kernel, js
dart-create
Crear un nuevo proyecto Dart a partir de una plantilla:
{
"projectName": "my_awesome_app",
"template": "console",
"output": "projects/my_awesome_app",
"options": ["--force"]
}
Nota sobre projectName y output:
- Si solo se proporciona
projectName, se usa como nombre del directorio donde se crea el proyecto. - Si se proporciona
output, se usa como directorio donde se crea el proyecto. - El nombre real del paquete/proyecto en Dart se deriva del nombre final del directorio mediante la CLI de Dart.
Plantillas soportadas: console, package, server-shelf, web
dart-doc
Generar documentación de API para un proyecto Dart:
{
"path": ".",
"output": "doc",
"options": ["--exclude", "lib/generated"]
}
dart-fix
Aplicar correcciones automáticas al código fuente Dart:
{
"path": "lib",
"apply": true,
"options": ["--pedantic"]
}
dart-format
Formatear código fuente Dart según las guías de estilo:
{
"paths": ["lib/main.dart", "lib/models"],
"setExitIfChanged": true,
"options": ["--line-length=100"]
}
dart-info
Mostrar información de diagnóstico sobre las herramientas Dart instaladas:
{
"options": ["--verbose"]
}
dart-package
Trabajar con paquetes (comandos pub):
{
"command": "get",
"workingDir": ".",
"args": ["--offline"]
}
Comandos soportados: get, upgrade, outdated, add, remove, publish, deps, downgrade, cache, run, global
dart-run
Ejecutar programas Dart con soporte para pasar argumentos:
{
"script": "bin/server.dart",
"workingDir": ".",
"args": ["--port=8080", "--mode=production"]
}
dart-test
Ejecutar pruebas con soporte para opciones de filtrado y reporte:
{
"path": "test",
"workingDir": ".",
"options": ["--name=login", "--platform=chrome"]
}
Licencia
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar una Solicitud de Extracción (Pull Request).
Referencia de la API de Herramientas
dart-analyze
Analizar código Dart en un directorio o archivo.
{
path?: string; // Directory or file to analyze
options?: string[]; // Additional options for the dart analyze command
}
Ejemplo:
{
path: "lib",
options: ["--fatal-infos", "--fatal-warnings"]
}
dart-compile
Compilar Dart a varios formatos.
{
format: 'exe' | 'aot-snapshot' | 'jit-snapshot' | 'kernel' | 'js'; // Output format
path: string; // Path to the Dart file to compile
output?: string; // Output file path
options?: string[]; // Additional compilation options
}
Ejemplo:
{
format: "exe",
path: "bin/main.dart",
output: "bin/app"
}
dart-create
Crear un nuevo proyecto Dart.
{
template: 'console' | 'package' | 'server-shelf' | 'web'; // Project template
projectName: string; // Name of the project to create
output?: string; // Directory where to create the project
options?: string[]; // Additional project creation options
}
Nota:
- Si se proporciona
output, el proyecto se creará en ese directorio. - Si solo se proporciona
projectName, se usará como nombre del directorio. - El nombre real del paquete Dart se deriva del nombre final del directorio.
Ejemplo:
{
template: "package",
projectName: "my_dart_library",
output: "projects/my_dart_library"
}
dart-doc
Generar documentación de API para proyectos Dart.
{
path?: string; // Directory containing the Dart package to document
output?: string; // Output directory for the generated documentation
options?: string[]; // Additional documentation options
}
Ejemplo:
{
path: ".",
output: "doc/api"
}
dart-fix
Aplicar correcciones automáticas al código fuente Dart.
{
path?: string; // Directory or file to apply fixes to
apply?: boolean; // Whether to apply the suggested fixes (default: true)
options?: string[]; // Additional fix options
}
Ejemplo:
{
path: "lib",
apply: true,
options: ["--pedantic"]
}
dart-format
Formatear idiomáticamente el código fuente Dart.
{
paths: string[]; // Files or directories to format
setExitIfChanged?: boolean; // Return exit code 1 if there are formatting changes (default: false)
options?: string[]; // Additional format options
}
Ejemplo:
{
paths: ["lib", "test"],
setExitIfChanged: true,
options: ["--line-length=80"]
}
dart-info
Mostrar información de diagnóstico sobre las herramientas instaladas.
{
options?: string[]; // Additional info options
}
Ejemplo:
{
options: ["--verbose"]
}
dart-package
Trabajar con paquetes (comandos pub).
{
command: 'get' | 'upgrade' | 'outdated' | 'add' | 'remove' | 'publish' | 'deps' | 'downgrade' | 'cache' | 'run' | 'global'; // Pub subcommand
args?: string[]; // Arguments for the pub subcommand
workingDir?: string; // Working directory for the command
}
Ejemplos:
// Add a package
{
command: "add",
args: ["rxdart"],
workingDir: "my_project"
}
// Get dependencies
{
command: "get",
workingDir: "my_project"
}
dart-run
Ejecutar un programa Dart.
{
script: string; // Path to the Dart script to run
args?: string[]; // Arguments to pass to the script
workingDir?: string; // Working directory for the command
}
Ejemplo:
{
script: "bin/main.dart",
args: ["--verbose"],
workingDir: "my_project"
}
dart-test
Ejecutar pruebas para un proyecto.
{
path?: string; // Path to the test file or directory
options?: string[]; // Additional test options
workingDir?: string; // Working directory for the command
}
Ejemplo:
{
path: "test",
options: ["--coverage", "--name=auth"],
workingDir: "my_project"
}
Desarrollo
# Watch mode for development
pnpm run dev
# Build for production
pnpm run build
Manejo de Errores
El servidor implementa un manejo integral de errores:
- Los errores de ejecución de comandos se capturan y formatean adecuadamente
- Los problemas de resolución de rutas se reportan con diagnósticos detallados
- Manejo de tiempos de espera para operaciones de larga duración
- Propagación adecuada del código de salida de los comandos Dart
Contribuciones
Consulta CONTRIBUTING.md para obtener pautas detalladas de contribución.
Nuestro formato de commits sigue:
<type>[optional scope]: [JIRA-123(optional)] <description>
Ejemplo:
feat(tools): [DART-456] add support for dart test tags
Licencia
MIT