本文へ移動
ドキュメント一覧

CLI・MCP・A2A 連携

外部 Agent に許可したローカルファイル操作を提供し、タスクを追跡します。

更新日
このページの内容

Codex や WorkBuddy などのローカル Agent は MCP または CLI + Skill で OpenFiles を利用できます。A2A ともファイル機能とタスク管理を共有します。通常は下記のインストールと setup だけで接続できます。A2A は独自クライアント向けで、/a2a は MCP URL ではありません。呼び出し元は OpenFiles と同じ端末で実行してください。

CLI をインストールする

Node.js 22 以降と、resources/agent を含む OpenFiles デスクトップ版が必要です。CLI はアプリに同梱されています。ローカルディレクトリから一度インストールします。macOS の標準配置の場合:

npm install -g "/Applications/OpenFiles.app/Contents/Resources/agent"

Windows は PowerShell を使い、例のパスを実際のインストール先の resources\agent に置き換えてください:

npm install -g "C:\path\to\OpenFiles\resources\agent"

ソースから開発する場合は、リポジトリで npm run build、続いて npm install -g ./dist/agent を実行します。以後はスクリプトのパスを覚えずに openfiles コマンドを使えます。

Codex に接続する

次のコマンドで OpenFiles の起動または接続、Codex CLI による MCP 登録、~/.agents/skills/openfiles への Skill 導入を行います。codex コマンドが必要です。完了後は Codex を再起動して設定を読み込みます。

openfiles setup codex

WorkBuddy に接続する

次のコマンドで OpenFiles を起動または接続し、~/.workbuddy/mcp.json にサーバーを追加します。他のサーバーを維持し、元の設定をバックアップします。完了後は WorkBuddy を再起動します。CLI + Skill も使う場合は、表示された skillArchive ZIP をスキルのアップロード機能から任意で取り込めます。MCP はそのまま利用できます。

openfiles setup workbuddy

初回 setup は ~/OpenFilesAgent を作成して許可し、output サブディレクトリに出力します。入力ファイルを置き、Agent に OpenFiles で CDR の全ページを SVG の ZIP に出力し、完了を待って保存先を知らせるよう依頼できます。既存のディレクトリには --workspace DIR、出力先には --output DIR を指定します。--dry-run は設定先の確認のみです。

許可とアプリのパスは ~/.openfiles/agent/setup.json に保存されます。以後の CLI、MCP、導入済み Skill はこの設定でデスクトップを起動し、現在のアドレスと token を自動取得します。クライアント設定に固定ポートや token は不要です。実行中の許可を変える場合は OpenFiles を終了して setup を再実行します。タスクを強制中断しません。

公式設定ガイド: Codex MCP · WorkBuddy MCP

接続確認とトラブル対応

doctor はアプリを起動せず接続を確認し、capabilities は設定済みのデスクトップを起動します。schema はオフラインで引数を表示します。MCP の接続表示はアダプターの起動を示すだけなので、capabilities でファイルサービスも確認してください。

openfiles doctor
openfiles capabilities
openfiles schema openfiles_convert

アプリが見つからない場合は setup codex --app /absolute/path/to/OpenFiles で実行ファイルを指定します。WorkBuddy の場合はクライアント名を置き換えます。Node.js やアプリを移動したら CLI を再インストールして setup を実行します。許可エラーは readRoots / outputRoots を確認し、結果不明の書き込みは再送前に tasks で調べます。

手動でゲートウェイを有効にする(任意)

resources/agent/openfiles.cjs を含むビルドを使用します(macOS は OpenFiles.app/Contents/Resources 内)。クライアントには Node.js 22 以降が必要です。OpenFiles 実行ファイルに --agent-read-root=/absolute/input --agent-output-root=/absolute/output を付けて起動します。両ディレクトリは事前に作成し、複数の許可にはフラグを繰り返します。既定では無効です。許可を変更するには終了して再起動します。ソース環境では次のコマンドを使えます:

npm run build-electron
npm run agent -- capabilities
npm run agent -- mcp-config
npm run agent -- skill

機能を確認して実行する

最初に capabilities を読みます。conversionFormats は変換の組合せ、metadata.formats は編集可能な項目を示します。openfiles_inspect はファイル別の変換先を返します。HTML、Markdown、SVG から PNG/PDF を生成でき、スクリプトと外部リソースは無効です。CDR は全ページの SVG を含む ZIP へ変換します。保存済み .ofw は openfiles_workflow で実行し、sourcePaths がファイル入力を置き換えます。バッチフォルダーとマスクにも許可が必要です。PDF/OFD のメタデータには metadata.edit、metadata.remove を使います。AI ノードには導入済み環境が必要で、モデルをダウンロードする場合があります。パスを置き換え、次を request.json に保存します:

JPEG と熱画像 JPEG は拡張子を共有します。contentDetectionRequired が返る場合、変換先は候補であり、実行時に内容を検証します。

{"sourcePaths":["/input/design.cdr"],"outputDir":"/output","format":"zip"}
node dist/agent/openfiles.cjs call openfiles_convert --input request.json --wait

タスクの追跡と復旧

書き込みは原本を保ち、outputDir の下に新しい openfiles-* ディレクトリを作ります。completed、failed、canceled まで確認し、result.paths と個別エラーを調べます。--wait は既定で 300 秒、--timeout で変更できます。タイムアウト後もタスクは続きます。再送前に tasks で ID を探してください。リストは --json または --input で state、contextId、pageSize、pageToken を受け取り、成果物は個別タスクで取得します。最大 100 件を保持し、同時実行は 8 件までです。再起動で履歴は消え、キャンセルしても完成済み出力は残ります。

node dist/agent/openfiles.cjs tasks
node dist/agent/openfiles.cjs task TASK_ID --wait
node dist/agent/openfiles.cjs cancel TASK_ID

MCP と Skill の設定

mcp-config は設定を表示するだけです。表示されたコマンドと引数を外部クライアントへ登録します。mcp は stdio 上の改行区切り JSON-RPC、skill は同梱ガイドを出力します。接続ファイルは ~/.openfiles/agent/connection.json です。独自の場所にはデスクトップの --agent-connection=PATH とクライアントの --connection PATH を合わせます。bearer token は公開しないでください。例の dist/agent/openfiles.cjs はインストール先のパスに置き換えられます。チャットの外向き MCP 設定はこのゲートウェイとは別です。

A2A の呼び出し

接続ファイルのループバック URL から /.well-known/agent-card.json を取得します。securityRequirements が bearer 認証を示します。/a2a に以下の JSON を POST し、Content-Type: application/json、A2A-Version: 1.0、Authorization: Bearer <token> を付けます。通信の再試行では同じメッセージ ID と内容を使います。{ "id": "TASK_ID" } で GetTask または CancelTask を呼び出します。ListTasks は contextId、status、statusTimestampAfter、ページ分割、includeArtifacts に対応します。ストリーミング、プッシュ通知、自然言語の計画機能はありません。パスはこの端末を指し、スクリーンショット編集とプラグイン導入はデスクトップで行います。

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "SendMessage",
  "params": {
    "message": {
      "messageId": "unique-request-id",
      "role": "ROLE_USER",
      "parts": [{"data": {"name": "openfiles_capabilities", "arguments": {}}}]
    },
    "configuration": {"returnImmediately": true}
  }
}
ドキュメントの問題を報告

説明が不明確、またはアプリと異なる場合はお知らせください。