mcpField
M
MCP Gemini Server

MCP Gemini Server

ローカル
github.com/bsmi021AI・エージェント3674 週間前に更新

MCP Gemini Server について

MCP Gemini Server は @google/genai SDK(v0.10.0)をラップし、Gemini の機能を標準的な MCP ツールとして公開する MCP サーバーです。Cline や Claude などの LLM クライアントから、バックエンドの LLM として Gemini を利用したいユーザー向けです。ファイルの直接アップロードは対象外で、公開 URL による画像・動画分析に重点を置いています。

主な機能

  1. 01ストリーミングとシステム指示に対応した Gemini テキスト生成
  2. 02関数呼び出しと状態を保持するチャットツール
  3. 03公開 URL からの画像および YouTube 動画の分析
  4. 04キャッシュコンテンツの作成・取得・更新・削除
  5. 05Gemini 2.0 Flash によるテキストからの画像生成

活用シーン

  1. 01Cline や Claude に Gemini をバックエンドとして提供
  2. 02公開 Web 画像や YouTube の講義動画の分析
  3. 03キャッシュされたプロンプトの再利用による送信量の削減

MCP 対応

MCP サーバーとして、gemini_generateContent や gemini_startChat などのツールを MCP クライアントに公開します。また、外部 MCP サーバーに接続してそのツールを呼び出す MCP クライアント機能も含みます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"gemini-server": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
起動コマンドnpx -y @smithery/cli

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@smithery/cli

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MseeP.ai Security Assessment Badge

MCP Gemini Server

目次

概要

このプロジェクトは、@google/genai SDK(v0.10.0)をラップする専用の MCP(Model Context Protocol)サーバーを提供します。Google の Gemini モデルの機能を標準的な MCP ツールとして公開することで、ほかの LLM(Claude など)や MCP 対応システムが、Gemini の機能をバックエンドの作業エンジンとして活用できるようにします。

このサーバーは、MCP 標準を通じて管理される一貫したツールベースのインターフェースを提供し、Gemini モデルとの連携を簡素化することを目的としています。gemini-1.5-pro-latest、gemini-1.5-flash、gemini-2.5-pro モデルを含む最新の Gemini モデルに対応しています。

重要な注意事項: このサーバーはファイルの直接アップロードには対応していません。代わりに、画像や動画のURLベースのマルチメディア分析に重点を置いています。テキストベースのコンテンツ処理には、標準のコンテンツ生成ツールを使用してください。

ファイルのアップロードとURLベースの分析

❌ 未対応:ファイルの直接アップロード

この MCP Gemini Server は、次のファイルアップロード操作に対応していません。

  • ローカルファイルのアップロード:ローカルのファイルシステムから Gemini にファイルをアップロードできません
  • Base64 エンコードされたファイル:Base64 エンコードされた画像や動画のデータを処理できません
  • バイナリファイルデータ:生のファイルバイト列やバイナリデータを扱えません
  • ファイル参照:アップロードしたコンテンツのファイル ID や参照を処理できません
  • 音声ファイルのアップロード:音声ファイルを直接アップロードして文字起こしできません

ファイルのアップロードに対応していない理由:

  • URL ベースの処理に重点を置いたシンプルなアーキテクチャ
  • ファイル処理の複雑さを避けることによるセキュリティの強化
  • ストレージと帯域幅の要件の軽減
  • コードベースの保守の簡素化
✅ 対応:URL ベースのマルチメディア分析

このサーバーは、一般公開されている URL からマルチメディアコンテンツを分析する機能に全面的に対応しています。

URL からの画像分析:

  • 公開画像 URL:一般公開されている任意のウェブサーバーでホストされている画像を分析できます
  • 対応形式:直接 URL にアクセスすることで、PNG、JPEG、WebP、HEIC、HEIF に対応します
  • 複数画像:1 回のリクエストで複数の画像 URL を処理できます
  • セキュリティ検証:URL の検証とセキュリティ審査を自動的に行います

YouTube 動画の分析:

  • 公開 YouTube 動画:公開されているあらゆる YouTube 動画コンテンツを詳細に分析できます
  • 動画理解:洞察、要約、詳細な分析を抽出できます
  • 教育コンテンツ:チュートリアル、講義、教育動画の分析に最適です
  • 複数動画:複数の YouTube URL を処理できます(Gemini 2.5 以降ではリクエストごとに最大 10 件)

ウェブコンテンツの処理:

  • HTML コンテンツ:ウェブページを分析し、情報を抽出できます
  • 混在メディア:テキストコンテンツと埋め込み画像・動画を組み合わせられます
  • コンテキスト分析:包括的な分析のため、プロンプトとともに URL を処理できます
ローカルコンテンツの代替手段

分析するローカルファイルがある場合:

  1. Web サーバーでホストする:ファイルを公開 Web サーバーにアップロードし、URL を使用します
  2. クラウドストレージを使用する:Google Drive、Dropbox、AWS S3 などのサービスに、公開アクセスを許可してアップロードします
  3. GitHub を使用する:GitHub リポジトリで画像をホストし、raw ファイルの URL を使用します
  4. 画像ホスティングサービスを使用する:Imgur、ImageBB などのプラットフォームにアップロードします

音声コンテンツの場合:

  • 外部の文字起こしサービス(Whisper API、Google Speech-to-Text など)を使用します
  • 音声を YouTube にアップロードし、生成された動画 URL を分析します
  • 音声処理に特化した他の MCP サーバーを使用します

機能

  • 基本的な生成: 標準(gemini_generateContent)およびストリーミング(gemini_generateContentStream)によるテキスト生成に対応し、システム指示とキャッシュ済みコンテンツをサポートします。
  • 関数呼び出し: Gemini モデルがクライアント定義の関数(gemini_functionCall)の実行を要求できるようにします。
  • ステートフルチャット: システム指示、ツール、キャッシュ済みコンテンツをサポートしながら、複数ターンにわたる会話コンテキストを管理します(gemini_startChat、gemini_sendMessage、gemini_sendFunctionResult)。
  • URL ベースのマルチメディア分析: ファイルをアップロードせずに、公開 URL 上の画像や YouTube 動画を分析します。ファイルの直接アップロードには対応していません。
  • キャッシュ: ツールおよびツール設定に対応したキャッシュ済みコンテンツの作成、一覧表示、取得、更新、削除により、プロンプトを最適化します。
  • 画像生成: Gemini 2.0 Flash Experimental(gemini_generateImage)を使用してテキストプロンプトから画像を生成し、解像度、画像数、ネガティブプロンプトを指定できます。また、高品質な専用画像生成に対応した最新の Imagen 3.1 モデルもサポートし、高度なスタイル制御が可能です。Gemini 2.5 モデル(Flash および Pro)は、現在画像生成に対応していません。
  • URL コンテキスト処理: 高度なセキュリティ、キャッシュ、コンテンツ処理機能を備え、URL からWebコンテンツを直接取得して分析します。
    • gemini_generateContent:URL コンテキストに対応するよう強化され、Web コンテンツをプロンプトに含められます
    • gemini_generateContentStream:URL コンテキストを統合したストリーミング生成
    • gemini_url_analysis:複数の分析タイプに対応した、高度な URL コンテンツ分析専用のツール
  • MCP クライアント: 外部 MCP サーバーに接続してやり取りできます。
    • mcpConnectToServer:外部 MCP サーバーへの接続を確立します。
    • mcpListServerTools:接続済みの MCP サーバーで利用可能なツールを一覧表示します。
    • mcpCallServerTool:ファイル出力のオプションを指定して、接続済みの MCP サーバー上の関数を呼び出します。
    • mcpDisconnectFromServer:外部 MCP サーバーとの接続を切断します。
    • writeToFile:許可されたディレクトリ内のファイルにコンテンツを直接書き込みます。

前提条件

  • Node.js(v18 以降)
  • Google AI Studio の API キー(https://aistudio.google.com/app/apikey)。
    • 重要: Caching API は Google AI Studio API キーとのみ互換性があり、Vertex AI の認証情報では サポートされていません。このサーバーは現在、Vertex AI 認証に対応していません。

インストールとセットアップ

手動でのインストール
  1. プロジェクトのクローン/配置: mcp-gemini-server プロジェクトのディレクトリに、システムからアクセスできることを確認します。

  2. 依存関係のインストール: ターミナルでプロジェクトディレクトリに移動し、次のコマンドを実行します。

    npm install
    
  3. プロジェクトのビルド: TypeScript のソースコードをコンパイルします。

    npm run build
    

    このコマンドは TypeScript コンパイラー(tsc)を使用し、tsconfig.json の outDir で指定された ./dist ディレクトリに JavaScript ファイルを出力します。メインのサーバーエントリーポイントは dist/server.js です。

  4. 接続トークンの生成: MCP クライアントとサーバー間の安全な通信に使用する、強力で一意な接続トークンを作成します。これは、サーバー側とクライアント側の両方で生成して設定する共有シークレットです。 次のいずれかの方法でセキュアなトークンを生成します:

    オプション A:Node.js の crypto を使用(推奨)

    node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
    

    オプション B:OpenSSL を使用

    openssl rand -hex 32
    

    オプション C:PowerShell を使用(Windows)

    [System.Convert]::ToBase64String([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32))
    

    オプション D:オンラインジェネレーター(注意して使用) 1Password や Bitwarden など、信頼できるパスワードジェネレーターを使用して、64 文字のランダムな文字列を生成します。

    セキュリティに関する重要な注意事項:

    • トークンは 32 文字以上の長さとし、ランダムな文字を含めてください
    • このトークンを共有したり、バージョン管理にコミットしたりしないでください
    • サーバーインスタンスごとに異なるトークンを使用してください
    • トークンは安全に保管してください(環境変数、シークレットマネージャーなど)
    • このトークンを保存してください。サーバーとクライアントの両方の設定で、まったく同じ値を使用する必要があります
  5. MCP クライアントを設定: MCP クライアントの設定ファイル(Cline/VSCode の場合は cline_mcp_settings.json、Claude Desktop App の場合は claude_desktop_config.json など)にサーバー設定を追加します。/path/to/mcp-gemini-server をシステム上の実際の絶対パスに、YOUR_API_KEY を Google AI Studio キーに、YOUR_GENERATED_CONNECTION_TOKEN を手順 4 で生成したトークンに置き換えてください。

    {
      "mcpServers": {
        "gemini-server": { // または任意の名前
          "command": "node",
          "args": ["/path/to/mcp-gemini-server/dist/server.js"], // コンパイル済みサーバーのエントリーポイントへの絶対パス
          "env": {
            "GOOGLE_GEMINI_API_KEY": "YOUR_API_KEY",
            "MCP_SERVER_HOST": "localhost",       // 必須:サーバーホスト
            "MCP_SERVER_PORT": "8080",            // 必須:サーバーポート  
            "MCP_CONNECTION_TOKEN": "YOUR_GENERATED_CONNECTION_TOKEN", // 必須:手順 4 のトークンを使用
            "GOOGLE_GEMINI_MODEL": "gemini-1.5-flash", // 任意:デフォルトモデルを設定
            // 任意のセキュリティ設定は削除されました — ファイル操作はサポートされなくなりました
            "ALLOWED_OUTPUT_PATHS": "/var/opt/mcp-gemini-server/outputs,/tmp/mcp-gemini-outputs" // 任意:mcpCallServerTool と writeToFileTool で許可する出力ディレクトリのカンマ区切りリスト
          },
          "disabled": false,
          "autoApprove": []
        }
        // ... その他のサーバー
      }
    }
    

    重要な注意事項:

    • args のパスには、コンパイル済みの dist/server.js ファイルへの絶対パスを指定する必要があります
    • NODE_ENV が test に設定されていない限り、MCP_SERVER_HOST、MCP_SERVER_PORT、MCP_CONNECTION_TOKEN は必須です
    • MCP_CONNECTION_TOKEN には、手順 4 で生成したものとまったく同じ値を指定する必要があります
    • パスが存在し、npm run build を使用してサーバーがビルドされていることを確認してください
  6. MCP クライアントを再起動: 新しいサーバー設定を読み込むため、MCP クライアントアプリケーション(Cline 拡張機能を使用する VS Code、Claude Desktop App など)を再起動します。MCP クライアントがサーバープロセスの起動と停止を管理します。

設定

このサーバーは、MCP 設定の env オブジェクトを介して渡される環境変数を使用して設定します。

  • GOOGLE_GEMINI_API_KEY(必須):Google AI Studio から取得した API キーです。
  • GOOGLE_GEMINI_MODEL(任意):デフォルトの Gemini モデル名(例:gemini-1.5-flash、gemini-1.0-pro)を指定します。設定すると、モデル名を必要とするツール(gemini_generateContent、gemini_startChat など)は、ツール呼び出しで modelName パラメーターが省略された場合にこのデフォルト値を使用します。主に 1 つのモデルを使用する場合、クライアントからの呼び出しが簡素化されます。この環境変数が設定されていない場合、これらのツールでは modelName パラメーターが必須になります。利用可能なモデル名については、Google AI のドキュメントをご覧ください。
  • ALLOWED_OUTPUT_PATHS(任意):mcpCallServerTool(outputToFile パラメーターを使用する場合)と writeToFileTool によるファイル書き込みを許可するディレクトリの絶対パスを、カンマ区切りで指定したリストです。設定されていない場合、これらのツールでのファイル出力は無効になります。これは、任意のファイルへの書き込みを防ぐためのセキュリティ対策です。

利用可能なツール

このサーバーは、以下の MCP ツールを提供します。パラメータースキーマは、検証と説明に Zod を使用して定義されています。

検証とエラー処理: すべてのパラメーターは、MCP ツール層とサービス層の両方で Zod スキーマを使用して検証されます。これにより、一貫した検証、詳細なエラーメッセージ、型安全性が実現します。また、サーバーは包括的なエラーマッピングを実装し、明確で実行可能なエラーメッセージを提供します。

再試行ロジック: API リクエストでは、一時的なエラー(ネットワークの問題、レート制限、タイムアウト)に対して指数バックオフによる再試行が自動的に行われ、不安定な接続での信頼性が向上します。再試行メカニズムには、最大試行回数、遅延時間、サンダリングハード効果を防ぐためのジッターを設定するパラメーターが含まれます。

任意のパラメーターに関する注意: 多くのツールは、複雑な任意のパラメーター(例:generationConfig、safetySettings、toolConfig、history、functionDeclarations、contents)を受け付けます。これらのパラメーターは通常、基盤となる @google/genai SDK(v0.10.0)で定義された型を反映したオブジェクトまたは配列です。これらの複雑なパラメーターの正確な構造と利用可能なフィールドについては、次を参照してください。 1. このプロジェクトの対応する src/tools/*Params.ts ファイル。 2. 公式の Google AI JS SDK ドキュメント。

コア生成
  • gemini_generateContent
    • 説明: プロンプトから、URL コンテキストのサポートを任意で利用して、非ストリーミングのテキストコンテンツを生成します。
    • 必須パラメーター: prompt(文字列)
    • 任意のパラメーター:
      • modelName(文字列)- 使用するモデルの名前
      • generationConfig(オブジェクト)- temperature、topP などの生成パラメーターを制御します。
        • thinkingConfig(オブジェクト)- モデルの推論プロセスを制御します。
          • thinkingBudget(数値)- 推論に使用する最大トークン数(0~24576)
          • reasoningEffort(文字列)- 簡易制御:「none」(0 トークン)、「low」(1K)、「medium」(8K)、「high」(24K)
      • safetySettings(配列)- 有害性カテゴリに基づくコンテンツフィルタリングを制御します。
      • systemInstruction(文字列またはオブジェクト)- モデルの動作を導くシステム指示
      • cachedContentName(文字列)- このリクエストで使用するキャッシュ済みコンテンツの識別子
      • urlContext(オブジェクト)- URL からウェブコンテンツを取得して含めます。
        • urls(配列)- コンテキストとして取得して含める URL(最大20件)
        • fetchOptions(オブジェクト)- URL 取得の設定
          • maxContentKb(数値)- URL ごとの最大コンテンツサイズ(KB)(デフォルト:100)
          • timeoutMs(数値)- URL ごとの取得タイムアウト(ミリ秒)(デフォルト:10000)
          • includeMetadata(ブール値)- URL のメタデータをコンテキストに含めます(デフォルト:true)
          • convertToMarkdown(ブール値)- HTML をマークダウンに変換します(デフォルト:true)
          • allowedDomains(配列)- このリクエストで許可する特定のドメイン
          • userAgent(文字列)- URL リクエストに使用するカスタム User-Agent ヘッダー
      • modelPreferences(オブジェクト)- モデル選択の設定
    • 注: マルチモーダル入力、キャッシュ済みコンテンツ、URL コンテキストを利用して、包括的なコンテンツ生成に対応できます。
    • 思考バジェット: モデルの推論に使用するトークン数を制御します。値を小さくすると応答が速くなり、大きくすると複雑な推論の精度が向上します。
  • gemini_generateContentStream
    • 説明: URL コンテキストのサポートを備え、Server-Sent Events(SSE)を使用したストリーミングにより、リアルタイムでテキストコンテンツを生成します。
    • 必須パラメーター: prompt(文字列)
    • 任意のパラメーター:
      • modelName(文字列)- 使用するモデルの名前
      • generationConfig(オブジェクト)- temperature、topP などの生成パラメーターを制御します。
        • thinkingConfig(オブジェクト)- モデルの推論プロセスを制御します。
          • thinkingBudget(数値)- 推論に使用する最大トークン数(0~24576)
          • reasoningEffort(文字列)- 簡易制御:「none」(0 トークン)、「low」(1K)、「medium」(8K)、「high」(24K)
      • safetySettings(配列)- 有害性カテゴリに基づくコンテンツフィルタリングを制御します。
      • systemInstruction(文字列またはオブジェクト)- モデルの動作を導くシステム指示
      • cachedContentName(文字列)- このリクエストで使用するキャッシュ済みコンテンツの識別子
      • urlContext(オブジェクト)- gemini_generateContent と同じ URL コンテキストのオプション
      • modelPreferences(オブジェクト)- モデル選択の設定
関数呼び出し
  • gemini_functionCall
    • 説明: プロンプトと関数宣言をモデルに送信し、テキスト応答、または要求された関数呼び出しオブジェクト(JSON 文字列)のいずれかを返します。
    • 必須パラメーター: prompt(文字列)、functionDeclarations(配列)
    • 任意のパラメーター:
      • modelName(文字列)- 使用するモデルの名前
      • generationConfig(オブジェクト)- 生成パラメーターを制御します。
      • safetySettings(配列)- コンテンツフィルタリングを制御します。
      • toolConfig(オブジェクト)- temperature や信頼度のしきい値など、ツールの動作を設定します。
ステートフルチャット
  • gemini_startChat
    • 説明: 新しいステートフルチャットセッションを開始し、一意の sessionId を返します。
    • 省略可能なパラメーター:
      • modelName(string) - 使用するモデルの名前
      • history(array) - 会話履歴の初期値
      • tools(array) - 関数宣言を含むツール定義
      • generationConfig(object) - 生成パラメーターを制御します
        • thinkingConfig(object) - モデルの推論プロセスを制御します
          • thinkingBudget(number) - 推論に使用するトークンの最大数(0-24576)
          • reasoningEffort(string) - 簡易制御:「none」(0 トークン)、「low」(1K)、「medium」(8K)、「high」(24K)
      • safetySettings(array) - コンテンツフィルタリングを制御します
      • systemInstruction(string または object) - モデルの動作を導くシステム指示
      • cachedContentName(string) - このセッションで使用するキャッシュ済みコンテンツの識別子
  • gemini_sendMessage
    • 説明: 既存のチャットセッション内でメッセージを送信します。
    • 必須パラメーター: sessionId(string)、message(string)
    • 省略可能なパラメーター:
      • generationConfig(object) - 生成パラメーターを制御します
        • thinkingConfig(object) - モデルの推論プロセスを制御します
          • thinkingBudget(number) - 推論に使用するトークンの最大数(0-24576)
          • reasoningEffort(string) - 簡易制御:「none」(0 トークン)、「low」(1K)、「medium」(8K)、「high」(24K)
      • safetySettings(array) - コンテンツフィルタリングを制御します
      • tools(array) - 関数宣言を含むツール定義
      • toolConfig(object) - ツールの動作を設定します
      • cachedContentName(string) - このメッセージで使用するキャッシュ済みコンテンツの識別子
  • gemini_sendFunctionResult
    • 説明: 関数の実行結果をチャットセッションに返します。
    • 必須パラメーター: sessionId(string)、functionResponse(string) - 関数の実行結果
    • 省略可能なパラメーター: functionCall(object) - 元の関数呼び出しへの参照
  • gemini_routeMessage
    • 説明: メッセージの内容に基づき、指定されたモデルのリストから最適なモデルにメッセージをルーティングします。モデルの応答と、選択されたモデルの両方を返します。
    • 必須パラメーター:
      • message(string) - 最適なモデルにルーティングするテキストメッセージ
      • models(array) - ルーティング候補となるモデル名の配列(例:['gemini-1.5-flash', 'gemini-1.5-pro'])。リストの最初のモデルがルーティングの判断に使用されます。
    • 省略可能なパラメーター:
      • routingPrompt(string) - ルーティングの判断に使用するカスタムプロンプト。指定しない場合は、デフォルトのルーティングプロンプトが使用されます。
      • defaultModel(string) - ルーティングに失敗した場合にフォールバックとして使用するモデル。指定せずにルーティングに失敗した場合は、エラーが発生します。
      • generationConfig(object) - 選択されたモデルの応答に適用する生成設定。
        • thinkingConfig(object) - モデルの推論プロセスを制御します
          • thinkingBudget(number) - 推論に使用するトークンの最大数(0-24576)
          • reasoningEffort(string) - 簡易制御:「none」(0 トークン)、「low」(1K)、「medium」(8K)、「high」(24K)
      • safetySettings(array) - ルーティングと最終応答の両方に適用する安全性設定。
      • systemInstruction(string または object) - ルーティング後のモデルの動作を導くシステム指示。
リモートファイル操作(削除済み)

注: このサーバーでは、ファイルの直接アップロード操作はサポートされなくなりました。現在、サーバーは画像や動画の URL ベースのマルチメディア分析と、テキストベースのコンテンツ生成に特化しています。

代替方法:

  • 画像分析の場合: gemini_generateContent または gemini_url_analysis ツールで、一般公開されている画像 URL を使用してください
  • 動画分析の場合: コンテンツ分析には、一般公開されている YouTube 動画の URL を使用してください
  • 音声コンテンツの場合: ファイルアップロードによる音声の文字起こしはサポートされていません。音声の文字起こしを提供する URL ベースのサービスの利用をご検討ください
  • ドキュメント分析の場合: URL ベースのドキュメント分析を利用するか、ドキュメントを一般公開できる形式に変換してください
キャッシュ(Google AI Studio Key が必要)
  • gemini_createCache
    • 説明: 互換性のあるモデル(例:gemini-1.5-flash)向けのキャッシュコンテンツを作成します。
    • 必須パラメーター: contents(配列)、model(文字列)
    • 任意パラメーター:
      • displayName(文字列)- キャッシュコンテンツの人間が読める名前
      • systemInstruction(文字列またはオブジェクト)- キャッシュコンテンツに適用するシステム指示
      • ttl(文字列 - 例:'3600s')- キャッシュコンテンツの有効期間
      • tools(配列)- キャッシュコンテンツで使用するツールの定義
      • toolConfig(オブジェクト)- ツールの設定
  • gemini_listCaches
    • 説明: 既存のキャッシュコンテンツを一覧表示します。
    • 必須パラメーター: なし
    • 任意パラメーター: pageSize(数値)、pageToken(文字列 - 注:現在、pageToken は確実に返されるとは限りません)。
  • gemini_getCache
    • 説明: 指定したキャッシュコンテンツのメタデータを取得します。
    • 必須パラメーター: cacheName(文字列 - 例:cachedContents/abc123xyz)
  • gemini_updateCache
    • 説明: キャッシュコンテンツのメタデータと内容を更新します。
    • 必須パラメーター: cacheName(文字列)、contents(配列)
    • 任意パラメーター:
      • displayName(文字列)- 更新後の表示名
      • systemInstruction(文字列またはオブジェクト)- 更新後のシステム指示
      • ttl(文字列)- 更新後の有効期間
      • tools(配列)- 更新後のツール定義
      • toolConfig(オブジェクト)- 更新後のツール設定
  • gemini_deleteCache
    • 説明: キャッシュコンテンツを削除します。
    • 必須パラメーター: cacheName(文字列 - 例:cachedContents/abc123xyz)
画像生成
  • gemini_generateImage
    • 説明: 利用可能な画像生成モデルを使用して、テキストプロンプトから画像を生成します。
    • 必須パラメーター: prompt(文字列 - 画像生成のための具体的なテキストプロンプト)
    • 任意パラメーター:
      • modelName(文字列 - 高品質な専用画像生成にはデフォルトの "imagen-3.1-generate-003" を使用します。Gemini モデルには "gemini-2.0-flash-exp-image-generation" を使用してください)
      • resolution(文字列の列挙値:"512x512"、"1024x1024"、"1536x1536")
      • numberOfImages(数値 - 1~8、デフォルト:1)
      • safetySettings(配列)- 生成画像のコンテンツフィルタリングを制御します
      • negativePrompt(文字列 - 生成画像で避ける特徴)
      • stylePreset(文字列の列挙値:"photographic"、"digital-art"、"cinematic"、"anime"、"3d-render"、"oil-painting"、"watercolor"、"pixel-art"、"sketch"、"comic-book"、"neon"、"fantasy")
      • seed(数値 - 再現可能な生成に使用する整数値)
      • styleStrength(数値 - スタイルプリセットの強度、0.0~1.0)
    • 応答: 寸法や MIME タイプなどのメタデータを含む、Base64 エンコードされた画像の配列を返します。
    • 注: 画像生成は、特に高解像度の場合、多くのリソースを使用します。応答を高速化し、リソース使用量を抑えるには、低い解像度の使用をご検討ください。
音声文字起こし(削除済み)

注記: 音声ファイルの直接アップロードによる文字起こしは、このサーバーではサポートされなくなりました。このサーバーは、画像や動画を対象とした URL ベースのマルチメディア分析に重点を置いています。

音声コンテンツの代替方法:

  • YouTube 動画: YouTube 動画分析機能を使って、音声を含む動画コンテンツを分析します
  • 外部サービス: 専用の音声文字起こしサービスを使い、その出力をテキストコンテンツとして分析します
  • URL ベースの音声: 音声コンテンツが対応形式の公開 URL から利用できる場合は、まず外部の文字起こしサービスを使い、生成されたテキストを分析することを検討してください
URL コンテンツ分析
  • gemini_url_analysis
    • 説明: ウェブページからコンテンツを取得し、包括的なセキュリティおよびパフォーマンス最適化を施したうえで、専門的な分析タスクを実行する高度な URL 分析ツールです。
    • 必須パラメーター:
      • urls (配列) - 分析対象の URL(1~20 件の URL に対応)
      • analysisType (文字列の列挙型) - 実行する分析の種類:
        • summary - コンテンツの包括的な要約
        • comparison - 複数 URL 間のコンテンツ比較
        • extraction - 構造化情報の抽出
        • qa - 質問に基づくコンテンツ分析
        • sentiment - 感情的なトーンの分析
        • fact-check - 信頼性の評価
        • content-classification - トピックおよび種類の分類
        • readability - アクセシビリティおよび複雑さの分析
        • seo-analysis - 検索最適化の評価
    • 任意のパラメーター:
      • query (文字列) - 分析に関する具体的なクエリまたは指示
      • extractionSchema (オブジェクト) - 構造化データ抽出用の JSON スキーマ
      • questions (配列) - 回答する具体的な質問のリスト(Q&A 分析用)
      • compareBy (配列) - 比較分析で比較する具体的な観点
      • outputFormat (文字列の列挙型:"text"、"json"、"markdown"、"structured") - 希望する出力形式
      • includeMetadata (ブール値) - 分析に URL メタデータを含めるかどうか(デフォルト:true)
      • fetchOptions (オブジェクト) - 高度な URL 取得オプション(urlContext の fetchOptions と同じ)
      • modelName (文字列) - 使用する特定の Gemini モデル(指定されていない場合は自動選択)
    • セキュリティ機能: 多層 URL 検証、ドメイン制限、プライベートネットワーク保護、レート制限
    • パフォーマンス機能: インテリジェントなキャッシュ、並行処理、コンテンツの複雑さに基づく最適なモデル選択
MCP クライアントツール
  • mcpConnectToServer
    • 説明: 外部 MCP サーバーへの接続を確立し、接続 ID を返します。
    • 必須パラメーター:
      • serverId (string): このサーバー接続を一意に識別する ID です。
      • connectionType (string enum: "sse" | "stdio"): 使用するトランスポートプロトコルです。
      • sseUrl (string, optional if connectionType is "stdio"): SSE 接続用の URL です。
      • stdioCommand (string, optional if connectionType is "sse"): stdio 接続で実行するコマンドです。
      • stdioArgs (array of strings, optional): stdio コマンドに渡す引数です。
      • stdioEnv (object, optional): stdio コマンド用の環境変数です。
    • 重要: このツールは connectionId を返します。この connectionId は、後続の mcpListServerTools、mcpCallServerTool、mcpDisconnectFromServer の呼び出しで使用する必要があります。この connectionId は内部で生成され、serverId パラメーターとは異なります。
  • mcpListServerTools
    • 説明: 接続済みの MCP サーバーで利用可能なツールを一覧表示します。
    • 必須パラメーター:
      • connectionId (string): mcpConnectToServer が返した接続 ID です。
  • mcpCallServerTool
    • 説明: 接続済みの MCP サーバー上の関数を呼び出します。
    • 必須パラメーター:
      • connectionId (string): mcpConnectToServer が返した接続 ID です。
      • toolName (string): リモートサーバー上で呼び出すツールの名前です。
      • toolArgs (object): リモートツールに渡す引数です。
    • 任意のパラメーター:
      • outputToFile (string): 指定すると、ツールの出力がこのファイルパスに書き込まれます。パスは ALLOWED_OUTPUT_PATHS 環境変数で指定されたディレクトリのいずれかに含まれている必要があります。
  • mcpDisconnectFromServer
    • 説明: 外部 MCP サーバーとの接続を切断します。
    • 必須パラメーター:
      • connectionId (string): mcpConnectToServer が返した接続 ID です。
  • writeToFile
    • 説明: コンテンツをファイルに直接書き込みます。
    • 必須パラメーター:
      • filePath (string): 書き込み先ファイルの絶対パスです。ALLOWED_OUTPUT_PATHS 環境変数で指定されたディレクトリのいずれかに含まれている必要があります。
      • content (string): ファイルに書き込むコンテンツです。
    • 任意のパラメーター:
      • overwrite (boolean, default: false): true の場合、ファイルがすでに存在するときは上書きします。そうでない場合、ファイルが存在するとエラーが発生します。

使用例

MCP クライアント(Claude など)が use_mcp_tool 形式でこれらのツールを呼び出す方法の例を以下に示します。

例 1:コンテンツの生成(デフォルトモデルを使用)

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Write a short poem about a rubber duck."
    }
  </arguments>
</use_mcp_tool>

例 2:コンテンツの生成(モデルと設定を指定)

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "modelName": "gemini-1.0-pro",
      "prompt": "Explain the concept of recursion in programming.",
      "generationConfig": {
        "temperature": 0.7,
        "maxOutputTokens": 500
      }
    }
  </arguments>
</use_mcp_tool>

例 2b:思考バジェットを制御したコンテンツの生成

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "modelName": "gemini-1.5-pro",
      "prompt": "Solve this complex math problem: Find all values of x where 2sin(x) = x^2-x+1 in the range [0, 2π].",
      "generationConfig": {
        "temperature": 0.2,
        "maxOutputTokens": 1000,
        "thinkingConfig": {
          "thinkingBudget": 8192
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 2c:簡略化された推論の強さを指定したコンテンツの生成

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "modelName": "gemini-1.5-pro",
      "prompt": "Solve this complex math problem: Find all values of x where 2sin(x) = x^2-x+1 in the range [0, 2π].",
      "generationConfig": {
        "temperature": 0.2,
        "maxOutputTokens": 1000,
        "thinkingConfig": {
          "reasoningEffort": "high"
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 3:チャットの開始と続行

チャットを開始:

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_startChat</tool_name>
  <arguments>
    {}
  </arguments>
</use_mcp_tool>

(応答に sessionId: "some-uuid-123" が含まれるとします)

メッセージを送信:

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_sendMessage</tool_name>
  <arguments>
    {
      "sessionId": "some-uuid-123",
      "message": "Hello! Can you tell me about the Gemini API?"
    }
  </arguments>
</use_mcp_tool>

例 4:システム指示を使用したコンテンツの生成(簡略形式)

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "modelName": "gemini-2.5-pro-exp",
      "prompt": "What should I do with my day off?",
      "systemInstruction": "You are a helpful assistant that provides friendly and detailed advice. You should focus on outdoor activities and wellness."
    }
  </arguments>
</use_mcp_tool>

例 5:システム指示を使用したコンテンツの生成(オブジェクト形式)

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "modelName": "gemini-1.5-pro-latest",
      "prompt": "What should I do with my day off?",
      "systemInstruction": {
        "parts": [
          {
            "text": "You are a helpful assistant that provides friendly and detailed advice. You should focus on outdoor activities and wellness."
          }
        ]
      }
    }
  </arguments>
</use_mcp_tool>

例 6:システム指示とキャッシュ済みコンテンツの使用

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "modelName": "gemini-2.5-pro-exp",
      "prompt": "Explain how these concepts relate to my product?",
      "cachedContentName": "cachedContents/abc123xyz",
      "systemInstruction": "You are a product expert who explains technical concepts in simple terms."
    }
  </arguments>
</use_mcp_tool>

例 6:画像の生成

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateImage</tool_name>
  <arguments>
    {
      "prompt": "A futuristic cityscape with flying cars and neon lights",
      "modelName": "gemini-2.0-flash-exp-image-generation",
      "resolution": "1024x1024",
      "numberOfImages": 1,
      "negativePrompt": "dystopian, ruins, dark, gloomy"
    }
  </arguments>
</use_mcp_tool>

例 6b:Imagen 3.1 で高品質な画像を生成

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateImage</tool_name>
  <arguments>
    {
      "prompt": "A futuristic cityscape with flying cars and neon lights",
      "modelName": "imagen-3.1-generate-003",
      "resolution": "1024x1024",
      "numberOfImages": 4,
      "negativePrompt": "dystopian, ruins, dark, gloomy"
    }
  </arguments>
</use_mcp_tool>

例 6c:高度なスタイルオプションの使用

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateImage</tool_name>
  <arguments>
    {
      "prompt": "A futuristic cityscape with flying cars and neon lights",
      "modelName": "imagen-3.1-generate-003",
      "resolution": "1024x1024",
      "numberOfImages": 2,
      "stylePreset": "anime",
      "styleStrength": 0.8,
      "seed": 12345
    }
  </arguments>
</use_mcp_tool>

例 7:モデル間のメッセージルーティング

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_routeMessage</tool_name>
  <arguments>
    {
      "message": "Can you create a detailed business plan for a sustainable fashion startup?",
      "models": ["gemini-1.5-pro", "gemini-1.5-flash", "gemini-2.5-pro"],
      "routingPrompt": "Analyze this message and determine which model would be best suited to handle it. Consider: gemini-1.5-flash for simpler tasks, gemini-1.5-pro for balanced capabilities, and gemini-2.5-pro for complex creative tasks.",
      "defaultModel": "gemini-1.5-pro",
      "generationConfig": {
        "temperature": 0.7,
        "maxOutputTokens": 1024
      }
    }
  </arguments>
</use_mcp_tool>

応答は、テキスト応答と選択されたモデルの両方を含む JSON 文字列です。

{
  "text": "# Business Plan for Sustainable Fashion Startup\n\n## Executive Summary\n...",
  "chosenModel": "gemini-2.5-pro"
}

例 8:コンテンツ生成で URL コンテキストを使用

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Summarize the main points from these articles and compare their approaches to sustainable technology",
      "urlContext": {
        "urls": [
          "https://example.com/sustainable-tech-2024",
          "https://techblog.com/green-innovation"
        ],
        "fetchOptions": {
          "maxContentKb": 150,
          "includeMetadata": true,
          "convertToMarkdown": true
        }
      },
      "modelPreferences": {
        "preferQuality": true,
        "taskType": "reasoning"
      }
    }
  </arguments>
</use_mcp_tool>

例 9:高度な URL 分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_url_analysis</tool_name>
  <arguments>
    {
      "urls": ["https://company.com/about", "https://company.com/products"],
      "analysisType": "extraction",
      "extractionSchema": {
        "companyName": "string",
        "foundedYear": "number",
        "numberOfEmployees": "string",
        "mainProducts": "array",
        "headquarters": "string",
        "financialInfo": "object"
      },
      "outputFormat": "json",
      "query": "Extract comprehensive company information including business details and product offerings"
    }
  </arguments>
</use_mcp_tool>

例 10:複数の URL のコンテンツ比較

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_url_analysis</tool_name>
  <arguments>
    {
      "urls": [
        "https://site1.com/pricing",
        "https://site2.com/pricing", 
        "https://site3.com/pricing"
      ],
      "analysisType": "comparison",
      "compareBy": ["pricing models", "features", "target audience", "value proposition"],
      "outputFormat": "markdown",
      "includeMetadata": true
    }
  </arguments>
</use_mcp_tool>

例 11:セキュリティ制限付きの URL コンテンツ

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze the content from these trusted news sources",
      "urlContext": {
        "urls": [
          "https://reuters.com/article/tech-news",
          "https://bbc.com/news/technology"
        ],
        "fetchOptions": {
          "allowedDomains": ["reuters.com", "bbc.com"],
          "maxContentKb": 200,
          "timeoutMs": 15000,
          "userAgent": "Research-Bot/1.0"
        }
      }
    }
  </arguments>
</use_mcp_tool>
URL ベースの画像分析の例

これらの例では、Gemini のネイティブな画像理解機能を使用して、公開 URL から画像を分析する方法を説明します。サーバーは URL から画像を取得し、Gemini API に必要な形式に変換して処理します。このサーバーはファイルの直接アップロードに対応していないため、画像分析はすべて、一般公開されている画像 URL を使用して行う必要があります。

例 17:基本的な画像の説明と分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Please describe this image in detail, including objects, people, colors, setting, and any text you can see.",
      "urlContext": {
        "urls": ["https://example.com/images/photo.jpg"],
        "fetchOptions": {
          "includeMetadata": true,
          "timeoutMs": 15000
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 18:物体の検出と識別

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Identify and list all objects visible in this image. For each object, describe its location, size relative to other objects, and any notable characteristics.",
      "urlContext": {
        "urls": ["https://example.com/images/scene.png"],
        "fetchOptions": {
          "includeMetadata": false,
          "timeoutMs": 20000
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 19:グラフとデータ可視化の分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze this chart or graph. What type of visualization is it? What are the main data points, trends, and insights? Extract any numerical values, labels, and time periods shown.",
      "urlContext": {
        "urls": ["https://example.com/charts/sales-data.png"]
      },
      "modelPreferences": {
        "preferQuality": true,
        "taskType": "reasoning"
      }
    }
  </arguments>
</use_mcp_tool>

例 20:画像の比較分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Compare these two images side by side. Describe the differences and similarities in terms of objects, composition, colors, style, and any other notable aspects.",
      "urlContext": {
        "urls": [
          "https://example.com/before-renovation.jpg",
          "https://example.com/after-renovation.jpg"
        ],
        "fetchOptions": {
          "maxContentKb": 200,
          "includeMetadata": true
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 21:画像からのテキスト抽出(OCR)

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Extract all text visible in this image. Include any signs, labels, captions, or written content. Maintain the original formatting and structure as much as possible.",
      "urlContext": {
        "urls": ["https://example.com/documents/screenshot.png"]
      }
    }
  </arguments>
</use_mcp_tool>

例 22:技術図やフローチャートの分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze this technical diagram, flowchart, or schematic. Explain the system architecture, identify components, describe the relationships and data flow, and interpret any symbols or notations used.",
      "urlContext": {
        "urls": ["https://docs.example.com/architecture-diagram.png"],
        "fetchOptions": {
          "maxContentKb": 100,
          "includeMetadata": true
        }
      },
      "modelPreferences": {
        "preferQuality": true,
        "taskType": "reasoning"
      }
    }
  </arguments>
</use_mcp_tool>

例 23:具体的な質問を用いた画像分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Looking at this image, please answer these specific questions: 1) What is the main subject? 2) What colors dominate the scene? 3) Are there any people visible? 4) What appears to be the setting or location? 5) What mood or atmosphere does the image convey?",
      "urlContext": {
        "urls": ["https://example.com/images/landscape.jpg"]
      }
    }
  </arguments>
</use_mcp_tool>

例 24:セキュリティ制限を適用した画像分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze the composition and design elements in this image, focusing on visual hierarchy, layout principles, and aesthetic choices.",
      "urlContext": {
        "urls": ["https://trusted-cdn.example.com/design-mockup.jpg"],
        "fetchOptions": {
          "allowedDomains": ["trusted-cdn.example.com", "assets.example.com"],
          "maxContentKb": 150,
          "timeoutMs": 25000,
          "includeMetadata": false
        }
      }
    }
  </arguments>
</use_mcp_tool>

URL ベースの画像分析に関する重要な注意事項:

  • 対応形式:PNG、JPEG、WebP、HEIC、HEIF(Gemini API の仕様に準拠)
  • 画像へのアクセス:画像は認証なしでアクセスできる公開 URL 上にある必要があります
  • サイズに関する考慮事項:大きな画像は Gemini によって自動的に区分して処理されます
  • 処理:サーバーは URL から画像を取得し、Gemini API に必要な形式に変換します
  • セキュリティ:サーバーは、プライベートネットワークや悪意のあるドメインへのアクセスを防ぐための制限を適用します
  • パフォーマンス:高解像度の画像は処理が複雑なため、分析に時間がかかる場合があります
  • トークン使用量:画像の寸法はトークン消費量に影響します。大きな画像ほど多くのトークンを使用します
YouTube 動画分析の例

これらの例では、Gemini の動画理解機能を使用して、YouTube 動画を分析する方法を説明します。サーバーは、公開アクセス可能な YouTube 動画の URL を指定することで動画を処理できます。対応しているのは公開 YouTube 動画のみです。非公開、限定公開、または地域制限のある動画は分析できません。

例 25:基本的な YouTube 動画分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Please analyze this YouTube video and provide a comprehensive summary including the main topics discussed, key points, and overall theme.",
      "urlContext": {
        "urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
        "fetchOptions": {
          "includeMetadata": true,
          "timeoutMs": 30000
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 26:タイムスタンプ付きの YouTube 動画コンテンツの抽出

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze this educational YouTube video and create a detailed outline with key topics and approximate timestamps. Identify the main learning objectives and key concepts covered.",
      "urlContext": {
        "urls": ["https://www.youtube.com/watch?v=EXAMPLE_VIDEO_ID"],
        "fetchOptions": {
          "maxContentKb": 300,
          "includeMetadata": true,
          "timeoutMs": 45000
        }
      },
      "modelPreferences": {
        "preferQuality": true,
        "taskType": "reasoning"
      }
    }
  </arguments>
</use_mcp_tool>

例 27:具体的な質問を用いた YouTube 動画分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Watch this YouTube video and answer these specific questions: 1) What is the main message or thesis? 2) Who is the target audience? 3) What evidence or examples are provided? 4) What are the key takeaways? 5) How is the content structured?",
      "urlContext": {
        "urls": ["https://www.youtube.com/watch?v=EXAMPLE_VIDEO_ID"]
      }
    }
  </arguments>
</use_mcp_tool>

例 28:複数の YouTube 動画の比較分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Compare and contrast these YouTube videos. Analyze their different approaches to the topic, presentation styles, key arguments, and conclusions. Identify similarities and differences in their perspectives.",
      "urlContext": {
        "urls": [
          "https://www.youtube.com/watch?v=VIDEO_ID_1",
          "https://www.youtube.com/watch?v=VIDEO_ID_2"
        ],
        "fetchOptions": {
          "maxContentKb": 400,
          "includeMetadata": true,
          "timeoutMs": 60000
        }
      },
      "modelPreferences": {
        "preferQuality": true,
        "taskType": "reasoning"
      }
    }
  </arguments>
</use_mcp_tool>

例 29:YouTube 動画の技術的な分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze this technical YouTube tutorial and extract step-by-step instructions, identify required tools or materials, note any code examples or commands shown, and highlight important warnings or best practices mentioned.",
      "urlContext": {
        "urls": ["https://www.youtube.com/watch?v=TECH_TUTORIAL_ID"],
        "fetchOptions": {
          "includeMetadata": true,
          "timeoutMs": 40000
        }
      }
    }
  </arguments>
</use_mcp_tool>

例 30:YouTube 動画の感情とスタイルの分析

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_url_analysis</tool_name>
  <arguments>
    {
      "urls": ["https://www.youtube.com/watch?v=EXAMPLE_VIDEO_ID"],
      "analysisType": "sentiment",
      "outputFormat": "structured",
      "query": "Analyze the tone, mood, and presentation style of this YouTube video. Assess the speaker's credibility, engagement level, and overall effectiveness of communication."
    }
  </arguments>
</use_mcp_tool>

例 31:YouTube 動画の教育コンテンツ評価

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Evaluate this educational YouTube video for accuracy, clarity, and pedagogical effectiveness. Identify the teaching methods used, assess how well complex concepts are explained, and suggest improvements if any.",
      "urlContext": {
        "urls": ["https://www.youtube.com/watch?v=EDUCATIONAL_VIDEO_ID"],
        "fetchOptions": {
          "maxContentKb": 250,
          "includeMetadata": true
        }
      },
      "modelPreferences": {
        "preferQuality": true,
        "taskType": "reasoning"
      }
    }
  </arguments>
</use_mcp_tool>

例 32:ドメインのセキュリティ制限を適用した YouTube 動画

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>gemini_generateContent</tool_name>
  <arguments>
    {
      "prompt": "Analyze the content and key messages of this YouTube video, focusing on factual accuracy and source credibility.",
      "urlContext": {
        "urls": ["https://www.youtube.com/watch?v=TRUSTED_VIDEO_ID"],
        "fetchOptions": {
          "allowedDomains": ["youtube.com", "www.youtube.com"],
          "maxContentKb": 200,
          "timeoutMs": 35000,
          "includeMetadata": true
        }
      }
    }
  </arguments>
</use_mcp_tool>

YouTube 動画分析に関する重要な注意事項:

  • 公開動画のみ:一般公開されている YouTube 動画のみ分析できます
  • URL 形式:標準の YouTube URL を使用してください(youtube.com/watch?v=VIDEO_ID または youtu.be/VIDEO_ID)
  • 処理時間:動画分析は通常、テキストや画像の分析よりも時間がかかります
  • コンテンツの制限:非常に長い動画は、コンテンツが切り詰められたり、分割して処理されたりする場合があります
  • メタデータ:includeMetadata: true の場合、動画のメタデータ(タイトル、説明、長さ)が含まれます
  • 言語サポート:Gemini は複数の言語の動画を分析できます
  • コンテンツの制限:サーバーは、ほかの URL コンテンツと同じセキュリティ制限を適用します
  • トークン使用量:動画の長さや複雑さに応じて、動画分析で大量のトークンを消費する場合があります

対応するマルチメディア分析のユースケース

MCP Gemini Server は、Google Gemini の高度な画像および動画理解機能を活用し、URL ベースの処理による包括的なマルチメディア分析に対応しています。主なユースケースをコンテンツの種類別に以下に示します。

画像分析のユースケース

コンテンツの理解:

  • 製品分析:製品画像を分析し、特徴、デザイン要素、品質を評価します
  • ドキュメント OCR:ドキュメント、レシート、フォームの画像からテキストを抽出して書き起こします
  • チャートとグラフの分析:データの可視化を解釈し、重要な洞察を抽出して、傾向を説明します
  • 技術図面:アーキテクチャ図、フローチャート、技術的な概略図を理解します
  • 医療画像:医療チャート、X 線画像、診断画像を分析します(教育目的)
  • アートとデザイン:芸術的な構図、配色、デザインの原則を分析します

比較分析:

  • 変更前と変更後の比較:複数の画像を比較し、変更点や違いを特定します
  • 製品の比較:複数の製品画像を分析し、機能を比較します
  • A/B テスト:デザインのバリエーションや視覚的な違いを評価します

セキュリティと品質:

  • コンテンツモデレーション:不適切または有害な視覚コンテンツを特定します
  • 品質評価:画像の品質、解像度、技術的な側面を評価します
  • ブランド準拠:画像がブランドガイドラインを遵守しているか確認します
動画分析のユースケース

教育コンテンツ:

  • 講義の分析:重要な概念を抽出し、要約を作成して、重要なタイムスタンプを特定します
  • チュートリアルの理解:手順を段階ごとに分解し、重要な手順を明確にします
  • トレーニング資料:企業のトレーニング動画を分析し、学習目標を抽出します
  • 学術研究:研究発表を処理し、手法を抽出します

コンテンツ作成:

  • 動画の要約:長尺動画コンテンツの簡潔な要約を生成します
  • 文字起こしの生成:話者を識別した詳細な文字起こしを作成します
  • コンテンツの分類:トピック、ジャンル、コンテンツタイプごとに動画を分類します
  • 感情分析:感情的なトーンや視聴者のエンゲージメントを示す指標を評価します

技術分析:

  • ソフトウェアのデモ:ソフトウェアの機能や使用手順を抽出します
  • 製品レビュー:製品のデモ動画を分析し、重要な洞察を抽出します
  • トラブルシューティングガイド:技術サポート動画を解析し、問題解決の手順を抽出します
  • コードレビュー:プログラミングチュートリアル動画を分析し、コード例を抽出します

ビジネスインテリジェンス:

  • 市場調査:プロモーション動画やマーケティングコンテンツを分析します
  • 競合分析:競合他社の動画コンテンツや戦略を調査します
  • 顧客フィードバック:動画の推薦コメントやフィードバックセッションを処理します
  • イベントの記録:カンファレンスの発表や基調講演を分析します
統合機能

マルチモーダル分析:

  • テキストのプロンプトと画像/動画の URL を組み合わせて、文脈に沿った分析を行います
  • 複数のメディア形式を単一のリクエストで処理し、包括的な分析情報を得られます
  • ビジュアルコンテンツとテキストの指示を相互に照合します

ワークフロー統合:

  • 複数の分析処理を連鎖させ、複雑なワークフローを構築します
  • 結果をファイルにエクスポートして、さらに処理できます
  • 外部の MCP サーバーと統合して、機能を拡張できます

セキュリティとパフォーマンス:

  • 安全にコンテンツを処理するための URL 検証とセキュリティチェック
  • 頻繁に分析するコンテンツのキャッシュをサポート
  • 複数のメディア項目を一括処理する機能

例 12:外部 MCP サーバーへの接続(SSE)

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>mcpConnectToServer</tool_name>
  <arguments>
    {
      "serverId": "my-external-server",
      "connectionType": "sse",
      "sseUrl": "http://localhost:8080/mcp"
    }
  </arguments>
</use_mcp_tool>

(応答には、connectionId: "12345-abcde-67890" のような一意の接続 ID が含まれるものとします)

例 13:外部 MCP サーバー上のツールを呼び出し、出力をファイルに書き込む

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>mcpCallServerTool</tool_name>
  <arguments>
    {
      "connectionId": "12345-abcde-67890", // Use the connectionId returned by mcpConnectToServer
      "toolName": "remote_tool_name",
      "toolArgs": { "param1": "value1" },
      "outputToFile": "/var/opt/mcp-gemini-server/outputs/result.json"
    }
  </arguments>
</use_mcp_tool>

重要:MCP クライアントツールで使用する connectionId は、元の serverId パラメーターではなく、mcpConnectToServer が返す接続識別子でなければなりません。

注: outputToFile のパスは、環境変数 ALLOWED_OUTPUT_PATHS で指定されたディレクトリのいずれかの配下でなければなりません。たとえば、ALLOWED_OUTPUT_PATHS="/path/to/allowed/output,/another/allowed/path" の場合、ファイルパスはこれらのパスのいずれかのサブディレクトリでなければなりません。

例 14:コンテンツをファイルに直接書き込む

<use_mcp_tool>
  <server_name>gemini-server</server_name>
  <tool_name>writeToFile</tool_name>
  <arguments>
    {
      "filePath": "/path/to/allowed/output/my_notes.txt",
      "content": "This is some important content.",
      "overwrite": true
    }
  </arguments>
</use_mcp_tool>

注: mcpCallServerTool と同様に、filePath は環境変数 ALLOWED_OUTPUT_PATHS で指定されたディレクトリのいずれかの配下でなければなりません。これは、許可されていないファイルへの書き込みを防止するための重要なセキュリティ機能です。

mcp-gemini-server と Gemini SDK の MCP 関数呼び出し

Google Gemini API の公式ドキュメントには、MCP 構造を使った関数呼び出しなどの例が掲載されており、クライアント側の Gemini SDK(Python や Node.js など)を使って Gemini API とやり取りする方法が説明されています。このようなシナリオ、特に関数呼び出しでは、クライアント SDK 自体を使ってリクエストを構成し、MCP の原則に沿った形で応答を処理できます。

mcp-gemini-server プロジェクトは、完全に実装されたスタンドアロンの MCP サーバーを提供することで、これを補完するアプローチを実現します。クライアントアプリケーションが Gemini SDK を直接使用して Gemini API 向けに MCP 形式のメッセージを作成する代わりに、クライアントアプリケーション(Claude のような別の LLM、カスタムスクリプト、または MCP 互換システムなど)は次の操作を行います。

  1. この mcp-gemini-server のインスタンスに接続します。
  2. このサーバーが公開する、gemini_functionCall や gemini_generateContent などの定義済み MCP ツールを呼び出します。

この mcp-gemini-server が、リクエストの構成、API キーの管理、応答の処理など、Google Gemini API との必要なやり取りをすべて内部で処理するため、これらの詳細を MCP クライアントから切り離せます。

mcp-gemini-server を使用するメリット:
  • 抽象化と簡素化: クライアントアプリケーションで Gemini SDK を直接統合したり、MCP 形式のやり取りに必要な API の詳細を管理したりする必要がありません。標準的な MCP ツール呼び出しを行うだけです。
  • 一元的な設定: API キー、デフォルトのモデル選択、安全性設定などは、mcp-gemini-server 内で一元管理されます。
  • 豊富なツールセット: 関数呼び出しだけでなく、さまざまな Gemini 機能(テキスト生成、チャット、ファイル処理、画像生成など)に対応する幅広い定義済み MCP ツールを提供します。
  • 相互運用性: Gemini SDK のネイティブサポートがなくても、あらゆる MCP 互換クライアントから Gemini の機能を利用できます。
各アプローチの選択基準:
  • SDK を直接使用する(Google の MCP の例など):
    • クライアントアプリケーション(Python や Node.js など)を構築しており、そのクライアント内で Gemini API とのやり取りを細かく制御したい場合に適しています。
    • Gemini SDK の依存関係とロジックをクライアントアプリケーション内で管理したい場合や、主に MCP に似た方法で構成された関数呼び出しに取り組む場合に便利です。
  • mcp-gemini-server を使用する:
    • 既存の MCP 対応エコシステム(別の LLM やワークフロー自動化システムなど)に Gemini の機能を公開したい場合に最適です。
    • クライアント側で SDK を大規模に統合せずに、Gemini の機能をツールとしてすばやくプロトタイプ化またはデプロイしたい場合に便利です。
    • より幅広い Gemini の機能を一貫した MCP ツールとして公開し、Gemini API とのやり取りの窓口を一元化したい場合に適しています。
このサーバー独自の MCP クライアントツールについて:

mcp-gemini-server には、mcpConnectToServer、mcpListServerTools、mcpCallServerTool などのツールも含まれています。これらのツールを使用すると、このサーバーを MCP クライアントとして、ほかの外部 MCP サーバーに接続できます。これは、MCP クライアントが Gemini の機能を利用するために mcp-gemini-server に接続する方法とは別の機能です。

環境変数

必須:
  • GOOGLE_GEMINI_API_KEY:Google Gemini API キー(必須)
本番環境で必須(NODE_ENV=test の場合を除く):
  • MCP_SERVER_HOST:サーバーのホストアドレス(例:「localhost」)
  • MCP_SERVER_PORT:ネットワークトランスポート用のポート(例:「8080」)
  • MCP_CONNECTION_TOKEN:クライアントがこのサーバーへの接続時に提示する必要がある、強力で一意な共有シークレットトークン。これは Google や外部サービスから提供されるものではありません。暗号学的に安全な方法を使って、ご自身で生成する必要があります。生成方法については、インストール手順のステップ 4 をご覧ください。このトークンは、サーバーと、接続するすべてのクライアントで同一でなければなりません。
任意 - Gemini API の設定:
  • GOOGLE_GEMINI_MODEL:デフォルトで使用するモデル(例:gemini-1.5-pro-latest、gemini-1.5-flash)
  • GOOGLE_GEMINI_DEFAULT_THINKING_BUDGET:モデルの推論を制御するための、デフォルトの思考予算(トークン単位、0-24576)
任意 - URL コンテキストの設定:
  • GOOGLE_GEMINI_ENABLE_URL_CONTEXT:URL コンテキスト機能を有効にします(指定可能な値:true、false。デフォルト:false)
  • GOOGLE_GEMINI_URL_MAX_COUNT:リクエストごとの URL の最大数(デフォルト:20)
  • GOOGLE_GEMINI_URL_MAX_CONTENT_KB:URL ごとのコンテンツの最大サイズ(KB 単位、デフォルト:100)
  • GOOGLE_GEMINI_URL_FETCH_TIMEOUT_MS:URL ごとの取得タイムアウト(ミリ秒単位、デフォルト:10000)
  • GOOGLE_GEMINI_URL_ALLOWED_DOMAINS:許可するドメインのカンマ区切りリストまたは JSON 配列(デフォルト:すべてのドメインを対象とする *)
  • GOOGLE_GEMINI_URL_BLOCKLIST:ブロックするドメインのカンマ区切りリストまたは JSON 配列(デフォルト:空)
  • GOOGLE_GEMINI_URL_CONVERT_TO_MARKDOWN:HTML コンテンツを Markdown に変換します(指定可能な値:true、false。デフォルト:true)
  • GOOGLE_GEMINI_URL_INCLUDE_METADATA:コンテキストに URL のメタデータを含めます(指定可能な値:true、false。デフォルト:true)
  • GOOGLE_GEMINI_URL_ENABLE_CACHING:URL コンテンツのキャッシュを有効にします(指定可能な値:true、false。デフォルト:true)
  • GOOGLE_GEMINI_URL_USER_AGENT:URL リクエストに使用するカスタム User-Agent ヘッダー(デフォルト:MCP-Gemini-Server/1.0)
任意 - セキュリティの設定:
  • ALLOWED_OUTPUT_PATHS:mcpCallServerTool(outputToFile パラメーターを使用)や writeToFileTool などのツールによるファイル書き込みを許可するディレクトリの絶対パスを、カンマ区切りで指定します。不正なファイル書き込みを防ぐための重要なセキュリティ機能です。設定しない場合、これらのツールでファイル出力は無効になります。
オプション - サーバー設定:
  • MCP_CLIENT_ID:このサーバーが他の MCP サーバーへのクライアントとして動作する場合に使用するデフォルトのクライアント ID(デフォルト:"gemini-sdk-client")
  • MCP_TRANSPORT:MCP サーバーで使用するトランスポート(選択肢:stdio、sse、streamable、http;デフォルト:stdio)
    • 重要:SSE(Server-Sent Events)は非推奨ではなく、MCP プロトコルの重要な構成要素として引き続き使用されます
    • SSE は双方向通信に特に有用で、動的なツール更新やサンプリングなどの機能を実現できます
    • MCP エコシステム内では、各トランスポートタイプに固有の有効なユースケースがあります
  • MCP_LOG_LEVEL:MCP 操作のログレベル(選択肢:debug、info、warn、error;デフォルト:info)
  • MCP_ENABLE_STREAMING:HTTP トランスポートで SSE ストリーミングを有効にします(選択肢:true、false;デフォルト:false)
  • MCP_SESSION_TIMEOUT:HTTP トランスポートのセッションタイムアウト(秒単位。デフォルト:3600 = 1 時間)
  • SESSION_STORE_TYPE:セッションストレージのバックエンド(memory または sqlite;デフォルト:memory)
  • SQLITE_DB_PATH:sqlite ストア使用時の SQLite データベースファイルのパス(デフォルト:./data/sessions.db)
オプション - GitHub 連携:
  • GITHUB_API_TOKEN:GitHub API アクセス用のパーソナルアクセストークン(GitHub のコードレビュー機能に必要)。パブリックリポジトリでは、トークンに 'public_repo' と 'read:user' のスコープが必要です。プライベートリポジトリでは、トークンに 'repo' スコープが必要です。
オプション - レガシーサーバー設定(非推奨):
  • MCP_TRANSPORT_TYPE:非推奨です。代わりに MCP_TRANSPORT を使用してください
  • MCP_WS_PORT:非推奨です。代わりに MCP_SERVER_PORT を使用してください
  • ENABLE_HEALTH_CHECK:ヘルスチェックサーバーを有効にします(選択肢:true、false;デフォルト:true)
  • HEALTH_CHECK_PORT:ヘルスチェック用 HTTP サーバーのポート(デフォルト:3000)

ルートディレクトリに、これらの変数を記述した .env ファイルを作成できます:

# Required API Configuration
GOOGLE_GEMINI_API_KEY=your_api_key_here

# Required for Production (unless NODE_ENV=test)
MCP_SERVER_HOST=localhost
MCP_SERVER_PORT=8080
MCP_CONNECTION_TOKEN=your_secure_token_here

# Optional API Configuration
GOOGLE_GEMINI_MODEL=gemini-1.5-pro-latest
GOOGLE_GEMINI_DEFAULT_THINKING_BUDGET=4096

# Security Configuration
ALLOWED_OUTPUT_PATHS=/var/opt/mcp-gemini-server/outputs,/tmp/mcp-gemini-outputs   # For mcpCallServerTool and writeToFileTool

# URL Context Configuration
GOOGLE_GEMINI_ENABLE_URL_CONTEXT=true  # Enable URL context features
GOOGLE_GEMINI_URL_MAX_COUNT=20          # Maximum URLs per request
GOOGLE_GEMINI_URL_MAX_CONTENT_KB=100    # Maximum content size per URL in KB
GOOGLE_GEMINI_URL_FETCH_TIMEOUT_MS=10000 # Fetch timeout per URL in milliseconds
GOOGLE_GEMINI_URL_ALLOWED_DOMAINS=*     # Allowed domains (* for all, or comma-separated list)
GOOGLE_GEMINI_URL_BLOCKLIST=malicious.com,spam.net # Blocked domains (comma-separated)
GOOGLE_GEMINI_URL_CONVERT_TO_MARKDOWN=true # Convert HTML to markdown
GOOGLE_GEMINI_URL_INCLUDE_METADATA=true # Include URL metadata in context
GOOGLE_GEMINI_URL_ENABLE_CACHING=true   # Enable URL content caching
GOOGLE_GEMINI_URL_USER_AGENT=MCP-Gemini-Server/1.0 # Custom User-Agent

# Server Configuration
MCP_CLIENT_ID=gemini-sdk-client  # Optional: Default client ID for MCP connections (defaults to "gemini-sdk-client")
MCP_TRANSPORT=stdio  # Options: stdio, sse, streamable, http (replaced deprecated MCP_TRANSPORT_TYPE)
MCP_LOG_LEVEL=info   # Optional: Log level for MCP operations (debug, info, warn, error)
MCP_ENABLE_STREAMING=true # Enable SSE streaming for HTTP transport
MCP_SESSION_TIMEOUT=3600  # Session timeout in seconds for HTTP transport
SESSION_STORE_TYPE=memory  # Options: memory, sqlite
SQLITE_DB_PATH=./data/sessions.db  # Path to SQLite database file when using sqlite store
ENABLE_HEALTH_CHECK=true
HEALTH_CHECK_PORT=3000

# GitHub Integration
GITHUB_API_TOKEN=your_github_token_here

セキュリティに関する考慮事項

このサーバーには、一般的な脆弱性から保護するための複数のセキュリティ対策が実装されています。本番環境にデプロイする際は、これらのセキュリティ機能を理解することが重要です。

ファイルシステムのセキュリティ
  1. パスの検証と分離

    • ALLOWED_OUTPUT_PATHS:ファイル書き込みツールによるファイルの書き込み先を制限する重要なセキュリティ機能です
    • セキュリティ原則:ファイルの作成、読み取り、変更は、明示的に許可されたディレクトリ内でのみ可能です
    • 本番環境での要件:ディレクトリトラバーサル攻撃の可能性を防ぐため、必ず絶対パスを使用してください
  2. パストラバーサル対策

    • FileSecurityService は、以下によって堅牢なパストラバーサル対策を実施します:
      • パスを絶対パスに完全に解決する
      • ".." や "." のセグメントを適切に処理できるようパスを正規化する
      • 正規化されたパスが許可されたディレクトリ内にとどまることを検証する
      • 冗長なセキュリティ対策として、文字列ベースのプレフィックスと相対パス計算の両方を確認する
  3. シンボリックリンクのセキュリティ

    • シンボリックリンクを完全に解決し、許可されたディレクトリに対して検証します
    • シンボリックリンク自体とリンク先の両方を検証します
    • 回避を防ぐため、親ディレクトリのシンボリックリンクを再帰的に確認します
    • 検証前に、複数階層のシンボリックリンクチェーンを完全に解決します
認証と認可
  1. 接続トークン

    • MCP_CONNECTION_TOKEN は、このサーバーに接続するクライアントに基本認証を提供します
    • シークレットとして扱い、本番環境では強固で一意な値を使用してください
  2. API キーのセキュリティ

    • GOOGLE_GEMINI_API_KEY は Google Gemini API サービスへのアクセスを許可します
    • 安全に保管し、クライアント側のコードやログで決して公開しないでください
    • この値を設定するには、環境変数または安全なシークレット管理システムを使用してください
URL コンテキストのセキュリティ
  1. 多層 URL 検証

    • プロトコル検証:HTTP/HTTPS プロトコルのみ許可します
    • プライベートネットワーク保護:localhost、プライベート IP 範囲、内部ドメインへのアクセスをブロックします
    • ドメイン制御:ワイルドカードに対応した、設定可能な許可リスト/ブロックリスト
    • 不審なパターンの検出:パストラバーサルの可能性、危険な文字、悪意のあるパターンを特定します
    • IDN ホモグラフ攻撃の防止:紛らわしい可能性のある Unicode ドメイン名を検出します
  2. レート制限とリソース保護

    • ドメインごとのレート制限:デフォルトでは、ドメインごとに毎分 10 件のリクエストを許可します
    • コンテンツサイズの上限:URL ごとのコンテンツサイズの最大値を設定できます(デフォルトは 100KB)
    • リクエストのタイムアウト制御:リクエストのハングを防ぎます(デフォルトは 10 秒)
    • 同時リクエスト数の制限:過負荷を防ぐため、バッチ処理を制御します
  3. コンテンツのセキュリティ

    • コンテンツタイプの検証:テキストベースのコンテンツタイプのみ処理します
    • HTML のサニタイズ:スクリプトタグ、スタイルブロック、危険なコンテンツを削除します
    • メタデータの抽出:コードを実行せずに HTML メタデータを安全に解析します
    • メモリ保護:コンテンツを切り詰めて、メモリ枯渇攻撃を防ぎます
ネットワークセキュリティ
  1. トランスポートオプション

    • stdio:子プロセスとして起動した場合に、プロセス分離を実現します
    • SSE/HTTP:ネットワーク経由で公開する際は、適切なネットワークレベルの保護を確保してください
  2. ポートの設定

    • サーバーポートを公開する際は、ファイアウォールルールを適切に設定してください
    • 本番環境へのデプロイでは、TLS 終端を行うリバースプロキシの使用を検討してください
本番環境へのデプロイに関する推奨事項
  1. ファイルパス

    • ALLOWED_OUTPUT_PATHS には必ず絶対パスを使用してください
    • ソースコードの変更を防ぐため、アプリケーションディレクトリ外のパスを使用してください
    • 適切な権限を設定した、用途を限定した特定のディレクトリに制限してください
    • 「/」、「/etc」、「/usr」、「/bin」、「/home」など、機密性の高いシステムディレクトリは絶対に含めないでください
  2. プロセス分離

    • 制限されたユーザー権限でサーバーを実行してください
    • さらなる分離のため、コンテナ化(Docker)を検討してください
  3. シークレット管理

    • 本番環境では .env ファイルの代わりに、安全なシークレット管理ソリューションを使用してください
    • API キーと接続トークンを定期的にローテーションしてください
  4. URL コンテキストのセキュリティ

    • 必要な場合にのみ URL コンテキストを有効にしてください:不要な場合は GOOGLE_GEMINI_ENABLE_URL_CONTEXT=false を設定します
    • ドメイン許可リストを厳しく設定してください:本番環境では GOOGLE_GEMINI_URL_ALLOWED_DOMAINS=* を避けてください
    • 包括的なブロックリストを設定してください:既知の悪意のあるドメインを GOOGLE_GEMINI_URL_BLOCKLIST に追加します
    • 保守的なリソース制限を設定してください:GOOGLE_GEMINI_URL_MAX_CONTENT_KB と GOOGLE_GEMINI_URL_MAX_COUNT に適切な値を使用します
    • URL アクセスパターンを監視してください:不審な URL アクセス試行がないか、ログを確認します
    • ネットワークレベルの保護を検討してください:ファイアウォールやプロキシを使用して、URL フィルタリングを追加します

エラー処理

ツールの実行に失敗した場合、サーバーは MCP 標準の McpError 型を使用して、強化されたエラー処理を提供します。このオブジェクトには次の情報が含まれます。

  • code:エラーの種類を示す ErrorCode 列挙値です。
    • InvalidParams:パラメーターの検証エラー(型の誤り、必須フィールドの欠落など)
    • InvalidRequest:安全上のブロックやリソースが見つからない場合を含む、一般的なリクエストエラー
    • PermissionDenied:認証または認可の失敗
    • ResourceExhausted:レート制限、クォータ、リソース容量に関する問題
    • FailedPrecondition:満たされていない条件を必要とする操作
    • InternalError:予期しないサーバーまたは API のエラー
  • message:エラーの詳細を示す、人が読める形式の説明です。
  • details:(任意)Gemini SDK エラーの、より具体的な情報を含むオブジェクトです。
実装の詳細

サーバーでは、エラー処理に多層的なアプローチを採用しています。

  1. 検証レイヤー:Zod スキーマを使用して、ツールレベル(MCP リクエスト)とサービスレイヤー(API 呼び出し前)の両方ですべてのパラメーターを検証します。
  2. エラーの分類:詳細なエラーマッピングシステムにより、Google GenAI SDK のエラーを特定のエラータイプに分類します。
    • GeminiValidationError:パラメーターの検証エラー
    • GeminiAuthError:認証の問題
    • GeminiQuotaError:レート制限とクォータ超過
    • GeminiContentFilterError:コンテンツの安全性フィルタリング
    • GeminiNetworkError:接続とタイムアウトの問題
    • GeminiModelError:モデル固有の問題
  3. 再試行メカニズム:一時的なエラーに対して、指数バックオフによる自動再試行を行います。
    • ネットワークの問題、タイムアウト、レート制限エラーは自動的に再試行されます
    • 再試行パラメーター(試行回数、遅延、バックオフ係数)を設定できます
    • 同期した再試行を防ぐため、ジッターによるランダム化を行います
    • デバッグ用に再試行の詳細をログに記録します

一般的なエラーシナリオ:

  • 認証エラー: PermissionDenied - API キーが無効、認証情報の有効期限切れ、またはアクセス権限がありません。
  • パラメーターの検証: InvalidParams - 必須フィールドの欠落、データ型の誤り、または無効な値です。
  • 安全性によるブロック: InvalidRequest - 安全性フィルターによってブロックされたコンテンツです。詳細にはブロック理由として SAFETY が示されます。
  • ファイル/キャッシュが見つからない: InvalidRequest - リソースが見つかりません。詳細には見つからないリソースが示されます。
  • レート制限: ResourceExhausted - API クォータを超過したか、レート制限に達しました。詳細には制限の内容が示されます。
  • File API が利用できない: FailedPrecondition - 有効な Google AI Studio キーなしで File API 操作を実行しようとしています。
  • パストラバーサルのセキュリティ: InvalidParams - 許可されたディレクトリ外の音声ファイルにアクセスしようとしています。詳細にはセキュリティ検証の失敗内容が示されます。
  • 画像/音声の処理エラー:
    • InvalidParams - フォーマットの問題、サイズ制限、または無効な入力
    • InternalError - 分析中の処理失敗
    • ResourceExhausted - リソースを大量に消費する操作が制限を超過

サーバーは、トラブルシューティングに役立つ追加のコンテキストをエラーメッセージに含めます。これには、チャット関連のエラーにおけるセッション ID や、パラメーターエラーの具体的な検証内容が含まれます。

具体的なトラブルシューティング情報については、返された McpError の message フィールドと details フィールドを確認してください。

開発とテスト

このサーバーには、Gemini API との機能および互換性を確保するための包括的なテストスイートが含まれています。テストは、ユニットテスト(個々のコンポーネントを対象)と統合テスト(エンドツーエンドの機能を対象)に分かれています。

テストの構成
  • ユニットテスト:tests/unit/ にあります。モックされた依存関係を使用して、個々のコンポーネントを単独でテストします
  • 統合テスト:tests/integration/ にあります。実際にサーバーとやり取りして、エンドツーエンドの機能をテストします
  • テストユーティリティ:tests/utils/ にあります。テスト用のヘルパー関数とフィクスチャが含まれています
テストの実行
# Install dependencies first
npm install

# Run all tests
npm run test

# Run only unit tests
npm run test:unit

# Run only integration tests
npm run test:integration

# Run a specific test file
node --test --loader ts-node/esm tests/path/to/test-file.test.ts
テスト方針
  1. サービスのモック:テストでは、直接メソッドを置き換える方法とモックインターフェースを組み合わせて、Gemini API のレスポンスをシミュレートします。複雑なオブジェクト構造を持つ @google/genai SDK(v0.10.0)では、特に重要です。

  2. 環境変数:テストでは必要な環境変数を自動的に確認し、API キーが利用できない場合は、そのキーを必要とするテストをスキップします。これにより、認証情報がなくても中核機能をテストできます。

  3. テストサーバー:統合テストでは、テスト用に設定された MCP ハンドラーを備えた、分離された HTTP サーバーインスタンスを作成するテストサーバーフィクスチャを使用します。

  4. RetryService:指数バックオフ、ジッター、設定可能な再試行パラメーターを用いて、一時的なエラーを適切に処理できることを確認するため、再試行メカニズムを入念にテストします。

  5. 画像生成:Gemini モデルと専用の Imagen 3.1 モデルの両方に対応する画像生成について、Gemini API との複雑なやり取りを重点的にテストします。

テスト環境のセットアップ

API アクセスが必要なテストを実行するには、プロジェクトのルートに .env.test ファイルを作成し、次の変数を設定してください。

# Required for basic API tests
GOOGLE_GEMINI_API_KEY=your_api_key_here

# Required for router tests
GOOGLE_GEMINI_MODEL=gemini-1.5-flash

テストスイートは利用可能な環境変数を自動的に検出し、設定が不足している場合は、それを必要とするテストをスキップします。

コントリビューション

MCP Gemini Server の改善に向けたコントリビューションを歓迎します。このセクションでは、プロジェクトに貢献するためのガイドラインを説明します。

開発環境のセットアップ
  1. リポジトリをフォークしてクローンする

    git clone https://github.com/yourusername/mcp-gemini-server.git
    cd mcp-gemini-server
    
  2. 依存関係をインストールする

    npm install
    
  3. 環境変数を設定する 「環境変数」セクションの説明に従い、必要な変数を設定した .env ファイルをプロジェクトのルートに作成します。

  4. ビルドして実行する

    npm run build
    npm run dev
    
開発プロセス
  1. フィーチャーブランチを作成する

    git checkout -b feature/your-feature-name
    
  2. 変更を加える コードスタイルのガイドラインに従って、機能を実装するか、不具合を修正します。

  3. テストを作成する 機能を確認し、リグレッションを防ぐため、変更内容のテストを追加します。

  4. テストとリンティングを実行する

    npm run test
    npm run lint
    npm run format
    
  5. 変更をコミットする 変更の目的が伝わる、明確で具体的なコミットメッセージを使用します。

テストのガイドライン
  • 新しい機能にはすべてユニットテストを作成する
  • 機能を変更する際は既存のテストを更新する
  • プルリクエストを送信する前に、すべてのテストが成功することを確認する
  • 成功ケースと失敗ケースの両方を含める
  • 外部サービスなしでテストを実行できるよう、外部依存関係をモックする
プルリクエストの手順
  1. ドキュメントを更新する 変更内容が反映されるよう、README.md やその他のドキュメントを更新します。

  2. プルリクエストを送信する

    • 変更内容を明確に説明する
    • 関連する課題へのリンクを記載する
    • 変更内容のテスト方法を説明する
    • すべての CI チェックが成功することを確認する
  3. コードレビュー

    • レビュアーからのフィードバックに対応する
    • 要求された変更を行い、PR を更新する
コーディング規約
  • 既存のコードスタイルに従う(クラス/インターフェース/型には PascalCase、関数/変数には camelCase を使用する)
  • TypeScript のインターフェースを使用して、厳密な型付けを行う
  • 公開 API は JSDoc コメントで文書化する
  • 基底エラークラスを拡張して、エラーを適切に処理する
  • 依存性注入を用いたサービスベースのアーキテクチャに従う
  • スキーマ検証には Zod を使用する
  • プロジェクトの ESLint と Prettier の設定に従ってコードをフォーマットする

コードレビュー用ツール

MCP Gemini Server は、Gemini のモデルを活用して git の差分や GitHub リポジトリを分析する、強力なコードレビュー機能を提供します。これらのツールは、潜在的な問題の特定、改善案の提示、コード変更に対する包括的なフィードバックの提供に役立ちます。

ローカル Git 差分のレビュー

コマンドラインから直接、ローカルの Git 変更をレビューします:

# Using the included CLI script
./scripts/gemini-review.sh

# Options
./scripts/gemini-review.sh --focus=security --reasoning=high

CLI スクリプトでは、さまざまなオプションを使用できます:

  • --focus=FOCUS:レビューの焦点(security、performance、architecture、bugs、general)
  • --model=MODEL:使用するモデル(コスト効率を考慮し、デフォルトでは gemini-flash-2.0 を使用)
  • --reasoning=LEVEL:推論のレベル(none、low、medium、high)
  • --exclude=PATTERN:グロブパターンを使用して除外するファイル
GitHub リポジトリのレビュー

以下のツールを使用して、GitHub リポジトリ、ブランチ、プルリクエストをレビューします:

  • GitHub PR Review Tool:プルリクエストの問題点と改善点を分析します
  • GitHub Repository Review Tool:リポジトリ全体またはブランチを分析します
コストの最適化

デフォルトでは、コードレビュー用ツールはコスト効率に優れた gemini-flash-2.0 モデルを使用します。このモデルは、ほとんどのコードレビュータスクにおいて、コストと性能のバランスに優れています。特に複雑なコードベースや、より深い推論が必要な場合は、より高性能なモデルを指定できます:

# Using a more powerful model for complex code
./scripts/gemini-review.sh --model=gemini-1.5-pro --reasoning=high
テストの実行

GitHub のコードレビュー機能のテストでも、より安価なモデルを使用できます:

# Run tests with the default gemini-flash-2.0 model
npm run test:unit

サーバーの機能

ヘルスチェックエンドポイント

サーバーには、監視やステータス確認に使用できる、組み込みのヘルスチェック用 HTTP エンドポイントが用意されています。これは MCP サーバーのトランスポートとは別で、軽量な HTTP サーバーとして動作します。

有効にすると、次の場所からヘルスチェックにアクセスできます:

http://localhost:3000/health

ヘルスチェックエンドポイントは、以下の情報を含む JSON レスポンスを返します:

{
  "status": "running",
  "uptime": 1234,  // Seconds since the server started
  "transport": "StdioServerTransport",  // Current transport type
  "version": "0.1.0"  // Server version
}

curl を使用して、ヘルスチェックエンドポイントを確認できます:

curl http://localhost:3000/health

以下の環境変数を使用して、ヘルスチェックを設定できます:

  • ENABLE_HEALTH_CHECK:「false」に設定すると、ヘルスチェックサーバーを無効にします(デフォルト:「true」)
  • HEALTH_CHECK_PORT:ヘルスチェックサーバーのポート番号(デフォルト:3000)
セッションの永続化

サーバーは、HTTP/SSE トランスポート向けの永続的なセッションストレージをサポートしています。これにより、サーバーの再起動後もセッションを維持でき、水平スケーリングが可能になります。

ストレージバックエンド
  1. インメモリストア(デフォルト)

    • セッションはサーバーのメモリに保存されます
    • 開発時に優れたパフォーマンスを発揮します
    • サーバーの再起動時にセッションは失われます
    • 外部依存関係はありません
  2. SQLite ストア

    • セッションはローカルの SQLite データベースに永続化されます
    • サーバーの再起動後もセッションが維持されます
    • 期限切れセッションを自動的にクリーンアップします
    • 単一インスタンスの本番環境へのデプロイに適しています
設定

SQLite によるセッションの永続化を有効にします:

export SESSION_STORE_TYPE=sqlite
export SQLITE_DB_PATH=./data/sessions.db  # Optional, this is the default

SQLite データベースのファイルとディレクトリは、初回使用時に自動作成されます。データベースには以下が含まれます:

  • パフォーマンス向上のための自動インデックス作成
  • 期限切れセッションの組み込みクリーンアップ機能
  • データ整合性を保つ ACID 準拠
セッションのライフサイクル
  • クライアントが HTTP/SSE トランスポート経由で接続すると、セッションが作成されます
  • 各セッションには設定可能なタイムアウトがあります(デフォルト:1 時間)
  • アクティビティのたびにセッションの有効期限が延長されます
  • 期限切れセッションは毎分自動的にクリーンアップされます
グレースフルシャットダウン

サーバーは、SIGTERM と SIGINT シグナルに対するグレースフルシャットダウン処理を実装しています。サーバーがシャットダウンシグナルを受信すると、以下の処理を行います:

  1. MCP サーバーのトランスポートを適切に切断します
  2. 実行中であれば、ヘルスチェックサーバーを終了します
  3. シャットダウンのステータスをログに記録します
  4. 適切な終了コードで終了します(正常終了の場合は 0、エラー発生時は 1)

これにより、サーバーをコンテナ化環境で実行している場合や、手動で停止する場合に、正常に終了できます。

既知の問題

  • ページネーションの問題: gemini_listCaches は、SDK の Pager オブジェクトの反復処理に制限があるため、nextPageToken を確実に返さない場合があります。回避策は実装されていますが、信頼性には限りがあります。
  • パスの要件: 音声文字起こしの処理をサーバー環境から実行する場合、絶対パスが必要です。相対パスはサポートされていません。
  • ファイルサイズの制限: 文字起こしに使用する音声ファイルの上限は 20MB です(base64 エンコード前の元のファイルサイズ)。サーバーはファイルを読み込み、内部で base64 に変換します。これより大きなファイルはエラーメッセージとともに拒否されます。
  • API の互換性: キャッシュ API は Vertex AI の認証情報ではサポートされておらず、Google AI Studio の API キーのみで利用できます。
  • モデルのサポート: このサーバーは主に最新の Gemini 1.5 および 2.5 モデルを対象にテストおよび最適化されています。他のモデルも動作するはずですが、これらのモデルを中心にテストと機能の互換性を確認しています。
  • TypeScript のビルドに関する問題: TypeScript のビルドでは、主にテストファイルでエラーが発生する場合があります。これらは型の互換性に関する問題であり、実行時の機能には影響しません。ビルド時の警告が出ても、サーバー自体は正常に動作します。
  • リソース使用量:
    • 画像処理には多くのリソースが必要です。特に解像度の高い画像ではその傾向が顕著です。応答を速くするには、より小さな解像度(512x512)の使用を検討してください。
    • 複数の画像を同時に生成すると、リソース使用量が生成数に比例して増加します。
    • 音声文字起こしの対象ファイルは 20MB 未満に限られます(元のファイルサイズ)。サーバーはディスクからファイルを読み込み、内部で base64 に変換します。処理には、ファイルサイズや音声の複雑さに応じて、かなりの時間とリソースが必要になる場合があります。
  • コンテンツの処理:
    • base64 エンコードされた画像は、大きなファイルサイズを効率的に処理できるよう、チャンクに分けてストリーミングされます。
    • 視覚コンテンツの理解精度は、コンテンツの種類(グラフ、図、ドキュメントなど)によって異なる場合があります。
    • 音声文字起こしの精度は、音質、話者数、バックグラウンドノイズに左右されます。
  • URL コンテキスト機能:
    • URL コンテキストはデフォルトで無効になっており、GOOGLE_GEMINI_ENABLE_URL_CONTEXT=true で明示的に有効にする必要があります。
    • JavaScript でレンダリングされたコンテンツはサポートされておらず、静的 HTML コンテンツのみが処理されます。
    • 一部のウェブサイトでは自動アクセスがブロックされる場合や、現在サポートされていない認証が必要な場合があります。
    • コンテンツの抽出品質は、ウェブサイトの構造や書式によって異なる場合があります。
    • ドメインごとのレート制限(デフォルトでは毎分 10 リクエスト)が、一括処理に影響する場合があります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。