.mcp.json で環境変数からトークンを渡す書き方(${VAR} 展開)

Claude Code 公開:

Claude Code の .mcp.json にアクセストークンを直接書かず、${GITHUB_TOKEN} のような環境変数の参照で渡す方法を解説します。展開の書き方、既定値の指定、環境変数が未設定のときの挙動、チームでの運用ルールを紹介します。

検証日 2026年9月7日 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。
目次
  1. 書き方
  2. 環境変数の置き場所
  3. 未設定時の確認
  4. チームでの運用ルール
  5. 関連する記事
  6. まとめ

.mcp.json はチームで共有するために Git にコミットするファイルです。ここに GitHub のアクセストークンを直接書くと、リポジトリを見られる全員に漏れます。Claude Code は .mcp.json の中で ${環境変数名} の形で環境変数を参照できるので、トークンの実体はシェル側に置きます。

KEY POINT

この記事で分かること

  • ${VAR}${VAR:-既定値} の書き方
  • 展開できる場所(env、args、url など)
  • 環境変数の置き場所と、チームでの運用ルール

書き方

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "internal-api": {
      "type": "http",
      "url": "${INTERNAL_MCP_URL:-https://mcp.example.internal/mcp}",
      "headers": {
        "Authorization": "Bearer ${INTERNAL_MCP_TOKEN}"
      }
    }
  }
}
記法意味
${GITHUB_TOKEN}環境変数 GITHUB_TOKEN の値に置き換わる
${VAR:-既定値}VAR が未設定なら既定値を使う

展開は env だけでなく、commandargsurlheaders の値でも使えます。

用語解説

local スコープとの使い分け: 個人のトークンを使うサーバーは、.mcp.json(project スコープ)ではなく claude mcp add(local スコープ、~/.claude.json に保存)で登録する方法もあります。チームで同じサーバーを使うが認証は個人ごと、という場合は .mcp.json${VAR} で書き、各自が環境変数を設定する方式が管理しやすいです。

環境変数の置き場所

# ~/.zshrc または ~/.bashrc
export GITHUB_TOKEN="ghp_xxxxxxxx"

シェルの設定ファイルに書いておくと、ターミナルから claude を起動したときに読まれます。VS Code 拡張から使う場合は、VS Code 自体がその環境変数を持っている必要があるため、シェルの設定ファイルに書いたうえで VS Code を再起動するか、ターミナルから code . で起動してください。

direnv を使っているプロジェクトなら、.envrc に書いてディレクトリ単位で切り替えられます(.envrc.gitignore に入れます)。

未設定時の確認

環境変数が設定されていないと、サーバーは起動するものの認証に失敗します。

  1. /mcp でサーバーの状態を確認する。「failed」なら次へ
  2. ターミナルで echo $GITHUB_TOKEN を実行し、値があるか確認する
  3. Claude Code を起動したシェルと、環境変数を設定したシェルが同じか確認する
  4. .mcp.json の変数名のスペルを確認する

チームでの運用ルール

  • .mcp.json には ${VAR} だけを書き、値は絶対に書かない
  • README に「必要な環境変数の一覧」を載せる(名前だけ。値は各自が発行)
  • .env.example にも同じ名前を並べておく
  • トークンの権限は最小限にする(GitHub なら読み取り専用のスコープから始める)

誤ってコミットしてしまったら

トークンを直接書いた .mcp.json をコミットしてしまった場合は、履歴から消すより先に、そのトークンを失効させて再発行してください。履歴の除去だけでは、既にクローンした人の手元に残ります。

関連する記事

MCP サーバーの追加方法とスコープの違いは、親記事の Claude Code に MCP サーバーを追加する方法 を参照してください。秘密情報全般の扱いは AI コーディングツールに秘密情報を読ませないための設定 にまとめています。

まとめ

  • .mcp.json では ${GITHUB_TOKEN} の形で環境変数を参照し、値は書かない
  • ${VAR:-既定値} で未設定時の既定値を指定できる。env、args、url、headers で使える
  • 環境変数はシェルの設定ファイルに置き、VS Code から使う場合は再起動して反映する
  • 誤ってコミットしたら、まずトークンを失効させる

よくある質問

環境変数が設定されていない状態で Claude Code を起動するとどうなりますか?
空文字として展開されるか、既定値の指定があればそれが使われます。サーバー側で認証エラーになるため、/mcp で状態を確認してください。
VS Code 拡張から起動した場合も環境変数は読まれますか?
VS Code を起動したシェルの環境変数が使われます。ターミナルで export しただけでは反映されないことがあるので、シェルの設定ファイル(.zshrc など)に書くか、VS Code をターミナルから起動してください。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合はお問い合わせからお知らせください。