カテゴリー / VS Code・Git・ツール連携

Claude Code Gemini連携の方法|MCP登録と失敗時の切り分け方

この記事の目次

Claude Code Gemini 連携で最初に押さえるべき結論は、Claude Codeをゲートウェイ経由でGeminiに接続する構成は公式のサポート範囲に入っていない、という点です。公式のLLMゲートウェイ資料は、ゲートウェイ経由でClaude Codeを Claude 以外のモデルへ振り向ける使い方をサポートしないとしています。そこでこの記事では、Gemini側のコマンドやMCPサーバーを別途用意できる場合に、Claude Codeからそれを呼び出す方法を扱います。説明するのは、MCPサーバーとして登録する方法と、ターミナルのコマンドとしてClaude Codeに実行させる方法の2通りです。以下、Claude Code側の公式ドキュメントに書かれている範囲で説明します。

Claude CodeとGeminiの連携では何ができて、何ができないのか?

できないことから整理します。Claude Codeを組織で運用しているLLMゲートウェイにつなぐ公式手順はありますが、そのページには、どのゲートウェイを通しても Claude 以外のモデルへのルーティングはサポートしない、と明記されています。「Claude Codeの画面のまま中身をGeminiにする」構成を、ゲートウェイで組むことはサポートされていません。

もう一つ混同されやすいのが、Google Cloudとの関係です。Claude CodeはGoogle Cloud の Agent Platform(旧 Vertex AI)経由でも使えますが、これは Model Garden で Claude モデルへのアクセスを申請し、環境変数 CLAUDE_CODE_USE_VERTEX=1 などで接続する仕組みです。接続先と認証がGoogle Cloudになるだけで、動くモデルは Claude のままです。この構成についてはVertex AI経由で使う記事で扱っています。

残る選択肢は、Claude Codeが主体のまま、Gemini側のツールに一部の処理を頼むことです。公式ドキュメントによれば、Claude Codeはコマンドラインで実行できることなら実行でき、MCPを使えば外部サービスのツールを呼び出せます。この記事はこの2つの呼び出し口を使う前提で進めます。どちらの呼び出し方式を主に使うべきかで迷っている段階なら、先にClaude CodeとGeminiの違いの記事を読むほうが早く結論が出ます。

MCPで登録するか、コマンドとして呼ぶか、どう選ぶ?

判断の材料を表にまとめます。

比べる点 MCPサーバーとして登録 コマンドとして実行(Bash)
Claude Codeから見た形 名前の付いたツール(mcp__<server>__<tool>) 通常のシェルコマンド
接続と認証 サーバー側が担う 使うコマンド側の資料で確認する
承認ルールの書き方 mcp__<server>__* など Bash(<コマンド> <サブコマンド> *) など
状態の確認 claude mcp list と /mcp で接続状態が見える コマンドの実行結果で判断する
チームへの共有 .mcp.json をリポジトリに入れて共有できる 手順やルールを別途共有する

Gemini側にMCPサーバーとして起動する手段があり、チームで同じ設定を使い回したいならMCP登録が向いています。接続状態がコマンド一つで見えるので、切り分けも楽です。手元のGemini側コマンドで時々意見を聞く程度なら、追加登録の要らないコマンド実行で足ります。どこまで自動で実行させるかは、後述の権限ルールで決めます。

どちらを選んでも、Gemini側のコマンド名、起動方法、認証方法はGoogleが決めるものです。この記事ではClaude Code側の操作だけを書きます。

GeminiをMCPサーバーとして登録する手順は?

stdio サーバーは、手元のローカルプロセスとして動く方式です。Gemini側の資料が起動コマンドを示している場合は、この方式で次の構文を使って登録します。

claude mcp add [options] <name> -- <command> [args...]

<name> は自分で付ける名前で、後で権限ルールを書くときに mcp__<name>__* の形で使います。-- より後ろには、Gemini側の資料に書かれているMCPサーバーの起動コマンドをそのまま置きます。

ここで間違えやすい点が2つあります。

  • -- を省くと、起動コマンドに付いているフラグをClaude Codeが自分のオプションとして読もうとします。--transport、--env、--scope のようなClaude Code側のオプションは -- より前、起動コマンドは後ろ、と分けてください。
  • APIキーなどを --env KEY=value で渡すとき、--env の直後にサーバー名を置くと、名前まで環境変数の組として読まれて拒否されます。--env とサーバー名の間に --transport stdio などのオプションを1つ挟みます。

Gemini側の手順が Claude Desktop など別のMCPクライアント向けに書かれていて、claude mcp add のコマンドが載っていない場合もあります。その場合は手順の中から、URL、起動コマンド、mcpServers のJSONブロックのどれかを探します。起動コマンドなら上の構文に入れ、JSONブロックなら claude mcp add-json に mcpServers の内側のオブジェクトを渡します。

保存先は --scope で選びます。

  • local(既定): 今のプロジェクトで自分だけが使う。保存先は ~/.claude.json
  • project: プロジェクトの全員と共有する。保存先はプロジェクト直下の .mcp.json
  • user: 自分の全プロジェクトで使う。保存先は ~/.claude.json

認証情報を直接書き込むことを選ぶなら、リポジトリに入らない local か user を選んでください。.mcp.json でチームに共有する場合は、APIキーのような値を環境変数の参照(${VAR})で書ける仕組みが公式に用意されています。

登録に成功すると Added ... という行が表示されます。続けて接続を確かめます。

claude mcp list
claude mcp get <name>

✔ Connected と表示されたら、Claude Codeを起動して /mcp を開きます。接続中のサーバーごとに提供ツールの数が表示されます。

Geminiの呼び出しを毎回承認しないで済ませるには?

Manualモードでは、Claude Codeはファイル編集とシェルコマンドの前に確認を求めます。Geminiへの問い合わせを繰り返す作業では確認が多くなるので、信頼できる呼び出しだけを許可ルールに入れます。許可ルールは .claude/settings.json などの設定ファイルに書けます。

MCPで登録した場合のルールはこうなります。

  • mcp__<name>__*: そのサーバーの全ツールを許可する
  • mcp__<name>__<tool>: 特定のツールだけを許可する

最初は問い合わせに使うツールだけを個別に許可し、全ツールの許可は提供ツールを把握してからにします。

コマンドとして呼ぶ場合は Bash ルールで書きます。公式の注意点は、* をサブコマンドの後ろに置くことです。たとえば Bash(git log *) は git log だけを許可し、Bash(git *) は git のすべてのサブコマンドを許可します。Gemini側のコマンドでも考え方は同じで、プログラム名の直後に * を置くと、そのコマンドでできる操作すべてを許すことになります。

また、deny ルールは allow ルールより優先されます。広い deny を書くと、その範囲の中で細かく allow を書いても例外にはなりません。権限モードそのものの違いは権限モードの記事で説明しています。

Geminiの出力でメインの会話を重くしないには?

Geminiに大きなログを読ませると、返る結果も長くなりがちです。Claude Code側には次の仕組みがあります。

  • MCPツールの出力が10,000トークンを超えると警告が出ます。既定の上限は25,000トークンで、環境変数 MAX_MCP_OUTPUT_TOKENS で変えられます。警告が出る閾値は固定です。
  • MCPのツール定義は既定で遅延ロードされます。実際に使うまでは、ツール名とサーバーの指示だけがコンテキストを消費します。

さらに、Geminiへの問い合わせ自体を本体の会話から切り離したい場合は、サブエージェントを使います。サブエージェントの mcpServers フィールドにMCPサーバーをインラインで書くと、エージェント定義ファイルのフォルダーに対する信頼ルールを満たす場合、そのサーバーはサブエージェントの起動時に接続され、終了時に切断されます。ツールはサブエージェントにだけ渡り、呼び出し元の会話には載りません。サブエージェントの作り方はサブエージェントの記事にまとめています。

連携が動かないとき、どこから確認すればいい?

まず claude mcp list の表示を見ます。ここに失敗が出ていても、list コマンドが壊れているわけではなく、そのサーバーに接続できなかったという意味です。表示ごとに確認する場所が変わります。

表示・症状 確認すること
✘ Failed to connect claude mcp get <name> の Issue: 行に出るエラー内容を読む。起動コマンドが -- の後ろにあるか、フラグが前後で混ざっていないかを見直す
! Needs authentication OAuth認証が必要なリモートサーバーなら、Claude Code内の /mcp から認証する
⏸ Pending approval (run `claude` to approve) .mcp.json のサーバーが未承認。対話モードで claude を起動して承認する
設定値の空白に関する警告 トークンを貼り付けたときの末尾の改行などが残っている。Claude Codeは自動で除去しないので、設定を直す
同じ名前が複数スコープにある警告 claude mcp remove <name> --scope <scope> で不要な方を消す
起動が間に合わない 環境変数 MCP_TIMEOUT で起動のタイムアウトを設定する(例: MCP_TIMEOUT=10000 claude で10秒)
No such tool available セッション再開後、接続中のサーバーのツールを呼んだが、初回接続が最大10秒の待機に間に合わなかったか、失敗後の再試行中だった。接続状態を確認してから再度頼む

失敗したサーバーや要認証のサーバーをまとめて再接続したいときは、Claude Code内で /mcp reconnect all を実行します。対話ターミナルでこれを使うには v2.1.284 以降が必要です。

Claude Code側が正常なのに結果が返らないときは、Gemini側のコマンドを単体でターミナルから実行し、Claude Codeを通さずに動くかを確かめると、失敗時にはどちら側の問題かを切り分けられます。MCP以外のエラーも含めた全般的な対処はエラー対処の記事にあります。

コードをGemini側へ渡す前に決めておくことは?

Gemini側へコードや指示を送る構成にする場合、送った後の扱いはGemini側の利用条件と設定を確認する必要があります。業務では、コードを渡す範囲として、Gemini連携を有効にしてよいリポジトリを先に決めておきます。

Claude Code側の公式ドキュメントが示す注意点は次のとおりです。

  • AnthropicはMCPサーバーのセキュリティ監査や管理をしていません。自作のサーバーか、信頼できる提供元のサーバーを使うよう勧めています。
  • 外部のコンテンツを取得するサーバーは、プロンプトインジェクションの経路になりえます。
  • .mcp.json に書かれたプロジェクトのサーバーは、対話セッションで使う前に承認を求められます。クローンしたリポジトリに見覚えのないサーバーがあれば、承認せずに中身を確認します。
  • 組織として使えるサーバーを制限したい場合は、管理者が Managed MCP の設定で制御できます。

これらをチームの運用ルールに落とし込む方法は、セキュリティ設定の記事で扱っています。

Gemini側で確認が必要なことは何か?

次の項目はGoogleが決めるもので、この記事では扱っていません。連携を組む前にGoogleの公式資料で確認してください。

  • Gemini側のツールのインストール方法と、MCPサーバーとして起動するためのコマンド
  • 認証方法(アカウントでのログインか、APIキーか)
  • 料金と利用上限
  • 入力したコードやプロンプトがGoogle側でどう扱われるか

Claude Code側の料金の考え方は料金プランの記事を参照してください。

まとめ

この記事で扱ったClaude CodeとGeminiの連携は、ゲートウェイでモデルを入れ替えるのではなく、Claude Codeが主体のまま、別途用意したGemini側のツールを呼ぶ形です。チームで共有し、接続状態を見ながら運用したいならMCP登録、手元のコマンドで時々意見を聞くならコマンド実行が向いています。登録では -- の位置と --env の順番、運用では許可ルールの範囲と出力の大きさ、トラブル時は claude mcp list の表示から確認を始めるのが近道です。

MCPと権限ルールの組み方は、Gemini以外との連携にもそのまま使えます。Claude Codeの学び方を探している方は、月額1,980円から参加できる学習コミュニティ「AI駆動ラボ」も参考にしてください。