factsGemini CLImcp-server

stable4 日前 · 2026-08-09

MCP servers with Gemini CLI

概要

Model Context Protocol(MCP)サーバーへの接続設定と、ツールの発見・実行の仕組み。settings.jsonmcpServers でサーバーを定義し、mcp オブジェクトでグローバルな規則を定める。

仕様

グローバル設定(mcp

  • mcp.serverCommand(string): MCP サーバーを起動するグローバルコマンド
  • mcp.allowed(string[]): 設定すると、この一覧(mcpServers のキーと一致するもの)のサーバーにのみ接続する
  • mcp.excluded(string[]): 接続しないサーバー

サーバーごとの設定(mcpServers

必須(いずれか 1 つ):

キー内容
commandStdio transport 用の実行ファイルのパス
urlSSE のエンドポイント URL
httpUrlHTTP streaming のエンドポイント URL

任意:

キー既定内容
argsStdio transport のコマンドライン引数
headersurl / httpUrl 使用時のカスタム HTTP ヘッダー
envサーバープロセスの環境変数。**$VAR_NAME / ${VAR_NAME}(全プラットフォーム)、%VAR_NAME%(Windows のみ)**で参照できる
cwdStdio transport の作業ディレクトリ
timeout600,000 ms(10 分)リクエストのタイムアウト
trustfalsetrue でこのサーバーのすべてのツール呼び出し確認を飛ばす
includeToolsこのサーバーから使うツール名の allowlist。指定しなければサーバーの全ツールが既定で有効
excludeTools除外するツール名。excludeToolsincludeTools に優先する。両方に載っているツールは除外される
targetAudienceIAP 保護されたアプリで allowlist された OAuth Client ID。authProviderType: 'service_account_impersonation' と併用
targetServiceAccountimpersonate する Google Cloud サービスアカウントのメールアドレス

環境変数の展開

  • env ブロック内で環境変数が自動展開される
  • POSIX / Bash 構文 $VARIABLE_NAME${VARIABLE_NAME} は全プラットフォーム、%VARIABLE_NAME%Windows 実行時のみ
  • 現在の環境に定義されていない変数は空文字列に解決される

環境のサニタイズ

  • MCP サーバープロセスを起動する際、既定でホストプロセスから継承した機微な環境変数を redact する。対象は
    • コアのプロジェクトキー(GEMINI_API_KEYGOOGLE_API_KEY など)
    • 機微パターンに一致する変数(*TOKEN**SECRET**PASSWORD**KEY**AUTH**CREDENTIAL*
    • 証明書と秘密鍵のパターン
  • サーバー設定の env プロパティで明示した変数(extension 由来のものを含む)は信頼され、自動 redaction の対象外になる
  • 明示的に定義する場合でも、秘密をハードコードせず環境変数展開("MY_KEY": "$MY_KEY")を使うことが推奨されている

リモートサーバーの OAuth

SSE または HTTP transport のリモート MCP サーバーで OAuth 2.0 に対応する。

  • OAuth discovery に対応するサーバーでは、OAuth 設定を省略して自動発見に任せられる

OAuth 設定プロパティ:

プロパティ内容
enabledこのサーバーで OAuth を有効にする
clientIdクライアント ID(dynamic registration では任意
clientSecretクライアントシークレット(public client では任意
authorizationUrl認可エンドポイント(省略時は自動発見
tokenUrlトークンエンドポイント(省略時は自動発見
scopes必要なスコープ
redirectUriカスタムリダイレクト URI。既定は OS が割り当てるランダムポートhttp://localhost:<random-port>/oauth/callback
tokenParamNameSSE URL でトークンを渡すクエリパラメータ名
audiencesトークンが有効な audience

トークン管理:

  • ~/.gemini/mcp-oauth-tokens.json に安全に保存される
  • refresh token がある場合、期限切れ時に更新される
  • 接続の試行ごとに検証され、無効・期限切れなら片付けられる

authProviderType:

内容
dynamic_discovery既定。サーバーから OAuth 設定を自動発見する
google_credentialsGoogle Application Default Credentials(ADC)を使う。このプロバイダでは必要なスコープの指定が必須
service_account_impersonationGoogle Cloud サービスアカウントを impersonate する。IAP 保護されたサービス向け(Cloud Run サービス向けに設計された
  • service_account_impersonation では targetAudiencetargetServiceAccount が必要。ローカルの ADC を使って対象のサービスアカウントと audience に対する OIDC ID トークンを生成し、それで認証する

ツールの命名と名前空間

  • すべての MCP ツールに無条件で FQN mcp_{serverName}_{toolName} が割り当てられる
  • ツールレジストリが FQN と元のサーバー識別のメタデータ対応を保持する
  • 2 つのサーバーが同じエイリアスを持ち、同名のツールを提供すると、最後に登録されたツールが前のものを上書きする
  • MCP サーバー名にアンダースコア(_)を使わない。 ポリシーパーサーは FQN を mcp_ 接頭辞直後の最初のアンダースコアで分割するため、ワイルドカードルールとセキュリティポリシーが黙って機能しなくなりうる

名前のサニタイズ:

  • 英数字・_-.: 以外の文字はアンダースコアに置き換えられる
  • 63 文字を超える名前は中間を ... に置き換えて切り詰められる

スキーマの処理

Gemini API 互換のためツールのパラメータスキーマがサニタイズされる。

  • $schema プロパティは削除される
  • additionalProperties は取り除かれる
  • default を持つ anyOf は既定値が削除される(Vertex AI 互換のため)
  • ネストしたスキーマにも再帰的に適用される

接続の管理

  • ツールの登録に成功したサーバーは接続を維持する
  • 使えるツールを提供しないサーバーは接続が閉じられる
  • 最終的なサーバー状態は CONNECTED または DISCONNECTED になる

ツール実行のフロー

  • trusttrue のサーバーは確認をスキップする
  • 動的な allow-list をサーバー単位(serverName)とツール単位(serverName.toolName)で保持する
  • 確認が必要なとき、ユーザーは「Proceed once」「Always allow this tool」「Always allow this server」「Cancel」から選ぶ
  • 実行時は引数をツールのスキーマに対して検証してから呼び出す
  • 実行結果は llmContent(モデルのコンテキスト向けの生の応答パート)と returnDisplay(ユーザー表示向けの整形出力。多くは Markdown のコードブロック内の JSON)を含む

操作コマンド

  • /mcp で設定済みサーバーとツールを一覧する(サブコマンドは facts/gemini-cli/commands.md
  • /mcp auth <serverName> で特定サーバーの OAuth 認証、トークン失効時の再認証を行う

設定

{
  "mcp": {
    "allowed": ["my-trusted-server"],
    "excluded": ["experimental-server"]
  },
  "mcpServers": {
    "serverName": {
      "command": "path/to/server",
      "args": ["--arg1", "value1"],
      "env": { "API_KEY": "$MY_API_TOKEN" },
      "cwd": "./server-directory",
      "timeout": 30000,
      "trust": false
    }
  }
}
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@github/github-mcp-server"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "$GITHUB_PERSONAL_ACCESS_TOKEN"
      }
    }
  }
}
{
  "mcpServers": {
    "googleCloudServer": {
      "httpUrl": "https://my-gcp-service.run.app/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": ["https://www.googleapis.com/auth/userinfo.email"]
      }
    }
  }
}

関連

  • facts/gemini-cli/configuration.md
  • facts/gemini-cli/policy-engine.md
  • facts/gemini-cli/commands.md
  • facts/gemini-cli/extensions.md
  • facts/gemini-cli/tools.md
  • facts/gemini-cli/subagents.md