tauri-mcp
Drives a built Tauri app's UI over WebDriver, enabling automated interactions like clicking, typing, scrolling, screenshots, and JavaScript execution within a Tauri application.
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., "@tauri-mcpLaunch the app and click the 'Start' 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.
tauri-mcp
A generic MCP server that drives a built Tauri app's UI over WebDriver (tauri-driver + msedgedriver on Windows / WebKitWebDriver on Linux): launch the real app, then click, type, scroll, drag, read, and screenshot it like a human — or drop to raw JS when needed.
Not tied to any one project. Point it at any local Tauri app with projectDir
or appPath. This server only knows how to drive a window; anything
app-specific (reading an app's own database or config) belongs in a separate
server of your own.
Tools
All tools are prefixed app_ and operate on a single running session (one app
at a time).
Session
Tool | What it does |
| Launch a built Tauri app under WebDriver. |
| Close the session and stop tauri-driver. |
| Whether a session is running, and if so the binary + driver port. |
| Kill orphaned tauri-driver/msedgedriver and reset state, when a crashed run left things half-up. |
| Resize / move / maximize / minimize / fullscreen the window; reports resulting size+position. |
| Reload the webview (resets front-end state; backend process keeps its state). |
Acting (mouse / keyboard)
Tool | What it does |
| Click by CSS |
| Left/right/middle click at raw x,y viewport coordinates (canvas / native-drawn UI). |
| Mouse-wheel scroll by a pixel delta (+down/-up, +right/-left); optional |
| Type |
| Raw keyboard: any key — literal chars, F1-F12, arrows, Home/End/PageUp/Down, and modifier chords (Ctrl+A, Ctrl+Shift+K). |
| Hover an element (by selector or text) to trigger tooltips / hover menus. |
| Pick an option from a native |
| Drag an element onto another ( |
Reading / observing
Tool | What it does |
| Title + visible text + every visible interactive element (role, text, selector). The "what can I act on" view. |
| One element's live state: text, current input value (DOM property, reflects controlled React inputs), tag, displayed/enabled, optional attribute. |
| Poll until a selector/text appears or disappears — for async loading, toasts, dialogs. |
| Browser console output ( |
| PNG screenshot of the window, or of a single element (selector/text) for focused visual diffing. |
| List/switch windows, for apps with more than one |
Escape hatch
Tool | What it does |
| Run arbitrary JavaScript in the window and return the result. |
app_execute_js is unrestricted: it can read/write any DOM or JS state and
invoke any Tauri backend command directly via
await window.__TAURI_INTERNALS__.invoke("cmd_name", { arg }) (always present
in Tauri v2, regardless of withGlobalTauri) — anything the app's own frontend
can do, including commands with real side effects (writing config, filesystem,
launching processes). No sandboxing beyond what the app's own command handlers
enforce. It's also the workaround for OS-native dialogs (see below).
Related MCP server: MCP Server Tauri
Targeting elements: prefer text
app_snapshot emits positional CSS selectors like
div > div:nth-of-type(3) > button, which break the moment the DOM is
restructured. Wherever a tool takes a target, prefer text (visible text or
accessible name) — app_click({ text: "Browse" }) is how a human would say it
and survives layout changes. exact: true requires an exact match; otherwise
it tries exact text, then substring, then ARIA accessible name (covers
icon-only buttons with aria-label).
Requirements
Node 24+ and
npm installonce in this folder.tauri-driver:cargo install tauri-driver --locked.Windows: Microsoft Edge WebDriver version-matched to your installed WebView2 Runtime (Settings → About Microsoft Edge WebView2, or
HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}→pv). A mismatched major version connects fine but silently never leavesabout:blank—app_launchnow detects this and errors.winget install Microsoft.EdgeDriverdoes not reliably match; download the exact version fromhttps://msedgedriver.microsoft.com/<version>/edgedriver_win64.zipand drop it at./bin/msedgedriver.exe(checked first) or setEDGEDRIVER_PATH.The target app must already be built, and not with plain
cargo build— a debug binary points atdevUrland only renders if a Vite dev server is up. Usecargo tauri build --debug --no-bundle(fast) orcargo tauri build --no-bundle(release).app_launchdoes not build for you.
When projectDir/appPath is omitted, app_launch uses the TAURI_PROJECT_DIR
environment variable; if that is unset too, it returns a clear error. There is
no built-in default project.
Run / verify
npm install
# point it at any built Tauri app:
TAURI_PROJECT_DIR=/path/to/tauri-project npm run verify-automation
# or:
TAURI_APP_PATH=/path/to/built/app npm run verify-automationThe verify script launches the app, snapshots it, clicks the first interactive element, screenshots, and closes.
Known limitation: OS-native dialogs
WebDriver can only see the webview DOM. Tauri file/folder pickers, message
boxes, and other OS-native dialogs are not part of the DOM and can't be
clicked through — a flow that opens one will stall. Workaround: skip the dialog
and drive the backend directly with app_execute_js, e.g.
// instead of clicking a "Choose folder" button that opens a native picker:
return await window.__TAURI_INTERNALS__.invoke("set_output_dir", { path: "/some/folder" });Troubleshooting
app_launcherrors "window never rendered" — msedgedriver/WebView2 version mismatch, or a plaincargo buildbinary. See Requirements."a session is already running" after a crash —
app_force_cleanup, then relaunch.Selectors keep breaking — target by
textinstead (see above).
Register with Claude Code
Add it to an .mcp.json (project root, or ~/.claude.json for all projects),
then restart Claude Code. Tools then appear as tauri:app_launch, etc.
{
"mcpServers": {
"tauri": {
"command": "node",
"args": ["--no-warnings", "/absolute/path/to/tauri-mcp/index.mjs"]
}
}
}Or via the CLI:
claude mcp add tauri -- node --no-warnings /absolute/path/to/tauri-mcp/index.mjsMaintenance
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/FrengkyS1/tauri-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server