mcpField
G
gemini-mcp

gemini-mcp

ローカル
github.com/chrischallメディア・デザイン04 日前に更新

gemini-mcp について

Google Geminiで画像、動画、音楽を生成・編集するMCPサーバーです。画像の反復編集やファイル参照の再利用に対応し、長時間の生成も扱えます。

主な機能

  1. 01画像の生成・編集・合成
  2. 02一貫性のある画像セット作成
  3. 03複数ターンでの画像調整
  4. 04動画と音楽の生成
  5. 05再利用可能なファイルの管理
  6. 06長時間タスクの非同期実行

活用シーン

  1. 01テキストプロンプトから画像を作成
  2. 02生成画像を段階的に調整
  3. 03統一感のあるビジュアルを制作
  4. 04短い動画や音楽を生成

MCP 対応

stdio経由でGeminiのメディア生成およびファイル管理ツールをMCPクライアントに公開します。ローカルファイルのアップロードと削除には確認が必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"chrischall-gemini": {
"command": "npx",
"args": [
"-y",
"@chrischall/gemini-mcp"
],
"env": {
"GEMINI_API_KEY": "<GEMINI_API_KEY>",
"GEMINI_IMAGE_MODEL": "<GEMINI_IMAGE_MODEL>",
"GEMINI_OUTPUT_DIR": "<GEMINI_OUTPUT_DIR>",
"GEMINI_INPUT_DIR": "<GEMINI_INPUT_DIR>",
"GEMINI_UPLOAD_DIR": "<GEMINI_UPLOAD_DIR>",
"GEMINI_REFERENCE_DIR": "<GEMINI_REFERENCE_DIR>",
"GEMINI_TIMEOUT_MS": "<GEMINI_TIMEOUT_MS>",
"GEMINI_HEARTBEAT_MS": "<GEMINI_HEARTBEAT_MS>",
"GEMINI_CHAIN_RETRY_MS": "<GEMINI_CHAIN_RETRY_MS>",
"GEMINI_DEBUG": "<GEMINI_DEBUG>",
"GEMINI_RATE_CARD": "<GEMINI_RATE_CARD>"
}
}
}
}
起動コマンドnpx -y @chrischall/gemini-mcp
設定が必要な環境変数
GEMINI_API_KEYシークレットYour Google Gemini API key (aistudio.google.com/apikey)
GEMINI_IMAGE_MODELOverride the default image model (default: gemini-nano-banana-2.1)
GEMINI_OUTPUT_DIRDefault directory for generated images (default: ~/Downloads/gemini-mcp). When set, a per-call output_dir must be inside it.
GEMINI_INPUT_DIRDirectory to resolve bare input-image filenames against
GEMINI_UPLOAD_DIRRestrict local-file uploads to the Gemini Files API to these directories (path.delimiter-separated; unset = unrestricted)
GEMINI_REFERENCE_DIRRestrict local reference images (images / image paths sent to Gemini) to these directories (path.delimiter-separated), plus GEMINI_OUTPUT_DIR. Unset: GEMINI_UPLOAD_DIR applies; if that is unset too, unrestricted locally, and $MCP_DATA_DIR/uploads when MCP_DATA_DIR is set (hosted)
GEMINI_TIMEOUT_MSUpstream request timeout in ms (default: 60000, or 120000 for image_size: "4K"); each generation tool also takes a per-call timeout_ms
GEMINI_HEARTBEAT_MSProgress-notification cadence in ms while a generation runs (default: 10000; 0 disables) — keeps MCP hosts that reset their timeout on progress from timing out long generations
GEMINI_CHAIN_RETRY_MSHow long to wait out interactions-store lag when a chained call 404s (default: 120000; 0 disables retrying)
GEMINI_DEBUGWhen set, emit heartbeat diagnostics to stderr. Off by default.
GEMINI_RATE_CARDOverride/extend the shipped USD-per-1M-token rates used by gemini_token_usage's cost estimate, e.g. {"gemini-3-pro-image":{"input":2,"text_output":12,"image_output":120}}. Malformed JSON is ignored (a bad card must not fail generations).

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

パッケージ
npm@chrischall/gemini-mcp2.4.2

ツール

13

掲載時のツール一覧 · 1 週間前に更新

このツールにパラメーターはありません。

詳細

gemini-mcp

CI npm license

Google Gemini のメディア生成用 MCP サーバーです。stdio 経由で Claude に 13 種類のツールを提供します。利用可能なモデルの一覧表示、画像の生成・編集・合成、マスタープロンプトから一貫性のある画像セットの生成、複数ターンにわたる画像の調整(Interactions API)、動画生成(omni)、音楽生成(Lyria)、長時間の生成向け非同期結果ポーリング、再利用可能な画像参照のための Files API によるアップロード・一覧表示・削除が可能です。出力はデフォルトでディスクに書き込まれ(パスを返します)、または Base64 のインライン形式で返されます。Nano Banana / Nano Banana Pro(画像)、omni(動画)、Lyria(音楽)のモデルファミリーを使用し、Gemini v1beta API(generativelanguage.googleapis.com)上に構築されています。

AI(Claude Code)が開発および保守しています。

環境変数

変数必須説明
GEMINI_API_KEYはいGoogle Gemini API キー(aistudio.google.com/apikey)
GEMINI_IMAGE_MODELいいえデフォルトの画像モデルを上書きします(デフォルト:gemini-nano-banana-2.1)
GEMINI_OUTPUT_DIRいいえ生成画像のデフォルトディレクトリ(デフォルト:~/Downloads/gemini-mcp)。設定した場合、呼び出しごとの output_dir はこのディレクトリ内に指定する必要があります。
GEMINI_INPUT_DIRいいえ入力画像のファイル名のみが指定された場合に参照するディレクトリ(images: ["foo.jpg"] のように指定できます)
GEMINI_UPLOAD_DIRいいえGemini Files API にストリーミングするローカルファイル(gemini_upload_file の path、video_path)を、指定したディレクトリ内に制限します。: 区切り(Windows では ;)で複数指定でき、~ も使用できます。ディレクトリ外のパスはアップロード前に拒否されます。未設定の場合、制限はありません
GEMINI_REFERENCE_DIRいいえローカルの参照画像(読み込んで Gemini に送信する images / master_images のパス。インライン形式、または再利用時に Files API へアップロード)を、指定したディレクトリ内に制限します。: 区切り(Windows では ;)で指定でき、~ も使用できます。GEMINI_OUTPUT_DIR も常に許可されるため、生成画像を再度入力として使用できます。ディレクトリ外のパスは、シンボリックリンクを解決したうえで読み込み前に拒否されます。未設定の場合、代わりに GEMINI_UPLOAD_DIR が適用されます。どちらも未設定の場合、ローカルインストールでは参照画像に制限がありません(サーバーが読み取れるファイルはすべて送信可能です)。MCP_DATA_DIR が設定されている場合(ホスト環境)は、$MCP_DATA_DIR/uploads 内に制限されます
GEMINI_TIMEOUT_MSいいえ上流リクエストのタイムアウト(ミリ秒単位。デフォルト:60000、image_size: "4K" の場合は 120000)。各生成ツールでは、呼び出しごとの timeout_ms も指定できます
GEMINI_HEARTBEAT_MSいいえ生成中の進行状況通知の間隔(ミリ秒単位。デフォルト:10000。0 で無効)。進行状況に応じてタイムアウトをリセットする MCP ホストで、長時間の生成がタイムアウトするのを防ぎます
GEMINI_CHAIN_RETRY_MSいいえ呼び出しの連鎖時に 404 が返された場合に、Interactions のストアの反映を待つ時間(デフォルト:120000。0 で再試行を無効化)
確認

ローカルファイルを Google に送信する場合(images/master_images/video_path 入力、または gemini_upload_file の path)と、すべての削除では、まず確認が求められます。確認プロンプトを 表示できるクライアント(Claude Code)には、MCP_CONFIRM_ELICITATION=off でない限り、実際の プロンプトが表示されます。それ以外では、最初の呼び出しは何も実行せず、プレビュー(解決されたローカルパスとその MIME タイプおよびサイズ、または削除対象のメソッド/パス)と confirmToken を返します。同じ引数とそのトークンを指定して再度呼び出すと、処理が実行されます。トークンは 1 回限りで、有効期限があり、引数に厳密に紐付けられます。2 回の呼び出しの間にプロンプトが変更されたり ファイルが差し替えられたりした場合は、拒否されます。純粋なテキストプロンプト、URL、 files/ の参照、base64 入力は確認の対象外です。

variabledefault
MCP_CONFIRM_MODEask-user確認プロンプトを表示できないクライアント(claude.ai、Claude Desktop)で書き込みを行う場合の動作です。ask-user:2 段階で実行します。最初の呼び出しは何も実行せず、プレビューとトークンを返します。モデルは、トークンを使って再度呼び出す前に、チャットでユーザーの承認を得る必要があります。auto:同じく2 段階で実行しますが、モデルはプレビューを確認した後、トークンを使用できます。refuse:このようなクライアントでは書き込みを拒否します。プロンプトを表示できるクライアント(Claude Code)には、MCP_CONFIRM_ELICITATION=off でない限り、常に実際のプロンプトが表示されます。認識されない値は refuse として扱われます。
MCP_CONFIRM_ELICITATIONonoff にすると確認プロンプトは表示されず、すべてのクライアントで MCP_CONFIRM_MODE の動作になります。プロンプトに対応していると称しているものの、実際には表示しないクライアント(確認対象の呼び出しが停止する opencode 2.0.x)では、この値を設定してください。それ以外の値は on として扱われ、stderr に警告が出力されます。
MCP_CONFIRM_TTL_SECONDS600トークンの有効期間です。
MCP_CONFIRM_SECRETプロセスごとにランダム署名キーです。サーバーの再起動後もトークンを有効にする必要がある場合にのみ設定してください。
長時間の生成とクライアントのタイムアウト

4K/Pro モデルによる生成は、MCP ホスト独自の tools/call タイムアウトを超えることがあります(エラー -32001)。 サーバーは notifications/progress のハートビートを送信するため、進捗に応じてタイムアウトをリセットするホストは 処理が終わるまで待機できます。それでもホストが待機を打ち切った場合でも、通常はサーバー側の生成は完了します。画像は出力ディレクトリに書き込まれ、gemini_interact は interaction_id を記録した <image>.json サイドカーファイルも書き込みます。また、continue_last: true を指定すると、 失われた応答が属していたインタラクションを再開できます。

チェーン呼び出しで404が返される場合

previous_interaction_id を含むリクエストで404が返されても、チェーンが期限切れになった証拠ではありません。実際に確認された404の本文は汎用的な "Requested entity was not found." のみで、どのエンティティかは示されません。不明または名前が変更されたモデル IDや、期限切れの Files API files/… URI(有効期限は約48時間)も、まったく同じメッセージを返します。そのため、サーバーは確証のない原因を断定しなくなりました。上流からのテキストをそのまま表示し、gemini_interact が原因を特定するための検証を行います。

多くの場合、IDが存在しないわけではなく、まだ参照できる状態になっていないだけです。インタラクションストアは結果整合性を採用しているため、新しく作成されたIDは404を返すことがありますが、数分後には同じIDを正常に取得できます。負荷の大きいターン(4K、Pro、thinking_level: high)で発生しやすく、まさにチェーンの起点にしたいターンです。そのため、チェーン呼び出しで404が返された場合は、問題が発生したと判断する前に、指数バックオフで最大120秒(GEMINI_CHAIN_RETRY_MS)再試行します。404では何も生成されず、課金もされないため、待ち時間以外のコストはかかりません。

この待機時間を使い切ると、ツールはそのIDのサイドカーを検索して、生成された画像を再度添付し、チェーンなしでリクエストを再実行します。

  • 再実行が成功する → 実際に問題だったのはチェーンです。画像は取得でき、結果は chain_recovered: { expired_interaction_id, reanchored_on } として報告されます。404になった試行では何も生成されないため、手動で再アンカーした場合にかかる1回分の生成コストで済みます。
  • 再実行でも404が返される → 原因はインタラクション ID ではありません。上流からのテキストとともにその旨が明確に伝えられ、ずっと正常だったインタラクションを追跡するよう促すのではなく、モデル ID と該当する files/… URI を確認するよう案内されます。
  • 該当するサイドカーが見つからない → 推測せず、元のエラーが返されます。誤った画像を起点に再アンカーすると、編集内容が気付かないうちに損なわれるためです。

別途、continue_last はサーバープロセスの終了で途切れなくなりました。メモリ上にIDがない場合は、出力ディレクトリにある最新の <image>.json サイドカーから再開し、continued_from_sidecar: true を報告します。このケースでは、そもそもチェーンは期限切れではありませんでした。インタラクションは上流でずっと有効で、IDの記録だけが失われていたのです。

タイムアウトを回避できないホスト(例:進捗状況を無視する約30秒固定の上限がある Claude Desktop)でも、次の2つのガードにより、安全かつ無駄なく再実行できます。

  • async: true を指定すると、画像の代わりに job_id がただちに返されるため、呼び出しがタイムアウトしません。job_id を指定して gemini_get_result を呼び出し、done になるまで結果を確認してください。
  • idempotency_key を指定すると、同じキーでの再試行は冪等になり、2回目の生成に課金される代わりに、記録済みの結果が返されます(reused: true)。キーを指定しなくても、処理中の同一リクエストは自動的に重複排除されます。

ツール

ツール説明
gemini_list_models利用可能な Gemini 画像モデルと現在のデフォルトを一覧表示します
gemini_image_generateテキストプロンプトから画像を生成します
gemini_image_editテキスト指示による単発の編集、または複数画像の合成を行います(一連の編集には gemini_interact を使用してください)
gemini_image_setマスター画像を生成し、それを参照する一貫性のある画像を N 枚生成します
gemini_interact反復的な調整に推奨されるツールです。Interactions API を介して複数ターンの生成・編集を行います。返された interaction_id を previous_interaction_id 経由で連鎖させるか、continue_last: true を指定します
gemini_video_generateGemini omni モデルを介して短い動画を生成します(テキスト→動画、画像→動画、2 枚の静止画の補間、edit または extend)。コストを左右するのは resolution 360p/720p/1080p/4k です。MP4 としてディスクに書き込まれます
gemini_music_generateLyria モデルを介してテキストプロンプトから音楽を生成します。lyria-3-clip-preview(30 秒、デフォルト)、lyria-3.5(フル尺、ボーカルあり)、または lyria-3-pro-preview を使用します。単一ターンで、MP3 としてディスクに書き込まれます
gemini_get_resultjob_id を指定して、async: true で開始した非同期生成の結果を取得します(ステータス running → done の結果)。ホストの tools/call タイムアウト後も、時間のかかる生成を継続できます
gemini_token_usageこれまでのこのセッションのトークン使用量と、推定 USD コストを表示します。ワークフローの支出を割り当てるには、ワークフローの前後に呼び出し、その差を計算します。日付付きの料金表に基づき、各呼び出しでその呼び出し自身のモデルに対して料金が計算されます(GEMINI_RATE_CARD で上書き可能)。残高を参照するアカウント残高エンドポイントはないため、支出の割り当てにはこの方法を使用します
gemini_upload_file画像(または動画・音声)を url、data_base64、またはローカルの path から Gemini Files API に一度アップロードし、再利用可能な files/<id> 参照を取得します
gemini_list_filesこの API キーで現在アップロードされているファイルを、MIME タイプと有効期限とともに一覧表示します
gemini_delete_fileアップロード済みファイルを約 48 時間の有効期限前に削除します(最初に確認が必要です。[確認](#confirmations)を参照)
gemini_sign_media(ホスト型デプロイのみ) r2_key を使用して、生成されたメディアの新しい署名付き URL を発行します。有効期限切れのリンクも再発行できます
gemini_view_media(ホスト型デプロイのみ) r2_key を使用して生成画像をインライン画像ブロックとして返すため、モデルは調整の前に生成した画像を実際に確認できます
gemini_get_upload_url(ホスト型デプロイのみ) シェルが認証ヘッダーなしで参照画像をアップロードできる、短期間有効の署名付き PUT URL を発行します。PUT の戻り値 r2_key は images_r2_keys、gemini_save_character、または gemini_upload_file で使用できます
gemini_save_character / gemini_list_characters / gemini_delete_character(ホスト型デプロイのみ) アカウントごとに永続化されるキャラクターライブラリです。参照画像と説明を名前を付けて保存し、生成ツールで characters: ["name"] を渡して使用します。有効期限はありません
gemini_save_style / gemini_list_styles / gemini_delete_style(ホスト型デプロイのみ) アカウントごとに永続化されるスタイルプリセットです。再利用可能なプロンプトの一部(任意で参照画像を含む)を保存し、生成ツールで style: "name" を渡して適用します。有効期限はありません

生成ツールには、スループットとレイテンシーを制御する以下の 3 つの設定も共通しています。async: true(job_id をすぐに返します)、max_wait_ms(指定した時間まで待機し、その後 job_id を返します。結果が速く得られた場合はインバンドで返され、時間のかかるバッチでもホストのタイムアウトに達しません)、idempotency_key(再試行時に再請求する代わりに、記録済みの結果を返します)。ホスト型デプロイでは、複数の画像を含む gemini_image_set の結果に bundle_url も含まれます。これはセット内の全画像をまとめた ZIP の署名付き URL です。ほかのホスト型リンクと同様に、有効期間は最大 24 時間です(ホストの BLOB ストレージの上限)。期限切れになった場合は、gemini_sign_media で再発行できます。(メモリ上で安全に ZIP 化できない大きさのセットではバンドルが省略され、その旨が bundle_skipped で示されます。各画像のリンクには影響しません。)

画像の表示(ホスト型)

ホスト型デプロイではファイルシステムがないため、生成した画像は開ける形式で返す必要があります。実際に、すべての結果に URL が含まれます。設定は不要です。

{
  "images": ["https://mcp.nullnet.app/b/<account>/gemini/gen/2026-07-29/ab12cd34-a-cat.png?exp=…&sig=…"],
  "media":  [{ "url": "https://…", "r2_key": "gen/2026-07-29/ab12cd34-a-cat.png",
               "expires_at": "2026-07-31T12:00:00.000Z",
               "curl_hint": "curl -sS -o a-cat.png \"https://…\"" }]
}

これらのリンクには認証ヘッダーは不要です。署名は URL に含まれているため、ブラウザー、curl、チャットメッセージで使用できます。有効期限は最長でも24時間です。ホストの Blob ストアでは、それより長い署名は受け付けられません。また、リンク先のオブジェクトはホストの保持スケジュールに従って削除されます。その期間中、r2_key が永続的な識別子になります。

  • gemini_sign_media(ホスト型デプロイのみ)は、r2_key から新しい署名付き URL を生成します。期限切れのリンクを再生成して、画像の料金を再度支払う必要はありません。
  • 各画像の横にインタラクション ID が保存されます。そのため、ホスト型デプロイでもローカル環境と同じように、失われたターンを復元できます。再起動後も continue_last: true が有効で、連鎖した404はそのインタラクションで生成された画像に再度関連付けられ、gemini_list_recent_media にはキーの一覧だけでなく、保存された各オブジェクトのプロンプト、モデル、インタラクション ID が表示されます。
  • gemini_view_media(ホスト型デプロイのみ)は、r2_key から画像そのものをインラインで返します。モデルはリンクを見られないため、これがないと生成 → 改良のループは画像を確認せずに進みます。これはすべての結果にバイト列を含めるのではなく、独立した呼び出しです。実際に画像を見るターンでのみ、画像トークンの料金が発生します。
  • r2_key を指定した gemini_upload_file は、このサーバーが生成したメディアを Files API の参照に変換します(サーバーが自身のキーを使って読み戻すため、署名を生成する必要はありません)。そのため、生成した画像を次の生成の参照画像として、手軽な1回の呼び出しで利用できます。
  • 冪等な再実行(idempotency_key)では、記録された結果を返す前に URL を再生成します。そのため、再利用した結果に無効なリンクが含まれることはありません。

重要な理由: MCP のインライン画像コンテンツブロック(inline: true)はアシスタントには表示されますが、多くのチャットクライアントではユーザーに表示されません。また、アシスタントは自身のコンテキストからバイト列を取り出して別の場所に保存することもできません。生成が正常に課金されても、画像が見えないことがありました。URL があれば、どこでも利用できます。inline も引き続き利用できますが、メディアを受け取る唯一の方法ではなくなりました。

バイト列の配信方法

ホストは生成された各オブジェクトを保存し、署名付きの期限付き URL(https://<host>/b/<account>/gemini/<key>?exp=&sig=)で配信します。設定も認証ヘッダーも不要です。リンク内の署名が認証情報となるため、curl でもブラウザーでも利用できます。

認証には、公開されていないキーではなく、署名付きの期限付き URL を使用します。 ランダムなキーのほうが単純ですが、期限切れにも無効化にもなりません。一度でもリンクがログに記録されたり転送されたりすると、いつまでも使えてしまいます。署名を使えば、期限を設けて1つのオブジェクトへのアクセスを許可できます。また、ホストの署名キー(MCP_BLOB_SIGNING_KEY。mcp-host が MCP_BLOB_BASE_URL とともに挿入し、このサーバーがどちらかを選ぶことはありません)をローテーションすれば、発行済みのリンクをすべて一度に無効化できます。その代わり、リンクは長く、手作業では短縮できません。

結果をユーザーに伝えるアシスタント向け

ユーザーに URL を提示してください。サンドボックスからホストへのネットワーク接続が可能であれば、URL から取得したバイト列をファイルとして添付すると、最も見やすくなります。できない場合は、リンク自体を提示してください。![](url) 形式の Markdown をインライン表示するかどうかはクライアントによって異なります。URL のみを表示するのが確実で、Markdown リンクの表示が確認できている場合は、それを追加するのもよいでしょう。

保持期間

保持期間はホスト側で管理され、このサーバーの設定ではありません。mcp-host では、blob ストアが生成メディア(gen/)と署名付きアップロード(up/)を独自のスケジュールで削除します(mcp-host の docs/BLOB-STORE.md を参照。デフォルトは 30 日です)。一方、キャラクター/スタイルライブラリ(lib/)は保持期間の対象外として書き込まれるため、保存した項目は期限切れになりません。すべての署名付きリンクの有効期間は、ストアの上限である 24 時間に制限されるため、ストアが有効とする期間を超えることはありません。オブジェクトが存在する限り、gemini_sign_media はリンクを再発行します。このサーバーが読み取る関連変数はホストから注入されます:MCP_BLOB_BASE_URL と MCP_BLOB_SIGNING_KEY。

プロンプトも保存されます。 ホスト型デプロイメントでは、生成された各オブジェクトの隣に小さな JSON レコードが作成され、プロンプト(先頭 500 文字)、モデル、インタラクション ID が保存されます。gemini_list_recent_media が表示するのはこの情報で、失われたターンの復元にも使われます。このレコードはオブジェクトとともに保存・削除されるため、保持期間は同じで、それ以上長くはなりません。ローカルでは、gemini_interact が出力ディレクトリ内の各画像の隣に <image>.json サイドカーファイルを書き込みます(モデル、インタラクション ID、オプション、およびモデルが返したテキスト。プロンプト自体は含まれません)。これらのファイルは必要に応じて保持または削除でき、自動的に期限切れになることはありません。プロンプトに実在の人物について記述する場合は、保持期間中、プロンプトがバケット内に保存されることにご注意ください。

コンテキストを消費せずに参照画像を送信する

参照画像を受け取るすべてのツール — gemini_image_generate、gemini_image_edit、 gemini_image_set、gemini_interact に加え、gemini_video_generate(参照用静止画)と gemini_music_generate — では、画像を 4 通りの方法で指定できます。モデルのコンテキストを消費するのは、そのうち 1 つだけです:

パラメーターバイトデータの転送方法コンテキスト消費量
images_url(master_images_url)サーバーが https URL からダウンロードなし
images_file_uris(master_images_file_uris)アップロード済みの files/<id> 参照なし
images_r2_keys(master_images_r2_keys)サーバーが独自のストアから読み込み(ホスト型デプロイメントのみ)なし
imagesローカルディスクから読み込み(stdio ビルドのみ)なし
characters / style名前で指定して添付する、保存済みライブラリエントリ(ホスト型デプロイメントのみ)なし
images_base64ツール呼び出しの JSON 経由JPEG 1 枚あたり約 14k トークン

images_base64 は、他の手段が使えない場合の最終手段です。比較的小さな写真でも約 14k トークンを消費し、元データを読み込む際にファイルが切り詰められていると、気付かないうちに破損します。ペイロードは base64 の形式を保つため、エラーではなく生成結果の不具合として表面化します。他の 3 つの方法を優先してください。

images_url — サーバーが取得します
{ "prompt": "make it look like winter", "images_url": ["https://example.com/photo.jpg"] }

取得できるのは、公開されている https:// URL に限られます。プライベートホスト、ループバックホスト、リンクローカルホストは拒否されます(IPv6 リテラルも解析されるため、ループバックとして [::ffff:7f00:1] も検出されます)。リダイレクトの各段階で再検証が行われ、各段階にタイムアウトが適用されます。レスポンスの Content-Type は image/* である必要があり、サイズは 15MB までに制限されます。この制限は Content-Length を信頼するのではなく、ストリーミング中に適用されます。失敗した場合は、問題のある URL が示されます。6MB を超えるデータは Files API にアップロードされ、インラインではなく uri で参照されます。これは、generateContent のリクエスト全体の上限が約 20MB のためです。

images_file_uris — 一度アップロードして、何度も参照
// 1. upload
{ "tool": "gemini_upload_file", "url": "https://example.com/photo.jpg" }
// → { "file_uri": "files/abc123", "mime_type": "image/jpeg", "expires": "..." }

// 2. reference it, as many times as you like
{ "prompt": "make it winter",  "images_file_uris": ["files/abc123"] }
{ "prompt": "make it sunrise", "images_file_uris": ["files/abc123"] }

アップロードは 約 48 時間保持されます。その後は参照を解決できなくなります(一般的な 404 として返されます。上記の連鎖 404 の節を参照)。gemini_image_set はこのような参照を一度だけ取得または解決し、マスター呼び出しとすべてのシーン呼び出しに渡します。

stdio ビルドでは、ローカルの images パスが同じセッション内で複数回参照されると、Files API に自動でアップロードされます(パス、mtime、サイズをキーとして使用)。そのため、同じ写真を繰り返し編集しても、バイトデータを再送信する必要はありません。ファイルを編集すると、キャッシュされたアップロードは無効になります。

署名付きアップロード URL — トークンは一切不要(ホスト版)

シェルを使うエージェント向けの想定された手順です。ディスク上のファイル → curl → r2_key → ツール呼び出しという流れで、画像が会話に入ることはありません。gemini_get_upload_url は有効期間が短い(約10分)署名付き PUT URL を発行し、シェルは認証ヘッダーを一切付けずにアップロードします。ダウンロードリンクと同じく、URL 内の署名が認証情報になります。

# 1. tool call: gemini_get_upload_url { filename: "photo.jpg", content_type: "image/jpeg" }
#    → { upload_url, r2_key, expires_at, curl_hint }

# 2. shell:
curl -sS -X PUT -H "Content-Type: image/jpeg" --data-binary @photo.jpg "$UPLOAD_URL"
# → { "r2_key": "up/<tenant>/2026-07-31/ab12cd34-photo.jpg", "size_bytes": 812345, ... }

署名の対象は、テナントにスコープされた1つのオブジェクトキー、宣言されたコンテンツタイプ、および有効期限です。アップロードは15MBまでに制限され、ストリームの読み取り時に制限が適用されます。受け付けるのはラスター画像形式(jpeg/png/webp/gif/avif/heic/heif/bmp/tiff)のみです。SVGは意図的に拒否されます。SVGはスクリプトを実行できるドキュメントであり、/media はサーバー自身のオリジンから配信されるためです。返された r2_key は、その後3通りの方法で利用できます。任意の生成ツールで images_r2_keys として直接指定する(サーバーが自身のバケットを読み取るため、会話にバイト列は入りません)、gemini_save_character で永続的に保存する、または gemini_upload_file({ r2_key }) で約48時間有効な Files API の参照として使う方法です。アップロードされたファイルには、ホストの blob-store 保持スケジュールが適用されます(up/ プレフィックス)。

キャラクター&スタイルライブラリ(ホスト版)

繰り返し登場する被写体やスタイルは、アカウントごとに一度保存すれば、有効期限なしで利用できます(ライブラリの lib/ オブジェクトは保持期限の対象外として書き込まれるため、ホストの削除処理ではスキップされます)。

// once:
{ "tool": "gemini_save_character", "name": "finn",
  "description": "6-year-old boy, curly red hair", "image_r2_key": "up/…/photo.jpg" }
{ "tool": "gemini_save_style", "name": "bold-cartoon-sports",
  "prompt_fragment": "bold cartoon style, thick outlines, saturated colors" }

// afterwards, on any generation:
{ "tool": "gemini_image_set",
  "master_prompt": "Finn on a soccer field",
  "scenes": ["kicking the ball", "celebrating a goal"],
  "characters": ["finn"], "style": "bold-cartoon-sports" }

キャラクター名を指定すると、保存済みの参照画像が添付され、その説明がプロンプトに織り込まれます。スタイル名を指定すると、その断片が追加され、参照画像があればそれも添付されます。gemini_image_set はマスター呼び出しとすべてのシーン呼び出しにキャラクターの参照画像を渡すため、セット全体で被写体の一貫性を保てます。

クイックスタート

{
  "mcpServers": {
    "gemini": {
      "command": "npx",
      "args": ["-y", "@chrischall/gemini-mcp"],
      "env": {
        "GEMINI_API_KEY": "your-api-key-here"
      }
    }
  }
}

使用方法の詳細は、SKILL.md をご覧ください。

コメント

MCP は初めてですか?

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

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