🚀 Snowfort Circuit MCP - ウェブアプリとElectronアプリ用のコンピューター
Snowfort Circuit MCPは、包括的なモデルコンテキストプロトコル(MCP)サーバースイートです。これにより、AIコーディングエージェントは、ウェブブラウザとElectronデスクトップアプリケーションの両方を、比類のない精度と柔軟性で自動化することができます。

🚀 クイックスタート
MCPの設定
AIエージェントのMCP設定ファイルに以下を追加します。
ウェブ自動化のみ
{
"mcpServers": {
"circuit-web": {
"command": "npx",
"args": ["@snowfort/circuit-web@latest"]
}
}
}
デスクトップ自動化のみ
{
"mcpServers": {
"circuit-electron": {
"command": "npx",
"args": ["@snowfort/circuit-electron@latest"]
}
}
}
完全なデュアルエンジンセットアップ(推奨)
{
"mcpServers": {
"circuit-web": {
"command": "npx",
"args": ["@snowfort/circuit-web@latest"]
},
"circuit-electron": {
"command": "npx",
"args": ["@snowfort/circuit-electron@latest"]
}
}
}
最初のコマンド
設定が完了したら、AIエージェントはすぐに自動化を開始できます。
browser_launch({
"compressScreenshots": true,
"screenshotQuality": 50
})
browser_navigate({"sessionId": "...", "url": "https://github.com"})
app_launch({"app": "/Applications/Visual Studio Code.app"})
click({"sessionId": "...", "selector": "button[title='New File']"})
✨ 主な機能
🌐 ウェブ自動化(29のツール)
- クロスブラウザサポート:Chromium、Firefox、WebKit
- 🎯 AI最適化スナップショット:すべてのアクション後に要素参照付きの自動スナップショット
- 📸 スマートスクリーンショット圧縮:高速なAIワークフローのためのJPEG圧縮(設定可能)
- 完全なインタラクションセット:クリック、入力、ホバー、ドラッグ、スクロールなどの自動コンテキスト付き操作
- 🖱️ マルチタブ管理:ブラウザタブの作成、切り替え、一覧表示、閉じる
- 📊 ネットワークとコンソール監視:リアルタイムのリクエスト追跡とコンソールキャプチャ
- 高度な入力:ファイルアップロード、ドロップダウン選択、キーボードショートカット
- コンテンツ抽出:HTMLコンテンツ、テキストコンテンツ、要素参照付きのアクセシビリティツリー
- ビジュアルキャプチャ:圧縮されたスクリーンショット、PDF生成
- ナビゲーション:履歴管理、ページ再読み込み、URLナビゲーション
- ダイアログ処理:自動アラート/確認/プロンプト管理
- ブラウザ制御:ビューポートのリサイズ、ウィンドウ管理
- 🧪 テスト生成:記録されたアクションからPlaywrightテストコードを自動生成
- JavaScript実行:ページコンテキストでカスタムスクリプトを実行
- スマートウェイト:要素の表示、ネットワークアイドル、ページロード状態
🖥️ デスクトップ自動化(32のツール)
- 🎯 AI最適化デスクトップ制御:自動スナップショット付きでElectronアプリを起動して制御
- 📸 スマートスクリーンショット圧縮:高速なAIワークフローのためのJPEG圧縮(設定可能)
- 🔧 開発モードサポート:自動検出で開発中のアプリを起動
- ユニバーサルElectronサポート:任意のElectronアプリケーション(パッケージ化または開発中)
- マルチウィンドウ管理:複数のアプリウィンドウを同時に制御
- IPC通信:アプリとの直接的なプロセス間通信
- ネイティブファイルシステム:直接ファイルの読み書き
- 強化されたターゲティング:ロールベースのクリック、n番目の要素選択、テキストベースのターゲティング
- アクセシビリティ第一:要素参照付きの組み込みアクセシビリティツリーナビゲーション
- 状態管理:高度なページ状態の待機と監視
- 🐛 コンソールとネットワーク監視:アプリケーションログとネットワークリクエストをキャプチャしてデバッグ
- すべてのウェブツール:すべてのウェブ自動化ツールがデスクトップコンテキストで動作
🔧 アーキテクチャの利点
- 🤖 AI第一の設計:最適なAIワークフローのための自動スナップショット、要素参照、および圧縮画像
- ランタイムアプリ選択:起動時ではなくツール呼び出し時にElectronアプリを指定
- セッション管理:完全に分離された複数の同時自動化セッション
- 型安全:包括的な型定義付きの完全なTypeScriptサポート
- エラーハンドリング:堅牢なエラー報告と回復
- パフォーマンス最適化:効率的なリソース使用と高速実行
📚 ドキュメント
🌐 ウェブツール
| ツール |
説明 |
主要パラメータ |
browser_launch |
AI最適化でブラウザを起動 |
browser, headed, viewport, compressScreenshots, screenshotQuality |
browser_navigate |
URLに移動(自動スナップショットを含む) |
sessionId, url |
browser_resize |
ブラウザビューポートをリサイズ |
sessionId, width, height |
browser_handle_dialog |
ダイアログの自動応答を設定 |
sessionId, action, promptText |
browser_tab_new |
新しいブラウザタブを作成 |
sessionId |
browser_tab_list |
すべての開いているタブを一覧表示 |
sessionId |
browser_tab_select |
特定のタブに切り替え |
sessionId, tabId |
browser_tab_close |
特定のタブを閉じる |
sessionId, tabId |
browser_network_requests |
ネットワークリクエスト履歴を取得 |
sessionId |
browser_console_messages |
コンソールメッセージ履歴を取得 |
sessionId |
browser_generate_playwright_test |
アクションからPlaywrightテストコードを自動生成 |
sessionId |
click |
要素をクリック(自動スナップショットを含む) |
sessionId, selector, windowId |
type |
テキストを入力(自動スナップショットを含む) |
sessionId, selector, text, windowId |
hover |
要素上にホバー(自動スナップショットを含む) |
sessionId, selector, windowId |
drag |
要素をターゲットにドラッグ |
sessionId, sourceSelector, targetSelector |
key |
キーボードキーを押す(自動スナップショットを含む) |
sessionId, key, windowId |
select |
ドロップダウンオプションを選択 |
sessionId, selector, value |
upload |
ファイルを入力フィールドにアップロード |
sessionId, selector, filePath |
back |
履歴を戻る |
sessionId |
forward |
履歴を進む |
sessionId |
refresh |
現在のページを再読み込み |
sessionId |
screenshot |
圧縮されたスクリーンショットを撮る |
sessionId, path |
snapshot |
要素参照付きのアクセシビリティツリーを取得 |
sessionId |
pdf |
ページのPDFを生成 |
sessionId, path |
content |
HTMLコンテンツを取得 |
sessionId |
text_content |
表示されているテキストを取得 |
sessionId |
evaluate |
JavaScriptを実行 |
sessionId, script |
wait_for_selector |
要素が表示されるまで待つ |
sessionId, selector, timeout |
close |
ブラウザセッションを閉じる |
sessionId |
🖥️ Electronツール
| ツール |
説明 |
主要パラメータ |
app_launch |
AI最適化でElectronアプリを起動 |
app, mode, projectPath, startScript, disableDevtools, compressScreenshots, screenshotQuality |
get_windows |
ウィンドウの種類を識別して一覧表示 |
sessionId |
ipc_invoke |
IPCメソッドを呼び出す |
sessionId, channel, args |
fs_write_file |
ファイルをディスクに書き込む |
sessionId, filePath, content |
fs_read_file |
ディスクからファイルを読み込む |
sessionId, filePath |
keyboard_press |
修飾キー付きでキーを押す |
sessionId, key, modifiers |
click_by_text |
テキストで要素をクリック |
sessionId, text, exact |
click_by_role |
アクセシビリティロールでクリック |
sessionId, role, name |
click_nth |
n番目の一致する要素をクリック |
sessionId, selector, index |
keyboard_type |
遅延を伴ってテキストを入力 |
sessionId, text, delay |
add_locator_handler |
モーダル/ポップアップを処理 |
sessionId, selector, action |
wait_for_load_state |
ページ状態がロードされるまで待つ |
sessionId, state |
smart_click |
自動検出(参照/テキスト/CSS)でスマートクリック |
sessionId, target, strategy, windowId |
browser_console_messages |
Electronアプリからコンソールログを取得 |
sessionId |
browser_network_requests |
Electronアプリからネットワークリクエストを取得 |
sessionId |
| + 共有ウェブツール |
コアウェブツール:click, type, screenshot, evaluateなど |
|
💻 使用例
ウェブ自動化ワークフロー
AI最適化ブラウザ起動
const session = await browser_launch({
"compressScreenshots": true,
"screenshotQuality": 50,
"headed": false
})
await browser_navigate({
"sessionId": session.id,
"url": "https://github.com"
})
マルチタブワークフロー
const session = await browser_launch({})
await browser_navigate({"sessionId": session.id, "url": "https://github.com"})
const newTabId = await browser_tab_new({"sessionId": session.id})
await browser_tab_select({"sessionId": session.id, "tabId": newTabId})
await browser_navigate({"sessionId": session.id, "url": "https://stackoverflow.com"})
const tabs = await browser_tab_list({"sessionId": session.id})
参照を使用した要素ターゲティング
await browser_navigate({"sessionId": session.id, "url": "https://example.com"})
await click({"sessionId": session.id, "selector": "button:has-text('Sign In')"})
ネットワークとコンソール監視
await browser_navigate({"sessionId": session.id, "url": "https://api-heavy-site.com"})
const requests = await browser_network_requests({"sessionId": session.id})
const consoleMessages = await browser_console_messages({"sessionId": session.id})
const testCode = await browser_generate_playwright_test({"sessionId": session.id})
ダイアログ処理
await browser_handle_dialog({
"sessionId": session.id,
"action": "accept",
"promptText": "Default input"
})
デスクトップアプリケーション自動化
AI最適化デスクトップ起動
const session = await app_launch({
"app": "/Applications/Visual Studio Code.app",
"compressScreenshots": true,
"screenshotQuality": 50
})
await click({"sessionId": session.id, "selector": "[title='New File']"})
開発モードサポート
const session = await app_launch({
"app": "/Users/dev/my-electron-project",
"mode": "development",
"compressScreenshots": false
})
const session2 = await app_launch({
"app": "/path/to/app-or-project",
"mode": "auto"
})
Electron Forgeサポート(v0.5.7の新機能)
推奨アプローチ(最も信頼性が高い)
const session = await app_launch({
"app": "/path/to/forge-project",
"mode": "development"
})
実験的な自動起動機能
const session = await app_launch({
"app": "/path/to/forge-project",
"mode": "development",
"startScript": "start"
})
🚀 Electron自動化のクイックスタートガイド
このガイドは、AIエージェント(CLAUDE.md)または手動参照用です。
Electron Forgeプロジェクトの場合
npm run start
await app_launch({
"app": "/path/to/your/project",
"mode": "development"
})
通常のElectronプロジェクトの場合
await app_launch({
"app": "/path/to/project",
"mode": "development",
"disableDevtools": true
})
パッケージ化されたアプリの場合
await app_launch({
"app": "/Applications/YourApp.app"
})
主要機能
- 📸 すべてのアクションはAI対応のスナップショットを返す 要素参照(e1、e2など)付き
- 🎯 複数のクリック方法:セレクタ、テキスト、ロール、またはn番目の要素によるクリック
- 🔧 完全な自動化:スクリーンショット、JavaScript評価、キーボード/マウス制御
- 🧹 自動クリーンアップ:セッションと開発サーバーは自動的に閉じられます
- 🪟 スマートウィンドウ管理:DevToolsウィンドウは自動的にフィルタリングされ、メインウィンドウが検出されます
プロのヒント
compressScreenshots: true(デフォルト)を使用して、より高速なAI処理を実現します。
- MCPは新しいインスタンスを起動します - 実行中のアプリにアタッチすることはできません。
- Electron Forgeの場合は、常に開発サーバーを最初に起動し、その後MCPで起動します。
- DevToolsウィンドウは自動的にフィルタリングされます - 常にメインアプリウィンドウが取得されます。
disableDevtools: trueを使用して、DevToolsの自動開啟を防止します。
get_windowsを使用して、すべてのウィンドウの種類(メイン/DevTools/その他)を確認します。
以上です! 他のすべてのツールは、ウェブバージョンと同じように機能します。楽しく自動化しましょう! 🎉
📖 AIエージェントのレガシー指示(Claude、CLAUDE.mdなど)
⚠️ 重要: MCPは独自のElectronインスタンスを起動します - すでに実行中のアプリに接続することはできません。
Electron開発プロジェクトの場合:
- 既存の
npm run startプロセスを停止します
- 代わりにMCPにアプリを起動させます:
const session = await app_launch({
"app": "/path/to/your/electron/project",
"mode": "development"
})
仕組み:
- 🚀 Playwrightを使用してElectronアプリの新しいインスタンスを起動します。
- 🎯 Chrome DevToolsプロトコルを介した完全な自動化制御。
- 📸 既存の実行中のプロセスにアタッチすることはできません。
AIワークフローの主要な利点:
- 🤖 すべてのアクション後に要素参照付きの自動スナップショット (
ref="e1", ref="e2")。
- 📸 デフォルトで圧縮されたスクリーンショットが提供され、処理が高速化されます。
- 🎯 スナップショットに提供された参照を使用した直接的な要素ターゲティング。
- 🔄 手動でのスナップショット呼び出しは必要ありません - コンテキストが自動的に提供されます。
コードエディターの自動化
const session = await app_launch({"app": "/Applications/Visual Studio Code.app"})
await click({"sessionId": session.id, "selector": "[title='New File']"})
await keyboard_type({"sessionId": session.id, "text": "console.log('Hello World');", "delay": 50})
await keyboard_press({"sessionId": session.id, "key": "s", "modifiers": ["ControlOrMeta"]})
マルチウィンドウ管理
const session = await app_launch({"app": "/Applications/Slack.app"})
const windows = await get_windows({"sessionId": session.id})
await click({"sessionId": session.id, "selector": ".channel-name", "windowId": "main"})
await type({"sessionId": session.id, "selector": "[data-qa='message-input']", "text": "Hello team!", "windowId": "main"})
コンソールとネットワークの監視
const session = await app_launch({"app": "/Applications/MyElectronApp.app"})
await click({"sessionId": session.id, "selector": "#load-data-button"})
await wait_for_load_state({"sessionId": session.id, "state": "networkidle"})
const consoleLogs = await browser_console_messages({"sessionId": session.id})
console.log("App console output:", consoleLogs)
const networkRequests = await browser_network_requests({"sessionId": session.id})
console.log("Network activity:", networkRequests)
高度な設定
完全な品質でのウェブ開発モード
const session = await browser_launch({
"compressScreenshots": false,
"headed": true,
"viewport": {"width": 1920, "height": 1080}
})
Electron開発モード
const session = await app_launch({
"app": "/Users/dev/my-electron-project",
"mode": "development",
"compressScreenshots": false
})
最適なパフォーマンスの本番モード
const webSession = await browser_launch({
"compressScreenshots": true,
"screenshotQuality": 30,
"headed": false
})
const electronSession = await app_launch({
"app": "/Applications/MyApp.app",
"compressScreenshots": true,
"screenshotQuality": 30
})
🔧 トラブルシューティング
一般的なElectron開発の問題
"Not connected"エラー
問題: 有効なセッションがない状態でMCPコマンドを使用しようとしています。
解決策:
get_windows({"sessionId": "test"})
const session = await app_launch({"app": "/path/to/project", "mode": "development"})
get_windows({"sessionId": session.id})
実行中のアプリに接続できない
問題: 既存のnpm run startプロセスに接続しようとしています。
解決策: 既存のプロセスを停止し、代わりにMCPにアプリを起動させます。
kill $(ps aux | grep 'Electron .' | awk '{print $2}')
app_launch({"app": "/your/project", "mode": "development"})
Electronが見つからない
問題: MCPがElectron実行可能ファイルを見つけることができません。
解決策:
- Electronをローカルにインストールします:
npm install electron --save-dev
- カスタムパスを指定します:
{"electronPath": "/custom/path/to/electron"}
- グローバルにインストールします:
npm install -g electron
🛠️ 設定オプション
CLIオプション
ウェブサーバー (@snowfort/circuit-web)
npx @snowfort/circuit-web@latest [options]
Options:
--browser <type> ブラウザエンジン:chromium, firefox, webkit (デフォルト: chromium)
--headed ヘッドモードで実行 (デフォルト: ヘッドレス)
--name <name> MCPハンドシェイク用のサーバー名 (デフォルト: circuit-web)
Electronサーバー (@snowfort/circuit-electron)
npx @snowfort/circuit-electron@latest [options]
Options:
--name <name> MCPハンドシェイク用のサーバー名 (デフォルト: circuit-electron)
高度なMCP設定
開発セットアップ
{
"mcpServers": {
"circuit-web": {
"command": "npx",
"args": ["@snowfort/circuit-web@latest", "--headed", "--browser", "chromium"]
},
"circuit-electron": {
"command": "npx",
"args": ["@snowfort/circuit-electron@latest"]
}
}
}
本番セットアップ
{
"mcpServers": {
"circuit-web": {
"command": "npx",
"args": ["@snowfort/circuit-web@latest"]
},
"circuit-electron": {
"command": "npx",
"args": ["@snowfort/circuit-electron@latest"]
}
}
}
🏗️ アーキテクチャ
公開パッケージ:
├── @snowfort/circuit-core@latest # コアMCPインフラストラクチャ
├── @snowfort/circuit-web@latest # ウェブ自動化サーバー(29のツール)
└── @snowfort/circuit-electron@latest # デスクトップ自動化サーバー(32のツール)
ローカル開発:
packages/
├── core/ # 共有MCPインフラストラクチャとドライバーインターフェース
├── web/ # AI最適化されたウェブ自動化CLI
└── electron/ # デスクトップ自動化CLI
📦 公開されているパッケージ
🔧 開発
ローカル開発のセットアップ
git clone https://github.com/snowfort-ai/circuit-mcp.git
cd circuit-mcp
pnpm install
pnpm -r build
pnpm -r dev
ローカル開発サーバーの実行
./packages/web/dist/esm/cli.js --headed
./packages/electron/dist/esm/cli.js
テスト
pnpm -r test
pnpm -r clean
🤝 コントリビューション
貢献を歓迎します!詳細については、コントリビューションガイドを参照してください。
- リポジトリをフォークします。
- あなたの機能ブランチを作成します (
git checkout -b feature/amazing-feature)。
- 変更をコミットします (
git commit -m 'Add some amazing feature')。
- ブランチにプッシュします (
git push origin feature/amazing-feature)。
- プルリクエストを開きます。
📄 ライセンス
このプロジェクトは、Apache License 2.0の下でライセンスされています - 詳細については、LICENSEファイルを参照してください。
包括的な自動化テストのための独立した実装 - © 2025 Snowfort LLC
🙏 謝辞
すべてを自動化する準備はできましたか? 上記のMCP設定から始めて、AI最適化されたデュアルエンジン自動化の力を解放しましょう! 🚀