Dart MCP Server
Um servidor MCP que expõe comandos do Dart SDK para desenvolvimento assistido por IA.
Documentação
Dart MCP Server
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).
Recursos
Este servidor MCP fornece acesso contínuo aos seguintes comandos do Dart SDK:
| Comando | Descrição |
|---|---|
dart-analyze | Analisa código Dart em busca de erros, avisos e lints |
dart-compile | Compila Dart para vários formatos (exe, snapshots AOT/JIT, JavaScript) |
dart-create | Cria novos projetos Dart a partir de modelos |
dart-doc | Gera documentação de API para projetos Dart |
dart-fix | Aplica correções automatizadas ao código-fonte Dart |
dart-format | Formata o código-fonte Dart de acordo com as diretrizes de estilo |
dart-info | Exibe informações de diagnóstico sobre as ferramentas Dart instaladas |
dart-package | Trabalha com pacotes (get, add, upgrade, outdated, etc.) |
dart-run | Executa programas Dart com suporte para passar argumentos |
dart-test | Executa 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
projectNamefor fornecido, ele é usado como o nome do diretório onde o projeto é criado. - Se
outputfor 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
outputfor fornecido, o projeto será criado nesse diretório. - Se apenas
projectNamefor 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