AI Process Manager (AIPM) について
AI Process Manager (AIPM) の MCP サーバーは、プロセス、ウィンドウ、UI Automation ツリーなどの Windows の状態を構造化して、Claude Desktop や Cursor などのクライアントに提供します。ユーザーの有効化が必要な UI 操作も備え、アプリごとの許可がない操作は既定で拒否します。
主な機能
- 01プロセス、ウィンドウ、システム状態の確認
- 02ウィンドウテキストと UI ツリーの読み取り
- 03プロセスやファイルの状態を待機
- 04UI 要素の検索と操作
- 05アプリ単位で UI 操作を許可
活用シーン
- 01タスクが実行中か確認
- 02アプリのウィンドウからコンソール出力を読む
- 03エクスポートファイルの安定を待つ
- 04UI Automation でデスクトップアプリを操作
MCP 対応
ローカルの AIPM HTTP API を、状態確認や UI 操作用の MCP クライアント向けツールとして公開します。読み取りツールは既定で利用でき、UI 操作には Agent actions の有効化と対象アプリの許可が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
20掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
AI Process Manager — MCP サーバー
AI エージェント向けの構造化された Windows の状態情報。スクリーンショットは不要です。
この MCP サーバーは、AI Process Manager のローカル HTTP API を、Claude Desktop、Cursor、およびあらゆる MCP クライアント向けのツールとして公開します。ピクセルをキャプチャする代わりに(1080p のスクリーンショット 1 枚あたり約 2,765 トークン)、エージェントはプロセス、ウィンドウ、コンソール、UI Automation ツリーから JSON とテキスト(クエリあたり約 15〜150 トークン)を読み取ります。
必要条件: Windows で AIProcessManager.exe が実行されていること(システムトレイ)。Node.js ≥ 14。npm 依存関係はありません。
このプロジェクトの目的
コンピューター操作エージェントは、スクリーンショットを通じてデスクトップを「見る」ことがよくあります。これは遅く(3〜5 秒)、トークンを消費し、ピクセルデータをモデルに送信します。AIPM はループバックで構造化された質問に回答します。
| 質問 | スクリーンショット | AIPM ツール |
|---|---|---|
| レンダリングはまだ実行中ですか? | 約 2,765 トークン | check_process → 約 15 トークン |
| コンソールの出力は何ですか? | スクリーンショット+OCR | read_window → 約 30 トークン |
| エクスポートは完了しましたか? | ポーリング+スクリーンショット | wait_for(file_stable=...) → 1 回の呼び出し |
スクリーンショットと比較して、アクションあたりの認識トークンを約 94〜98%削減できます(クエリあたり 2,765 → 約 60 トークン。この 2 つの入力は GET /analytics/summary の assumptions ブロックであり、ベンチマークではありません)。
クイックスタート
1. バックエンドを起動する
システムトレイで AIProcessManager.exe が実行されていることを確認してください。
2. MCP クライアントを設定する
Claude Desktop — claude_desktop_config.json:
{
"mcpServers": {
"ai-process-manager": {
"command": "node",
"args": ["C:\\path\\to\\ai-process-manager\\mcp\\server.js"]
}
}
}
Cursor およびその他の stdio MCP クライアントでも、同じ command / args の組み合わせを使用します。任意の環境変数
AIPM_API で API のベース URL を上書きできます(デフォルト:%LOCALAPPDATA%\AIProcessManager\endpoint.txt から読み取り、
それ以外の場合は http://127.0.0.1:9147)。
任意の環境変数 AIPM_AGENT_NAME は、API のアクティビティログでこのエージェントを識別する名前を設定します(デフォルトは mcp)。
すべてのリクエストは User-Agent: AIPM-Agent/<name> (<client>) mcp:<client> とともに送信され、API は <name> を
/audit、/activity、/notes の agent フィールドに抽出します。複数のエージェントが 1 つの MCP クライアントを共有する場合は、名前を設定すると、
GET /activity でそれぞれを識別できます。
"env": { "AIPM_AGENT_NAME": "revisor" }
名前は [a-z0-9._-] に正規化され、最大 40 文字です。これは呼び出し元が自分自身について宣言する識別情報であり、
可観測性と連携のためだけに使われます。認可には決して使用されません。 ここには誰でも任意の名前を書き込めます。
この製品では、その名前に基づいて権限を付与したり拒否したりすることはありません。唯一の制限は、
アプリごとに適用されるデフォルト拒否のアクション許可リストです。
3. MCP クライアントを再起動する
ツールが ai-process-manager として表示されます。まず health_check を呼び出してください。
ツール(28)
15 個の認識ツールと 2 つの UI プローブには readOnlyHint: true が付いているため、クライアントが自動承認できます。7 つの UI アクションには readOnlyHint: false が付いており、ユーザーがオプトインしない限り実行を拒否します(プライバシーを参照)。
| ツール | タイトル | エンドポイント |
|---|---|---|
aipm_ja_faz | AIPM がすでに対応しているか確認します。コードを書いたりシェルを使ったりする前に尋ねてください | GET /?q= |
health_check | ステータス、使用するアクションファミリー、実入力の有効状態 | GET / + GET /forgepilot/status |
check_process | プロセスが実行中か確認します | GET /processes |
list_processes | 実行中のプロセスを一覧表示します | GET /processes |
list_windows | 開いているウィンドウを一覧表示します | GET /windows |
get_system_status | システムのステータス(CPU、RAM、GPU、ディスク)を取得します | GET /system |
get_taskbar | タスクバーのアプリを表示します | GET /taskbar |
read_window | ウィンドウ内のテキストを読み取ります | GET /window/text |
get_ui_tree | ウィンドウの UI 要素ツリーを取得します | GET /ui/tree |
wait_for | 条件が満たされるまで待機します | GET /wait |
get_recent_events | 最近の PC イベントを一覧表示します | GET /events/history |
check_file | ファイルまたはフォルダーを確認します | GET /filesystem/watch |
get_app_knowledge | アプリについて学習済みのレシピを取得します | GET /knowledge/app |
get_economy_stats | トークンエコノミーの統計情報を取得します | GET /analytics/summary |
get_audit_log | API 監査ログを表示します | GET /audit |
read_notes | ローカルのエージェント掲示板を読み取ります | GET /notes |
UI ツール — まず状態を確認し、その後にオプトインして操作します:
| ツール | タイトル | エンドポイント |
|---|---|---|
ui_find | 操作可能な UI 要素を検索します | GET /ui/find |
ui_find_at | 画面上のピクセル位置にある UI 要素を検索します | POST /ui/find_at |
ui_act | 意図に基づいて操作します(UIA と実入力のどちらを使うか判断します) | POST /ui/act |
ui_invoke | UI 要素をクリックします | POST /ui/invoke |
ui_set_value | UI フィールドの値を設定します | POST /ui/set_value |
ui_send_keys | 合成キーストロークでテキストを入力します(最後の手段) | POST /ui/send_keys |
ui_drag | 要素を別の要素にドラッグします | POST /ui/drag |
ui_select_option | ドロップダウンのオプションを選択します | POST /ui/select_option |
focus_window | ウィンドウを前面に表示します | POST /ui/focus |
ローカルテレメトリー(メタデータのみをローカルストアに書き込みます):
| ツール | タイトル | エンドポイント |
|---|---|---|
report_task_outcome | タスクの結果を報告します(テレメトリー) | POST /telemetry/task |
report_action_outcome | UI アクションの結果を報告します(テレメトリー) | POST /telemetry/action |
ローカルエージェント連携(このマシンにのみ保存されます):
| ツール | タイトル | エンドポイント |
|---|---|---|
post_note | エージェント掲示板にメモを投稿します | POST /notes |
UI ツリーを深く読み取る(Chromium/Electron)
get_ui_tree のデフォルトは depth=4 で、ネイティブ Win32 アプリには十分です。Chromium/Electron アプリ(VS Code、Slack、Discord、Claude Desktop、Teams)では、コンテンツが約 10 階層の Pane/Group ラッパーの下に隠れているため、深さが浅いと空のペインしか返されません。これらのアプリでは depth=15-20(最大 30)を指定し、max_nodes(デフォルト 200、最大 1000)でコストを抑えてください。コストを抑えるのは depth ではなく max_nodes です。 応答で truncated: true となっている場合、ツリーは途中で切り詰められています。ウィンドウについて何かを結論づける前に、より大きな depth/max_nodes を指定して再試行してください。
操作:2 つのファミリーがあり、間違ったほうを選ぶのがよくある失敗です
エージェントが標準で間違えるのはここです。これまでに使った他のコンピューター操作ツールはどれも、ウィンドウを手前に表示する必要があるからです。ここでは、ほとんどの場合その必要はありません。
ui_act は以下の 2 つのファミリーから適切なものを選びます。クリック/入力/選択には、まずこれを試してください。
UI Automation を試し、UIA がその要素でパターンが見つからないと報告した場合に限り、自動で実入力に切り替えます(intent=escolher の場合は除きます。物理クリックでは内部の選択肢ではなく要素自体がトリガーされるためです)。どちらが実行されたかは mecanismo(uia/fisico)で返します。また、曖昧なターゲットに対しては 409 alvo_ambiguo を返し、以下のツールのように最初に一致した名前を黙って選ぶのではなく、候補とその rect を返します。それぞれのファミリーの意味と、どちらかを直接呼び出すべき場合について、以下をお読みください。
| ファミリー | ツール | ウィンドウを前面に表示する必要がありますか? |
|---|---|---|
| 要素による操作(UI Automation) | ui_invoke、ui_set_value、ui_select_option | いいえ。 他のウィンドウの背後にあり、フォーカスされていない状態でも動作します。ユーザーは別の場所で入力を続けられます。 |
| 合成入力による操作 | ui_send_keys、ui_drag | はい。 そうでない場合は janela_nao_esta_em_primeiro_plano を返して拒否します。 |
理由:最初のファミリーはアプリのアクセシビリティプロバイダーと通信し、Z オーダーを無視します。2 つ目は実際のキーボード/マウスイベントを送信し、Windows は渡された hwnd ではなく、前面にあるウィンドウにそれらを届けます。
ファミリーを直接呼び出す場合は、毎回まず要素による操作を試してください。 「念のため」に focus_window を先に呼び出さないでください。ユーザーの前面ウィンドウを奪うだけで、何のメリットもありません。ui_send_keys を使うのは、そのフィールドで ui_set_value が実際に valor_nao_aplicado を返した後(制御されたフレームワーク内の contenteditable の場合)に限ってください。また、ui_drag を使うのは、本当にドラッグでしか動かせないものに限ります。ドラッグに対応する UIA パターンはありません。
focus_window 自体が foco_nao_aplicado で失敗した場合は、2 つ目のファミリーを繰り返し試さないでください。前面に表示されていなければ成功しません。health_check は、実入力系統(ForgePilot)を executor/forgepilot の下に報告し、インストール済みでも停止中の場合は警告します。
プライバシー
あなたに関するデータがマシンの外に送られることはありません。リモートテレメトリーもクラウドサービスもアカウントもありません。 外部へのリクエストは 1 種類だけで、あなたに関する情報は何も含まれません。また、無効にできます。
更新チェック。 1 日に 1 回、エンジンは GitHub の公開 Releases API に、新しいバージョンがあるかどうかを問い合わせます。リクエストの送信先は当社ではなく GitHub です。識別情報もテレメトリーも、あなたのマシンやアプリに関する情報も含まれません。トレイメニューから無効にできます。無効にすると、外部へのリクエストは一切行われません。 AIPM のその他すべてはローカルにとどまります。
ネットワーク
- バックエンドは ループバックインターフェースのみ(
127.0.0.1:9147)で待ち受けます。0.0.0.0では待ち受けないため、LAN 上の何者もアクセスできません。 - すべてのリクエストには、
localhostまたは127.0.0.1のHostヘッダーが必要です。それ以外は403 forbidden_hostで拒否されます(DNS リバインディング対策です。アクセスした Web ページから API を操作されることはありません)。 - この MCP サーバーが行う外部への呼び出しは、ローカルアドレスへの HTTP 通信の 1 種類だけです。
User-Agentにmcp:<your MCP client name>を設定するため、ローカル監査ログで、どのエージェントがリクエストしたかを確認できます。
デフォルトでは読み取り専用
- 15 個の認識ツールと
ui_findは、読み取り専用です。ui_find_atも意味的には読み取り専用ですが、ピクセルプローブでは保護されたPOSTを使用します。17 個すべてにreadOnlyHint: trueが設定されています。 - 7 個の UI 操作ツール(
ui_act、ui_invoke、ui_set_value、ui_send_keys、ui_drag、ui_select_option、focus_window)は、ユーザーがトレイメニューで Agent actions を有効にし、対象プロセスをアプリごとの許可リストに追加する 両方の操作 を行うまで、403 action_deniedを返します。どちらもデフォルトでは有効になっておらず、設定はアプリごとです。Notepad を許可しても、ブラウザーは許可されません。
テレメトリーに保存される内容 — メタデータのみ
記録される内容:アプリ/プロセス名、要素のロール(Button、Edit…)、エージェントが指定した要素名、アクション(invoke/set_value/focus)、成功または失敗、所要時間(ミリ秒)、失敗理由。「メタデータのみ」が単なる約束ではなく、検証可能であることを示す機械的な不変条件が2つあります。
- アクション記録には、アプリに表示されていた内容ではなく、エージェントが要求した内容が保存されます。 ロールと名前は、エージェント自身の
role=/name_contains=引数から取得されます。画面上で実際に解決された要素の名前は決して書き込まれないため、ツールが見た内容がテレメトリーになることはありません。 - 失敗理由は固定の語彙セットです(
elemento_nao_encontrado、ui_timeout、erro_uia、outro、…)。それ以外の文字列はすべてoutroとして保存されます。そのため、ファイルパスや画面上のテキストを含む可能性のある例外メッセージがディスクに保存されることはありません。
保存されないもの: 画面の内容、read_windowで読み取ったウィンドウテキスト、ui_set_valueで入力したテキスト(value=)、ファイルの内容、キー入力、スクリーンショット。受動的に学習したUIの構造(ui_shape)に含まれるのは、件数、UIAのロール名、深さ、ブール値のみです。exposes_textが示すのはテキストが存在するかどうか、named_controlsが示すのは名前のある要素がいくつあるかであり、テキストそのものではありません。
マスキング: リクエストを記録する前に、value=とapi_key=は***に置き換えられるため、get_audit_logでもディスク上のクエリログでも、入力したテキストやシークレットが明らかになることはありません。
正直にお伝えしておきたい点: 監査/クエリログにはリクエスト行が保存されるため、ほかのクエリ引数は読み取れる状態のままです。たとえば、check_file(path=D:/videos/out.mp4)はそのパスのまま記録され、check_process(title_contains=...)もその断片を保持します。これは、エージェントが何を要求したかを記録するローカルログです。マスキングされるのはvalue=とapi_key=のみです。
データの保存場所と削除方法
すべてのデータは%LOCALAPPDATA%\AIProcessManager\の下にあります。
| パス | 内容 |
|---|---|
db\*.jsonl、db\rollup.json | テレメトリー:タスク、アクション、クエリ、UIの構造、カウンター |
ledger.jsonl | 報告/実行されたアクションの改ざん検知可能なハッシュチェーンログ(メタデータのみ) |
actions.cfg | アクション層が有効かどうかと、アプリごとの許可リスト |
update.json | 更新確認の設定(オン/オフ)とキャッシュ:最終確認時刻、最新タグ、非表示にしたタグ |
log.txt、endpoint.txt | アプリのログと現在使用中のAPIアドレス |
消去するには、通知領域からアプリを終了してから、フォルダーを削除します(または、学習内容とエコノミーのカウンターをリセットするにはdb\のみを削除します。actions.cfgを削除すると、アクション層が再びオフになります)。ほかの場所には何も書き込まれません。また、/auditリングバッファーはメモリ上にのみ存在し、アプリを終了すると消去されます。保存されている内容は、get_audit_log、get_economy_stats、GET /analytics/actionsで確認できます。
トラブルシューティング
| 症状 | 意味 | 対処方法 |
|---|---|---|
connection_refused | AIProcessManager.exeが実行されていません | スタートメニューから起動します(通知領域に緑色のアイコンが表示されます) |
action_denied | アクション層がオフか、アプリが許可リストにありません | 通知領域のメニューからAgent actionsを選び、そのアプリを許可します |
api_paused | ユーザーが通知領域からAPIを一時停止しました | 通知領域のメニューからResume APIを選びます |
空のPaneツリー | Chromium/Electronアプリに対してdepthが低すぎます | depth=17を指定してget_ui_treeを再試行します |
すべてのエラーペイロードには、同じガイダンスを示すnext_actionフィールドが含まれています。
対応状況(実測に基づく正直な情報)
| スタック | 読み取り状況 | 意味的な操作 |
|---|---|---|
| Win32 / WinForms / WPF / UWP | ✅ 完全対応 | ✅ |
| Delphi VCL(レガシーな業務アプリ) | ✅ 完全対応 | ✅ |
| コンソール(cmd、PowerShell、Windows Terminal) | ✅ テキスト対応 | — |
| Chromium / Electron(Chrome、Cursor、Claude Desktop) | ✅ アクセシビリティツリーを有効化した後に対応 | ✅ |
| レガシーな MSAA ブリッジ上の Electron(例:Discord) | ⚠️ 有効化はできますが、ノードごとに約 120 ms かかるため、現時点では遅すぎます | ⚠️ |
| Java Swing | ⚠️ Java Access Bridge が必要です | ロードマップ |
まだ対応していない機能も、意図的に公開しています。利用を前提にする前に、対応範囲の限界を把握してください。
動作に関する注意: Chromium/Electron ウィンドウを初めて読み取るとき、アクセシビリティツリーを有効にするよう要求します。これはスクリーンリーダーが行う標準的な要求と同じです。その後、アプリはアクセシビリティデータの計算を続けます(そのアプリで CPU を消費します)。自動的にスリープ状態に戻ることはありません。ネイティブ Win32 アプリには影響しません。
無料版と有料版
- 無料・オープン(MIT): この MCP サーバーです。
- 無料(クローズドソース): バックエンドの
AIProcessManager.exe(センサー)です。費用をかけずに実行できます。 - 有料: AIPM Pilot は、AIPM の構造化された認識機能を使ってアプリをエンドツーエンドで操作する自律型コンピューター操作エージェントです。
プロジェクトを支援する
AIPM によってトークンを節約できた場合は、スポンサーになることをご検討ください。
ライセンス
MCP サーバーには MIT ライセンスが適用されます。バックエンドと AIPM Pilot は別製品です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。