Claude Code に MCP サーバーを追加する方法は、claude mcp add コマンドを実行するか、プロジェクト直下の .mcp.json に書くかの 2 通りです。 どちらも同じ形式の設定になり、保存先は「スコープ」(local・project・user)で決まります。

この記事は、MCP サーバーをつなぐ側の設定だけに絞っています。そのまま置ける .mcp.json の全文 6 種類と対応するコマンド、サブコマンド・スコープ・transport・環境変数の一覧、つながらない時の切り分け表を、手元で動かした claude mcp の出力と一緒に載せました。

確認環境:Claude Code 2.1.292(Linux x64)、Python 3.11.15。仕様は 2026年10月7日に公式ドキュメント(code.claude.com/docs)を開いて確認しました。確認環境は外向きの通信をプロキシで制限しているため、例示用のリモート URL(mcp.example.com)への接続は「Failed to connect」と表示されます。

Claude Code の MCP 設定 早見表

やりたいこと コマンド
リモート(HTTP)のサーバーを追加 claude mcp add --transport http <名前> <URL>
ローカル(stdio)のサーバーを追加 claude mcp add <名前> -- <コマンド> [引数...]
チームで共有する(.mcp.json に書く) --scope project を付ける
全プロジェクトで使う --scope user を付ける
JSON をそのまま登録 claude mcp add-json <名前> '<JSON>'
一覧と接続状態を見る claude mcp list
1 つの詳細を見る claude mcp get <名前>
削除する claude mcp remove <名前> -s <スコープ>
OAuth でサインイン claude mcp login <名前>(セッション内は /mcp)
スコープ 読み込まれる範囲 共有 保存先
local(既定) 今のプロジェクトだけ しない ~/.claude.json(プロジェクトのパスの下)
project 今のプロジェクトだけ する(git で共有) プロジェクト直下の .mcp.json
user 自分の全プロジェクト しない ~/.claude.json

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Claude Code MCP設定の追加方法|.mcp.json雛形と一覧」

claude mcp add で追加する

リモートの HTTP サーバー

# 基本形
claude mcp add --transport http docs https://mcp.example.com/mcp

# ヘッダーを付ける(${...} を展開させないようシングルクォートで囲む)
claude mcp add --transport http --scope user docs https://mcp.example.com/mcp \
  --header 'Authorization: Bearer ${DOCS_MCP_TOKEN}'

2 つ目を実行したときの出力です。ヘッダーの値は画面には出ず、~/.claude.json には ${DOCS_MCP_TOKEN} という参照のまま保存されます。

Added HTTP MCP server docs with URL: https://mcp.example.com/mcp to user config
Headers: {
  "Authorization": "[REDACTED]"
}
File modified: /home/dev/home/.claude.json

ローカルの stdio サーバー

-- の左側が Claude Code のオプション、右側がサーバーを起動するコマンドです。-- より後ろは手を加えずにサーバーへ渡されます。

# local スコープ(既定)
claude mcp add echo-local --env ECHO_PREFIX=local: -- python3 tools/echo_mcp.py

# project スコープ(.mcp.json に書かれる)
claude mcp add --transport stdio --scope project echo -- python3 tools/echo_mcp.py
Added stdio MCP server echo-local with command: python3 tools/echo_mcp.py to local config
File modified: /home/dev/home/.claude.json [project: /home/dev/shop-api]
Added stdio MCP server echo with command: python3 tools/echo_mcp.py to project config
File modified: /home/dev/shop-api/.mcp.json

--env(-e)は複数の KEY=value を受け取るオプションなので、直後にサーバー名を置くと名前まで環境変数として読まれます。 次の順番で実行すると、このメッセージが出ました。

$ claude mcp add --transport stdio --env ECHO_PREFIX=local: echo-local -- python3 tools/echo_mcp.py
Invalid environment variable format: echo-local, environment variables should be added as: -e KEY1=value1 -e KEY2=value2

サーバー名を先に書く(claude mcp add echo-local --env ... -- ...)か、--env の後ろに別のオプション(--transport など)を挟むと通ります。

claude mcp add のオプション

claude mcp add --help(2.1.292)に出るオプションです。

オプション 短縮形 内容
--transport <種類> -t stdio・sse・http。省略時は stdio
--scope <スコープ> -s local・user・project。省略時は local
--env <KEY=value...> -e サーバーに渡す環境変数(stdio)
--header <ヘッダー...> -H HTTP / SSE サーバーに送るヘッダー
--client-id <ID> なし OAuth のクライアント ID(HTTP / SSE)
--client-secret なし クライアントシークレットを入力する(MCP_CLIENT_SECRET でも可)
--callback-port <ポート> なし OAuth コールバックのポートを固定する

サーバー名に使えるのは英数字・ハイフン・アンダースコアです。workspace などの組み込みサーバー名は予約されています。

$ claude mcp add "my server" -- python3 x.py
Invalid name my server. Names can only contain letters, numbers, hyphens, and underscores.
$ claude mcp add workspace -- python3 x.py
Cannot add MCP server "workspace": this name is reserved.

追加した結果を確かめる

3 つのスコープに 1 つずつ登録した状態で claude mcp list を実行した結果です。

$ claude mcp list
Checking MCP server health…

docs: https://mcp.example.com/mcp (HTTP) - × Failed to connect — ERR_PROXY_TUNNEL: Proxy refused to open a tunnel: 403 Forbidden
echo: python3 tools/echo_mcp.py - √ Connected
echo-local: python3 tools/echo_mcp.py - √ Connected

claude mcp get はスコープ・状態・設定内容と、削除するためのコマンドまで表示します。

$ claude mcp get echo-local
echo-local:
  Scope: Local config (private to you in this project)
  Status: √ Connected
  Type: stdio
  Command: python3
  Args: tools/echo_mcp.py
  Environment:
    ECHO_PREFIX=local:

To remove this server, run: claude mcp remove echo-local -s local

$ claude mcp get docs
docs:
  Scope: User config (available in all your projects)
  Status: × Failed to connect
  Issue: ERR_PROXY_TUNNEL: Proxy refused to open a tunnel: 403 Forbidden
  Type: http
  URL: https://mcp.example.com/mcp
  Headers:
    Authorization: Bearer ${DOCS_MCP_TOKEN}

To remove this server, run: claude mcp remove docs -s user

接続に失敗したときは、list の行末と get の Issue: に理由が付きます。 ${VAR} の参照は展開後の値ではなく名前のまま表示されるので、画面にトークンが出ることはありません。

保存先のファイルはこうなる

project スコープの .mcp.json(コマンドが書き出したもの)です。

{
  "mcpServers": {
    "echo": {
      "type": "stdio",
      "command": "python3",
      "args": [
        "tools/echo_mcp.py"
      ],
      "env": {}
    }
  }
}

local スコープと user スコープは、どちらも ~/.claude.json に入ります。user はトップレベルの mcpServers、local は projects の下のプロジェクトのパスごとに分かれます。

{
  "mcpServers": {
    "docs": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${DOCS_MCP_TOKEN}"
      }
    }
  },
  "projects": {
    "/home/dev/shop-api": {
      "mcpServers": {
        "echo-local": {
          "type": "stdio",
          "command": "python3",
          "args": [
            "tools/echo_mcp.py"
          ],
          "env": {
            "ECHO_PREFIX": "local:"
          }
        }
      }
    }
  }
}

MCP の「local スコープ」は ~/.claude.json に保存されます。設定ファイルの .claude/settings.local.json とは別の場所なので、名前が似ている点だけ気を付けてください。

そのまま置ける .mcp.json の雛形 6 種

プロジェクト直下に .mcp.json という名前で置きます。6 つとも JSON の構文チェックと claude mcp list での読み込みを通したものです。

1. stdio(ローカルのプロセスを起動する)

{
  "mcpServers": {
    "echo": {
      "type": "stdio",
      "command": "python3",
      "args": ["tools/echo_mcp.py"],
      "env": {
        "ECHO_PREFIX": "[team]"
      }
    }
  }
}
claude mcp add --transport stdio --scope project echo --env 'ECHO_PREFIX=[team]' -- python3 tools/echo_mcp.py

2. http(リモートのサーバーにつなぐ)

{
  "mcpServers": {
    "docs": {
      "type": "http",
      "url": "https://mcp.example.com/mcp"
    }
  }
}
claude mcp add --transport http --scope project docs https://mcp.example.com/mcp

3. 環境変数展開(${VAR} と ${VAR:-default})

端末ごとに違うパスや、リポジトリに入れたくない値を外に出す書き方です。

{
  "mcpServers": {
    "echo": {
      "type": "stdio",
      "command": "${PYTHON_BIN:-python3}",
      "args": ["${CLAUDE_PROJECT_DIR:-.}/tools/echo_mcp.py"],
      "env": {
        "ECHO_PREFIX": "${ECHO_PREFIX:-[team]}"
      }
    },
    "docs": {
      "type": "http",
      "url": "${DOCS_MCP_URL:-https://mcp.example.com}/mcp",
      "headers": {
        "Authorization": "Bearer ${DOCS_MCP_TOKEN}"
      }
    }
  }
}
書き方 意味
${VAR} 環境変数 VAR の値に置き換わる
${VAR:-default} VAR があればその値、なければ default

展開されるのは command・args・env・url・headers の 5 か所です。DOCS_MCP_TOKEN を設定しないまま claude mcp list を実行すると、既定値のない変数だけが警告として挙がりました。

docs: ${DOCS_MCP_URL}/mcp (HTTP) - × Failed to connect — ERR_PROXY_TUNNEL: Proxy refused to open a tunnel: 403 Forbidden
echo: ${PYTHON_BIN} ${CLAUDE_PROJECT_DIR}/tools/echo_mcp.py - √ Connected

MCP config diagnostics ‼

For help configuring MCP servers, see: https://code.claude.com/docs/en/mcp

[Contains warnings] Project config (shared via .mcp.json)
Location: /home/dev/p-3-env/.mcp.json
 └ [Warning] [docs] mcpServers.docs: Missing environment variables: DOCS_MCP_TOKEN

DOCS_MCP_TOKEN=... claude mcp list のように値を渡すと、この警告は出なくなりました。echo は既定値(python3 と .)で起動し、Connected になっています。

  • CLAUDE_PROJECT_DIR は Claude Code が起動したサーバーの環境に入れる変数です。command や args で参照するときは、${CLAUDE_PROJECT_DIR:-.} のように既定値を付けます。
  • リモートサーバーの url と headers では、ANTHROPIC_API_KEY・ANTHROPIC_AUTH_TOKEN・AWS_BEARER_TOKEN_BEDROCK・HTTPS_PROXY・NPM_TOKEN などの認証情報にあたる変数は空として読まれます。サーバーに渡したい値は、DOCS_MCP_TOKEN のような自分で付けた名前の変数に入れます。

4. OAuth(クライアント ID を事前に登録する)

動的クライアント登録に対応していないサーバー向けです。サーバー側の開発者ポータルで OAuth アプリを登録し、リダイレクト URI に http://localhost:8080/callback を指定したうえで使います。

{
  "mcpServers": {
    "tracker": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "oauth": {
        "clientId": "your-client-id",
        "callbackPort": 8080,
        "scopes": "issues:read issues:write",
        "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"
      }
    }
  }
}
oauth のキー 内容
clientId 登録した OAuth アプリのクライアント ID
callbackPort コールバックのポート。単独でも使える(その場合は動的クライアント登録)
scopes 要求するスコープを空白区切りの 1 つの文字列で固定する
authServerMetadataUrl 認可サーバーのメタデータ URL を指定する(https:// のみ)

コマンドで登録する場合は次のどちらかです。クライアントシークレットは設定ファイルではなく、システムのキーチェーン(macOS)または認証情報ファイルに保存されます。

# オプションで渡す
claude mcp add --transport http \
  --client-id your-client-id --client-secret --callback-port 8080 \
  tracker https://mcp.example.com/mcp

# JSON で渡す
claude mcp add-json tracker \
  '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \
  --client-secret

--client-secret を付けずに add-json で登録し、get で見た結果です。

$ claude mcp add-json tracker '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --scope user
Added http MCP server tracker to user config
$ claude mcp get tracker
tracker:
  Scope: User config (available in all your projects)
  Status: × Failed to connect
  Issue: ERR_PROXY_TUNNEL: Proxy refused to open a tunnel: 403 Forbidden
  Type: http
  URL: https://mcp.example.com/mcp
  OAuth: client_id configured, callback_port 8080

To remove this server, run: claude mcp remove tracker -s user

登録後のサインインは、セッション内の /mcp か、シェルから claude mcp login tracker で行います。claude mcp login tracker --no-browser を使うと、ブラウザを開かずに認可 URL を表示させられます。

5. headersHelper(接続のたびにヘッダーを生成する)

OAuth 以外の方式(短命のトークンや社内 SSO など)で認証するサーバー向けです。指定したコマンドの標準出力を、接続時のヘッダーとして使います。

{
  "mcpServers": {
    "internal-api": {
      "type": "http",
      "url": "https://mcp.internal.example.com",
      "headers": {
        "X-Team": "platform"
      },
      "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
    }
  }
}
  • コマンドは、文字列のキーと値だけの JSON オブジェクトを標準出力に書きます(例:{"Authorization": "Bearer xxxx"})。
  • シェル経由で実行され、10 秒で打ち切られます。接続のたびに実行され、結果はキャッシュされません。
  • 同じ名前のヘッダーは、headers の固定値よりヘルパーの出力が優先されます。
  • 実行時に CLAUDE_CODE_MCP_SERVER_NAME と CLAUDE_CODE_MCP_SERVER_URL が渡されるので、1 本のスクリプトで複数のサーバーに対応できます。
  • .mcp.json と local スコープのヘルパーは、そのフォルダを信頼(trust)してから実行されます。 信頼する前に claude mcp list を実行すると、次の行が出ました。
MCP server 'internal-api': headersHelper not run — this workspace has no persisted trust; accept the trust dialog here once interactively, or set projects["/home/dev/p-5-headers-helper"].hasTrustDialogAccepted in /home/dev/home/.claude.json.

6. timeout と alwaysLoad(サーバーごとの調整)

{
  "mcpServers": {
    "reports": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "timeout": 600000,
      "alwaysLoad": true
    }
  }
}
キー 内容
timeout そのサーバーのツール実行の制限時間(ミリ秒)。600000 で 10 分。MCP_TOOL_TIMEOUT より優先される。1000 より小さい値は使われない
alwaysLoad true にすると、そのサーバーのツールをセッション開始時に常に読み込む(ツール検索による後読みの対象から外す)
claude mcp add-json reports '{"type":"http","url":"https://mcp.example.com/mcp","timeout":600000}' --scope project

雛形の構文チェック

6 つのファイルを Python の json で読み込んだ結果です。

import glob
import json

for path in sorted(glob.glob("*.json")):
    with open(path, encoding="utf-8") as f:
        data = json.load(f)
    for name, server in data["mcpServers"].items():
        keys = ",".join(k for k in server if k != "type")
        print(f"OK  {path}: {name} type={server['type']} keys={keys}")
OK  1-stdio.json: echo type=stdio keys=command,args,env
OK  2-http.json: docs type=http keys=url
OK  3-env.json: echo type=stdio keys=command,args,env
OK  3-env.json: docs type=http keys=url,headers
OK  4-oauth.json: tracker type=http keys=url,oauth
OK  5-headers-helper.json: internal-api type=http keys=url,headers,headersHelper
OK  6-timeout.json: reports type=http keys=url,timeout,alwaysLoad

claude mcp のサブコマンド一覧

claude mcp --help(2.1.292)に出る 10 個です。

サブコマンド 内容
add <名前> <コマンドまたはURL> [引数...] サーバーを追加する
add-json <名前> <JSON> JSON 文字列で追加する(stdio・SSE・HTTP・WebSocket)
add-from-claude-desktop Claude Desktop の設定から取り込む(macOS と WSL)
list 設定済みサーバーの一覧と接続状態を表示する
get <名前> 1 つのサーバーの詳細を表示する
remove <名前> サーバーを削除する(-s でスコープ指定)
login <名前> OAuth でサインインする(HTTP・SSE・claude.ai コネクタ)
logout <名前> 保存済みの OAuth 認証情報を消す
reset-project-choices .mcp.json のサーバーに対する承認・拒否の記録をリセットする
serve Claude Code 自体を stdio の MCP サーバーとして起動する

削除とリセットを実行したときの出力です。存在しない名前を指定すると、登録済みの名前が一覧で返ります。

$ claude mcp remove reports -s project
Removed MCP server reports from project config
File modified: /home/dev/shop-api/.mcp.json
$ claude mcp remove nothing
No MCP server named "nothing". Configured servers: docs, echo, echo-local, events, tracker
$ claude mcp reset-project-choices
Project-scoped (.mcp.json) server approvals and rejections stored for this project have been reset.
1 server (echo) is still approved by other settings and will connect automatically without prompting.

セッションの中では /mcp で、接続状態の確認、OAuth のサインイン、サーバーの一時的な無効化ができます。

transport は 4 種類

type つなぎ方 追加方法 補足
http リモートの HTTP --transport http リモートサーバーの基本。OAuth に対応
stdio ローカルのプロセス --transport stdio(既定) -- の後ろに起動コマンドを書く
sse リモートの SSE --transport sse 非推奨。使える場合は HTTP を選ぶ
ws WebSocket add-json で "type":"ws" --transport の選択肢には含まれない

WebSocket は add-json で登録します。

$ claude mcp add-json events '{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer ${EVENTS_TOKEN}"}}'
Added ws MCP server events to local config

切断時の動きも種類で異なります。リモートのサーバーはセッション中に切れると自動で再接続を試み(最大 5 回、待ち時間は 1 秒から倍々)、stdio のサーバーはローカルのプロセスなので自動では再接続されません。

どのスコープに置くかの判断表

状況 置く場所 理由
チーム全員が同じサーバーを使う project(.mcp.json) git で共有できる
自分だけが試している local ほかのプロジェクトやメンバーに影響しない
認証情報を設定に直接含めたい local または user リポジトリに入らない
どのプロジェクトでも使う自分用の道具 user 一度の登録で全プロジェクトに効く
共有したいが値は人によって違う project + ${VAR} 構成は共有し、値は各自の環境変数に置く
組織として全員に配りたい managed(管理者が配布) 利用者の設定より優先される

同じ名前のサーバーが複数の場所にあるときは、local → project → user → プラグイン → claude.ai コネクタの順で先にあるものが 1 つだけ使われます。項目ごとに混ざることはなく、選ばれた場所の設定が丸ごと使われます。

.mcp.json のサーバーは承認が要る

.mcp.json はリポジトリから届くファイルなので、対話セッションでは使う前に承認を求められます。承認前に list を実行するとこう表示されます。

echo: python3 tools/echo_mcp.py - ⏸ Pending approval (run `claude` to approve)
  • claude を起動して承認するか、自分の ~/.claude/settings.json に "enabledMcpjsonServers": ["echo"] を書くと Connected になります(手元で確認)。
  • リポジトリの .claude/settings.json に書いた enabledMcpjsonServers や enableAllProjectMcpServers は、フォルダを信頼するまで使われません。
  • disabledMcpjsonServers に書いたサーバーは、どの設定ファイルからでも拒否できます。
  • claude -p などの非対話実行では承認の画面を出せないため、project スコープのサーバーは確認なしで読み込まれます。読み込ませたくないものは disabledMcpjsonServers に書きます。

トークンを直書きした例と、環境変数に直した例

直す前:トークンがそのままファイルに入っています。.mcp.json をコミットすると、リポジトリを見られる全員に値が届きます。

{
  "mcpServers": {
    "docs": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "headers": {
        "Authorization": "Bearer sk-live-0123456789abcdef"
      }
    }
  }
}

直した後:ファイルには変数名だけを書き、値は各自のシェルで設定します。

{
  "mcpServers": {
    "docs": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "headers": {
        "Authorization": "Bearer ${DOCS_MCP_TOKEN}"
      }
    }
  }
}
# ~/.zshrc や ~/.bashrc など、各自の環境で設定する
export DOCS_MCP_TOKEN="(発行されたトークン)"

設定し忘れたメンバーには、claude mcp list と claude doctor が変数名を知らせます。claude doctor の出力です。

Invalid settings
- /home/dev/home/.claude.json › mcpServers.docs: Missing environment variables: DOCS_MCP_TOKEN
  Suggested fix: Set the following environment variables: DOCS_MCP_TOKEN

貼り付けたトークンの末尾に改行や空白が入っている場合も、list が場所を知らせます。次は env の値の末尾に空白を入れたときの表示です(値そのものは表示されません)。

 └ [Warning] [echo] mcpServers.echo: Leading or trailing whitespace in: env.ECHO_PREFIX

permissions で MCP ツールを allow / deny する

MCP のツールは mcp__<サーバー名>__<ツール名> という名前で権限ルールに書けます。設定ファイル(.claude/settings.json など)の permissions に入れます。

{
  "permissions": {
    "allow": [
      "mcp__echo__echo",
      "mcp__docs__search_*"
    ],
    "ask": [
      "mcp__tracker"
    ],
    "deny": [
      "mcp__docs__delete_*",
      "mcp__events__*"
    ]
  },
  "enabledMcpjsonServers": ["echo"],
  "disabledMcpjsonServers": ["reports"]
}
書き方 当たる範囲
mcp__docs docs サーバーの全ツール
mcp__docs__* 同上(ワイルドカードの書き方)
mcp__docs__search_* docs の search_ で始まるツール
mcp__echo__echo echo サーバーの echo ツールだけ
mcp__*(deny / ask のみ) 全サーバーの全 MCP ツール
  • allow でワイルドカードを使えるのは、mcp__<サーバー名>__ まで書いた後ろだけです。allow に mcp__* を書くと読み飛ばされます。
  • mcp__docs__search(query:*) のように丸かっこを付けたルールは、設定ファイルでは読み飛ばされます。
  • 判定は deny → ask → allow の順です。上の例では docs の delete_ 系は実行されず、search_ 系は確認なし、tracker は毎回確認になります。

このファイルを置いて claude doctor を実行したところ、権限ルールについての指摘は出ませんでした。

MCP 関連の環境変数一覧

環境変数 既定値 内容
MCP_TIMEOUT — サーバー起動(接続)の待ち時間。ミリ秒。例:MCP_TIMEOUT=10000 claude で 10 秒
MCP_TOOL_TIMEOUT 28 時間 ツール 1 回の実行時間の上限。サーバーごとの timeout が優先
MAX_MCP_OUTPUT_TOKENS 25,000 ツール出力の上限トークン数。10,000 を超えると警告(こちらは固定)
CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT リモート 300000 / stdio 1800000 応答も進捗もない状態が続いたときに打ち切るまでの時間(ミリ秒)。0 で無効
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS 120000 実行中のツール呼び出しをバックグラウンドに移すまでの時間。0 で無効
CLAUDE_CODE_MCP_STARTUP_WAIT_MS — 非対話セッションの最初のターンで、接続中のサーバーを待つ時間
CLAUDE_CODE_MCP_ALLOWLIST_ENV — 1 で、stdio サーバーを最小限の環境変数+設定の env だけで起動する
CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH 2048 モデルに渡すツール説明とサーバー指示の最大文字数
ENABLE_TOOL_SEARCH 未設定(後読み) true・auto・auto:N・false。false で全ツールを最初に読み込む
ENABLE_CLAUDEAI_MCP_SERVERS — false で claude.ai コネクタを読み込まない
MCP_CLIENT_SECRET — --client-secret の入力を省くためのシークレット
MCP_SDK_GENERATION — クライアントのランタイムを v1 / v2 から選ぶ
MCP_PROTOCOL_NEGOTIATION — 新しいプロトコル版を問い合わせるか(auto / legacy)
MCP_DISCOVERY_CACHE — ツール一覧の検出キャッシュ。1 でオン、0 でオフ

ツール出力については、トークン数とは別に、テキストの結果が 50,000 文字を超えるとファイルに保存され、会話にはそのパスが入ります(MAX_MCP_OUTPUT_TOKENS では変わりません)。

MCP 関連の設定キー(settings.json)

キー 置けるファイル 内容
enableAllProjectMcpServers すべて .mcp.json の全サーバーを確認なしで承認する
enabledMcpjsonServers すべて .mcp.json のうち指定したサーバーを承認する
disabledMcpjsonServers すべて .mcp.json のうち指定したサーバーを拒否する
allowedMcpServers すべて 追加できる MCP サーバーの許可リスト
deniedMcpServers すべて URL・コマンド・名前でサーバーをブロックする
disableClaudeAiConnectors すべて claude.ai コネクタを取得しない
managedMcpServers managed 組織からリモートサーバーを全員に配る
allowManagedMcpServersOnly managed managed の許可リストだけを有効にする
allowAllClaudeAiMcps managed managed-mcp.json と併せて claude.ai コネクタを読み込む
allowClaudeInChromeWithManagedMcp managed managed-mcp.json と併せて Claude in Chrome サーバーを動かす

つながらない時の切り分け表

まず claude mcp list で状態を見て、気になるサーバーを claude mcp get <名前> で確認します。

表示・メッセージ 意味 対処
⏸ Pending approval (run claude to approve) .mcp.json のサーバーが未承認 claude を起動して承認する。または自分の設定に enabledMcpjsonServers
× Failed to connect — <理由> 接続できなかった。理由は HTTP ステータスやエラーコード URL、ネットワーク、プロキシ、認証ヘッダーを確認する
Missing environment variables: X ${X} が未設定で既定値もない export X=... するか ${X:-既定値} にする
Leading or trailing whitespace in: ... 値の前後に空白や改行がある 設定の値を貼り直す
MCP server X already exists in local config 同じスコープに同名が登録済み claude mcp remove X -s local の後で追加し直す
Invalid environment variable format: ... --env がサーバー名まで読み込んだ サーバー名を --env より前に書く
Invalid name ... 名前に空白など使えない文字がある 英数字・ハイフン・アンダースコアにする
this name is reserved 組み込みサーバーの名前と重なった 別の名前にする
Invalid configuration: : Invalid input add-json の JSON が形式に合わない 構文と type の値(stdio・http・sse・ws)を見直す
headersHelper not run フォルダが未信頼でヘルパーが動いていない 対話セッションで信頼ダイアログを承認する
No MCP server named "X" その名前は登録されていない 続けて表示される登録済みの名前を確認する
401 で失敗する(ヘッダーに ${ANTHROPIC_API_KEY} など) 認証情報にあたる変数は空として読まれる 自分で付けた名前の変数に値を入れて参照する
起動に時間がかかって接続に至らない 起動の待ち時間を超えている MCP_TIMEOUT=30000 claude のように延ばす
ツールの実行が途中で止まる 実行時間の上限に達している そのサーバーに "timeout": 600000 を足す
出力が大きいという警告が出る 10,000 トークンを超えた MAX_MCP_OUTPUT_TOKENS を上げるか、絞り込んで呼ぶ

同じ名前のサーバーを別のスコープにも登録していて、接続先が違う場合も list と /mcp に警告が出ます。残したいほうを決めて、もう一方を claude mcp remove <名前> --scope <スコープ> で消します。

接続確認に使った最小の stdio サーバー

この記事の echo は、設定の読み込みと接続状態を確かめるために用意した小さなサーバーです。標準ライブラリだけで動きます。tools/echo_mcp.py として保存すれば、上の雛形 1 と 3 をそのまま試せます。

"""接続確認用の最小 stdio MCP サーバー(標準ライブラリのみ)"""
import json
import os
import sys


def send(msg):
    sys.stdout.write(json.dumps(msg, ensure_ascii=False) + "\n")
    sys.stdout.flush()


for line in sys.stdin:
    line = line.strip()
    if not line:
        continue
    req = json.loads(line)
    method, rid = req.get("method"), req.get("id")
    if rid is None:  # 通知には応答しない
        continue
    if method == "initialize":
        result = {
            "protocolVersion": req["params"]["protocolVersion"],
            "capabilities": {"tools": {}},
            "serverInfo": {"name": "echo", "version": "0.1.0"},
        }
    elif method == "tools/list":
        result = {"tools": [{
            "name": "echo",
            "description": "受け取った文字列をそのまま返す",
            "inputSchema": {"type": "object", "properties": {"text": {"type": "string"}}, "required": ["text"]},
        }]}
    elif method == "tools/call":
        text = req["params"]["arguments"]["text"]
        prefix = os.environ.get("ECHO_PREFIX", "")
        result = {"content": [{"type": "text", "text": prefix + text}]}
    elif method == "ping":
        result = {}
    else:
        send({"jsonrpc": "2.0", "id": rid, "error": {"code": -32601, "message": f"unknown method: {method}"}})
        continue
    send({"jsonrpc": "2.0", "id": rid, "result": result})

標準入力に 3 行(initialize・通知・tools/list)を流したときの応答です。

$ printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | python3 tools/echo_mcp.py
{"jsonrpc": "2.0", "id": 1, "result": {"protocolVersion": "2025-06-18", "capabilities": {"tools": {}}, "serverInfo": {"name": "echo", "version": "0.1.0"}}}
{"jsonrpc": "2.0", "id": 2, "result": {"tools": [{"name": "echo", "description": "受け取った文字列をそのまま返す", "inputSchema": {"type": "object", "properties": {"text": {"type": "string"}}, "required": ["text"]}}]}}

よくある質問

Q. claude mcp add と .mcp.json の手書きは、どちらを使えばよいですか? A. 結果は同じ形式になります。--scope project を付けた add は .mcp.json を作成・更新するので、最初の 1 つはコマンドで作り、oauth や timeout のような細かい項目は手で足す、という進め方が手早いです。

Q. local スコープの設定はどこにありますか? A. ~/.claude.json の projects の下に、プロジェクトのパスごとに保存されます。プロジェクトのフォルダの中にはファイルができないので、コミットに混ざることはありません。

Q. チームで共有しつつ、トークンは共有したくないときは? A. .mcp.json には ${DOCS_MCP_TOKEN} のような参照だけを書き、値は各自の環境変数で設定します。未設定の場合は claude mcp list が変数名を警告として表示します。

Q. サーバーを削除せずに一時的に止められますか? A. セッション内の /mcp でサーバーをオフにできます。選んだ内容はプロジェクトごとに ~/.claude.json へ記録され、設定そのものは残ります。

まとめ

  • 追加は claude mcp add(または add-json)か .mcp.json。リモートは --transport http、ローカルは -- コマンド の形。
  • スコープは local(既定・自分だけ)/project(.mcp.json で共有)/user(全プロジェクト)。同名は local → project → user の順で 1 つだけ使われる。
  • .mcp.json には ${VAR} と ${VAR:-default} が使え、展開されるのは command・args・env・url・headers。
  • transport は http・stdio・sse(非推奨)・ws。ws は add-json で登録する。
  • --env の直後にサーバー名を置かない。名前を先に書くと確実。
  • MCP ツールの権限は mcp__サーバー名__ツール名。allow のワイルドカードはサーバー名の後ろだけ。
  • つながらない時は claude mcp list → claude mcp get <名前> → claude doctor の順に見る。

参考・出典

確認日:2026年10月7日

  • Claude Code Docs: MCP — https://code.claude.com/docs/en/mcp
  • Claude Code Docs: Settings reference(MCP) — https://code.claude.com/docs/en/settings-reference
  • Claude Code Docs: Configure permissions — https://code.claude.com/docs/en/permissions
  • Claude Code Docs: Environment variables — https://code.claude.com/docs/en/env-vars

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Claude Code MCP設定の追加方法|.mcp.json雛形と一覧」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?