何のためのものか
Model Context Protocol で外部ツール・データソースへ接続する仕組み。Claude Code にツール、データベース、API へのアクセスを与える。
接続前に各サーバーを信頼できるか確認する。 外部コンテンツを取得するサーバーは prompt injection のリスクをもたらしうる。
触る
| 種類 | コマンド |
|---|---|
| Remote HTTP(推奨) | claude mcp add --transport http <name> <url> |
| Local stdio | claude mcp add [options] <name> -- <command> [args...] |
- 追加する。stdio では
--の後がそのままサーバーの起動コマンドになる claude mcp listで健全性を見る(✔ Connected/! Needs authentication/✘ Failed to connect)- セッション内では
/mcpで状態を確認する
認証が要るサーバーは claude mcp login <name> でシェルから OAuth フローを実行できる。
入れる
スコープを選ぶ。ここを間違えると「自分だけのはずが共有された」「共有したいのに他の人に見えない」が起きる。
| スコープ | 範囲 | 共有 | 保存先 |
|---|---|---|---|
| Local(既定) | 現在のプロジェクトのみ | いいえ | ~/.claude.json |
| Project | 現在のプロジェクトのみ | はい | プロジェクトルートの .mcp.json |
| User | 自分の全プロジェクト | いいえ | ~/.claude.json |
.mcp.jsonでは${VAR}と${VAR:-default}の環境変数展開が使える(command/args/env/url/headers)。未設定で既定値も無いと、${VAR}のテキストがそのまま使われる- 使わないサーバーは
/mcpパネルでトグルオフする。設定は残ったまま、プロジェクトごとの選択として~/.claude.jsonに記録される - project スコープのサーバーは対話セッションで承認を求められる。 選択のやり直しは
claude mcp reset-project-choices
効かせる
- tool search が既定で有効。 MCP ツールは upfront に読み込まれず、セッション開始時にはツール名とサーバーの instructions だけが入る。サーバーごとの固定のツール上限は無く、実質の上限はコンテキストウィンドウの予算
- 常に読み込ませたいサーバーだけ
alwaysLoad: trueを付ける(起動時にそのサーバーのツールを待つ) - タイムアウトは 3 種類ある。 起動時の
MCP_TIMEOUT、ツール呼び出しごとの実時間上限(.mcp.jsonのtimeout/MCP_TOOL_TIMEOUT)、応答も進捗も無いときに打ち切る idle timeout(CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT。既定は HTTP 系 5 分、stdio 30 分) - 2 分を超えた呼び出しは自動でバックグラウンドへ移る。
/tasksに現れ、そこで停止できる - 出力にも上限がある。 10,000 トークンで警告、既定の上限 25,000 トークン(
MAX_MCP_OUTPUT_TOKENS)。超えるとディスクに退避されファイル参照に置き換わる - 切れたときは
claude mcp get <name>のIssue:行を読む。HTTP / SSE は指数バックオフで最大 5 回自動再接続するが、stdio はローカルプロセスなので自動再接続しない
落とし穴
urlがあるのにtypeが無い JSON エントリは読み込まれない。 stdio として解釈され、スキップされて警告が出るclaude -p・Agent SDK・cloud セッションは project スコープのサーバーを確認なしに読み込む。 承認プロンプトを出せないため。外すにはdisabledMcpjsonServers- クローンしたリポジトリは自身のサーバーを承認できない。 workspace trust の承認まで
⏸ Pending approvalのまま - plugin 由来のサーバーはツール名が違う。
mcp__plugin_<plugin-name>_<server-name>__<tool-name>の形になるので、素のサーバーキーで書いた hook matcher は発火しない - 繋いだサーバーの数だけ起動時の読み込みが増える。 tool search が効いていてもツール名とサーバーの instructions は入るので、使わないものはトグルオフする
- SSE トランスポートは非推奨。可能なら HTTP を使う