tauri-plugin-mcp
tauri-plugin-mcp
MCP (Model Context Protocol) を介したクロスプラットフォームTauriテスト自動化プラグイン。
ClaudeのようなAIアシスタントが、テストや自動化のためにTauriデスクトップアプリと対話できるようにします。
Claude Codeプラグイン
このリポジトリはClaude Codeプラグインとしても機能します。これをインストールすると、MCPサーバー、QAエージェント、スキル、検証フックを一度に取得できます:
# 1. Add the marketplace source
claude plugin marketplace add DaveDev42/tauri-plugin-mcp
# 2. Install the plugin
claude plugin install tauri-mcp --scope projectまたは、Claude Codeセッション内で実行します:
/plugin marketplace add DaveDev42/tauri-plugin-mcp
/plugin install tauri-mcp --scope projectインストール中に、以下を求められます:
Tauriアプリディレクトリ: プロジェクトルートからの相対パス(例:単一アプリリポジトリの場合は
.、モノレポの場合はapps/desktop)
これにより、MCPサーバー、QAエージェント、スキル、検証フックが自動的に設定されます。手動での .mcp.json 設定は不要です。
含まれるもの:
コンポーネント | 説明 |
MCPサーバー | 自動設定される |
| QAオーケストレーション -- テストシナリオの準備、QAエージェントへの委任、結果の検証 |
| Tauri v2プロジェクトへのtauri-plugin-mcpインストールに関するステップバイステップガイド |
| 一般的なMCPセッションの問題に対する診断デシジョンツリー |
| MCPツールを使用してテストシナリオを実行するテストエージェント(haiku) |
QA検証フック | QAのPASS結果に実際のツール呼び出しの証拠が含まれていることを確認 |
特徴
クロスプラットフォーム: Windows (名前付きパイプ) + macOS/Linux (Unixソケット)
CDP依存関係なし: macOS WKWebViewを含むすべてのWebViewバックエンドで動作
MCP統合: Claude Codeおよびその他のMCPクライアントとの直接統合
マルチウィンドウサポート: ラベルで任意のウィンドウをターゲット可能。自動ブリッジインジェクション
統合ログ: フィルタリング機能付きのビルド、ランタイム、コンソール、ネットワークログ
動的ポート割り当て: 競合を避けるための自動ランダムポート割り当て
前提条件
Node.js >= 18
Tauri v2.x
pnpm (推奨) または npm
Rust (cargoを含む)
クイックスタート
[ ]
src-tauri/Cargo.tomlにRustプラグインを追加[ ] npmパッケージをインストール:
pnpm add github:DaveDev42/tauri-plugin-mcp#main[ ]
src-tauri/src/lib.rsにプラグインを登録[ ]
mcp:default権限を追加[ ]
main.tsxでブリッジを初期化[ ] Claude Code用に
.mcp.jsonを作成
インストール
1. Rustプラグイン (src-tauri/Cargo.toml)
[dependencies]
tauri-plugin-mcp = { git = "https://github.com/DaveDev42/tauri-plugin-mcp" }2. フロントエンドAPI (package.json)
pnpm add github:DaveDev42/tauri-plugin-mcp#main3. MCPサーバー
MCPサーバーバイナリ (tauri-mcp) はインストール後に自動的に利用可能になります。追加の設定は不要です。
セットアップ
1. プラグインの登録 (src-tauri/src/lib.rs)
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_mcp::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}2. 権限の追加
オプションA: tauri.conf.json または config/*.json5 内 (推奨)
{
"security": {
"capabilities": [{
"identifier": "main-capability",
"windows": ["main"],
"permissions": ["core:default", "mcp:default"]
}]
}
}オプションB: 別ファイル (src-tauri/capabilities/default.json)
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"windows": ["main"],
"permissions": ["core:default", "mcp:default"]
}3. ブリッジの初期化 (main.tsx)
// Initialize MCP bridge for E2E testing (dev mode only)
if (import.meta.env.DEV) {
import('tauri-plugin-mcp').then(({ initMcpBridge }) => {
initMcpBridge().catch(err => {
console.warn('[MCP] Bridge initialization failed:', err);
});
});
}本番環境向けの安全なセットアップ (オプションの依存関係)
上記の基本的なセットアップでは、すべてのビルドにMCPが含まれます。本番アプリでは、MCPを開発時のみに使用し、リリースバイナリからは完全に削除したい場合が多いでしょう。
このアプローチでは、Cargoのオプション依存関係機能を使用して、明示的に要求された場合にのみプラグインがコンパイルされるようにします。
1. Cargoのオプション依存関係 (src-tauri/Cargo.toml)
[features]
default = []
dev-tools = ["dep:tauri-plugin-mcp"]
[dependencies]
tauri-plugin-mcp = { git = "https://github.com/DaveDev42/tauri-plugin-mcp", optional = true }2. 条件付きプラグイン登録 (src-tauri/src/lib.rs)
pub fn run() {
let mut builder = tauri::Builder::default();
#[cfg(feature = "dev-tools")]
{
builder = builder.plugin(tauri_plugin_mcp::init());
}
builder
.run(tauri::generate_context!())
.expect("error while running tauri application");
}3. Capabilitiesファイルの分割
mcp:default を独自のcapabilityファイルに分離し、ビルド時に切り替えられるようにします。
capabilities/default.json — 常にアクティブ、MCP権限なし:
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"windows": ["main"],
"permissions": ["core:default"]
}capabilities/.dev-tools.json.disabled — MCP権限テンプレート (git管理):
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "dev-tools",
"windows": ["main"],
"permissions": ["mcp:default"]
}capabilities/dev-tools.json — .gitignore に追加 (ビルド時に生成):
# Dev-tools capability (generated from .disabled at build time)
src-tauri/capabilities/dev-tools.json4. build.rs — 条件付きcapabilities管理
build.rs は、機能が有効な場合にテンプレートをコピーし、それ以外の場合は削除します:
fn main() {
let dev_tools_cap = std::path::Path::new("capabilities/dev-tools.json");
let source_path = std::path::Path::new("capabilities/.dev-tools.json.disabled");
if std::env::var("CARGO_FEATURE_DEV_TOOLS").is_ok() {
// Copy .disabled → active (skip if already identical to avoid rebuild churn)
let should_copy = if dev_tools_cap.exists() {
std::fs::read(source_path).ok() != std::fs::read(dev_tools_cap).ok()
} else {
true
};
if should_copy {
std::fs::copy(source_path, dev_tools_cap)
.expect("Failed to copy dev-tools capability file");
}
} else if dev_tools_cap.exists() {
std::fs::remove_file(dev_tools_cap).ok();
}
tauri_build::try_build(
tauri_build::Attributes::default()
).expect("Failed to build tauri");
}5. 開発スクリプト (package.json)
{
"scripts": {
"dev": "tauri dev --features dev-tools"
}
}これで pnpm dev はMCPを有効にし、tauri build (機能なし) はMCPコードを含まないクリーンなリリースを生成します。
注: 基本セットアップ のフロントエンドブリッジガード (
import.meta.env.DEV) は引き続き適用されます。これにより、実行時にプラグインが存在していたとしてもブリッジが初期化されるのを防ぎます。
MCPサーバー設定
注: Claude Codeプラグイン をインストールした場合、MCPサーバーはすでに自動的に設定されています。プラグインはインストール中にTauriアプリディレクトリを尋ねます。このセクションはプラグインなしで手動設定する場合のものです。
プロジェクトルートの .mcp.json に以下を追加します:
{
"mcpServers": {
"tauri-mcp": {
"command": "npx",
"args": ["tauri-mcp"],
"env": {
"TAURI_APP_DIR": "."
}
}
}
}注: pnpmユーザーは
pnpx tauri-mcpまたはpnpm exec tauri-mcpも使用できます。
モノレポ設定
Tauriアプリがサブディレクトリ(例:apps/desktop)にある場合は、TAURI_APP_DIR を設定します:
{
"mcpServers": {
"tauri-mcp": {
"command": "npx",
"args": ["tauri-mcp"],
"env": {
"TAURI_APP_DIR": "./apps/desktop"
}
}
}
}複数のTauriアプリ
複数のTauriアプリを持つモノレポの場合、アプリごとに個別のMCPサーバーインスタンスを実行します:
{
"mcpServers": {
"tauri-desktop": {
"command": "npx",
"args": ["tauri-mcp"],
"env": { "TAURI_APP_DIR": "./apps/desktop" }
},
"tauri-kiosk": {
"command": "npx",
"args": ["tauri-mcp"],
"env": { "TAURI_APP_DIR": "./apps/kiosk" }
}
}
}ツールはサーバー名で名前空間化されます:mcp__tauri-desktop__snapshot, mcp__tauri-kiosk__snapshot など。
利用可能なツール
セッションライフサイクル
ツール | パラメータ | 説明 |
|
| セッション(アプリ)の状態を確認。 |
|
| セッションを開始( |
| - | セッションを停止(アプリのプロセスツリーを終了) |
ウィンドウ管理
ツール | パラメータ | 説明 |
| - | ラベル、タイトル、フォーカス状態、ブリッジ状態を含むすべての開いているウィンドウをリスト化 |
|
| ラベルで特定のウィンドウにフォーカス |
インタラクション
すべてのインタラクションツールは、特定のウィンドウをターゲットにするためのオプションの window パラメータを受け入れます(デフォルトはフォーカスされているウィンドウ)。
ツール | パラメータ | 説明 |
|
|
|
|
| 参照またはCSSセレクターで要素をクリック |
|
| 入力フィールドを埋める |
|
| キーボードキーを押す(例: "Enter", "Tab") |
|
| URLに移動 |
|
| ネイティブOSキャプチャ経由でスクリーンショットを撮影 |
|
| WebViewでJavaScriptを実行 |
可観測性
ツール | パラメータ | 説明 |
|
| ソース/レベルフィルタリング付きの統合ログアクセス(ビルド、ランタイム、コンソール、ネットワーク) |
|
|
Maintenance
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
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/DaveDev42/tauri-plugin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server