Install
$ agentstack add mcp-sh3ll3x3c-native-devtools-mcp Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Pipes remote content directly into a shell (remote code execution).
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
native-devtools-mcp
> An MCP server for computer use on native desktop and mobile apps — macOS, Windows, Android, and Chrome/Electron via CDP.
Add to your client in one click:
[](cursor://anysphere.cursor-deeplink/mcp/install?name=native-devtools&config=eyJjb21tYW5kIjogIm5weCIsICJhcmdzIjogWyIteSIsICJuYXRpdmUtZGV2dG9vbHMtbWNwIl19) [](https://insiders.vscode.dev/redirect/mcp/install?name=native-devtools&config=%7B%22name%22%3A%20%22native-devtools%22%2C%20%22command%22%3A%20%22npx%22%2C%20%22args%22%3A%20%5B%22-y%22%2C%20%22native-devtools-mcp%22%5D%7D)
Claude Code: claude mcp add native-devtools -- npx -y native-devtools-mcp
native-devtools-mcp gives AI agents and MCP clients direct control over native desktop apps, Chrome/Electron browsers, and Android devices — screenshots, OCR, accessibility-first element lookup, input simulation, window management, Chrome DevTools Protocol (CDP), and ADB — all in one local server. Works with Claude Desktop, Claude Code, Cursor, and other MCP-compatible clients.
Quickstart
npx -y native-devtools-mcp
macOS Windows
🚀 Features
- 👀 Computer Vision: Screenshots of screens, windows, or regions with built-in OCR (Vision on macOS, Windows Media OCR on Windows).
- 🖱️ Input Simulation: Click, drag, scroll, type — global coordinates, window-relative, and screenshot-relative targeting.
- 🎯 Element-Precise AX Dispatch (macOS):
take_ax_snapshot→ax_click/ax_set_value/ax_select— dispatch against Accessibility-tree elements without moving the mouse or stealing focus. The preferred path for native macOS apps. - 🌐 Browser Automation (CDP): Chrome DevTools Protocol for Chrome and Electron apps (Signal, Discord, VS Code, Slack) — DOM-level click, fill, navigate, and JS evaluation without a separate Node.js server.
- 📱 Android (ADB): Screenshots, uiautomator-based text lookup, input, and app management over USB or Wi-Fi.
- 🧩 Template Matching:
load_image+find_imagefor icons, toggles, and custom controls OCR can't identify. - 🪟 Window Management: List, focus, launch, and quit apps; record windows as timestamped JPEG frames.
- 🔍 Hover Tracking: Observe user navigation patterns with dwell-filtered hover events — designed for LLMs watching a user work.
- 🔒 Local & Private: 100% local execution. Screenshots and input never leave your machine.
🧭 Three Approaches to Interaction
Pick the approach that matches your target app.
| Approach | Best for | Key tools | |-----------------------|--------------------------------------------------------------------------|-------------------------------------------------------------------------| | Visual (universal)| Any app — games, Qt, custom renderers, anything without an AX tree | take_screenshot, find_text, click, type_text, find_image | | AX Dispatch (macOS — preferred for native macOS apps) | AppKit / SwiftUI apps — System Settings, Finder, Mail, Xcode, Notes | take_ax_snapshot, ax_click, ax_set_value, ax_select | | CDP (Chrome / Electron) | Web content, Electron apps with --remote-debugging-port | cdp_connect, cdp_find_elements, cdp_take_dom_snapshot, cdp_click, cdp_fill |
> For macOS native apps, AX Dispatch is the preferred path — it's element-precise, doesn't move the mouse, and doesn't steal focus. See the [Native App AX Dispatch recipe](./examples/native-app-ax-dispatch-flow.md).
There's also a fourth, niche path: AppDebugKit (app_connect / app_query / app_click) for apps instrumented with the AppDebugKit library. Mostly useful for developers testing their own apps.
🆚 How it compares
The most honest peers are other MCP servers for computer use. This table compares native-devtools-mcp against the leading MCP servers and two widely used non-MCP libraries.
| Capability | native-devtools-mcp | [Playwright MCP][pw-mcp] | [Windows-MCP][win-mcp] | [Appium][appium] | [pywinauto][pwa] | |--------------------------------|:-------------------:|:------------------------:|:----------------------:|:----------------:|:----------------:| | Native macOS apps | ✅ AX + screenshots | ❌ browser only | ❌ Windows only | ❌ mobile focus | ❌ Windows only | | Native Windows apps | ✅ UIA + input | ❌ browser only | ✅ | ◐ limited | ✅ | | Web / DOM automation | ✅ via CDP | ✅ | ◐ via Windows UIA | ◐ mobile-web | ❌ | | Electron apps | ✅ CDP + AX | ✅ first-class _electron| ◐ if UIA exposed | ❌ | ◐ if UIA exposed | | Android devices (ADB) | ✅ built-in | ◐ experimental | ❌ | ✅ first-class | ❌ | | MCP-native | ✅ | ✅ | ✅ | ❌ | ❌ | | Local, no API key | ✅ | ✅ | ✅ | ✅ self-hosted | ✅ |
[pw-mcp]: https://github.com/microsoft/playwright-mcp [win-mcp]: https://github.com/CursorTouch/Windows-MCP [appium]: https://github.com/appium/appium [pwa]: https://github.com/pywinauto/pywinauto
Where native-devtools-mcp stands out: one local MCP server covering macOS + Windows + Chrome/Electron (CDP) + Android in the same session, plus element-precise macOS AX dispatch that doesn't move the cursor or steal focus.
Honest limits:
- No Linux (contributions welcome — see Linux Desktop MCP for an AT-SPI2-based alternative in the meantime)
- Browser automation is Chrome / Electron only via CDP — no Firefox, no WebKit (for those, use [Playwright MCP][pw-mcp])
- Headed only — depends on real-machine permissions; not a headless CI test grid
- No iOS
If you need just web automation, [Playwright MCP][pw-mcp] is more mature. If you need just mobile (iOS + Android + deep device features), [Appium][appium] is more mature. This server is for the cross-cutting native-desktop + Chrome/Electron + Android case.
📦 Installation
The install steps are identical on macOS and Windows.
Option 1: Run with npx (no install needed)
npx -y native-devtools-mcp
Option 2: Global install
npm install -g native-devtools-mcp
Option 3: Build from source (Rust)
Click to expand build instructions
Using the build script (clones, builds, and runs setup):
curl -fsSL https://raw.githubusercontent.com/sh3ll3x3c/native-devtools-mcp/master/scripts/build-from-source.sh | bash
Or manually:
git clone https://github.com/sh3ll3x3c/native-devtools-mcp
cd native-devtools-mcp
cargo build --release
# Binary: ./target/release/native-devtools-mcp
Manual configuration (without the setup wizard)
Click to expand MCP client config snippets
macOS — Claude Desktop
Config file: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"native-devtools": {
"command": "/Applications/NativeDevtools.app/Contents/MacOS/native-devtools-mcp"
}
}
}
Windows — Claude Desktop
Config file: %APPDATA%\Claude\claude_desktop_config.json
Claude Code, Cursor, and other MCP clients
{
"mcpServers": {
"native-devtools": {
"command": "npx",
"args": ["-y", "native-devtools-mcp"]
}
}
}
Requires Node.js 18+.
> macOS permissions: the server needs Accessibility and Screen Recording permissions. The setup wizard opens the right System Settings panes for you. Without both, clicks silently fail and screenshots return a black rectangle.
> Linux is not supported yet. The server uses platform-specific APIs (Core Graphics + Accessibility on macOS, Win32 + UI Automation on Windows) that don't exist on Linux. Contributions welcome — X11/Wayland screenshot, input, and AT-SPI paths would be a good first issue.
🏁 Getting Started
After installing, run the setup wizard:
npx native-devtools-mcp setup
This will:
- Check permissions (macOS) — verifies Accessibility and Screen Recording, opens System Settings if needed.
- Detect your MCP clients — finds Claude Desktop, Claude Code, and Cursor.
- Write the configuration — generates the correct JSON config and offers to write it for you.
Then restart your MCP client and you're ready to go.
> Claude Desktop on macOS requires the signed app bundle (Gatekeeper blocks npx). Download NativeDevtools-X.X.X.dmg from GitHub Releases, drag to /Applications, then run setup — it will detect the app and configure Claude Desktop to use it.
> VS Code, Windsurf, and other clients: setup doesn't auto-detect these yet. Run setup for the permission checks, then see the manual configuration above for the JSON config snippet.
> Claude Code tip: To avoid approving every tool call (clicks, screenshots), add this to .claude/settings.local.json: > ``json > { "permissions": { "allow": ["mcp__native-devtools__*"] } } > ``
⚠️ Operational safety
- Hands off: when the agent is "driving" (clicking / typing), don't move your mouse or type. Real hardware inputs conflict with simulated ones and clicks land in the wrong place.
- Focus matters: ensure the window you want the agent to use is visible. If a popup steals focus mid-flow, the agent may type into the wrong window unless it re-checks first.
- Prefer AX Dispatch on macOS when you want to keep using the machine — AX calls don't move the cursor and don't steal focus from whatever window is active.
📚 Recipes and Examples
- [Recipes Index](./examples/README.md)
- [Claude Desktop Setup](./examples/claude-desktop-setup.md) · [Claude Code Setup](./examples/claude-code-setup.md) · [Cursor Setup](./examples/cursor-setup.md)
- [End-to-End Desktop Flow](./examples/end-to-end-desktop-flow.md)
- [Native App AX Dispatch Flow (macOS)](./examples/native-app-ax-dispatch-flow.md) — preferred for native macOS apps
- [Native App Click Flow](./examples/native-app-click-flow.md)
- [OCR Fallback and Element Inspection](./examples/ocr-fallback-and-element-inspection.md)
- [Template Matching Flow](./examples/template-matching-flow.md)
- [Android Quickstart](./examples/android-quickstart.md)
🌐 Browser Automation (CDP)
Connect to Chrome or Electron apps via the Chrome DevTools Protocol for DOM-level automation — more reliable than coordinate-based clicking for web content.
# Launch Chrome with remote debugging
launch_app(app_name="Google Chrome", args=["--remote-debugging-port=9222", "--user-data-dir=/tmp/chrome-profile"])
# Connect and automate
cdp_connect(port=9222)
cdp_navigate(url="https://example.com")
cdp_find_elements(query="search") # DOM walker with element UIDs (d1, d2, ...)
cdp_fill(uid="d1", value="search query")
cdp_press_key(key="Enter")
cdp_wait_for(text=["Results"])
18 CDP tools — DOM snapshot, find elements, click, hover, fill, type, press key, navigate, handle dialogs, manage tabs, evaluate JS, element inspection, and more. Works with Chrome 136+, Chromium, and Electron apps (Signal, Discord, VS Code, Slack). See [AGENTS.md](./AGENTS.md) for the full tool reference.
> Chrome 136+ note: requires --user-data-dir= alongside --remote-debugging-port — Chrome silently ignores the debug port with the default profile. Electron apps only need --remote-debugging-port.
📱 Android Support
Android support is built-in. The server communicates with Android devices over ADB (USB or Wi-Fi), providing screenshots, input simulation, UI element search, and app management.
Prerequisites
- ADB installed on the host (
brew install android-platform-toolson macOS, or via Android SDK). - USB debugging enabled on the device (Settings > Developer options > USB debugging).
- ADB server running — starts automatically when you run
adb devices.
Tools
All Android tools are prefixed with android_ and appear dynamically after connecting to a device:
| Tool | Description | |------|-------------| | android_list_devices | List all ADB-connected devices (always available) | | android_connect | Connect to a device by serial number | | android_disconnect | Disconnect from the current device | | android_screenshot | Capture the device screen | | android_find_text | Find UI elements by text (via uiautomator) | | android_click | Tap at screen coordinates | | android_swipe | Swipe between two points | | android_type_text | Type text on the device | | android_press_key | Press a key (e.g., KEYCODE_HOME, KEYCODE_BACK) | | android_launch_app | Launch an app by package name | | android_list_apps | List installed packages | | android_get_display_info | Get screen resolution and density | | android_get_current_activity | Get the current foreground activity |
Typical workflow
android_list_devices → find your device serial
android_connect(serial="...") → connect (unlocks android_* tools)
android_screenshot → see what's on screen
android_find_text(text="OK") → locate a button
android_click(x=..., y=...) → tap it
Known issues & advanced setup
MIUI / HyperOS (Xiaomi, Redmi, POCO devices): input injection (android_click, android_type_text, android_press_key, android_swipe) and android_find_text (via uiautomator) require an additional security toggle:
> Settings > Developer options > USB debugging (Security settings) — enable this toggle. MIUI may require you to sign in with a Mi account to enable it.
Without this, you'll see INJECT_EVENTS permission errors for input tools and could not get idle state errors for android_find_text. Screenshot and device info tools work without this toggle.
Wireless ADB: to connect without a USB cable, first connect via USB and run:
adb tcpip 5555
adb connect :5555
Then use the :5555 serial in android_connect.
Smoke tests: verify all Android tools against a real connected device. They are #[ignore]d by default:
cargo test --test android_smoke_tests -- --ignored --test-threads=1
Tests must run sequentially since they share a single physical device. The device must be unlocked and awake.
🔐 Security & Trust
This tool requires Accessibility and Screen Recording permissions — that's a lot of trust. Here's how to verify it deserves it.
Verify your binary
native-devtools-mcp verify
Computes the SHA-256 hash of the running binary and checks it against the official checksums published on the GitHub Releases page. If the hash matches, you're running an unmodified official build.
Audit the code
[SECURITY_AUDIT.md](SECURITY_AUDIT.md) documents exactly which permissions are used, where in the source code, and includes an LLM audit prompt you can paste into any AI model for an independent security review.
What this server does NOT do
- No unsolicited network access. The server never phones home. Network is only used when the MCP client explicitly invokes
app_connect(WebSocket to a local debug server) or when you run theverifysubcommand (fetches checksums from GitHub). - No file scanning. Does not read or index your files. The only file reads are
load_image(a path the MCP
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: sh3ll3x3c
- Source: sh3ll3x3c/native-devtools-mcp
- License: MIT
- Homepage: https://www.npmjs.com/package/native-devtools-mcp
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.