Dart MCP Server

Um servidor MCP que expõe comandos do Dart SDK para desenvolvimento assistido por IA.

Documentação

Dart MCP Server

npm version License: MIT smithery badge

Um servidor distribuível do Model Context Protocol (MCP) que expõe comandos do Dart SDK para desenvolvimento com IA. Este servidor preenche a lacuna entre assistentes de codificação com IA e fluxos de trabalho de desenvolvimento Dart/Flutter ao implementar o Model Context Protocol (MCP).

Dart Server MCP server

Recursos

Este servidor MCP fornece acesso contínuo aos seguintes comandos do Dart SDK:

ComandoDescrição
dart-analyzeAnalisa código Dart em busca de erros, avisos e lints
dart-compileCompila Dart para vários formatos (exe, snapshots AOT/JIT, JavaScript)
dart-createCria novos projetos Dart a partir de modelos
dart-docGera documentação de API para projetos Dart
dart-fixAplica correções automatizadas ao código-fonte Dart
dart-formatFormata o código-fonte Dart de acordo com as diretrizes de estilo
dart-infoExibe informações de diagnóstico sobre as ferramentas Dart instaladas
dart-packageTrabalha com pacotes (get, add, upgrade, outdated, etc.)
dart-runExecuta programas Dart com suporte para passar argumentos
dart-testExecuta testes com suporte para opções de filtragem e relatórios

Principais Benefícios

  • Manipulação Inteligente de Caminhos: Resolve automaticamente caminhos relativos para caminhos absolutos, garantindo que os comandos funcionem corretamente independentemente do diretório de trabalho
  • Detecção Automática de Projetos: Identifica projetos Dart/Flutter em locais comuns, como diretórios pessoais e espaços de trabalho
  • Suporte Multiplataforma: Funciona em macOS, Linux e Windows
  • Configuração Zero: Funciona imediatamente com padrões sensatos
  • Integração MCP: Compatível com qualquer cliente MCP, incluindo Windsurf, Cline e outras implementações do Model Context Protocol

Pré-requisitos

  • Node.js: 18.x ou superior
  • Dart SDK: 3.0 ou superior instalado e disponível no seu PATH

Instalação

Instalação via Smithery

Para instalar o Dart MCP Server para Claude Desktop automaticamente via Smithery:

npx -y @smithery/cli install @egyleader/dart-mcp --client claude

Usando npx (recomendado)

O servidor pode ser executado diretamente sem instalação usando npx:

npx @egyleader/dart-mcp-server

Instalação Global

Para acesso mais fácil, você pode instalar o servidor globalmente:

npm install -g @egyleader/dart-mcp-server

Em seguida, execute-o usando:

dart-mcp-server

A partir do Código-Fonte

# 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

Integração com Clientes MCP

Configuração do Windsurf / Codeium IDE

Para usar este servidor MCP com Windsurf ou Codeium IDE, adicione o seguinte ao seu arquivo mcp_config.json (normalmente localizado em ~/.codeium/windsurf/mcp_config.json):

{
  "mcpServers": {
    "dart": {
      "command": "npx",
      "args": [
        "-y",
        "@egyleader/dart-mcp-server"
      ]
    }
  }
}

Variáveis de Ambiente

  • DART_MCP_VERBOSE: Defina para qualquer valor para habilitar o registro detalhado para depuração

Exemplos de Uso das Ferramentas MCP

Aqui estão exemplos de como usar as ferramentas MCP fornecidas pelo servidor. Esses exemplos mostram os parâmetros que podem ser passados para cada ferramenta.

dart-analyze

Analisa código Dart em busca de erros, avisos e lints:

{
  "path": "lib/main.dart",
  "options": ["--fatal-infos", "--fatal-warnings"]
}

dart-compile

Compila código Dart para vários formatos:

{
  "path": "lib/main.dart",
  "format": "exe",
  "output": "build/app",
  "options": ["--verbose"]
}

Formatos suportados: exe, aot-snapshot, jit-snapshot, kernel, js

dart-create

Cria um novo projeto Dart a partir de um modelo:

{
  "projectName": "my_awesome_app",
  "template": "console",
  "output": "projects/my_awesome_app",
  "options": ["--force"]
}

Nota sobre projectName e output:

  • Se apenas projectName for fornecido, ele é usado como o nome do diretório onde o projeto é criado.
  • Se output for fornecido, ele é usado como o diretório onde o projeto é criado.
  • O nome real do pacote/projeto em Dart é derivado do nome final do diretório pela CLI do Dart.

Modelos suportados: console, package, server-shelf, web

dart-doc

Gera documentação de API para um projeto Dart:

{
  "path": ".",
  "output": "doc",
  "options": ["--exclude", "lib/generated"]
}

dart-fix

Aplica correções automatizadas ao código-fonte Dart:

{
  "path": "lib",
  "apply": true,
  "options": ["--pedantic"]
}

dart-format

Formata o código-fonte Dart de acordo com as diretrizes de estilo:

{
  "paths": ["lib/main.dart", "lib/models"],
  "setExitIfChanged": true,
  "options": ["--line-length=100"]
}

dart-info

Exibe informações de diagnóstico sobre as ferramentas Dart instaladas:

{
  "options": ["--verbose"]
}

dart-package

Trabalha com pacotes (comandos pub):

{
  "command": "get",
  "workingDir": ".",
  "args": ["--offline"]
}

Comandos suportados: get, upgrade, outdated, add, remove, publish, deps, downgrade, cache, run, global

dart-run

Executa programas Dart com suporte para passar argumentos:

{
  "script": "bin/server.dart",
  "workingDir": ".",
  "args": ["--port=8080", "--mode=production"]
}

dart-test

Executa testes com suporte para opções de filtragem e relatórios:

{
  "path": "test",
  "workingDir": ".",
  "options": ["--name=login", "--platform=chrome"]
}

Licença

Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.

Referência da API das Ferramentas

dart-analyze

Analisa código Dart em um diretório ou arquivo.

{
  path?: string;       // Directory or file to analyze
  options?: string[];  // Additional options for the dart analyze command
}

Exemplo:

{
  path: "lib",
  options: ["--fatal-infos", "--fatal-warnings"]
}

dart-compile

Compila Dart para vários 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
}

Exemplo:

{
  format: "exe",
  path: "bin/main.dart",
  output: "bin/app"
}

dart-create

Cria um novo projeto 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:

  • Se output for fornecido, o projeto será criado nesse diretório.
  • Se apenas projectName for fornecido, ele será usado como o nome do diretório.
  • O nome real do pacote Dart é derivado do nome final do diretório.

Exemplo:

{
  template: "package",
  projectName: "my_dart_library",
  output: "projects/my_dart_library"
}

dart-doc

Gera documentação de API para projetos Dart.

{
  path?: string;       // Directory containing the Dart package to document
  output?: string;     // Output directory for the generated documentation
  options?: string[];  // Additional documentation options
}

Exemplo:

{
  path: ".",
  output: "doc/api"
}

dart-fix

Aplica correções automatizadas ao código-fonte 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
}

Exemplo:

{
  path: "lib",
  apply: true,
  options: ["--pedantic"]
}

dart-format

Formata o código-fonte Dart de forma idiomática.

{
  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
}

Exemplo:

{
  paths: ["lib", "test"],
  setExitIfChanged: true,
  options: ["--line-length=80"]
}

dart-info

Exibe informações de diagnóstico sobre as ferramentas instaladas.

{
  options?: string[];  // Additional info options
}

Exemplo:

{
  options: ["--verbose"]
}

dart-package

Trabalha com pacotes (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
}

Exemplos:

// Add a package
{
  command: "add",
  args: ["rxdart"],
  workingDir: "my_project"
}

// Get dependencies
{
  command: "get",
  workingDir: "my_project"
}

dart-run

Executa um 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
}

Exemplo:

{
  script: "bin/main.dart",
  args: ["--verbose"],
  workingDir: "my_project"
}

dart-test

Executa testes para um projeto.

{
  path?: string;       // Path to the test file or directory
  options?: string[];  // Additional test options
  workingDir?: string; // Working directory for the command
}

Exemplo:

{
  path: "test",
  options: ["--coverage", "--name=auth"],
  workingDir: "my_project"
}

Desenvolvimento

# Watch mode for development
pnpm run dev

# Build for production
pnpm run build

Tratamento de Erros

O servidor implementa tratamento abrangente de erros:

  • Erros de execução de comandos são capturados e formatados adequadamente
  • Problemas de resolução de caminhos são relatados com diagnósticos detalhados
  • Tratamento de tempo limite para operações de longa duração
  • Propagação adequada do código de saída dos comandos Dart

Contribuindo

Consulte CONTRIBUTING.md para obter diretrizes detalhadas de contribuição.

Nosso formato de commit segue:

<type>[optional scope]: [JIRA-123(optional)] <description>

Exemplo:

feat(tools): [DART-456] add support for dart test tags

Licença

MIT