0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kiro CLI アップデートで MCP サーバーが突然動かなくなった話 — Approved Environment Variables の罠

0
Posted at

Kiro CLI アップデートで MCP サーバーが突然動かなくなった話 — Approved Environment Variables の罠

はじめに

ある朝、いつも通り Kiro CLI でワークフローを実行したところ、MCP サーバーが 401 Unauthorized を返すようになりました。昨日まで問題なく動いていたのに、です。

調査の結果、Kiro CLI v2.4.0 へのアップデートに伴い、MCP 設定ファイル内の環境変数展開の挙動が変更されていたことが原因でした。

この記事では、何が変わったのか、どう対応すればよいのかを解説します。

TL;DR

  • Kiro は MCP 設定の ${VAR} を展開する際、承認リスト(Approved Environment Variables)に登録された変数のみを展開する
  • 未登録の変数はリテラル文字列 ${VAR} のまま MCP サーバーに渡される
  • 対応: ~/.kiro/settings/cli.jsonkiroAgent.mcpApprovedEnvVars に変数名を追加する

発生した問題

症状

MCP Server → 401 Unauthorized

MCP 設定ファイルには以下のように環境変数参照を記述していました:

{
  "mcpServers": {
    "my-service": {
      "command": "uvx",
      "args": ["mcp-my-service"],
      "env": {
        "SERVICE_URL": "https://service.example.com",
        "SERVICE_API_KEY": "${SERVICE_API_KEY}"
      }
    }
  }
}

シェル上で echo $SERVICE_API_KEY は正しい値を返すのに、MCP サーバーには展開されない値が渡されていました。

原因: Approved Environment Variables

仕組み

Kiro にはセキュリティ機能として Approved Environment Variables があります。MCP サーバーがシステム上の任意の環境変数 にアクセスすることを防ぐための仕組みです。

公式ドキュメントには以下のように記載されています:

For security, Kiro only expands environment variables that are explicitly approved. Only variables in the approved list will be expanded when found in MCP config files.

Kiro Docs — MCP Best practices

環境変数展開のフロー

なぜ突然動かなくなったのか

v2.4.0 以前は環境変数がすべて展開されていた(または承認リストのデフォルトが緩かった)ため、明示的な登録なしでも動作して いました。アップデートにより、デフォルト動作が「承認リストのみ展開」に厳格化されたと推定されます。

対応方法

設定ファイルの関係

手順 1: 承認リストに変数を追加

~/.kiro/settings/cli.json を編集し、kiroAgent.mcpApprovedEnvVars に展開を許可する変数名を追加します:

{
  "kiroAgent.mcpApprovedEnvVars": [
    "SERVICE_API_KEY",
    "GITHUB_TOKEN",
    "BRAVE_API_KEY"
  ]
}

コマンドラインからも設定可能です:

kiro-cli settings kiroAgent.mcpApprovedEnvVars '["SERVICE_API_KEY"]'

手順 2: mcp.json で環境変数参照を使用

{
  "mcpServers": {
    "my-service": {
      "command": "uvx",
      "args": ["mcp-my-service"],
      "env": {
        "SERVICE_URL": "https://service.example.com",
        "SERVICE_API_KEY": "${SERVICE_API_KEY}"
      }
    }
  }
}

手順 3: シェル環境変数を設定

# ~/.zshrc or ~/.bashrc
export SERVICE_API_KEY="your-api-key-here"

手順 4: Kiro CLI を再起動して確認

# 新しいセッションを開始
kiro-cli chat

# MCP サーバーの状態を確認
/mcp

やってはいけないこと

❌ API キーを mcp.json に直書きする

{
  "env": {
    "SERVICE_API_KEY": "f2c77124e8761272096e10a962a3874d42020d9c"
  }
}

公式ドキュメントでも明確に非推奨とされています:

Never commit configuration files with sensitive tokens to version control

Kiro Docs — MCP Best practices

やむを得ず直書きする場合は:

  • chmod 600 .kiro/settings/mcp.json でパーミッションを制限
  • .gitignore に追加して git 追跡対象外にする

ベストプラクティス

項目 推奨 非推奨
API キーの格納場所 シェル環境変数 mcp.json に直書き
mcp.json の git 管理 ✅ 可能(シークレットなし) ❌ 漏洩リスク
キーローテーション 環境変数を変更するだけ 全 mcp.json を書き換え
複数プロジェクトでの共有 環境変数は共通 プロジェクトごとにコピー

MCP 設定ファイルの優先順位

複数の設定ファイルが存在する場合、以下の優先順位で読み込まれます:

同名のサーバーが複数レベルで定義されている場合、上位の設定が完全に上書きします(マージではない)。

まとめ

  1. Kiro CLI v2.4.0 以降、MCP 設定内の環境変数展開は 承認リスト制 になった
  2. cli.jsonkiroAgent.mcpApprovedEnvVars に変数名を登録する必要がある
  3. API キーは環境変数経由で渡し、mcp.json には ${VAR} 参照のみ記述するのがベストプラクティス

突然 MCP サーバーが認証エラーを返すようになった場合は、まずこの承認リストを確認してみてください。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?