Chrome拡張機能を使用して、MCPクライアントからGemini Webインターフェースを操作するためのプロジェクトです。
このプロジェクトは、外部のMCPクライアントからMCPサーバーを介してGoogle GeminiのWebインターフェースを操作するためのChrome拡張機能です。TypeScriptで開発されており、コードの品質と保守性を高めています。
データの流れは以下の通りです:
[MCPクライアント] <--(MCP)--> [MCPサーバー] <--(Native Messaging)--> [Chrome拡張機能] <--(DOM)--> [Gemini Webページ]
- Node.js と npm がインストールされていること
- Google Chrome ブラウザがインストールされていること
-
リポジトリをクローンまたはダウンロードします
git clone <リポジトリURL> cd GeminiMcpGateway -
依存パッケージをインストールします
npm install -
拡張機能をビルドします
npm run build -
Chrome拡張機能をインストールします
- Chromeで
chrome://extensionsを開きます - 「デベロッパーモード」を有効にします
- 「パッケージ化されていない拡張機能を読み込む」をクリックします
- プロジェクトのディレクトリを選択します(distディレクトリが含まれていることを確認してください)
- Chromeで
MCPサーバー側では、Native Hostマニフェストを作成し、適切な場所に配置する必要があります。マニフェストには以下の情報を含める必要があります:
- ホスト名:
com.example.gemini_mcp_gateway(background.tsで指定されている名前と一致させる必要があります) - 実行可能ファイルのパス
- 許可されるChrome拡張機能のID
詳細な設定方法については、Chrome Native Messaging のドキュメントを参照してください。
- Chrome拡張機能をインストールした状態で、Gemini Webページ(https://gemini.google.com/)にアクセスします
- MCPクライアントから、MCPサーバーを介して以下のコマンドを送信できます:
- 準備状態確認:
{"command": "areYouReady"} - テキスト入力:
{"command": "setInput", "payload": {"text": "入力するテキスト"}} - 送信ボタンクリック:
{"command": "clickSend"}
- 準備状態確認:
- Geminiからの応答は、MCPサーバーを介してMCPクライアントに返されます:
- 成功時:
{"status": "success", "event": "responseReceived", "payload": {"text": "応答テキスト"}} - エラー時:
{"status": "error", "message": "エラーメッセージ"}
- 成功時:
- コンテンツスクリプトの準備状態は以下のメッセージで通知されます:
- 準備完了時:
{"type": "content_ready"}
- 準備完了時:
拡張機能には、MCPサーバーなしで機能をテストするためのポップアップUIが組み込まれています:
- Chrome拡張機能をインストールした状態で、Gemini Webページ(https://gemini.google.com/)にアクセスします
- ブラウザのツールバーにある拡張機能アイコンをクリックして、ポップアップUIを開きます
- テキスト入力欄にGeminiに送信したいテキストを入力します
- 「送信」ボタンをクリックすると、テキストがGeminiに送信され、応答が表示されます
- 「クリア」ボタンをクリックすると、入力欄と応答欄がクリアされます
このテスト機能を使用することで、MCPサーバーの実装がなくても拡張機能が正しく動作していることを確認できます。
/project-root
|-- /dist <- ビルド後のファイルが出力されるディレクトリ
|-- /public <- 静的ファイルを格納するディレクトリ
| |-- manifest.json <- Chrome拡張機能のマニフェスト
| |-- popup.html <- テスト用ポップアップのHTML
| `-- popup.js <- テスト用ポップアップのJavaScript
|-- /src <- ソースコードを格納するディレクトリ
| |-- background.ts <- Native Messaging担当
| |-- content.ts <- DOM操作担当
| `-- types.ts <- 型定義
|-- package.json
|-- tsconfig.json
`-- webpack.config.js
npm run build: 拡張機能をビルドします
- セレクタ(SELECTORS)は、Geminiページの実際の構造に合わせて調整が必要な場合があります
- Native Messagingホスト名(HOST_NAME)は、MCPサーバー側の設定と一致させる必要があります
- Content Security Policy (CSP)の設定は、Chrome拡張機能のセキュリティ要件に準拠しています('unsafe-eval'は使用していません)
- Service Workerは、ESモジュールとして動作するように設定されています
- ビルド時にはdistディレクトリが自動的にクリアされます。これにより、古いファイルが残ることによる問題を防ぎます