Electron MCP Server
Provides comprehensive Electron application automation, debugging, and observability capabilities through Chrome DevTools Protocol integration, enabling AI-powered UI automation, visual debugging, deep inspection, and development observability.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Electron MCP Serverclick the 'Create' button"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Electron MCP Server
A powerful Model Context Protocol (MCP) server that provides comprehensive Electron application automation, debugging, and observability capabilities. Supercharge your Electron development workflow with AI-powered automation through Chrome DevTools Protocol integration.
โ ๏ธ Breaking change in v2.0 โ the single
send_command_to_electrontool has been split into ~40 individualelectron_*tools (e.g.electron_click_by_selector,electron_fill_input). This dramatically improves LLM tool selection accuracy. Read MIGRATION.md for the full v1 โ v2 mapping. v1.x stays available vianpm install @laststance/electron-mcp-server@^1.7.
Demo
See the Electron MCP Server in action:

Watch how easy it is to automate Electron applications with AI-powered MCP commands.
Related MCP server: Electron Native MCP Server
๐ฏ What Makes This Special
Transform your Electron development experience with AI-powered automation:
๐ Real-time UI Automation: Click buttons, fill forms, and interact with any Electron app programmatically
๐ธ Visual Debugging: Take screenshots and capture application state without interrupting development
๐ Deep Inspection: Extract DOM elements, application data, and performance metrics in real-time
โก DevTools Protocol Integration: Universal compatibility with any Electron app - no modifications required
๐ Development Observability: Monitor logs, system info, and application behavior seamlessly
๐ Security & Configuration
Configurable security levels to balance safety with functionality:
Security Levels
๐ STRICT: Maximum security for production environments
โ๏ธ BALANCED: Default security with safe UI interactions (recommended)
๐ PERMISSIVE: More functionality for trusted environments
๐ ๏ธ DEVELOPMENT: Minimal restrictions for development/testing
Environment Configuration
Configure the security level and other settings through your MCP client configuration:
VS Code MCP Settings:
{
"mcp": {
"servers": {
"electron": {
"command": "npx",
"args": ["-y", "@laststance/electron-mcp-server@latest"],
"env": {
"SECURITY_LEVEL": "balanced",
"SCREENSHOT_ENCRYPTION_KEY":"your-32-byte-hex-string"
}
}
}
}
}Claude Desktop Configuration:
{
"mcpServers": {
"electron": {
"command": "npx",
"args": ["-y", "@laststance/electron-mcp-server@latest"],
"env": {
"SECURITY_LEVEL": "balanced",
"SCREENSHOT_ENCRYPTION_KEY":"your-32-byte-hex-string"
}
}
}
}Alternative: Local .env file (for development):
# Create .env file in your project directory
SECURITY_LEVEL=balanced
SCREENSHOT_ENCRYPTION_KEY=your-32-byte-hex-stringSecurity Level Behaviors:
Level | UI Interactions | DOM Queries | Property Access | Assignments | Function Calls | Risk Threshold |
| โ Blocked | โ Blocked | โ Allowed | โ Blocked | โ None allowed | Low |
| โ Allowed | โ Allowed | โ Allowed | โ Blocked | โ Safe UI functions | Medium |
| โ Allowed | โ Allowed | โ Allowed | โ Allowed | โ Extended UI functions | High |
| โ Allowed | โ Allowed | โ Allowed | โ Allowed | โ All functions | Critical |
Environment Setup:
Copy
.env.exampleto.envSet
SECURITY_LEVELto your desired levelConfigure other security settings as needed
cp .env.example .env
# Edit .env and set SECURITY_LEVEL=balancedSecure UI Interaction Commands
Instead of raw JavaScript eval, use these secure commands:
// โ
Secure button clicking
{
"command": "click_by_text",
"args": { "text": "Create New Encyclopedia" }
}
// โ
Secure element selection
{
"command": "click_by_selector",
"args": { "selector": "button[title='Create']" }
}
// โ
Secure keyboard shortcuts
{
"command": "send_keyboard_shortcut",
"args": { "text": "Ctrl+N" }
}
// โ
Secure navigation
{
"command": "navigate_to_hash",
"args": { "text": "create" }
}See SECURITY_CONFIG.md for detailed security documentation.
๐ฏ Proper MCP Usage Guide
โ ๏ธ Critical: Argument Structure
Heads up โ v1 docs from here onward. The sections below (argument structure,
send_command_to_electrontool reference, and the long form of the v1 examples) describe the v1 API. v2.0 splits that single tool into ~40 individualelectron_*tools. If you are on v2, jump straight to MIGRATION.md โ the v2 tools take their arguments top-level, so the structure pitfall described here no longer applies.
The most common mistake when using this MCP server is incorrect argument structure for the send_command_to_electron tool.
โ Wrong (causes "selector is empty" errors):
{
"command": "click_by_selector",
"args": "button.submit-btn" // โ Raw string - WRONG!
}โ Correct:
{
"command": "click_by_selector",
"args": {
"selector": "button.submit-btn" // โ
Object with selector property
}
}๐ Command Argument Reference
Command | Required Args | Example |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| No args needed |
|
๐ Recommended Workflow
Inspect: Start with
get_page_structureordebug_elementsTarget: Use specific selectors or text-based targeting
Interact: Use the appropriate command with correct argument structure
Verify: Take screenshots or check page state
// Step 1: Understand the page
{
"command": "get_page_structure"
}
// Step 2: Click button using text (most reliable)
{
"command": "click_by_text",
"args": {
"text": "Create New Encyclopedia"
}
}
// Step 3: Fill form field
{
"command": "fill_input",
"args": {
"placeholder": "Enter encyclopedia name",
"value": "AI and Machine Learning"
}
}
// Step 4: Submit with selector
{
"command": "click_by_selector",
"args": {
"selector": "button[type='submit']"
}
}๐ Troubleshooting Common Issues
Error | Cause | Solution |
"The provided selector is empty" | Passing string instead of object | Use |
"Element not found" | Wrong selector | Use |
"Command blocked" | Security restriction | Check security level settings |
"Click prevented - too soon after previous click" | Same target clicked within | Serialize calls ( |
| macOS OS-level text-editing shortcuts are bypassed by CDP | Use |
๐ ๏ธ Security Features
Enterprise-grade security built for safe AI-powered automation:
๐ Sandboxed Execution: All code runs in isolated environments with strict resource limits
๐ Input Validation: Advanced static analysis detects and blocks dangerous code patterns
๐ Comprehensive Auditing: Encrypted logs track all operations with full traceability
๐ผ๏ธ Secure Screenshots: Encrypted screenshot data with clear user notifications
โ ๏ธ Risk Assessment: Automatic threat detection with configurable security thresholds
๐ซ Zero Trust: Dangerous functions like
eval, file system access, and network requests are blocked by default
Safety First: Every command is analyzed, validated, and executed in a secure sandbox before reaching your application.
๏ฟฝ๐ Key Features
๐ฎ Application Control & Automation
Launch & Manage: Start, stop, and monitor Electron applications with full lifecycle control
Interactive Automation: Execute JavaScript code directly in running applications via WebSocket
UI Testing: Automate button clicks, form interactions, and user workflows
Process Management: Track PIDs, monitor resource usage, and handle graceful shutdowns
๐ Advanced Observability
Screenshot Capture: Non-intrusive visual snapshots using Playwright and Chrome DevTools Protocol
Real-time Logs: Stream application logs (main process, renderer, console) with filtering
Window Information: Get detailed window metadata, titles, URLs, and target information
System Monitoring: Track memory usage, uptime, and performance metrics
๐ ๏ธ Development Productivity
Universal Compatibility: Works with any Electron app without requiring code modifications
DevTools Integration: Leverage Chrome DevTools Protocol for powerful debugging capabilities
Build Automation: Cross-platform building for Windows, macOS, and Linux
Environment Management: Clean environment handling and debugging port configuration
๐ฆ Installation
VS Code Integration (Recommended)
Add to your VS Code MCP settings:
{
"mcp": {
"servers": {
"electron": {
"command": "npx",
"args": ["-y", "@laststance/electron-mcp-server@latest"],
"env": {
"SECURITY_LEVEL": "balanced",
"SCREENSHOT_ENCRYPTION_KEY": "your-32-byte-hex-string-here"
}
}
}
}
}Claude Code (CLI)
The fastest way to add this server to Claude Code is the claude mcp add command. Options come before the server name; the -- separator marks where the spawn command begins.
Project-scoped (lives in .mcp.json, share via git):
claude mcp add electron-mcp \
--env SECURITY_LEVEL=balanced \
-- npx -y @laststance/electron-mcp-server@latestUser-scoped (available across every project on this machine):
claude mcp add --scope user electron-mcp \
--env SECURITY_LEVEL=balanced \
-- npx -y @laststance/electron-mcp-server@latestVerify:
claude mcp list๐ก On Windows, prefix the spawn command with
cmd /c(e.g.-- cmd /c npx -y @laststance/electron-mcp-server@latest) so the npx shim resolves correctly.
Cursor IDE Integration
Cursor IDE supports MCP servers through its configuration file. Add to your Cursor MCP settings:
Location:
macOS/Linux:
~/.cursor/mcp_config.jsonor~/.config/cursor/mcp_config.jsonWindows:
%APPDATA%\Cursor\mcp_config.json
Configuration:
{
"mcpServers": {
"electron": {
"command": "npx",
"args": ["-y", "@laststance/electron-mcp-server@latest"],
"env": {
"SECURITY_LEVEL": "balanced",
"SCREENSHOT_ENCRYPTION_KEY": "your-32-byte-hex-string-here"
}
}
}
}Setup Steps:
Open Cursor IDE
Go to Settings โ Features โ Model Context Protocol
Enable MCP support
Add the configuration above to your MCP config file
Restart Cursor IDE
Verify Installation:
# Check if MCP server is accessible
curl http://localhost:9222/jsonClaude Desktop Integration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"electron": {
"command": "npx",
"args": ["-y", "@laststance/electron-mcp-server@latest"],
"env": {
"SECURITY_LEVEL": "balanced",
"SCREENSHOT_ENCRYPTION_KEY": "your-32-byte-hex-string-here"
}
}
}
}OpenAI Codex CLI
The Codex CLI registers MCP servers through ~/.codex/config.toml (CLI and IDE extension share the same file).
One-liner (preferred):
codex mcp add electron-mcp -- npx -y @laststance/electron-mcp-server@latestOr edit ~/.codex/config.toml directly:
[mcp_servers.electron-mcp]
command = "npx"
args = ["-y", "@laststance/electron-mcp-server@latest"]
[mcp_servers.electron-mcp.env]
SECURITY_LEVEL = "balanced"Codex launches the server automatically on session start and exposes its electron_* tools next to the built-ins.
Global Installation
npm install -g @laststance/electron-mcp-server๐ง Available Tools
launch_electron_app
Launch an Electron application with debugging capabilities.
{
"appPath": "/path/to/electron-app",
"devMode": true, // Enables Chrome DevTools Protocol on port 9222
"args": ["--enable-logging", "--dev"]
}Returns: Process ID and launch confirmation
get_electron_window_info
Get comprehensive window and target information via Chrome DevTools Protocol.
{
"includeChildren": true // Include child windows and DevTools instances
}Returns:
Window IDs, titles, URLs, and types
DevTools Protocol target information
Platform details and process information
take_screenshot
Capture high-quality screenshots using Playwright and Chrome DevTools Protocol.
{
"outputPath": "/path/to/screenshot.png", // Optional: defaults to temp directory
"windowTitle": "My App" // Optional: target specific window
}Features:
Non-intrusive capture (doesn't bring window to front)
Works with any Electron app
Fallback to platform-specific tools if needed
send_command_to_electron
v1 only. Removed in v2. See MIGRATION.md for the per-command replacement (
electron_click_by_selector,electron_fill_input,electron_eval, etc.).
Execute JavaScript commands in the running Electron application via WebSocket.
{
"command": "eval", // Built-in commands: eval, get_title, get_url, click_button, console_log
"args": {
"code": "document.querySelector('button').click(); 'Button clicked!'"
}
}Enhanced UI Interaction Commands:
find_elements: Analyze all interactive UI elements with their properties and positionsclick_by_text: Click elements by their visible text, aria-label, or title (more reliable than selectors)fill_input: Fill input fields by selector, placeholder text, or associated label textselect_option: Select dropdown options by value or visible textget_page_structure: Get organized overview of all page elements (buttons, inputs, selects, links)get_title: Get document titleget_url: Get current URLget_body_text: Extract visible text contentclick_button: Click buttons by CSS selector (basic method)console_log: Send console messageseval: Execute custom JavaScript code
Recommended workflow: Use get_page_structure first to understand available elements, then use specific interaction commands like click_by_text or fill_input.
read_electron_logs
Stream application logs from main process, renderer, and console.
{
"logType": "all", // Options: "all", "main", "renderer", "console"
"lines": 50, // Number of recent lines
"follow": false // Stream live logs
}close_electron_app
Gracefully close the Electron application.
{
"force": false // Force kill if unresponsive
}build_electron_app
Build Electron applications for distribution.
{
"projectPath": "/path/to/project",
"platform": "darwin", // win32, darwin, linux
"arch": "x64", // x64, arm64, ia32
"debug": false
}๐ฎ Demo Application
Try the interactive demo app to test all MCP Server features:
cd examples/demo-app
npm install
npm run devThe demo app includes:
Interactive UI Elements: Buttons, forms, dropdowns, checkboxes
Real-time Event Logging: Monitor all interactions
MCP Command Examples: Built-in usage guide
DevTools Integration: Automatically enabled on port 9222
See examples/demo-app/README.md for detailed instructions.
๐ก Usage Examples
Smart UI Interaction Workflow
// 1. First, understand the page structure
await send_command_to_electron({
command: 'get_page_structure',
});
// 2. Click a button by its text (much more reliable than selectors)
await send_command_to_electron({
command: 'click_by_text',
args: {
text: 'Login', // Finds buttons containing "Login" in text, aria-label, or title
},
});
// 3. Fill inputs by their label or placeholder text
await send_command_to_electron({
command: 'fill_input',
args: {
text: 'username', // Finds input with label "Username" or placeholder "Enter username"
value: 'john.doe@example.com',
},
});
await send_command_to_electron({
command: 'fill_input',
args: {
text: 'password',
value: 'secretpassword',
},
});
// 4. Select dropdown options by visible text
await send_command_to_electron({
command: 'select_option',
args: {
text: 'country', // Finds select with label containing "country"
value: 'United States', // Selects option with this text
},
});
// 5. Take a screenshot to verify the result
await take_screenshot();Advanced Element Detection
// Find all interactive elements with detailed information
await send_command_to_electron({
command: 'find_elements',
});
// This returns detailed info about every clickable element and input:
// {
// "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
// }Automated UI Testing
// Launch app in development mode
await launch_electron_app({
appPath: '/path/to/app',
devMode: true,
});
// Take a screenshot
await take_screenshot();
// Click a button programmatically
await send_command_to_electron({
command: 'eval',
args: {
code: "document.querySelector('#submit-btn').click()",
},
});
// Verify the result
await send_command_to_electron({
command: 'get_title',
});Development Debugging
// Get window information
const windowInfo = await get_electron_window_info();
// Extract application data
await send_command_to_electron({
command: 'eval',
args: {
code: 'JSON.stringify(window.appState, null, 2)',
},
});
// Monitor logs
await read_electron_logs({
logType: 'all',
lines: 100,
});Performance Monitoring
// Get system information
await send_command_to_electron({
command: 'eval',
args: {
code: '({memory: performance.memory, timing: performance.timing})',
},
});
// Take periodic screenshots for visual regression testing
await take_screenshot({
outputPath: '/tests/screenshots/current.png',
});๐๏ธ Architecture
Chrome DevTools Protocol Integration
Universal Compatibility: Works with any Electron app that has remote debugging enabled
Real-time Communication: WebSocket-based command execution with the renderer process
No App Modifications: Zero changes required to target applications
Process Management
Clean Environment: Handles
ELECTRON_RUN_AS_NODEand other environment variablesResource Tracking: Monitors PIDs, memory usage, and application lifecycle
Graceful Shutdown: Proper cleanup and process termination
Cross-Platform Support
macOS: Uses Playwright CDP with screencapture fallback
Windows: PowerShell-based window detection and capture
Linux: X11 window management (planned)
๐งช Development
Prerequisites
Node.js 18+
TypeScript 4.5+
Electron - Required for running and testing Electron applications
# Install Electron globally (recommended) npm install -g electron # Or install locally in your project npm install electron --save-dev
Target Application Setup
For the MCP server to work with your Electron application, you need to enable remote debugging. Add this code to your Electron app's main process:
const { app } = require('electron');
const isDev = process.env.NODE_ENV === 'development' || process.argv.includes('--dev');
// Enable remote debugging in development mode
if (isDev) {
app.commandLine.appendSwitch('remote-debugging-port', '9222');
}Alternative approaches:
# Launch your app with debugging enabled
electron . --remote-debugging-port=9222
# Or via npm script
npm run dev -- --remote-debugging-port=9222Note: The MCP server automatically scans ports 9222-9225 to detect running Electron applications with remote debugging enabled.
Setup
git clone https://github.com/laststance/electron-mcp-server.git
cd electron-mcp-server
npm install
npm run build
# Run tests
npm test
# Development mode with auto-rebuild
npm run devTesting
The project includes comprehensive test files for React compatibility:
# Run React compatibility tests
cd tests/integration/react-compatibility
electron test-react-electron.jsSee tests/integration/react-compatibility/README.md for detailed testing instructions and scenarios.
React Compatibility
This MCP server has been thoroughly tested with React applications and handles common React patterns correctly:
โ React Event Handling: Properly handles
preventDefault()in click handlersโ Form Input Detection: Advanced scoring algorithm works with React-rendered inputs
โ Component Interaction: Compatible with React components, hooks, and state management
Project Structure
src/
โโโ handlers.ts # MCP tool handlers
โโโ index.ts # Server entry point
โโโ tools.ts # Tool definitions
โโโ screenshot.ts # Screenshot functionality
โโโ utils/
โ โโโ process.ts # Process management & DevTools Protocol
โ โโโ logs.ts # Log management
โ โโโ project.ts # Project scaffolding
โโโ schemas/ # JSON schemas for validation๐ Security & Best Practices
Sandboxed Execution: All JavaScript execution is contained within the target Electron app
Path Validation: Only operates on explicitly provided application paths
Process Isolation: Each launched app runs in its own process space
No Persistent Access: No permanent modifications to target applications
๐ค Contributing
We welcome contributions! Please see our Contributing Guide for details.
Before reporting issues: Please use the standardized ISSUE_TEMPLATE.md for proper bug reporting format. For React compatibility problems or similar technical issues, also review REACT_COMPATIBILITY_ISSUES.md for detailed debugging examples, including proper command examples, error outputs, and reproduction steps.
Fork the repository
Create a feature branch (
git checkout -b feature/awesome-feature)Commit your changes (
git commit -m 'Add awesome feature')Push to the branch (
git push origin feature/awesome-feature)Open a Pull Request
๐ License
MIT License - see LICENSE file for details.
๐ Credits & Attribution
Original Author: Halil Ural
This project is a fork of halilural/electron-mcp-server with enhancements for Cursor IDE compatibility and improved stability.
Forked & Maintained By
@laststance - Cursor IDE integration improvements, bug fixes, and ongoing maintenance
Key Improvements in This Fork
โ Cursor IDE Compatibility: Full integration with Cursor IDE for seamless AI-powered Electron automation
โ Enhanced Stability: Improved error handling and reliability
โ Better Documentation: Added comprehensive guides for local development and troubleshooting
โ Scoped Package: Published as
@laststance/electron-mcp-serveron npm
Contributing to This Fork
We welcome contributions! If you have improvements or bug fixes, please feel free to:
Fork this repository
Create a feature branch
Submit a pull request with your improvements
โ Support
If this project helped you, consider buying me a coffee! โ
Your support helps me maintain and improve this project. Thank you! ๐
๐ Acknowledgments
Model Context Protocol - Standardized AI-application interface
Chrome DevTools Protocol - Universal debugging interface
Playwright - Reliable browser automation
Electron - Cross-platform desktop applications
๐ Links
Original Repository - Original project by Halil Ural
Cursor IDE Setup Guide - Complete setup guide for Cursor IDE integration
Issue Template - Standardized bug reporting format
React Compatibility Issues Documentation - Technical debugging guide for React applications
Ready to supercharge your Electron development with AI-powered automation? Install the MCP server and start building smarter workflows today! ๐
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/laststance/electron-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server