Munim Computer Use について
Munim Computer Use は、コーディングエージェントや他の MCP クライアント向けのオープンソースのデスクトップ操作 MCP サーバーです。アクセシビリティツリーを読み取り、macOS、Windows、Linux でバックグラウンド操作を行い、エージェントポインターや領域ズーム、ログイン済み Chrome タブの操作に対応します。
主な機能
- 01アクセシビリティツリーの読み取りと要素指定
- 02バックグラウンドでのクリックと入力
- 03エージェントポインター表示と領域ズーム
- 04ログイン済み Chrome タブの操作
- 05macOS、Windows、Linux に対応
活用シーン
- 01コーディングエージェントによるデスクトップアプリ操作
- 02ログイン済み Chrome でのウェブ作業
- 03画面要素を操作して結果を確認
MCP 対応
Claude Code、Codex、Cursor、MT Code などの MCP クライアントにコンピューター操作ツールを提供し、他の MCP クライアントでも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
munim-computer-use
ダウンロード • ドキュメントを読む • 問題を報告する • munimtech.com/munim-computer-use
Munim Technologiesをフォロー
はじめに
Computer Use はオープンソースのMCPサーバーです。コンピューター操作エージェント(CUA)のバックエンドとして、あらゆるコーディングエージェントが人間と同じようにコンピューターを使えるようにします。アクセシビリティツリーを通じて画面を読み取り、マウスを自由に使える状態に保ちながらバックグラウンドでクリックや入力を行い、作業中の場所にエージェントポインターを表示し、小さな文字を拡大して、サインイン済みのChromeでタブを操作します。macOS、Windows、Linuxに対応しています。
**Claude Code、Codex、Cursor、MT Code**のほか、あらゆるMCPクライアントで、どのモデルでも動作します。操作にビジョンモデルは必要ありません。
Munim TechnologiesがMT CodeのComputer Useエンジンとして開発し、単独のプロジェクトとして公開しています(詳細)。
目次
- クイックスタート
- 機能マトリックス
- ベンチマーク
- 優れた動作の理由
- あなたと並行して動作
- エージェントが使用できるアプリとサイト
- ツール
- リポジトリの構成
- 環境フラグ
- アプリへの組み込み
- エージェントへのプロンプト
- コントリビュート
- クレジットとライセンス
クイックスタート
- Releases からお使いのプラットフォーム向けの最新バイナリ(
munim-computer-use-macos-universal.zip、munim-computer-use-windows-x64.zip)をダウンロードするか、ソースからビルドします。 PATHの通った場所に配置します(/usr/local/bin/munim-computer-use、または%LOCALAPPDATA%\Programs\munim-computer-use\munim-computer-use.exe)。- macOS のみ:
munim-computer-use request-permissionsを一度実行し、アクセシビリティと画面収録の許可を求めるプロンプトを表示します。 - エージェントに登録します:
# Claude Code — fastest: the npm launcher fetches the signed binary on first run.
# Add `--scope user` to register it for every project instead of just this one.
claude mcp add munim-computer-use -- npx -y munim-computer-use
# or point at a downloaded binary
claude mcp add munim-computer-use -- /usr/local/bin/munim-computer-use
# Codex — writes the entry below into ~/.codex/config.toml for you (needs a Codex CLI
# with `codex mcp`; check with `codex mcp --help`)
codex mcp add munim-computer-use -- npx -y munim-computer-use
# Codex — ~/.codex/config.toml, if you would rather edit it yourself
[mcp_servers.munim-computer-use]
command = "npx"
args = ["-y", "munim-computer-use"]
# Cursor — no MCP subcommand in its CLI, so write the config. ~/.cursor/mcp.json applies
# to every project; .cursor/mcp.json in a repo applies to that one.
mkdir -p ~/.cursor && [ -s ~/.cursor/mcp.json ] || echo '{}' > ~/.cursor/mcp.json
jq '.mcpServers["munim-computer-use"] = {"command":"npx","args":["-y","munim-computer-use"]}' \
~/.cursor/mcp.json > ~/.cursor/mcp.json.tmp && mv ~/.cursor/mcp.json.tmp ~/.cursor/mcp.json
// Cursor — the entry that produces, in .cursor/mcp.json
{ "mcpServers": { "munim-computer-use": { "command": "npx", "args": ["-y", "munim-computer-use"] } } }
次に、こう頼んでみましょう:"Safari を開いて、火曜日にデンバーへ行く最安のフライトを探し、メモに追加して。" エージェントは get_app_state で UI を読み取り、要素 ID を使って操作し、screenshot で確認します。
機能マトリックス
Munim Computer Use は強調表示された最初の列です。それ以外は、コンピューター操作用としてよく利用されるサーバーです。各セルの情報は、2026 年 9 月および 10 月時点で各プロジェクトの README またはドキュメントに記載されている内容に基づいています(情報源はクレジットとライセンスを参照)。✅ 対応 · ❌ 非対応または記載なし · ⚠️ 一部対応。
| 機能 | Munim Computer Use | Cua Driver | Codex Computer Use | OpenAI Agents API | Anthropic reference demo | Windows-MCP | MacOS-MCP | open-computer-use | computer-use-mcp (zavora) | 備考 |
|---|---|---|---|---|---|---|---|---|---|---|
| macOS | ✅ | ✅ | ✅ | n/a | ❌ | ❌ | ✅ | ✅ | ✅ | Anthropic のデモは、あなたのマシンではなく、Docker 内の Linux デスクトップを操作します。OpenAI Agents API(2026 年 9 月)は OpenAI がホストするブラウザーを実行するため、こちらもあなたのマシンを操作することはありません。 |
| Windows | ✅ | ✅ | ✅ | n/a | ❌ | ✅ | ❌ | ✅ | ✅ | Windows-MCP は Windows 専用、MacOS-MCP は macOS 専用です。 |
| Linux | ✅ | ✅ | ❌ | n/a | ✅ (sandbox) | ❌ | ❌ | ✅ | ✅ | Munim Computer Use は AT-SPI と X11 を使用します。ネイティブの Wayland アプリでは要素の操作はできますが、座標を指定したクリックはできません。 |
| 要素 ID を含むアクセシビリティツリー | ✅ | ✅ | ⚠️ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | Codex は macOS ではまずアクセシビリティツリーを読み取り、Windows ではスクリーンショットをもとに操作します。Agents API と Anthropic のデモはスクリーンショットをもとに操作します。ID があれば、エージェントはピクセル位置ではなく ボタン を押せます。 |
| バックグラウンド入力(マウスが動かない) | ✅ | ✅ | ⚠️ | n/a | n/a | ❌ | ❌ | ❌ | ❌ | Munim Computer Use は、対象ウィンドウにイベントを送ります。macOS では常に(SkyLight とプロセスごとのイベントを使用)、Windows では UI Automation のパターンと従来の Win32 コントロールに対して機能します。それ以外の Windows UI と Linux のすべてのポインター入力(XTEST)では、実際のポインターが動きます。Codex は macOS では独自のカーソルを使ってバックグラウンドで動作し、Windows ではポインターを操作します。Cua Driver はデフォルトでバックグラウンドに入力し、入力が反映されない場合はフォアグラウンドに切り替えます。この表にあるその他のサーバーは、実際のカーソルを動かします。 |
| エージェントのポインターオーバーレイ | ✅ | ✅ | ✅ | ❌ | ❌ | ⚠️ | ❌ | ❌ | ❌ | Windows-MCP はキャプチャの周囲に枠を一瞬表示します。Codex と Cua Driver は画面上に独自のカーソルを描画します。 |
| 領域をフル解像度で拡大 | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | Anthropic のツールセットには zoom があります。ここでは、すべてのプラットフォームでツールとして利用できます。 |
| スクリーンショットに画面座標のマッピングを含む | ✅ | ⚠️ | n/a | n/a | n/a | ❌ | ❌ | ❌ | ❌ | すべてのキャプチャに原点とピクセル/ポイントの値が含まれるため、Retina 画像や縮小画像からクリックしても正しい位置に届きます。 |
| ホバー、待機、ラベル検索 | ✅ | ⚠️ | ⚠️ | ❌ | ⚠️ | ✅ | ⚠️ | ❌ | ⚠️ | Windows-MCP には Wait/WaitFor、MacOS-MCP には Wait、Anthropic には wait/mouse_move があります。 |
| ログイン済みの Chrome、自分のタブグループまたは任意のタブ | ✅ | ⚠️ | ⚠️ | ❌ | ❌ | ⚠️ | ❌ | ❌ | ❌ | Codex はアプリ内ブラウザーを使用し、Cua Driver は CDP 経由でブラウザーに接続し、Windows-MCP は開いているブラウザーの DOM を読み取ります。Munim Computer Use は実際の Chrome 内に名前付きのタブグループを独自に開き、依頼された場合は、すでに開いているタブを引き継ぐこともできます。 |
| 1 回の呼び出しで操作して結果を確認 | ✅ | ✅ | n/a | n/a | ✅ | ❌ | ❌ | ❌ | ❌ | どの操作にも return_state を指定すると、新しいアクセシビリティツリーまたはページスナップショットが追加されるため、1 回の呼び出しで操作と確認ができます。Cua Driver の run_steps は複数の操作を実行し、何が変わったかを報告します。Anthropic のデモは各操作の後にスクリーンショットを返します。Codex と Agents API はループを独自に実行します。 |
| 1 回の呼び出しで複数の操作 | ✅ | ✅ | n/a | n/a | ❌ | ⚠️ | ❌ | ❌ | ✅ | Cua Driver と computer-use-mcp (zavora) は、run_steps を使って 1 回の呼び出しで一連のステップを実行します。Windows-MCP の MultiSelect と MultiEdit は、一度に複数の要素を操作します。Munim Computer Use の run_steps も同様に動作し、実行前にリスト全体を確認して、最初の失敗時に停止します。 |
| ログイン済みタブでページのテキストを読み取る | ✅ | ⚠️ | ❌ | ❌ | ❌ | ⚠️ | ❌ | ❌ | ❌ | browser_read は、バックグラウンドタブから、見出し付きのページテキストを分割して返します。query フィルターも指定できます。Windows-MCP はページをスクレイピングします。 |
| モデルにパスワードを見せずにログイン | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | browser_request_credentials は、サイトの実際のオリジンを示す Chrome ウィンドウを開きます。ユーザーが入力した内容はページに送られ、会話には入りません。Agents API も同様に、ログイン処理を開発者のアプリに委ねます。デスクトップのパスワードフィールドへの入力は、デフォルトで拒否されます。 |
| アプリごと・サイトごとの許可/確認/ブロックルール | ✅ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ユーザーが管理するポリシーファイルを使用します。ask はタスクごとに 1 回、承認プロンプトを表示します。Codex は新しいアプリごとに確認を求め、「常に許可」リストを保持します。Agents API は新しい Web サイトごとに、開発者のアプリに確認を求めます。 |
| すべての MCP クライアントで動作 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | Codex Computer Use は Codex 専用、Anthropic のデモは Claude 専用です。 |
| すべてのプラットフォームで同一のツール構成 | ✅ | ⚠️ | n/a | n/a | n/a | n/a | n/a | ⚠️ | ✅ | Swift サーバーと Rust サーバーで、バイト単位で同一のスキーマを持つ 33 個のツールがあります。Cua Driver は CI チェックで共通パラメーターを同期させますが、一部のツールは特定のプラットフォームでのみ利用できます。 |
| 署名済みのビルド済みバイナリ+npm ランチャー | ✅ | ✅ (script) | ✅ | n/a | ❌ | ❌ | ❌ | ✅ (npm) | ✅ (npm) | macOS ユニバーサル版(Developer ID 署名済み)と Windows x64 版を Releases から入手できます。 |
| オープンソース | ✅ Apache-2.0 | ✅ MIT | ❌ | ❌ | ✅ | ✅ MIT | ✅ MIT | ✅ MIT | ✅ MIT | |
| また、以下も調査しました:mediar-ai/mcp-server-macos-use(macOS、アクセシビリティ、実際の入力)、deploymenttheory/windows-mcp-server(Windows、UIA Invoke パターン、WaitFor)、nuphus-mcp(OCR + 任意のビジョンモデル、CDP Chrome)、computer-control-mcp(PyAutoGUI + OCR)、microsoft/playwright-mcp(ブラウザーのみ)。訂正があれば、リンクを添えて issue を作成してください。 |
このグラフは上の表を集計しています(n/a のセルは除外)。そのため、行をこちらで選んだという表の偏りを引き継いでいます。
ベンチマーク
ウィンドウの読み取りは、エージェントが最も頻繁に繰り返すステップです。ここでは、実行できたすべての Windows サーバーで、フォルダー内のファイル数を 100 個から 20,000 個に増やしながら、同じエクスプローラーウィンドウを読み取っています。どのサーバーも画面上の行だけを読み取るため、線は横ばいです。異なるのは数値の水準です。munim-computer-use はどのサイズでも最速で、返すトークン数は次点の約半分です。
| サーバー | 読み取りツール | 100 ファイル | 1,000 | 5,000 | 20,000 | 読み取りあたりのトークン数(≈) |
|---|---|---|---|---|---|---|
| munim-computer-use 0.8.0 | get_app_state | 0.14 s | 0.13 s | 0.16 s | 0.14 s | 2.0K |
| Cua Driver 0.38.0 | get_window_state, include_screenshot: false | 0.20 s | 0.18 s | 0.18 s | 0.19 s | 3.9K |
| Windows-MCP 0.8.5 | Snapshot | 0.77 s | 0.77 s | 0.78 s | 0.76 s | 3.8K |
| computer-use-mcp 7.8.0 (zavora) | get_ui_tree (COMPUTER_USE_PROFILE=full) | 0.43 s | 0.50 s | 0.43 s | 0.52 s | 9.3K |
| open-computer-use 1.1.2 | get_app_state | 3.95 s | 3.82 s | 3.70 s | 4.23 s | 5.9K(スクリーンショット付き) |
2026年10月27日の測定条件:Windows 11(ビルド 26200)、1920×1080 のディスプレイを1台使用しました。フォルダーのサイズごとに、新しい File Explorer ウィンドウを前面に開き、各サーバーを一度起動して、独自の読み取りツールとデフォルトの引数を使って stdio 経由で呼び出しました(ツールにテキストのみの切り替えオプションがある場合はテキストのみを使用し、open-computer-use では常にスクリーンショットを添付します)。ウォームアップの呼び出しを1回除外した後、5回の呼び出しを計測しました。測定全体を2回行ったため、それぞれの時間は10回の中央値です。トークン数は推定値です。テキストは1トークンあたり4文字、画像は Anthropic の計算式(APIによるサイズ変更後の幅 × 高さ ÷ 750)で算出しています。Windows-MCP の Snapshot にはデスクトップ上のほかのウィンドウも含まれますが、ほかのサーバーは1つのウィンドウを読み取ります。Terminator は対象外としました。get_window_tree が最初に見つかった explorer プロセス(タスクバー)を選び、pid を指定できないためです。 |
同じ PC での操作:Calculator で「1 + 2」を計算する5回のクリック(クリア、1、+、2、=)を、それぞれ要素 ID を指定した別々の呼び出しで実行しました。読み取りを1回行った後、3回の実行の中央値を算出しました。
| サーバー | 5回のクリック | クリックあたり |
|---|---|---|
| munim-computer-use 0.8.0 | 1.70 s | 0.34 s |
| Cua Driver 0.38.0 | 2.32 s | 0.46 s |
| munim-computer-use 0.7.3 | 2.98 s | 0.60 s |
クリック処理の大部分を占めるのは、エージェントがどこを操作するのか見えるよう、エージェントのポインターが対象まで移動する時間です。0.8.0 ではこの移動時間が半分になっています。run_steps を使うと、5回すべてを1回の呼び出しで送信できます。
各 Windows リリースのバイナリを使い、すべてのリリースで同じウィンドウを読み取って、Windows-MCP を各回に含めた全17リリースの測定を2ラウンド実施しました。また、0.8.0 と 0.7.3 も同じ方法で比較しました(上記とは別の測定のため、時間は少し異なります)。0.7.0 では get_app_state が画面に表示されている内容だけを読み取り、各要素の属性を1回のリクエストで取得するようになりました。0.8.0 では、出力を変えずに、要素ごとに1回ずつではなく1回のリクエストでウィンドウ全体を取得します。
測定値
| リリース | 読み取り時間(中央値) | 文字数 | トークン数(約) |
|---|---|---|---|
| 0.2.0 | 0.40 s | 9,860 | 2.5K |
| 0.3.0 | 0.43 s | 9,860 | 2.5K |
| 0.3.1 | 0.38 s | 9,860 | 2.5K |
| 0.4.0 | 0.38 s | 9,860 | 2.5K |
| 0.4.1 | 0.38 s | 9,860 | 2.5K |
| 0.4.2 | 0.39 s | 9,860 | 2.5K |
| 0.4.3 | 0.40 s | 9,860 | 2.5K |
| 0.4.4 | 0.38 s | 9,860 | 2.5K |
| 0.5.0 | 0.38 s | 9,860 | 2.5K |
| 0.5.1 | 0.37 s | 9,860 | 2.5K |
| 0.5.2 | 0.43 s | 9,860 | 2.5K |
| 0.6.0 | 0.37 s | 9,860 | 2.5K |
| 0.6.1 | 0.41 s | 9,860 | 2.5K |
| 0.7.0 | 0.23 s | 7,499 | 1.9K |
| 0.7.1 | 0.28 s | 7,499 | 1.9K |
| 0.7.2 | 0.25 s | 7,520 | 1.9K |
| 0.7.3 | 0.25 s | 7,520 | 1.9K |
| 0.8.0 | 0.16 s | 7,515 | 1.9K |
Windows-MCP 0.8.5 Snapshot | 0.75 s | 14,929 | 3.7K |
node scripts/readme-charts.mjs でグラフを再生成できます。カバレッジのグラフは、機能マトリクスから集計されています。
優れた動作の理由
- ピクセルよりアクセシビリティを優先します。
get_app_stateは安定した要素 ID を含むアプリのアクセシビリティツリーを返すため、エージェントは座標を推測せずに ボタン を押せます。スクリーンショットに比べてトークンの消費はわずかで、OSWorld 形式のタスクで最も高いスコアを獲得します。スクリーンショットは検証や、ツリーでは説明できないコンテンツに使用します。 - 画面の内容をすばやく取得します。
get_app_stateは表示中の内容を一覧表示します。一覧やテーブルでは表示中の行が示され、スクロールして画面外にある項目はスキップされ、その数がカウントされます(offscreen: trueを指定すれば一覧にも表示されます)。属性は要素ごとに 1 回のリクエストで読み取られ、Windows ではウィンドウ全体を 1 回のリクエストで取得します。2,000 個のファイルがある Finder ウィンドウは 2.2 秒ではなく 165 ms で読み取れ、File Explorer も約 0.15 秒で読み取れます。これは、計測した他のどの Windows サーバーよりも高速です(ベンチマークを参照)。 - ダイアログを優先します。 シート、アラート、ポップオーバーがウィンドウをブロックしている間は、そのコントロールだけが、ブロック中であることを示す注記とともに一覧表示されます。そのため、エージェントは背後をクリックせず、ダイアログに応答します。
- Electron および Chromium アプリ(macOS)。 Slack、VS Code、Discord などの Chromium ベースのアプリは、要求したクライアントにのみツリーを公開します。
get_app_stateはツリーを要求し、バックグラウンドアプリがまだツリーを構築中の場合はその旨を示します。 - ツリーでは説明できないテキスト。 アプリがラベル付きコントロールを公開しない場合、ウィンドウをデバイス上の OCR(macOS では Apple Vision、Windows では Windows OCR)で読み取り、
click、hover、right_click、dragが受け付ける ID とともにテキストを一覧表示します。画像がマシンの外に出ることはありません。ocr: "always"または"never"で上書きできます。 - 誤動作せず、失敗する ID。 アクションの実行前に、すべての ID が再確認されます。要素がなくなった場合や、そのロールまたは名前が変わった場合(ダイアログのボタンが入れ替わった、一覧が並べ替えられたなど)、その時点でそこにある別の要素に作用するのではなく、明確なエラーを返してアクションが失敗します。
- アプリに必要なだけ待機します。
return_stateは固定時間の一時停止ではなく、アプリのアクセシビリティ通知が止まるまで待機します。フィールドの編集では約 230 ms(以前は 350 ms)待機し、シートのスライド表示が完了するのに十分な時間も待ちます。 - バックグラウンド制御。 イベントは対象ウィンドウに送信されます(macOS では SkyLight、Windows では UI Automation パターンと投稿されたウィンドウメッセージを使用)。macOS ではエージェントがマウスやキーボードを奪うことはありません。各プラットフォームでの正確な保証については、並行して操作できますを参照してください。
- ポインターはオーバーレイで表示し、あなたのポインターには触れません。 淡いラベンダー色のエージェントポインターで、エージェントが操作している場所を示します。ユーザーのカーソルには触れません。
- 正確に位置を指定できる座標。 すべてのスクリーンショットとズームには、画面上の原点とポイントあたりのピクセル数が付属します。
zoomは任意の領域を物理解像度でキャプチャします。 - あなたのブラウザーとログイン状態をそのまま使います。 Chrome 拡張機能は、ログイン済みの Chrome にエージェント専用のラベル付きタブグループを作成し、指定されない限りユーザーのタブには触れません。
- すでに開いているタブも利用できます。
browser_list_tabs all=trueはブラウザー内のすべてのタブを表示し、browser_use_tabはそのタブを現在の状態のまま引き継ぎます。ページにすでにログイン済みの場合や、操作の途中で URL を開き直すと状態が失われる場合に便利です。引き継いだタブはエージェントのグループに移動されず、アクティブ化も再読み込みもされません。クリーンアップ時には閉じずに解放し、browser_release_tabを使えばそれより前に返却できます。 - エージェントのクリックで開いたタブもエージェントのものです。 エージェントによるクリックまたはキー入力から 10 秒以内に開いた
target=_blankリンクやポップアップは、そのタスクのタブとグループに加わり、クリーンアップ時に閉じられます。エージェントのタブから開いても、直近のエージェント操作がなければ、そのタブはユーザーのものです。 - 複数の並列タスクで 1 つの拡張機能を共有できます。 MCP プロセスごとに専用のタブグループが割り当てられ、ブラウザー呼び出しに安定した
session_idを渡せば、1 つのプロセスで複数のタスクを実行できます。タスクが別のタスクのタブを操作したり引き継いだりすることはできず、クリーンアップ時(プロセス終了時を含む)には自身のタブだけを閉じます。任意の数の MCP プロセスで 1 つの拡張機能を共有できます。最初のプロセスが拡張機能を所有し、残りのプロセスはそのプロセス経由で操作します。所有プロセスが終了した場合は、他のプロセスが引き継ぎますが、誰のタブも閉じません。タスク間で Chrome の Cookie とログイン状態は共有されます。また、デスクトップアプリとクリップボードは分離されていません。 - モデルに依存しません。 操作にビジョンモデルは必要なく、ローカルモデルも使用できます。
- 確認してから操作し、検証します。 マウスオーバーメニューには
hover、読み込みの待機にはwait、ツリー全体を読み取らずにラベルからコントロールを探すにはqueryを使います。 - 1 回の呼び出しで操作と確認を行います。 任意のアクション(
click、type_text、set_value、browser_click、browser_navigate、…)にreturn_state: trueを渡すと、結果にアプリの最新のアクセシビリティツリー、またはページの現在のスナップショットが含まれます。ブラウザーアクションでは、準備状態が別途報告されます。タブが読み込み済みでも、遅延表示される SPA の UI が描画済みであるとは限りません。表示されるはずの要素を待つにはwait_for_selectorを使います(以下を参照)。state_queryはqueryと同様にデスクトップのツリーを絞り込みます。 - 複数の手順を 1 回の呼び出しで実行します。
run_stepsは、フィールドをクリックして入力し、Return キーを押すといった手順のリストを受け取り、各手順を直接呼び出す場合と同じチェックを行いながら順番に実行します。リスト全体は実行前に検証され、最初に失敗した手順で残りの実行を停止します。また、結果には実行された手順と実行されなかった手順が示されます。アプリの最終状態を確認するには、return_stateを指定します。 - ページをテキストで読み取ります。
browser_readはバックグラウンドのタブから、画面外にスクロールした内容を含むページの読みやすいテキストと見出しを返します。結果はチャンク単位で返され、offsetを使って続きを取得できます。queryを指定すると、見出しの下にある一致した行だけが残り、include_linksを指定するとリンクが一覧表示されます。 - パスワードが会話に出ることはありません。
browser_request_credentialsは、サイトの実際のオリジンを表示する小さな Chrome ウィンドウで、ユーザーにサインインを求めます。ユーザーが入力した内容はページのフィールドに直接入力され、モデルに返されることはありません。browser_snapshotはパスワードフィールドの値を表示せず、デスクトップではパスワードフィールドへの入力がデフォルトで拒否されます。 - 表示中のものを引き継ぎます。
get_app_stateとscreenshotにapp: "frontmost"を指定すると、ユーザーの手前にあるアプリを対象にできます。これにより、クライアントは「このウィンドウ」を 1 回の手順でエージェントに渡せます。
作業をしながら使えます
エージェントのポインターは独立しており、あなたのポインターはそのまま使えます。
macOS — 保証されています。 すべての操作は、アクセシビリティ(押す、値を設定する、テキストを選択する、メニューを表示する、スクロールバーを操作する)または対象アプリのプロセスとウィンドウ宛てのイベントを通じて行われます。サーバーがあなたのポインターを動かしたり、システム全体の入力ストリームにイベントを送ったり、あなたの入力を保留またはブロックしたりすることはないため、エージェントの作業中も、別のアプリでクリックや入力を続けられます。同じアプリでも、別のウィンドウなら操作できます。イベントはプライベートソースから送信されるため、押し続けている修飾キーがエージェントのクリックに影響することはありません。手順上必要な場合(activate_app の実行時や、パスワードフィールドの入力をあなたに引き継ぐ場合)には対象アプリが前面に表示されることがありますが、すべての操作で前面に表示されるわけではありません。
バックグラウンドアプリに送信するコマンドショートカットは、そのアプリのメニューバー経由で実行されます(macOS では、メニューのキー割り当てが有効なのは前面のアプリだけです)。そのため、アプリを前面に表示しなくても cmd+W、cmd+S などが機能します。最小化されたウィンドウや非表示のアプリで、ピクセルまたは入力が必要な操作(入力、座標クリック、スクリーンショット、OCR)を行う場合は、その間だけ見えないディスプレイに移されます。誰にも見えない状態で操作され、アイドル状態が20秒続いたとき、別のアプリのウィンドウがディスプレイを必要としたとき、またはサーバーの終了時に、再び最小化または非表示になります。その間にあなた自身がアプリを表示した場合、ウィンドウは元の場所に戻ります。このようなウィンドウでのアクセシビリティ操作(押す、値を設定する)には、こうした処理は必要ありません。COMPUTER_USE_PARK_WINDOWS=0 に設定するとこの機能が無効になり、その場合、ウィンドウを復元するよう求めるエラーがこれらの操作で返されます。
例外として、あなたのポインターを代わりに使うことはせず、次の操作は拒否されます。対象アプリが指定されていない状態でのクリック、ホバー、スクロール(get_app_state を実行する前に、デスクトップ上の座標を指定した場合)、およびドラッグ元のウィンドウから外れるドラッグ(アプリ間、またはデスクトップへのドラッグ)です。エラーには、代わりに何を指定すればよいかが示されます。
Windows — ベストエフォートで、実行状況を報告します。 UI Automation の Invoke による要素の押下、set_value、select_text、ScrollPattern によるスクロールは、あなたのポインターに触れません。また、従来の Win32 コントロールでは、ウィンドウメッセージの送信によってクリック、ホバー、ホイール操作、ドラッグも行えます。その他の UI(Chromium、Electron、WPF、UWP)は実際のマウス入力にのみ反応するため、こうしたクリック、ホバー、ドラッグではあなたのポインターが動き、type_text/press_key はフォーカスされたウィンドウに送られます。実際のポインターを使用した場合は、結果に via cursor と表示されます。別のアプリのウィンドウに覆われた要素に対する座標操作は、そのウィンドウをクリックせずに拒否されます。また、最小化されたウィンドウに対するポインターおよびキーボード操作では、ウィンドウを復元するよう求めるエラーが返されます(アクセシビリティ操作は引き続き実行できます)。
Linux — ポインター操作ではポインターを使用します。 XTEST の入力は実際のポインターを動かし、フォーカスされたウィンドウに送られます。結果には via cursor と表示されます。AT-SPI による要素操作(押す、値を設定する、テキストを挿入する、選択する)では、ポインターは動きません。
エージェントが使用できるアプリとサイト
エージェントがアクセスできるアプリとウェブサイトは、任意に設定できます。サーバーのサポートディレクトリ(macOS では ~/Library/Application Support/computer-use、Windows では %LOCALAPPDATA%\munim-computer-use、Linux では ~/.local/share/munim-computer-use。munim-computer-use identity を実行すると supportDir として表示されます)に policy.json を配置するか、COMPUTER_USE_POLICY で任意の場所にあるファイルを指定してください。サーバーを独自のプロファイルで組み込んでいるアプリは、自身のサポートディレクトリからファイルを読み込みます。
{
"apps": { "Keychain Access": "block", "com.apple.MobileSMS": "ask" },
"sites": { "bank.example": "block", "mail.google.com": "ask", "*": "allow" }
}
- アプリまたはサイトごとに
allow、ask、blockを設定します。askは、エージェントが初めてアクセスしようとしたときにユーザーへプロンプトを表示します(アプリではシステムダイアログ、サイトでは小さな Chrome ウィンドウが表示されます)。承認は、そのエージェントのタスクが終了するまで有効です。2 分以内に回答がない場合は、拒否として扱われます。 - アプリは、名前またはバンドル ID(大文字と小文字は区別しません)で照合します。このルールは、エージェントがアプリを読み取る、キャプチャする、またはアクティブにするときに適用されます。その後の操作は、許可されたスナップショットの要素を対象にします。
- サイトは、ホストとそのすべてのサブドメインに一致し、最も具体的なパターンが優先されます。各ブラウザー操作のたびに、その時点でタブに表示されているページに対して確認されるため、リンクをたどってブロック対象のサイトに移動しても回避できません。
*はデフォルトを設定します。デフォルトはallowです。そのため、{"apps": {"*": "block", "Notes": "allow"}}は許可リストになります。- 変更は再起動なしですぐに適用されます。無効なファイルは無視されず、すべてをブロックします。そのため、入力ミスによってブロックがひそかに許可へ変わることはありません。
これは、指示に従うエージェントのための安全策であり、サンドボックスではありません。座標でクリックすると指定した場所がクリックされ、画面全体のスクリーンショットにはすべてのウィンドウが表示されます。
ツール(33)
| 領域 | ツール |
|---|---|
| 表示 | list_apps、get_app_state(query 付き)、screenshot、zoom、list_displays |
| 操作 | click、right_click、hover、drag、scroll、type_text、set_value、select_text、press_key、activate_app、wait、run_steps |
| クリップボード | clipboard_read、clipboard_write(プレーンテキスト) |
| ブラウザー | browser_open_tab、browser_list_tabs、browser_use_tab、browser_release_tab、browser_select_tab、browser_navigate、browser_snapshot、browser_read、browser_click、browser_type、browser_request_credentials、browser_press_key、browser_close_tab、browser_close_all_tabs |
各操作ツールは return_state も受け取ります。これを指定すると、同じ呼び出しで操作後の現在の状態が返されます。run_steps は複数の操作を1回の呼び出しで実行し、最初に失敗した操作で停止します。
ブラウザーの準備完了確認と安全な再観測
browser_click、browser_type、browser_press_key、browser_navigate は、return_state: true とともに
wait_for_selector を受け取ります。browser_snapshot は、操作を実行せずに同じ待機機能を利用できます。
{"tab_id": 42, "index": 0, "return_state": true,
"wait_for_selector": "[role=dialog] button", "wait_timeout_ms": 3000}
この拡張機能は、リソースの読み込みとは独立して、同一ドキュメント内のレンダリングも含め、トップレベルドキュメント内で条件に一致する表示中の要素をポーリングします。スナップショットと同じ可視性ルールが適用されます。CSS ピクセルで 2×2 以上のサイズがあり、非表示、aria-hidden、inert、または完全に透明な祖先要素がないことが条件です。自身が透明なネイティブフォームコントロールは、スタイル付きアップロード/チェックボックスのヒットターゲットとして引き続き使用できますが、透明なコンテナーは対象外です。これはクリック可能であることや、ほかの要素に遮られていないことを保証するものではありません。フレームとシャドウルートは検索されません。新たに表示されることが期待される UIに固有のセレクターを選んでください。すでに存在する要素が直ちに条件を満たす場合があります。任意のページスクリプトは受け付けられません。また、セレクターで value 属性を検査することはできません。React は制御対象の入力値をその属性に反映し、パスワードフィールドも同様であるため、そうしないと、推測した文字を 1 文字ずつ入力するたびに待機が完了したと判定されるおそれがあります。
wait_timeout_ms:既定値は8000で、整数の0~10000を指定できます。0の場合は 1 回だけ確認します。wait_for_selectorが必要です。タイムアウト時間はポーリングに適用され、ブラウザー/API の遅延や、サイトの承認を求めるプロンプトには適用されません。サイトルールは、各確認の前と最終スナップショットの前に再確認されます。readiness: met (visible_selector, … ms):指定された条件が確認されました。すべてのネットワークリクエスト、アニメーション、アプリケーションの処理が終了したことを保証するものではありません。readiness: timeout:制限時間内に条件が確認されませんでした。アクションの成否とは別に判定され、現在のスナップショットは引き続き返されます。readiness: error:条件を評価できませんでした(無効な CSS など)。アクション自体は成功している場合があります。待機条件を修正して、再度確認してください。- セレクターを指定しない場合、
return_stateは短い一時停止と上限付きのナビゲーション読み込み待機を引き続き行いますが、SPA の準備完了を示すのではなく、not_requested (document_load, … ms)と報告します。ナビゲーション読み込みの待機時間が上限に達した場合は、timeoutと報告します。待機を指定しない通常のbrowser_snapshotは、即時に状態を確認します。
返されたスナップショットに変化が見られない場合、期待した UI が表示されないという理由だけで、冪等でないクリックを繰り返さないでください。まず待機して再確認してください。
{"tab_id": 42, "wait_for_selector": "[role=dialog] button", "wait_timeout_ms": 3000}
これを browser_snapshot に送信し、準備状況と最新のインデックスを確認してから、次のアクションを選択してください。タイムアウトやツールエラーが発生しても、クリック、送信、入力、ナビゲーションが取り消されることはありません。現在の状態を確認し、再試行が安全か判断してください。無効な待機の型/上限や、return_state: true を指定していないアクションの待機は、アクションの実行前に拒否されます。オプションの引数に null を指定した場合、省略した場合と同じ扱いになります。これらのオプションには、ネイティブサーバーだけでなく、更新済みの拡張機能も必要です。古い拡張機能がこれらを無視した場合、結果にその旨が示され、再読み込みを求められます。
回帰テスト:node --test chrome-extension/background.test.mjs は、待機の仕様とサイトポリシーのガードをテストします。実ブラウザーの CI ハーネス scripts/e2e-browser.mjs は、ナビゲーションなしで 1100 ms 後に表示されるダイアログに対する 1 回だけのクリックに加え、タイムアウトと読み取り専用での復旧をテストします。依存関係のない CDP 回帰テストでは、スナップショットのスコープ/ページネーションと SPA の準備状況の両方を確認します。分離された Chrome/Chromium プロファイルで実行してください。Playwright モジュールは必要ありません。
node scripts/snapshot-dom.test.mjs --chrome /path/to/chrome
# Extract the pre-fix source; each suite must fail independently:
git show deb4c7a:chrome-extension/background.js > original-background.js
node scripts/snapshot-dom.test.mjs --chrome /path/to/chrome --source original-background.js --suite snapshot
node scripts/snapshot-dom.test.mjs --chrome /path/to/chrome --source original-background.js --suite readiness
browser_snapshot はダイアログが開いているとき、最前面に表示されているダイアログを自動的にスコープとして選択するため、背後に隠れたページのコントロールがダイアログの予算を消費することはありません。ダイアログからポータル表示されたポップアップはスコープ内に残ります。これには、ダイアログのコントロールが aria-controls/aria-owns を通じて参照する要素、開いているポップオーバー、<body> の末尾にレンダリングされる select のオプションなど、ダイアログの上に描画されたコントロールが含まれます。非表示および inert のサブツリーは除外されますが、到達可能な画面外のコントロールは引き続き利用できます。ネイティブのモードレスダイアログと明示的な aria-modal="false" はページのスコープに影響しません。ネイティブのモーダルダイアログと明示的な aria-modal="true" は確実な候補です。暗黙的な ARIA ダイアログは、単にダイアログ自体の中央にあるだけでなく、ビューポートの中央を覆い、そこで最前面にある場合にのみ、ヒューリスティックにスコープとして選択されます。ヒットテストのスタックがない場合は、中央を覆っているかどうかを代替の判定基準とします。そのため、隅にあるチャットウィジェットや画面下部の Cookie バナーがあっても、ページのインデックス付きコントロールはそのまま利用できます。
limit(デフォルトおよび最大値は 250)までのコントロールを返し、scope、offset、limit、total を報告します。また、結果が切り詰められた場合はその旨と、次にリクエストする offset を明示します。同じ tab_id と session_id で続行してください。インデックスは選択されたスコープ内でグローバルであり、UI に変更がなければページ間で操作に使用できます。UI の変更後またはナビゲーション後は、offset=0 から新しいスナップショットを取得してください。アクションの return_state も offset=0 から始まり、同じスコープと切り詰めに関する報告を使用します。
名前、引数の形式、説明はすべてのプラットフォームで同一であり、CI で検証されます(node scripts/check-tool-parity.mjs)。Mac でこれらを学習したモデルは、Windows で新たに何かを学ぶ必要はありません。ツールを変更する場合は、手作業ではなく scripts/tool-defs.mjs を使って両方のリテラルを同時に編集してください。
リポジトリの構成
| ディレクトリ | 内容 | ビルド |
|---|---|---|
macos/ | Accessibility API と ScreenCaptureKit を使用する Swift サーバー(macOS 14 以降) | swift build -c release → .build/release/munim-computer-use |
windows-linux/ | Rust サーバー:Windows では UI Automation、Linux では AT-SPI と X11 を使用 | cargo build --release → target/release/munim-computer-use |
chrome-extension/ | browser_* ツール用の Chrome 拡張機能とネイティブメッセージングホスト | アンパックして読み込みます。sh install.sh/install.ps1 でホストを登録します。node background.test.mjs |
Dockerfile | レジストリのイントロスペクション(Glama など)向けに Rust サーバーをヘッドレス Linux でビルドします。コンテナー内ではデスクトップを操作できません | docker build -t munim-computer-use . |
ソースからビルドする
Fedora では、Rust サーバーをビルドする前に、Rust ツールチェーンに加えて、ネイティブ開発ライブラリをインストールしてください。
sudo dnf install gcc pkgconf-pkg-config clang-devel pipewire-devel \
libdrm-devel mesa-libgbm-devel mesa-libEGL-devel wayland-devel libxcb-devel
これらは、X11 でもスクリーンキャプチャの依存関係で必要です。特に、ビルド中に libpipewire-0.3.pc が見つからない場合は、pipewire-devel がインストールされていません。
# macOS
cd macos && swift build -c release
# Windows / Linux
cd windows-linux && cargo build --release
Linux に関する注意:要素に対するアクションはどの環境でも動作します。座標クリックには X11 または XWayland のクライアントが必要です。ネイティブ Wayland アプリは絶対位置のジオメトリを公開しないためです。
テスト
cd windows-linux && cargo test # Rust server
node chrome-extension/background.test.mjs # extension, against a fake Chrome
node scripts/check-tool-parity.mjs # Swift and Rust tool lists match
# Snapshot and SPA readiness regressions (dependency-free CDP, isolated profile):
node scripts/snapshot-dom.test.mjs --chrome <Chrome for Testing binary>
# The browser tools end to end, in a throwaway Chrome for Testing profile that
# never touches your own Chrome (npx playwright install chromium to get one):
node scripts/e2e-browser.mjs --server <munim-computer-use binary> --chrome <Chrome for Testing binary>
Chrome 拡張機能(任意)
chrome://extensions→ デベロッパーモード → パッケージ化されていない拡張機能を読み込む →chrome-extension/を選択します。- ネイティブメッセージングホストを登録します。
munim-computer-use install-native-hostを実行します(例:npx -y munim-computer-use install-native-host)。または、チェックアウトからsh chrome-extension/install.sh(macOS/Linux)/powershell -File chrome-extension/install.ps1(Windows)を実行します。これらのスクリプトはビルドを見つけ、同じコマンドを実行します。バイナリがデフォルトのビルド場所にない場合は、COMPUTER_USE_PATHでその場所を指定してください。
拡張機能に引き続き Specified native messaging host not found. と表示される場合や、ブラウザツールが拡張機能に接続されていないと示す場合は、通常のターミナルで munim-computer-use check-native-host を実行してください。Chrome と同じ方法でホストを検索し(Windows ではレジストリビューとポリシーを、すべての環境ではマニフェストのエンコーディング、名前、種類、許可されたオリジンを確認します)、Chrome のコマンドラインでホストを起動して、失敗する手順を示します。内部からは問題がないように見える Windows 固有の原因が2つあります。MSIX パッケージアプリ(エージェントのデスクトップアプリの一部はパッケージ化されています)から実行されたインストーラーは、Chrome が読み取らない HKCU と %LOCALAPPDATA% のプライベートな仮想化コピーに書き込みます。独自の Windows アカウントを持つサンドボックスから実行されたインストーラーは、そのアカウントの HKCU に書き込みます。このチェックでは両方を検出できます。自分のターミナルから再度 install-native-host を実行してください。install-native-host は同じ検出結果を problems に報告します。
スタンドアロンサーバーのホストは com.munimtech.computer_use.desktop です。このサーバーをバンドルしている MT Code は com.munim.mtcode.desktop を登録します。拡張機能は認識しているすべてのホストに同時に接続し、それぞれの接続で応答します。そのため、MT Code とスタンドアロンサーバー(npx、Claude Code、Cursor、チェックアウト)は、それぞれ独自のタブグループで同時に Chrome を操作できます。
サンドボックス化されたエージェント(Windows)
一部のエージェントは、制限付きまたは低整合性のトークン、別の Windows アカウント、あるいは別のデスクトップなど、サンドボックス内でコマンドを実行します。その環境で起動されたサーバーでも、ウィンドウとそのタイトルは一覧表示できますが、他のアプリの UI Automation はアクセスを拒否し、エラーなしでキャプチャが黒くなります。こうした場合、サーバーがその旨を通知します。get_app_state はツリーが空である理由を説明し、screenshot と zoom はキャプチャが単色であることを示し、activate_app はウィンドウが実際に前面に表示されたかを確認します。それぞれ、検出した原因(例:「低整合性で実行されています」または「別のアカウントで実行されています」)を示します。同じ環境から再試行しても解決しません。自分のサンドボックス化されていない環境で MCP サーバーを起動するよう、エージェントを設定してください。
環境フラグ
| 変数 | 効果 |
|---|---|
COMPUTER_USE_BROWSER=0 | browser_* ツールを非表示にします |
COMPUTER_USE_AGENT_CURSOR=0 | エージェントのポインターを表示しません |
COMPUTER_USE_AGENT_CURSOR_TASK_FADE_SECS | 最後のツール呼び出し後にポインターが表示され続ける時間(デフォルトは 8 秒) |
COMPUTER_USE_ALLOW_SECURE_FIELD_INPUT=1 | パスワード欄への入力を許可します(デフォルトでは拒否) |
COMPUTER_USE_REMOTE_CONTROL=1 | リモートデスクトップモード:入力が実際のポインターを操作します |
COMPUTER_USE_PARK_WINDOWS=0 | macOS:最小化または非表示のウィンドウを操作するために、不可視ディスプレイへ移動しません |
COMPUTER_USE_POLICY=<file> | アプリとサイトのポリシー の読み込み先(デフォルトはサポートディレクトリ内の policy.json) |
リモート操作
通常、このサーバーがポインターに触れることはありません。座標を指定したクリックは特定のウィンドウに送られ、キーストロークは特定のプロセスに送信され、対象を指定できないアクションはマシンを乗っ取るのではなく拒否されます。これにより、ユーザーがコンピューターを使い続けながら、エージェントが作業できます。
別のコンピューターからこのマシンの画面を見ている人が自分で操作している場合に備えて、COMPUTER_USE_REMOTE_CONTROL=1 を設定すると、1つのプロセスについてこの仕様が反転します。この場合、click、right_click、drag、hover、scroll は実際のカーソルを動かし、type_text と press_key は、Chrome Remote Desktop や画面共有のように、フォーカスされている対象に送られます。scroll は x/y も受け付けるため、閲覧者がスクロールした位置でホイールを操作できます。また、エージェントカーソルのオーバーレイは非表示になり、ポインターは1つだけになります。
エージェントと閲覧者の両方を実行するホストでは、それぞれ別のプロセスとして動作します。そのため、閲覧者に対してこの機能を有効にしても、エージェントがユーザーに代わってポインターを奪うことはありません。
アプリへの組み込み
アプリはこのバイナリを独自のバンドルに含め、独自の識別情報で実行できます。そのため、同じマシン上にあるスタンドアロン版と、ブラウザーブリッジ、エージェントカーソルアプリ、ネイティブメッセージングホストを共有することはありません。MT Code はまさにこの方法を採用しています。JSON オブジェクトまたは JSON ファイルへのパスとしてプロファイルを指定し、--profile <json|file>(位置は任意)または COMPUTER_USE_PROFILE を使用します。
{
"name": "example-desktop",
"envPrefix": "EXAMPLE_DESKTOP_",
"agentCursorName": "ExampleAgentCursor",
"agentCursorBundleId": "com.example.agent-cursor",
"nativeHostNames": ["com.example.desktop"],
"extensionIds": ["abcdefghijklmnopabcdefghijklmnop"],
"nativeHostDescription": "Example desktop control bridge"
}
| キー | デフォルト | 意味 |
|---|---|---|
name | なし(スタンドアロンのパス) | サポートディレクトリ、ブリッジソケット、Windows のパイプをこの名前の配下に移動します |
supportDir | ~/Library/Application Support/computer-use、$XDG_DATA_HOME/munim-computer-use、%LOCALAPPDATA%\munim-computer-use | ネイティブホストのラッパー、プロファイルのコピー。macOS ではブリッジソケットと、ビルド版のオーバーレイアプリも含みます |
bridgeSocket | <supportDir>/bridge.sock(macOS)、$XDG_RUNTIME_DIR/<name>/bridge.sock(Linux)、<name>-bridge-<user> パイプ(Windows) | MCP サーバーと Chrome リレーの接続先 |
envPrefix | なし | COMPUTER_USE_* より先に、<prefix>BROWSER、<prefix>AGENT_CURSOR、…として調整可能な値を読み込みます |
agentCursorName / agentCursorBundleId | MunimAgentCursor / com.munimtech.computer-use.agent-cursor | ポインターオーバーレイのアプリ名、実行可能ファイル名、ウィンドウクラス名、および macOS のバンドル ID |
historyDir | なし | computer-history のデフォルトの --root |
nativeHostNames / extensionIds | com.munimtech.computer_use.desktop、com.munim.mtcode.desktop / kgdolgnijopbghhomnblabjkmjhnoage | install-native-host が登録する内容と、その対象となる拡張機能。最初の名前はこの識別情報自体のもので、後続の名前は別のインストール済みアプリが所有していない場合にのみエイリアスとして書き込まれます |
supportDir、bridgeSocket、envPrefix、agentCursorName、agentCursorBundleId、historyDir はそれぞれ、COMPUTER_USE_<SNAKE_CASE>(例:COMPUTER_USE_SUPPORT_DIR)でも上書きできます。この設定はプロファイルより優先されます。munim-computer-use identity を実行すると、解決後の値が表示されます。
- ブラウザーブリッジ。 同じプロファイルで
munim-computer-use install-native-hostを実行します。現在のIDのブリッジへ Chrome を中継するラッパー(プロファイルを再生)と、Chrome/Chromium の各プロファイルディレクトリ(Windows ではレジストリ)にある各名前のホストマニフェストを書き込みます。すでに最新のものは書き換えないため、アプリの起動時に毎回呼び出せます。 - 拡張機能。 標準の拡張機能(
com.munim.mtcode.desktopおよびcom.munimtech.computer_use.desktopに接続)を使うか、独自のホスト名、タブグループのタイトル、キーを指定してバリアントをビルドします:node scripts/build-extension.mjs --out <dir> --host com.example.desktop --group-title "Example" --key <base64>。バリアントの拡張機能 ID がextensionIds用に出力されます。 - macOS の権限。 MCP サーバーは単体の実行ファイルであるため、アクセシビリティと画面収録の権限は、サーバーを起動するアプリに付与します。独自のバンドルを持つのはエージェントカーソルのオーバーレイだけです。
<agentCursorName>.app(バイナリのコピーとLSUIElementを含む Info.plist)をバイナリの隣に配置するか、初回使用時にsupportDirの下に作成してください。
エージェントへのプロンプト
確認 → 操作 → 検証の順に進めます。ID の取得には get_app_state を使い、ID を指定して return_state: true で操作すると、同じ呼び出しで結果を確認できます。ツリーで確認できない場合は screenshot を使います。ページの読み取りには browser_read を使い、パスワードはユーザーに browser_request_credentials から入力してもらいます。小さな文字には zoom、マウスオーバーで表示されるメニューには hover、読み込み後には wait を使い、操作しにくいウィジェットにはキーボードショートカットを使います。MT Code がエージェントに提供するシステムプロンプトのテキストは、CodexDeveloperInstructions.ts にあり、出発点として適しています。
コントリビューション
このサーバーはここで開発されています。MT Code はこのリポジトリのリリースを固定して同梱しているため(native/munim-computer-use.json)、変更は次回のリリースで MT Code に反映されます。Issue やプルリクエストを歓迎します。
クレジットとライセンス
MT Code 向けに Munim Technologies(Munim, Inc.)が設計、開発しました。画面上の要素の間引き、ダイアログのスコープ設定、通知を利用した安定状態の判定、OCR のフォールバック、メニューのショートカット、ウィンドウの退避は、arc-cua(MIT)に準拠しています。Copyright 2026 Munim, Inc. Apache License 2.0 の下でライセンスされています。LICENSE を参照してください。
比較資料:Codex Computer Use、そのドキュメント、Windows に関する説明、アプリの読み取り方法に関する MacStories の記事 · Cua Driver とそのツールリファレンス · OpenAI Agents API のコンピューター操作 · Anthropic のコンピューター操作デモ · CursorTouch/Windows-MCP · CursorTouch/MacOS-MCP · QwenLM/open-computer-use · zavora-ai/computer-use-mcp · mediar-ai/mcp-server-macos-use · deploymenttheory/windows-mcp-server · nuphus-mcp · computer-control-mcp · microsoft/playwright-mcp
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。