Dart MCP Server

Un servidor MCP que expone comandos del SDK de Dart para el desarrollo asistido por IA.

Documentación

Dart MCP Server

npm version License: MIT smithery badge

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).

Dart Server MCP server

Características

Este servidor MCP proporciona acceso fluido a los siguientes comandos del SDK de Dart:

ComandoDescripción
dart-analyzeAnalizar código Dart en busca de errores, advertencias y lints
dart-compileCompilar Dart a varios formatos (exe, instantáneas AOT/JIT, JavaScript)
dart-createCrear nuevos proyectos Dart a partir de plantillas
dart-docGenerar documentación de API para proyectos Dart
dart-fixAplicar correcciones automáticas al código fuente Dart
dart-formatFormatear código fuente Dart según las guías de estilo
dart-infoMostrar información de diagnóstico sobre las herramientas Dart instaladas
dart-packageTrabajar con paquetes (get, add, upgrade, outdated, etc.)
dart-runEjecutar programas Dart con soporte para pasar argumentos
dart-testEjecutar 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