From tauri-mcp-cli
Manages Tauri v2 apps via CLI: starts/recovers driver sessions, automates webviews, captures UI state/screenshots, executes JS, debugs IPC, handles mobile/remote devices. Use for terminal control of Tauri apps.
npx claudepluginhub hypothesi/mcp-server-tauri --plugin tauri-mcp-cliThis skill uses the workspace's default tool permissions.
Use this skill for the entire CLI workflow. The package intentionally ships a single bundled skill so agents do not need to pick between overlapping domain-specific skills.
Develops Tauri v2+ cross-platform desktop/mobile apps with Rust backend, configuring tauri.conf.json, #[tauri::command] handlers, IPC (invoke/emit/channels), capabilities/permissions, and troubleshooting builds.
Guides cross-platform desktop app development with Electron and Tauri, covering framework selection, project setup, folder structure, and process separation for Windows, macOS, Linux.
Suggests manual /compact at logical task boundaries in long Claude Code sessions and multi-phase tasks to avoid arbitrary auto-compaction losses.
Share bugs, ideas, or general feedback.
Use this skill for the entire CLI workflow. The package intentionally ships a single bundled skill so agents do not need to pick between overlapping domain-specific skills.
cargo tauri dev.tauri-plugin-mcp-bridge plugin is installed and registered.src-tauri/tauri.conf.json sets withGlobalTauri: true.Start or verify a driver session before calling almost any other tool:
tauri-mcp driver-session start --port 9223
tauri-mcp driver-session status --json
driver-session start can succeed even when no app is reachable, so always check connected: true in the status output.
# Start a session
tauri-mcp driver-session start --port 9223
# Run one or more commands in separate shell invocations
tauri-mcp webview-screenshot --file before.png
tauri-mcp webview-interact --action click --selector "#submit-btn"
tauri-mcp webview-screenshot --file after.png
# End the session
tauri-mcp driver-session stop
The CLI uses MCPorter keep-alive mode, so the background daemon preserves session state across separate tauri-mcp ... commands.
Use daemon commands only when the background process itself is unhealthy:
tauri-mcp daemon status
tauri-mcp daemon restart
tauri-mcp driver-session start --port 9223
# Click or focus an element
tauri-mcp webview-interact --action click --selector "#submit-btn"
tauri-mcp webview-interact --action focus --selector "#search"
# Type into a field
tauri-mcp webview-keyboard --action type --selector "#email" --text "hello@example.com"
# Wait before interacting with async UI
tauri-mcp webview-wait-for --type selector --value "#success-msg" --timeout 5000
tauri-mcp webview-interact --action click --selector "#success-msg"
# Keyboard shortcuts and scrolling
tauri-mcp webview-keyboard --action press --key "s" --modifiers '["Control"]'
tauri-mcp webview-interact --action scroll --selector ".content" --scroll-y 300
All CLI flags are kebab-case, not camelCase. For example, use --window-id, not --windowId.
# Screenshots always write files to disk
tauri-mcp webview-screenshot --file shot.png
tauri-mcp webview-screenshot --format jpeg --quality 80 --file shot.jpg
tauri-mcp webview-screenshot --json
# Run JavaScript in the webview
tauri-mcp webview-execute-js --script "document.title"
tauri-mcp webview-execute-js --script "(() => { return document.querySelectorAll('li').length; })()"
# Find elements and inspect styles
tauri-mcp webview-find-element --selector "#hero"
tauri-mcp webview-get-styles --selector "#hero" --properties '["color","font-size"]'
# Read logs and inspect windows
tauri-mcp read-logs --source console --filter "error" --lines 100
tauri-mcp manage-window --action list --json
If content is off-screen, scroll it into view before taking a screenshot. The CLI does not return base64 image data on stdout.
# Verify the bridge plugin is active
tauri-mcp driver-session status --json
# Run backend commands
tauri-mcp ipc-execute-command --command "greet" --args '{"name":"World"}'
tauri-mcp ipc-get-backend-state --json
# Capture IPC traffic around an interaction
tauri-mcp ipc-monitor --action stop
tauri-mcp ipc-monitor --action start
tauri-mcp webview-interact --action click --selector "#refresh"
tauri-mcp ipc-get-captured --json
tauri-mcp ipc-monitor --action stop
# Emit synthetic events
tauri-mcp ipc-emit-event --event-name "user-action" --payload '{"action":"button-clicked"}'
If driver-session status --json returns identifier: null, treat that as a missing or inactive bridge plugin.
# List targets
tauri-mcp list-devices --json
# Android emulator or iOS simulator
tauri-mcp driver-session start --port 9223
# Real Android device
adb reverse tcp:9223 tcp:9223
tauri-mcp driver-session start --port 9223
# Real iOS device or direct network connection
tauri-mcp driver-session start --host 192.168.1.101 --port 9223
# Mobile logs
tauri-mcp read-logs --source android --filter "com.myapp"
tauri-mcp read-logs --source ios --filter "MyApp"
For real Android devices, do not assume localhost works without adb reverse or an explicit --host.
tauri-mcp driver-session start --port 9223
tauri-mcp driver-session status --json
tauri-mcp daemon restart
tauri-mcp driver-session start --port 9223
tauri-mcp driver-session status --json
tauri-mcp driver-session start --port 9225
# Wrong: captures a file path string, not image bytes
IMG=$(tauri-mcp webview-screenshot)
# Right
tauri-mcp webview-screenshot --file shot.png
# Wrong: returns null
tauri-mcp webview-execute-js --script "() => { return document.title; }"
# Right
tauri-mcp webview-execute-js --script "document.title"
# Wrong
tauri-mcp webview-keyboard --action type --text "hello"
# Right
tauri-mcp webview-keyboard --action type --selector "#email" --text "hello"
Before acting, verify:
driver-session status --json shows connected: true.