このドキュメントは、AI エージェントが実マシンのマウス・キーボード・画面を操作できるという 本プロジェクトの性質上のリスクと、それに対する安全設計をまとめる。
- MCP クライアント(AIエージェント)は、意図しない/誤った操作要求を送る可能性がある。
- 本ツールはローカルユーザーの権限で動作し、ユーザーが普段操作できる範囲をそのまま操作できてしまう。
- したがって「AIが間違えても取り返しがつく/気づける/止められる」ことを最優先の設計目標とする。
- 管理者権限を自ら要求しない。 マニフェストは
asInvokerを基本とし、昇格が必要な操作は 「非対応」として扱う(昇格ダイアログの自動操作は行わない)。 - UAC ダイアログ・Windows ログイン画面・セキュアデスクトップは操作対象外。 これらのウィンドウ/
デスクトップを検出した場合、
ui_*/mouse_*/keyboard_*系ツールは安全のため拒否する。 - セキュアデスクトップの回避策(例: 別セッションからの注入等)は実装しない。
| 操作カテゴリ | 既定の扱い |
|---|---|
| マウス移動、画面取得、ウィンドウ一覧取得 | 許可 |
| 左クリック、キー入力、スクロール | 設定で許可/拒否を切り替え可能(既定は許可、ただし承認対象操作は別途判定) |
| ファイル削除、送信、購入、支払い、公開、上書き保存に該当すると判定される操作 | 承認対象(requireConfirmation 相当の応答を返し、実行前に人間の承認を要求) |
| パスワード入力欄への自動入力 | 既定で拒否 |
| UAC・セキュアデスクトップに対する操作 | 拒否 |
| WindowsComputerUseMCP 自身(Server/ControlPanel)の停止操作 | 禁止しない(緊急停止性を優先) |
「承認対象」の判定は、ウィンドウタイトル・ボタン名・UI Automation の Name/AutomationId に含まれる
キーワード(例: "削除", "Delete", "送信", "Send", "購入", "Buy", "支払い", "Pay", "公開", "Publish",
"上書き保存", "Save" 等、日本語/英語の代表的な語彙)と、設定ファイルで拡張可能なパターンリストによって行う。
キーワード方式は完全ではないため、Safety 層のテストを重点的に作成し、誤検知・見逃しの傾向を継続的に把握する。
- ホットキー: Ctrl + Shift + F12(初期案。設定ファイルで変更可能にする)。
- 緊急停止が有効な間、入力操作系 MCP ツール(
mouse_*,keyboard_*,ui_invoke,window_focusの実行操作部分等) はすべて拒否し、読み取り系ツール(window_list,screen_captureなど)は継続して利用できるようにする (状況確認と解除操作を妨げないため)。 - 緊急停止状態は Safety 層でプロセス内状態として保持する。ControlPanel(WPF)は名前付きパイプ
(
WindowsComputerUseMCP.ControlPanel.v1) 経由で状態の問い合わせ・有効化・解除を行える (フェーズ7で実装済み。ControlPanelIpcServer/ServerIpcClient参照)。
keyboard_type_textはmaskInLogsを既定で有効とし、監査ログには入力文字列そのものではなく、 文字数とハッシュ値(例: SHA-256)のみを記録できるようにする。- パスワード入力欄と判定された場合(UI Automation の
IsPasswordプロパティ、またはPasswordEdit等の コントロールタイプ判定)、keyboard_type_textは既定で拒否する。 system_get_capabilitiesは OS バージョンや機能可否のみを返し、ユーザー名の詳細、環境変数、 トークン等の機密情報は返さない。
- 保存先:
%LOCALAPPDATA%\WindowsComputerUseMCP\Logs - 形式: JSON Lines(1操作1行)。フィールドは
operationId,timestamp,toolName,targetWindow,targetProcess,sanitizedArguments,result,durationMs,safetyDecision。 - 入力文字列の全文は既定で保存しない。スクリーンショットは既定で永続保存しない
(
saveToFile指定時のみ、専用の一時ディレクトリに保存し、保存期間設定に従って削除可能な構造にする)。 - 保存期間(リテンション日数)を設定可能にし、ログローテーション(日次ファイル分割等)を実装可能な構造で設計する。
- MCP ツールの応答にスタックトレースをそのまま含めない。詳細は診断ログ(標準エラー出力/ファイル)にのみ記録する。
- 例外を握りつぶさず、
errorCodeとして分類し、messageには人間が読める要約のみを含める。
appsettings.json / ユーザー設定(%LOCALAPPDATA%\WindowsComputerUseMCP)で以下を設定可能にする。
- 許可するアプリケーション/拒否するアプリケーション(プロセス名・ウィンドウタイトルパターン)
- マウスクリックの許可、キーボード入力の許可
- 危険操作時の確認要否
- スクリーンショット保存の可否・保存期間
- 監査ログ保存の可否・保存期間
- 最大連続操作回数、操作間隔(連打・暴走防止)
- 緊急停止ホットキー
- UI Automation ツリーの最大要素数・最大深度
- キーワードベースの危険操作検出は自然言語の多様性を完全にはカバーできない。将来的には UI要素の役割(Role)やコンテキストも加味した判定への拡張を検討する。
- スクリーンキャプチャや UI Automation ツリーには、意図せず機密情報(他アプリの表示内容等)が 含まれる可能性があるため、利用者側にも取り扱い注意を促すドキュメントを用意する。