返回市场
dart-mcp

dart-mcp

作者:egyleader6 星标更新:2025-03-27

项目介绍

Dart MCP 服务器

npm 版本 许可证: MIT smithery 徽章

一个可分发的模型上下文协议(MCP)服务器,它暴露了用于AI驱动开发的Dart SDK命令。该服务器通过实现模型上下文协议(MCP),弥合了AI编码助手与Dart/Flutter开发工作流程之间的差距。

<a href="https://glama.ai/mcp/servers/vuwii9l5gu"> <img width="380" height="200" src="https://gips2.baidu.com/it/u=2543825125,1541572191&fm=3081&app=3081&f=PNG?w=760&h=400" alt="Dart Server MCP 服务器" /> </a>

功能

此MCP服务器提供了对以下Dart SDK命令的无缝访问:

命令描述
dart-analyze分析Dart代码中的错误、警告和lints
dart-compile将Dart编译成各种格式(exe,AOT/JIT快照,JavaScript)
dart-create使用模板创建新的Dart项目
dart-doc为Dart项目生成API文档
dart-fix对Dart源代码应用自动修复
dart-format根据样式指南格式化Dart源代码
dart-info显示关于已安装Dart工具的诊断信息
dart-package操作包(获取、添加、升级、过时等)
dart-run运行Dart程序并支持传递参数
dart-test运行测试并支持过滤和报告选项

主要优势

  • 智能路径处理:自动解析相对路径到绝对路径,确保命令在任何工作目录下都能正确运行。
  • 项目自动检测:识别位于常见位置(如家目录和工作区)的Dart/Flutter项目。
  • 跨平台支持:适用于macOS、Linux和Windows。
  • 零配置:开箱即用,具有合理的默认设置。
  • MCP集成:兼容任何MCP客户端,包括Windsurf、Cline和其他模型上下文协议实现。

先决条件

  • Node.js:18.x或更高版本
  • Dart SDK:3.0或更高版本,并且已安装并添加到PATH中

安装

通过Smithery安装

要通过Smithery自动安装Dart MCP服务器:

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

使用npx(推荐)

无需安装即可直接运行服务器:

npx @egyleader/dart-mcp-server

全局安装

为了更方便地访问,可以全局安装服务器:

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

然后使用以下命令运行:

dart-mcp-server

从源码安装

# 克隆仓库
git clone https://github.com/egyleader/dart-mcp-server.git
cd dart-mcp-server

# 安装依赖
npm install

# 构建项目
npm run build

# 运行服务器
node dist/index.js

与MCP客户端集成

Windsurf / Codeium IDE 配置

要在Windsurf或Codeium IDE中使用此MCP服务器,请在您的mcp_config.json文件中添加以下内容(通常位于~/.codeium/windsurf/mcp_config.json):

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

环境变量

  • DART_MCP_VERBOSE:设置任意值以启用调试的详细日志记录

MCP 工具使用示例

这里有一些如何使用服务器提供的MCP工具的例子。这些例子展示了可以传递给每个工具的参数。

dart-analyze

分析Dart代码中的错误、警告和lints:

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

dart-compile

将Dart代码编译成各种格式:

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

支持的格式:exeaot-snapshotjit-snapshotkerneljs

dart-create

使用模板创建一个新的Dart项目:

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

关于projectName和output的说明:

  • 如果仅提供projectName,则将其用作创建项目的目录名称。
  • 如果提供output,则将其用作创建项目的目录。
  • 实际的Dart包/项目名称由Dart CLI根据最终目录名称得出。

支持的模板:consolepackageserver-shelfweb

dart-doc

为Dart项目生成API文档:

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

dart-fix

对Dart源代码应用自动修复:

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

dart-format

根据样式指南格式化Dart源代码:

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

dart-info

显示关于已安装Dart工具的诊断信息:

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

dart-package

操作包(pub命令):

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

支持的命令:getupgradeoutdatedaddremovepublishdepsdowngradecacherunglobal

dart-run

运行Dart程序并支持传递参数:

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

dart-test

运行测试并支持过滤和报告选项:

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

许可证

本项目采用MIT许可证 - 详情见LICENSE文件。

贡献

欢迎贡献!请随时提交Pull Request。

工具API参考

dart-analyze

分析目录或文件中的Dart代码。

{
  path?: string;       // 要分析的目录或文件
  options?: string[];  // dart analyze命令的附加选项
}

示例:

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

dart-compile

将Dart编译成各种格式。

{
  format: 'exe' | 'aot-snapshot' | 'jit-snapshot' | 'kernel' | 'js'; // 输出格式
  path: string;        // 要编译的Dart文件路径
  output?: string;     // 输出文件路径
  options?: string[];  // 附加编译选项
}

示例:

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

dart-create

创建一个新的Dart项目。

{
  template: 'console' | 'package' | 'server-shelf' | 'web'; // 项目模板
  projectName: string; // 要创建的项目名称
  output?: string;     // 创建项目的目录
  options?: string[];  // 附加项目创建选项
}

注意:

  • 如果提供output,项目将在该目录中创建。
  • 如果仅提供projectName,则将其用作目录名称。
  • 实际的Dart包名称由最终目录名称得出。

示例:

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

dart-doc

为Dart项目生成API文档。

{
  path?: string;       // 包含要生成文档的Dart包的目录
  output?: string;     // 生成文档的输出目录
  options?: string[];  // 附加文档选项
}

示例:

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

dart-fix

对Dart源代码应用自动修复。

{
  path?: string;       // 要应用修复的目录或文件
  apply?: boolean;     // 是否应用建议的修复(默认:true)
  options?: string[];  // 附加修复选项
}

示例:

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

dart-format

根据习惯用法格式化Dart源代码。

{
  paths: string[];     // 要格式化的文件或目录
  setExitIfChanged?: boolean; // 如果有格式化更改,则返回退出码1(默认:false)
  options?: string[];  // 附加格式化选项
}

示例:

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

dart-info

显示关于已安装工具的诊断信息。

{
  options?: string[];  // 附加信息选项
}

示例:

{
  options: ["--verbose"]
}

dart-package

操作包(pub命令)。

{
  command: 'get' | 'upgrade' | 'outdated' | 'add' | 'remove' | 'publish' | 'deps' | 'downgrade' | 'cache' | 'run' | 'global'; // pub子命令
  args?: string[];     // pub子命令的参数
  workingDir?: string; // 命令的工作目录
}

示例:

// 添加一个包
{
  command: "add",
  args: ["rxdart"],
  workingDir: "my_project"
}

// 获取依赖项
{
  command: "get",
  workingDir: "my_project"
}

dart-run

运行一个Dart程序。

{
  script: string;      // 要运行的Dart脚本路径
  args?: string[];     // 要传递给脚本的参数
  workingDir?: string; // 命令的工作目录
}

示例:

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

dart-test

运行项目的测试。

{
  path?: string;       // 测试文件或目录的路径
  options?: string[];  // 附加测试选项
  workingDir?: string; // 命令的工作目录
}

示例:

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

开发

# 开发模式监视
pnpm run dev

# 生产构建
pnpm run build

错误处理

服务器实现了全面的错误处理:

  • 捕获并适当格式化命令执行错误
  • 报告详细的诊断信息以解决路径解析问题
  • 处理长时间运行操作的超时
  • 正确传播来自Dart命令的退出码

贡献

请参阅CONTRIBUTING.md以获取详细的贡献指南。

我们的提交格式遵循:

<类型>[可选范围]: [JIRA-123(可选)] <描述>

示例:

feat(tools): [DART-456] 添加对dart test标签的支持

许可证

MIT