← ブログへ戻る

Guida の MCP サーバーはどう動くか

· 1 分で読めます ·
technical

Guida には Model Context Protocol (MCP) サーバーが組み込まれています。Claude Code、Cursor、その他の MCP 対応クライアントのような外部 AI がブラウザーを操作できるのは、このサーバーがあるからです。

この記事では、プロトコル、transport、ツール登録、そして AI が勝手に動かないようにする 3 層の安全モデルを説明します。

MCP とは

MCP は、AI モデルと外部ツールを接続する JSON-RPC プロトコルです。AI は「Navigate ツールを url: https://example.com で呼ぶ」のような要求を送り、サーバーが実行して結果を返します。モデルはブラウザーを直接触りません。見るのはツールの入出力契約です。

MCP には主に次の primitive があります。

Guida は tools と resources を実装し、ブラウザー自動化、データ保存、検索、キュー、ワーカー、ワークフロー台帳などを 100 以上のツールとして公開します。

Transport: ローカル HTTP

Guida はローカル HTTP transport を使います。サーバーは組み込み Kestrel として動き、既定では次の URL を使います。

http://127.0.0.1:9315/

stdio ではなく HTTP を使う理由は実用的です。Guida は CLI ツールではなく WPF デスクトップアプリです。stdin/stdout を pipe するより、ブラウザー UI、承認状態、タスク履歴、ワークスペースペインを表示したまま外部 MCP クライアントを接続できる方が自然です。

接続時には、クライアントが initialize し、サーバーが capability を返し、クライアントが tools/list と tools/call を行います。

Client -> initialize
Server -> capabilities
Client -> tools/list
Client -> tools/call

ツール登録

各ツールには名前、説明、パラメーターの JSON Schema、非同期 handler があります。代表的なツールは次のようなものです。

ツール説明
Navigateアクティブタブを URL へ移動
ClickCSS selector で要素をクリック
GetElementsDOM 要素を問い合わせて属性を抽出
Screenshot表示中 viewport を PNG として撮影
ExecuteScriptアプリの Scripting Engine で g.* スクリプトを実行
StoreGet / StorePutワークスペースストレージを読み書き
QueueEnqueue / QueueDequeue作業キューを管理
SearchQueryインデックス済みドキュメントを全文検索

多くのツールは、g.* Scripting API を支える同じサービスへ委譲します。Navigateg.nav.navigateToUrl() と同じブラウザー操作層を使います。MCP 層は JSON-RPC の要求をサービス呼び出しへ写し、結果を整形する adapter です。

ただし、スクリプトと AI ツールが完全に同じ権限を持つわけではありません。安全モデルが違います。

3 層の安全モデル

Guida では、AI は強力ですが信頼済みではありません。ブラウザーへ届く前に 3 つの層を通ります。

1. 許可済みドメイン

AI が URL へ移動するには、対象ドメインが許可済みである必要があります。Guida は 3 段階の設定を持ちます。

*.example.com のような wildcard subdomain も使えます。手動閲覧は別で、制限は MCP 由来のナビゲーションに適用されます。

2. ツール承認

許可済みドメイン上でも、監督対象のツール呼び出しには明示的な承認が必要です。Guida は正確なツール名、URL、selector、script code などのパラメーターを表示し、ユーザーが許可または拒否できます。

3. 監査ログ

MCP ツール呼び出しは監査ログへ記録されます。後から、どのツールがどのパラメーターで呼ばれ、成功したか失敗したかを確認できます。AI には自分の監査ログを削除するツールはありません。

認証情報の境界

認証情報は DPAPI で暗号化されます。MCP ツールは復号値を返しません。さらに、MCP 由来スクリプトは g.secrets.getSecret() を使えません。これにより、AI がスクリプト経由で値を読み、ストアへ保存し、後で取得する経路を防ぎます。

なぜここまで必要か

AI にブラウザーを渡すことは便利ですが、通常の自動化より危険な面もあります。見えるブラウザー、明示的な承認、許可済みドメイン、監査ログ、認証情報の分離があって初めて、AI 支援のブラウザー自動化を実務に使いやすくなります。

Guida の MCP サーバーは、この制御を保ったまま AI に作業能力を渡すための橋です。