/tauri-mcp-testing
E2E testing expert for Tauri applications using Tauri MCP server. Use when testing running Tauri apps - session management, webview interaction, IPC verification, screenshot capture, and debugging. ALWAYS use tauri_* tools, NEVER Chrome DevTools MCP for Tauri apps.
$ npx -y skills add xiaolai/vmark --skill tauri-mcp-testing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/tauri-mcp-testing
Context preview
The summary Claude sees to decide when to auto-load this skill.
E2E testing expert for Tauri applications using Tauri MCP server. Use when testing running Tauri apps - session management, webview interaction, IPC verification, screenshot capture, and debugging. ALWAYS use tauri_* tools, NEVER Chrome DevTools MCP for Tauri apps.
SKILL.md
tauri-mcp-testing.SKILL.mdname: tauri-mcp-testing
description: E2E testing expert for Tauri applications using Tauri MCP server. Use when testing running Tauri apps - session management, webview interaction, IPC verification, screenshot capture, and debugging. ALWAYS use tauri_* tools, NEVER Chrome DevTools MCP for Tauri apps.
Tauri MCP E2E Testing
**CRITICAL:** For E2E testing of Tauri applications, ALWAYS use `tauri_*` MCP tools. NEVER use Chrome DevTools MCP - that's for browser pages only.
Quick Reference
| Task | MCP Tool | |------|----------| | Connect to app | `tauri_driver_session` | | Take screenshot | `tauri_webview_screenshot` | | Find elements | `tauri_webview_find_element` | | Click/scroll/swipe | `tauri_webview_interact` | | Type text | `tauri_webview_keyboard` | | Wait for element | `tauri_webview_wait_for` | | Execute JS | `tauri_webview_execute_js` | | Get CSS styles | `tauri_webview_get_styles` | | Test IPC commands | `tauri_ipc_execute_command` | | Monitor IPC calls | `tauri_ipc_monitor` | | Read console logs | `tauri_read_logs` | | Manage windows | `tauri_manage_window` |
Prerequisites
1. **MCP Bridge Plugin installed** in the Tauri app 2. **App running** in development mode (`pnpm tauri:dev`) 3. **Port 9323** accessible for VMark automation. VMark pins the debug-only Tauri MCP bridge to `127.0.0.1:9323`; port 9223 is VMark's own auth-protected MCP server and is not valid for E2E automation.
If connection fails, run `tauri_get_setup_instructions` to get plugin installation guide.
Core Workflow
1. START SESSION → Connect to running Tauri app
2. VERIFY STATE → Screenshot + find elements
3. INTERACT → Click, type, scroll
4. WAIT → Wait for expected results
5. VERIFY → Check IPC, logs, DOM state
6. CLEANUP → Stop session when done
Session Management
Start Session
// Connect to VMark's automation bridge
tauri_driver_session({ action: 'start', port: 9323 })
// Connect to specific port
tauri_driver_session({ action: 'start', port: 9324 })
// Connect to remote host (mobile testing)
tauri_driver_session({ action: 'start', host: '<device-ip>', port: 9323 })Check Status
tauri_driver_session({ action: 'status' })
// Returns: connected apps, default app, identifiersStop Session
// Stop all sessions
tauri_driver_session({ action: 'stop' })
// Stop specific app
tauri_driver_session({ action: 'stop', appIdentifier: 9323 })Testing Patterns
Pattern 1: Visual Verification
// 1. Take screenshot to see current state
tauri_webview_screenshot()
// 2. Take screenshot of specific element
tauri_webview_screenshot({ uid: 'editor-content' })
// 3. Save to file for comparison
tauri_webview_screenshot({ filePath: 'dev-docs/archive/test-screenshots/test-screenshot.png' })Pattern 2: Element Interaction
// 1. Find element first
tauri_webview_find_element({ selector: '.save-button' })
// 2. Click element
tauri_webview_interact({ action: 'click', selector: '.save-button' })
// 3. Double-click
tauri_webview_interact({ action: 'double-click', selector: '.editor' })
// 4. Long-press (touch simulation)
tauri_webview_interact({ action: 'long-press', selector: '.item', duration: 500 })
// 5. Scroll
tauri_webview_interact({ action: 'scroll', selector: '.content', scrollY: 500 })
// 6. Swipe
tauri_webview_interact({
action: 'swipe',
fromX: 300, fromY: 400,
toX: 100, toY: 400,
duration: 300
})Pattern 3: Keyboard Input
// Type into focused element
tauri_webview_keyboard({
action: 'type',
selector: '.editor-input',
text: '# Hello World'
})
// Press key
tauri_webview_keyboard({ action: 'press', key: 'Enter' })
// Key with modifiers
tauri_webview_keyboard({
action: 'press',
key: 's',
modifiers: ['Control'] // Ctrl+S
})
// Key combinations
tauri_webview_keyboard({
action: 'press',
key: 'z',
modifiers: ['Meta', 'Shift'] // Cmd+Shift+Z (redo on macOS)
})Pattern 4: Wait for State
// Wait for element to appear
tauri_webview_wait_for({
type: 'selector',
value: '.success-toast',
timeout: 5000
})
// Wait for text to appear
tauri_webview_wait_for({
type: 'text',
value: 'File saved successfully',
timeout: 3000
})
// Wait for IPC event
tauri_webview_wait_for({
type: 'ipc-event',
value: 'file-saved',
timeout: 5000
})Pattern 5: IPC Testing
// Start monitoring IPC calls
tauri_ipc_monitor({ action: 'start' })
// Perform action that triggers IPC
tauri_webview_interact({ action: 'click', selector: '.save-button' })
// Get captured IPC calls
tauri_ipc_get_captured({ filter: 'save_file' })
// Execute IPC command directly
tauri_ipc_execute_command({
command: 'get_document_state',
args: { id: 'doc-123' }
})
// Emit event to test handlers
tauri_ipc_emit_event({
eventName: 'file-changed',
payload: { path: '/test/file.md' }
})
// Stop monitoring
tauri_ipc_monitor({ action: 'stop' })Pattern 6: JavaScript Execution
// Get value from DOM (MUST use IIFE for return values)
tauri_webview_execute_js({
script: '(() => { return document.querySelector(".editor").textContent; })()'
})
// Check Tauri API available
tauri_webview_execute_js({
script: '(() => { return typeof window.__TAURI__ !== "undefined"; })()'
})
// Get computed style
tauri_webview_execute_js({
script: '(() => { return getComputedStyle(document.body).backgroundColor; })()'
})
// Trigger custom event
tauri_webview_execute_js({
script: 'document.dispatchEvent(new CustomEvent("test-event", { detail: { test: true } }))'
})Debugging
Read Console Logs
// Get recent console logs
tauri_read_logs({ source: 'console', lines: 50 })
// Filter logs
tauri_read_logs({ source: 'console', filter: 'error', lines: 100 })
// Logs since specific time
tauri_read_logs({
source: 'console',
since: '2024-0Read more
name: tauri-mcp-testing description: E2E testing expert for Tauri applications using Tauri MCP server. Use when testing running Tauri apps - session management, webview interaction, IPC verification, screenshot capture, and debugging. ALWAYS use tauri_* tools, NEVER Chrome DevTools MCP for Tauri apps.
Tauri MCP E2E Testing
**CRITICAL:** For E2E testing of Tauri applications, ALWAYS use `tauri_*` MCP tools. NEVER use Chrome DevTools MCP - that's for browser pages only.
Quick Reference
| Task | MCP Tool | |------|----------| | Connect to app | `tauri_driver_session` | | Take screenshot | `tauri_webview_screenshot` | | Find elements | `tauri_webview_find_element` | | Click/scroll/swipe | `tauri_webview_interact` | | Type text | `tauri_webview_keyboard` | | Wait for element | `tauri_webview_wait_for` | | Execute JS | `tauri_webview_execute_js` | | Get CSS styles | `tauri_webview_get_styles` | | Test IPC commands | `tauri_ipc_execute_command` | | Monitor IPC calls | `tauri_ipc_monitor` | | Read console logs | `tauri_read_logs` | | Manage windows | `tauri_manage_window` |
Prerequisites
1. **MCP Bridge Plugin installed** in the Tauri app 2. **App running** in development mode (`pnpm tauri:dev`) 3. **Port 9323** accessible for VMark automation. VMark pins the debug-only Tauri MCP bridge to `127.0.0.1:9323`; port 9223 is VMark's own auth-protected MCP server and is not valid for E2E automation.
If connection fails, run `tauri_get_setup_instructions` to get plugin installation guide.
Core Workflow
1. START SESSION → Connect to running Tauri app 2. VERIFY STATE → Screenshot + find elements 3. INTERACT → Click, type, scroll 4. WAIT → Wait for expected results 5. VERIFY → Check IPC, logs, DOM state 6. CLEANUP → Stop session when done
Session Management
Start Session
// Connect to VMark's automation bridge
tauri_driver_session({ action: 'start', port: 9323 })
// Connect to specific port
tauri_driver_session({ action: 'start', port: 9324 })
// Connect to remote host (mobile testing)
tauri_driver_session({ action: 'start', host: '<device-ip>', port: 9323 })Check Status
tauri_driver_session({ action: 'status' })
// Returns: connected apps, default app, identifiersStop Session
// Stop all sessions
tauri_driver_session({ action: 'stop' })
// Stop specific app
tauri_driver_session({ action: 'stop', appIdentifier: 9323 })Testing Patterns
Pattern 1: Visual Verification
// 1. Take screenshot to see current state
tauri_webview_screenshot()
// 2. Take screenshot of specific element
tauri_webview_screenshot({ uid: 'editor-content' })
// 3. Save to file for comparison
tauri_webview_screenshot({ filePath: 'dev-docs/archive/test-screenshots/test-screenshot.png' })Pattern 2: Element Interaction
// 1. Find element first
tauri_webview_find_element({ selector: '.save-button' })
// 2. Click element
tauri_webview_interact({ action: 'click', selector: '.save-button' })
// 3. Double-click
tauri_webview_interact({ action: 'double-click', selector: '.editor' })
// 4. Long-press (touch simulation)
tauri_webview_interact({ action: 'long-press', selector: '.item', duration: 500 })
// 5. Scroll
tauri_webview_interact({ action: 'scroll', selector: '.content', scrollY: 500 })
// 6. Swipe
tauri_webview_interact({
action: 'swipe',
fromX: 300, fromY: 400,
toX: 100, toY: 400,
duration: 300
})Pattern 3: Keyboard Input
// Type into focused element
tauri_webview_keyboard({
action: 'type',
selector: '.editor-input',
text: '# Hello World'
})
// Press key
tauri_webview_keyboard({ action: 'press', key: 'Enter' })
// Key with modifiers
tauri_webview_keyboard({
action: 'press',
key: 's',
modifiers: ['Control'] // Ctrl+S
})
// Key combinations
tauri_webview_keyboard({
action: 'press',
key: 'z',
modifiers: ['Meta', 'Shift'] // Cmd+Shift+Z (redo on macOS)
})Pattern 4: Wait for State
// Wait for element to appear
tauri_webview_wait_for({
type: 'selector',
value: '.success-toast',
timeout: 5000
})
// Wait for text to appear
tauri_webview_wait_for({
type: 'text',
value: 'File saved successfully',
timeout: 3000
})
// Wait for IPC event
tauri_webview_wait_for({
type: 'ipc-event',
value: 'file-saved',
timeout: 5000
})Pattern 5: IPC Testing
// Start monitoring IPC calls
tauri_ipc_monitor({ action: 'start' })
// Perform action that triggers IPC
tauri_webview_interact({ action: 'click', selector: '.save-button' })
// Get captured IPC calls
tauri_ipc_get_captured({ filter: 'save_file' })
// Execute IPC command directly
tauri_ipc_execute_command({
command: 'get_document_state',
args: { id: 'doc-123' }
})
// Emit event to test handlers
tauri_ipc_emit_event({
eventName: 'file-changed',
payload: { path: '/test/file.md' }
})
// Stop monitoring
tauri_ipc_monitor({ action: 'stop' })Pattern 6: JavaScript Execution
// Get value from DOM (MUST use IIFE for return values)
tauri_webview_execute_js({
script: '(() => { return document.querySelector(".editor").textContent; })()'
})
// Check Tauri API available
tauri_webview_execute_js({
script: '(() => { return typeof window.__TAURI__ !== "undefined"; })()'
})
// Get computed style
tauri_webview_execute_js({
script: '(() => { return getComputedStyle(document.body).backgroundColor; })()'
})
// Trigger custom event
tauri_webview_execute_js({
script: 'document.dispatchEvent(new CustomEvent("test-event", { detail: { test: true } }))'
})Debugging
Read Console Logs
// Get recent console logs
tauri_read_logs({ source: 'console', lines: 50 })
// Filter logs
tauri_read_logs({ source: 'console', filter: 'error', lines: 100 })
// Logs since specific time
tauri_read_logs({
source: 'console',
since: '2024-0The Plain-Text Workspace Where Humans and AI Collaborate Free. Local-first. Format-aware. VMark is the plain-text workspace where humans and AI collaborate.
Repo: xiaolai/vmark
Other skills on vmark.
- /ai-coding-agents
Comprehensive guide for using Codex CLI (OpenAI) and Claude Code CLI (Anthropic) - AI-powered coding agents. Use when orchestrating CLI commands, automating tasks, configuring agents, or troubleshooting issues.
Open skill - /css-design-tdd
Test-driven CSS design system modifications. Run checks before/after CSS changes to verify token usage, variable definitions, fallbacks, and consistency. Use when modifying CSS tokens, fixing design inconsistencies, or auditing CSS architecture.
Open skill - /mcp-dev
Build or update MCP server/client integrations for VMark. Use when configuring MCP servers, adding MCP tools, or updating MCP-related docs and settings.
Open skill - /mcp-server-manager
Discover, register, and verify MCP servers. Use when a user asks to connect/add/install/remove an MCP server, or when you need to manage project MCP configuration.
Open skill - /plan-audit
Audit an implementation against a plan (dev-docs/plans/*). Use when a user asks to check for gaps, logic errors, or missing tests relative to a plan or Work Items.
Open skill - /plan-verify
Verify a completed implementation against a plan by running gates and checking acceptance criteria. Use when the user asks to verify work items or confirm completion.
Open skill

