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.jsonのkiroAgent.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.
環境変数展開のフロー
なぜ突然動かなくなったのか
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
やむを得ず直書きする場合は:
-
chmod 600 .kiro/settings/mcp.jsonでパーミッションを制限 -
.gitignoreに追加して git 追跡対象外にする
ベストプラクティス
| 項目 | 推奨 | 非推奨 |
|---|---|---|
| API キーの格納場所 | シェル環境変数 | mcp.json に直書き |
| mcp.json の git 管理 | ✅ 可能(シークレットなし) | ❌ 漏洩リスク |
| キーローテーション | 環境変数を変更するだけ | 全 mcp.json を書き換え |
| 複数プロジェクトでの共有 | 環境変数は共通 | プロジェクトごとにコピー |
MCP 設定ファイルの優先順位
複数の設定ファイルが存在する場合、以下の優先順位で読み込まれます:
同名のサーバーが複数レベルで定義されている場合、上位の設定が完全に上書きします(マージではない)。
まとめ
- Kiro CLI v2.4.0 以降、MCP 設定内の環境変数展開は 承認リスト制 になった
-
cli.jsonのkiroAgent.mcpApprovedEnvVarsに変数名を登録する必要がある - API キーは環境変数経由で渡し、mcp.json には
${VAR}参照のみ記述するのがベストプラクティス
突然 MCP サーバーが認証エラーを返すようになった場合は、まずこの承認リストを確認してみてください。
参考資料
- Kiro Docs — MCP Best practices (IDE) — Approved Environment Variables の公式説 明
- Kiro Docs — CLI > MCP > Configuration — MCP 設定ファイルの構造と環境変数
- Kiro Docs — CLI > MCP > Security — CLI 版セキュリティベストプラクティス
- Kiro Docs — CLI > Reference > Settings — cli.json の設定リファレンス
- Kiro Changelog — CLI v2.4.0 — v2.4.0 リリースノート