.mcp.json で環境変数からトークンを渡す書き方(${VAR} 展開)
Claude Code の .mcp.json にアクセストークンを直接書かず、${GITHUB_TOKEN} のような環境変数の参照で渡す方法を解説します。展開の書き方、既定値の指定、環境変数が未設定のときの挙動、チームでの運用ルールを紹介します。
.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 だけでなく、command、args、url、headers の値でも使えます。
用語解説
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 に入れます)。
未設定時の確認
環境変数が設定されていないと、サーバーは起動するものの認証に失敗します。
/mcpでサーバーの状態を確認する。「failed」なら次へ- ターミナルで
echo $GITHUB_TOKENを実行し、値があるか確認する - Claude Code を起動したシェルと、環境変数を設定したシェルが同じか確認する
.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 が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合はお問い合わせからお知らせください。