返回 MCP 目录
public公开dns本地运行

electron-mcp-server

Electron MCP Server是一个基于模型上下文协议(MCP)的服务器,提供全面的Electron应用自动化、调试和可观测性功能。它通过Chrome DevTools协议集成实现AI驱动的自动化,支持实时UI交互、可视化调试、深度检查和开发观测,无需修改目标应用代码即可工作。

article

README

🚀 Electron MCP 服务器

Electron MCP 服务器是一款强大的模型上下文协议(MCP)服务器,为 Electron 应用程序提供全面的自动化、调试和可观测性功能。通过集成 Chrome DevTools 协议,借助人工智能驱动的自动化,为你的 Electron 开发工作流程注入强大动力。

🚀 快速开始

安装

VS Code 集成(推荐)

点击下面的按钮,在 VS Code 中使用 NPX 进行安装: Install with NPX in VS Code

在你的 VS Code MCP 设置中添加以下内容:

{
  "mcp": {
    "servers": {
      "electron": {
        "command": "npx",
        "args": ["-y", "electron-mcp-server"]
      }
    }
  }
}

Claude Desktop 集成

~/Library/Application Support/Claude/claude_desktop_config.json 中添加以下内容:

{
  "mcpServers": {
    "electron": {
      "command": "npx",
      "args": ["-y", "electron-mcp-server"]
    }
  }
}

全局安装

npm install -g electron-mcp-server

启动应用

要让 MCP 服务器与你的 Electron 应用配合使用,需要启用远程调试。在 Electron 应用的主进程中添加以下代码:

const { app } = require('electron');
const isDev = process.env.NODE_ENV === 'development' || process.argv.includes('--dev');

// 在开发模式下启用远程调试
if (isDev) {
  app.commandLine.appendSwitch('remote-debugging-port', '9222');
}

也可以使用以下替代方法:

# 启动应用并启用调试
electron . --remote-debugging-port=9222

# 或者通过 npm 脚本
npm run dev -- --remote-debugging-port=9222

注意:MCP 服务器会自动扫描 9222 - 9225 端口,以检测启用了远程调试的运行中的 Electron 应用程序。

✨ 主要特性

🎮 应用控制与自动化

  • 启动与管理:对 Electron 应用程序的整个生命周期进行启动、停止和监控。
  • 交互式自动化:通过 WebSocket 直接在运行的应用程序中执行 JavaScript 代码。
  • UI 测试:自动执行按钮点击、表单交互和用户工作流。
  • 进程管理:跟踪进程 ID(PID)、监控资源使用情况并处理优雅关闭。

📊 高级可观测性

  • 截图捕获:使用 Playwright 和 Chrome DevTools 协议进行非侵入式视觉快照。
  • 实时日志:流式传输应用程序日志(主进程、渲染器、控制台)并支持过滤。
  • 窗口信息:获取详细的窗口元数据、标题、URL 和目标信息。
  • 系统监控:跟踪内存使用情况、正常运行时间和性能指标。

🛠️ 开发效率提升

  • 通用兼容性:无需修改代码即可与任何 Electron 应用配合使用。
  • DevTools 集成:利用 Chrome DevTools 协议实现强大的调试功能。
  • 构建自动化:支持跨平台构建,适用于 Windows、macOS 和 Linux。
  • 环境管理:处理干净的环境并配置调试端口。

📦 安装指南

VS Code 集成(推荐)

点击下面的按钮,在 VS Code 中使用 NPX 进行安装: Install with NPX in VS Code

在你的 VS Code MCP 设置中添加以下内容:

{
  "mcp": {
    "servers": {
      "electron": {
        "command": "npx",
        "args": ["-y", "electron-mcp-server"]
      }
    }
  }
}

Claude Desktop 集成

~/Library/Application Support/Claude/claude_desktop_config.json 中添加以下内容:

{
  "mcpServers": {
    "electron": {
      "command": "npx",
      "args": ["-y", "electron-mcp-server"]
    }
  }
}

全局安装

npm install -g electron-mcp-server

💻 使用示例

智能 UI 交互工作流

// 1. 首先,了解页面结构
await send_command_to_electron({
  command: 'get_page_structure',
});

// 2. 通过文本点击按钮(比选择器更可靠)
await send_command_to_electron({
  command: 'click_by_text',
  args: {
    text: 'Login', // 查找文本、aria-label 或标题中包含 "Login" 的按钮
  },
});

// 3. 通过标签或占位符文本填充输入框
await send_command_to_electron({
  command: 'fill_input',
  args: {
    text: 'username', // 查找标签为 "Username" 或占位符为 "Enter username" 的输入框
    value: 'john.doe@example.com',
  },
});

await send_command_to_electron({
  command: 'fill_input',
  args: {
    text: 'password',
    value: 'secretpassword',
  },
});

// 4. 通过可见文本选择下拉选项
await send_command_to_electron({
  command: 'select_option',
  args: {
    text: 'country', // 查找标签包含 "country" 的选择框
    value: 'United States', // 选择具有此文本的选项
  },
});

// 5. 拍摄截图以验证结果
await take_screenshot();

高级元素检测

// 查找所有具有详细信息的交互式元素
await send_command_to_electron({
  command: 'find_elements',
});

// 返回每个可点击元素和输入框的详细信息
// {
//   "type": "clickable",
//   "text": "Submit Form",
//   "id": "submit-btn",
//   "className": "btn btn-primary",
//   "ariaLabel": "Submit the registration form",
//   "position": { "x": 100, "y": 200, "width": 120, "height": 40 },
//   "visible": true
// }

自动化 UI 测试

// 在开发模式下启动应用
await launch_electron_app({
  appPath: '/path/to/app',
  devMode: true,
});

// 拍摄截图
await take_screenshot();

// 以编程方式点击按钮
await send_command_to_electron({
  command: 'eval',
  args: {
    code: "document.querySelector('#submit-btn').click()",
  },
});

// 验证结果
await send_command_to_electron({
  command: 'get_title',
});

开发调试

// 获取窗口信息
const windowInfo = await get_electron_window_info();

// 提取应用程序数据
await send_command_to_electron({
  command: 'eval',
  args: {
    code: 'JSON.stringify(window.appState, null, 2)',
  },
});

// 监控日志
await read_electron_logs({
  logType: 'all',
  lines: 100,
});

性能监控

// 获取系统信息
await send_command_to_electron({
  command: 'eval',
  args: {
    code: '({memory: performance.memory, timing: performance.timing})',
  },
});

// 定期拍摄截图进行视觉回归测试
await take_screenshot({
  outputPath: '/tests/screenshots/current.png',
});

📚 详细文档

安全与配置

安全级别

  • 🔒 严格模式:适用于生产环境的最高安全级别。
  • ⚖️ 平衡模式:默认安全级别,具有安全的 UI 交互(推荐)。
  • 🔓 宽松模式:适用于受信任环境的更多功能。
  • 🛠️ 开发模式:开发/测试时的最小限制。

安全 UI 交互命令

避免使用原始的 JavaScript eval,而是使用以下安全命令:

// ✅ 安全的按钮点击
{
  "command": "click_by_text",
  "args": { "text": "Create New Encyclopedia" }
}

// ✅ 安全的元素选择
{
  "command": "click_by_selector",
  "args": { "selector": "button[title='Create']" }
}

// ✅ 安全的键盘快捷键
{
  "command": "send_keyboard_shortcut",
  "args": { "text": "Ctrl+N" }
}

// ✅ 安全的导航
{
  "command": "navigate_to_hash",
  "args": { "text": "create" }
}

详细的安全文档请参阅 SECURITY_CONFIG.md

MCP 使用指南

⚠️ 重要:参数结构

使用此 MCP 服务器时最常见的错误是 send_command_to_electron 工具的参数结构不正确。

❌ 错误示例(会导致 "selector is empty" 错误):

{
  "command": "click_by_selector",
  "args": "button.submit-btn"  // ❌ 原始字符串 - 错误!
}

✅ 正确示例:

{
  "command": "click_by_selector",
  "args": {
    "selector": "button.submit-btn"  // ✅ 包含选择器属性的对象
  }
}

📋 命令参数参考

| 命令 | 必需参数 | 示例 | | --------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------ | | click_by_selector | {"selector": "css-selector"} | {"selector": "button.primary"} | | click_by_text | {"text": "button text"} | {"text": "Submit"} | | fill_input | {"value": "text", "selector": "..."}{"value": "text", "placeholder": "..."} | {"placeholder": "Enter name", "value": "John"} | | send_keyboard_shortcut | {"text": "key combination"} | {"text": "Ctrl+N"} | | eval | {"code": "javascript"} | {"code": "document.title"} | | get_title, get_url, get_body_text | 无需参数 | {} 或省略参数 |

🔄 推荐工作流程

  1. 检查:从 get_page_structuredebug_elements 开始。
  2. 定位:使用特定的选择器或基于文本的定位。
  3. 交互:使用正确参数结构的适当命令。
  4. 验证:拍摄截图或检查页面状态。
// 步骤 1: 了解页面结构
{
  "command": "get_page_structure"
}

// 步骤 2: 通过文本点击按钮(最可靠)
{
  "command": "click_by_text",
  "args": {
    "text": "Create New Encyclopedia"
  }
}

// 步骤 3: 填充表单字段
{
  "command": "fill_input",
  "args": {
    "placeholder": "Enter encyclopedia name",
    "value": "AI and Machine Learning"
  }
}

// 步骤 4: 使用选择器提交
{
  "command": "click_by_selector",
  "args": {
    "selector": "button[type='submit']"
  }
}

🐛 常见问题排查

| 错误 | 原因 | 解决方案 | | -------------------------------- | -------------------------------- | ------------------------------ | | "The provided selector is empty" | 传递字符串而不是对象 | 使用 {"selector": "..."} | | "Element not found" | 选择器错误 | 先使用 get_page_structure | | "Command blocked" | 安全限制 | 检查安全级别设置 | | "Click prevented - too soon" | 连续快速点击 | 等待后重试 |

🔧 技术细节

Chrome DevTools 协议集成

  • 通用兼容性:可与任何启用了远程调试的 Electron 应用配合使用。
  • 实时通信:基于 WebSocket 的命令执行与渲染进程进行通信。
  • 无需应用修改:无需对目标应用程序进行任何更改。

进程管理

  • 干净的环境:处理 ELECTRON_RUN_AS_NODE 和其他环境变量。
  • 资源跟踪:监控进程 ID、内存使用情况和应用程序生命周期。
  • 优雅关闭:正确清理和终止进程。

跨平台支持

  • macOS:使用 Playwright CDP,在必要时使用 screencapture 作为后备。
  • Windows:基于 PowerShell 的窗口检测和捕获。
  • Linux:计划支持 X11 窗口管理。

项目结构

src/
├── handlers.ts      # MCP 工具处理程序
├── index.ts         # 服务器入口点
├── tools.ts         # 工具定义
├── screenshot.ts    # 截图功能
├── utils/
│   ├── process.ts   # 进程管理与 DevTools 协议
│   ├── logs.ts      # 日志管理
│   └── project.ts   # 项目脚手架
└── schemas/         # 用于验证的 JSON 模式

📄 许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。

🤝 贡献

我们欢迎贡献!请参阅我们的 贡献指南 了解详细信息。

  1. 分叉仓库。
  2. 创建功能分支 (git checkout -b feature/awesome-feature)。
  3. 提交更改 (git commit -m 'Add awesome feature')。
  4. 推送到分支 (git push origin feature/awesome-feature)。
  5. 打开拉取请求。

☕ 支持

如果这个项目对你有帮助,考虑请我喝杯咖啡! ☕

Ko-fi

你的支持有助于我维护和改进这个项目。感谢! 🙏

🙏 致谢

🔗 链接


准备好借助人工智能驱动的自动化为你的 Electron 开发加速了吗? 安装 MCP 服务器,立即开始构建更智能的工作流程! 🚀

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端