MCP server for Tauri v2 application development. Provides tools for CLI execution, configuration management, mobile device/emulator management, native UI automation, and debugging.
Monorepo packages:
packages/mcp-server/- Main MCP server implementationpackages/tauri-plugin-mcp-bridge/- Tauri plugin for automation bridge (Rust)packages/test-app/- Test application for E2E testingpackages/cli- A CLI wrapper for the MCP server funcionality
npm install # Install all dependencies
npm run build # Build all packages
npm test # Run tests (requires build first)
npm run standards # Run commitlint + eslint- TypeScript: Strict mode, ESM with
.jsextensions in imports, ES2022 target - Naming: camelCase for functions/variables, PascalCase for classes, kebab-case for files
- Acronyms: All lowercase or all caps, never mixed (e.g.,
urlorURL, neverUrl) - Avoid:
anytype, magic numbers, deeply nested blocks - Prefer: Early returns, higher-order functions, immutability (
readonly,as const) - Functions: Arrow for simple (<3 instructions), named otherwise; use RO-RO pattern
- JSDoc: Document public classes and methods
All tools are defined in packages/mcp-server/src/tools-registry.ts:
- Add Zod schema + handler in the appropriate module (
manager/,driver/,monitor/) - Import and add entry to
TOOLSarray intools-registry.ts - Add E2E test in
packages/mcp-server/tests/e2e/
Tool categories: PROJECT_MANAGEMENT, MOBILE_DEVELOPMENT, UI_AUTOMATION, IPC_PLUGIN
- Always build before testing:
npm run build - E2E tests launch
test-appand connect via WebSocket - Tests located in
packages/mcp-server/tests/e2e/ - Prefer E2E tests over unit tests
- CI timeout is 8 minutes; local is 1 minute
- Call
driver_sessionwithaction: 'start'before using driver tools - Always call with
action: 'stop'to clean up - WebSocket port range: 9223-9322
Follow: https://raw.githubusercontent.com/silvermine/standardization/refs/heads/master/commitlint.js
This monorepo uses a single version across all packages. All packages share the same version number.
Version files (all must have the same version):
packages/mcp-server/package.json-versionfieldpackages/cli/package.json-versionfield and@hypothesi/tauri-mcp-serverdependency versionpackages/cli/.claude-plugin/plugin.json-versionfieldgemini-extension.json-versionfieldpackages/tauri-plugin-mcp-bridge/package.json-versionfieldpackages/tauri-plugin-mcp-bridge/Cargo.toml-versionfield
Changelog files (all four must be updated):
CHANGELOG.md- Root changelog for overall project historypackages/cli/CHANGELOG.md- CLI-specific changespackages/mcp-server/CHANGELOG.md- Server-specific changespackages/tauri-plugin-mcp-bridge/CHANGELOG.md- Plugin-specific changes
Lock files (updated automatically but must be committed):
package-lock.json- Updated bynpm installpackages/tauri-plugin-mcp-bridge/Cargo.lock- Updated bycargo updatepackages/test-app/src-tauri/Cargo.lock- Updated bycargo update
-
Review git log to identify changes since the last release tag
-
Determine version bump (patch for fixes, minor for features, major for breaking)
-
Update all four changelogs with the new version entry:
- Add entry under
## [Unreleased]with the new version and date - Include changes relevant to each package (use
_No changes to this package._if none) - Do not skip any version numbers - if v0.2.1 exists, the next must be v0.2.2, not v0.2.3
- Add entry under
-
Update version in package.json files using npm (without git tag):
npm version <version> --no-git-tag-version -w @hypothesi/tauri-mcp-server -w @hypothesi/tauri-mcp-cli -w @hypothesi/tauri-plugin-mcp-bridge
-
Update version-coupled metadata manually to match:
packages/cli/package.json- update the@hypothesi/tauri-mcp-serverdependency versionpackages/cli/.claude-plugin/plugin.jsongemini-extension.jsonpackages/tauri-plugin-mcp-bridge/Cargo.toml
-
Update lock files:
npm install cargo update --package tauri-plugin-mcp-bridge # in packages/tauri-plugin-mcp-bridge/ cargo update --package tauri-plugin-mcp-bridge # in packages/test-app/src-tauri/
-
Verify versions in manifests and lock files match the new version:
grep -n '"version"' packages/cli/.claude-plugin/plugin.json gemini-extension.json grep -n '"@hypothesi/tauri-mcp-server"' packages/cli/package.json grep -A2 '"@hypothesi/tauri-mcp-server"' package-lock.json | head -3 grep -A2 '"@hypothesi/tauri-mcp-cli"' package-lock.json | head -3 grep -A2 '"@hypothesi/tauri-plugin-mcp-bridge"' package-lock.json | head -3
-
Stage all changed files:
- All four changelogs
packages/mcp-server/package.jsonpackages/cli/package.jsonpackages/cli/.claude-plugin/plugin.jsongemini-extension.jsonpackages/tauri-plugin-mcp-bridge/package.jsonpackages/tauri-plugin-mcp-bridge/Cargo.toml- package-lock.json
- Both Cargo.lock files
-
Commit:
git commit -m "chore: version bump: v<version>" -
Create signed tag:
git tag -s v<version> -m "Release v<version>" -
Push:
git push && git push --tags
- Skipping changelog entries: Every version must have an entry in all four changelogs
- Forgetting lock files: Both
package-lock.jsonand bothCargo.lockfiles must be updated - Forgetting CLI metadata:
packages/cli/.claude-plugin/plugin.json,gemini-extension.json, and the CLI's pinned@hypothesi/tauri-mcp-serverdependency must match the release version - Version mismatch: All version fields must match exactly
- Missing intermediate versions: If changelogs are missing entries for previous versions, add them before creating the new release
Run cargo fmt and cargo clippy after changes in packages/tauri-plugin-mcp-bridge/.
Always use --save-exact flag when installing.
packages/mcp-server/src/tools-registry.ts- Single source of truth for all MCP toolspackages/mcp-server/src/index.ts- MCP server entry pointpackages/mcp-server/src/driver/session-manager.ts- WebSocket session managementpackages/tauri-plugin-mcp-bridge/src/lib.rs- Plugin entry point and WebSocket server setupspecs/- Architecture docs, release process, and design decisions