Claude Code MCP 完全ガイド:MCP サーバーの追加・設定・管理
Claude Code MCP の設定ガイド。claude mcp add で stdio・HTTP・SSE サーバーを追加し、local・project・user スコープを選び、.mcp.json で共有、/mcp で OAuth ログインし、接続エラーを解決する方法を解説します。
Claude Code は MCP サーバーにどう接続するのか
Claude Code は claude mcp add コマンドで MCP サーバーに接続します。リモートサーバーなら --transport http と URL を、ローカルの stdio サーバーなら -- の後ろに起動コマンドを書きます。各サーバーは 3 つのスコープ(local・project・user)のいずれかに保存され、セッション内の /mcp メニューで状態確認、ログイン、再接続を行います。
このガイドでは上の説明を一つずつ掘り下げます。コマンドはすべて公式の Claude Code MCP ドキュメントと照合済みです。まずは何かつないでみたいという方は、先に MCP サーバーディレクトリをのぞいてみてください。
クイックリファレンス
| やりたいこと | コマンド |
|---|---|
| リモートサーバーを追加 | claude mcp add --transport http notion https://mcp.notion.com/mcp |
| ローカルサーバーを追加 | claude mcp add myserver -- npx -y some-mcp-package |
| JSON 設定から追加 | claude mcp add-json name '{"type":"http","url":"..."}' |
| チームと共有 | --scope project を付ける(.mcp.json に書き込み) |
| すべてのプロジェクトで使う | --scope user を付ける |
| サーバー一覧と稼働状態 | claude mcp list |
| 1 つのサーバーを確認 | claude mcp get notion |
| サーバーを削除 | claude mcp remove notion |
| ログイン(OAuth) | セッション内で /mcp、または claude mcp login <name> |
| Claude Desktop から取り込む | claude mcp add-from-claude-desktop |
ステップ 1:トランスポートを選ぶ
MCP サーバーには大きく 2 つの形があり、Claude Code はどちらにも対応しています。
リモート HTTP サーバー(推奨)
ホスト型サーバーの多くは Streamable HTTP エンドポイントを公開しています。--transport http で URL を渡します:
claude mcp add --transport http notion https://mcp.notion.com/mcp
OAuth ではなく API キーを使うサーバーなら、ヘッダーで渡します:
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer YOUR_GITHUB_PAT"
2 つ目の例は、Fine-grained 個人アクセストークンを使う GitHub MCP サーバーです。claude mcp add は認証情報を検証せずに設定を保存するため、トークンが間違っていても後で接続失敗として現れるだけだという点に注意してください。
リモート SSE サーバー(非推奨)
古いサーバーの中には今も Server-Sent Events を使うものがあります。SSE トランスポートは MCP 仕様では非推奨ですが、Claude Code は引き続きサポートしています:
claude mcp add --transport sse asana https://mcp.asana.com/sse
ドキュメントによると、最近のバージョンの Claude Code では、SSE 専用のエンドポイントに --transport http を指定した場合も自動的に SSE へフォールバックします。
ローカル stdio サーバー
stdio サーバーは Claude Code があなたのマシン上で起動するプロセスで、通常は npx、uvx、またはバイナリで動かします。-- 区切りの後ろはすべてそのままサーバーに渡されます:
claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \
-- npx -y airtable-mcp-server
次の 3 つのルールを守れば、stdio のミスはほとんど防げます:
- Claude Code 自身のオプション(
--transport、--env、--scope、--header)は--区切りの前に書く。 - サーバー向けのフラグ(
npxの-yや--port 8080など)は--の後ろに書く。 --envは複数のKEY=valueを受け付けます。サーバー名を--envの直後に置くと、CLI はその名前を別のペアとして読み取りエラーになるため、間に--transport stdioなどの別のオプションを挟みます。
短縮形もあります:-t は --transport、-e は --env、-H は --header、-s は --scope です。
ステップ 2:スコープを選ぶ
追加したサーバーはどれか 1 つのスコープに属します。デフォルトは local です。
| スコープ | フラグ | 有効範囲 | git で共有 | 保存場所 |
|---|---|---|---|---|
| local(デフォルト) | --scope local | 現在のプロジェクトのみ | しない | ~/.claude.json |
| project | --scope project | 現在のプロジェクトのみ | する | プロジェクトルートの .mcp.json |
| user | --scope user | 自分のすべてのプロジェクト | しない | ~/.claude.json |
実際に使ってみて役立つ目安:
- local:個人的な試用や、自分の認証情報を含むもの。
- project:リポジトリをクローンしたチーム全員が使うべきサーバー。たとえばドキュメント用サーバーや、UI テスト用の Playwright MCP サーバー。
- user:どこでも使いたいツール。たとえば最新のライブラリドキュメントを提供する Context7。
同じ名前のサーバーが複数のスコープにある場合、local が project より、project が user より優先されます。採用されるのは勝ったスコープのエントリ全体で、フィールドはマージされません。
ステップ 3:.mcp.json でサーバーを共有する
--scope project でサーバーを追加すると、プロジェクトルートに次のようなファイルが作られます:
{
"mcpServers": {
"shared-server": {
"type": "http",
"url": "https://example.com/mcp"
}
}
}
.mcp.json を手で編集してコミットしても構いません。注意点は 2 つです:
urlだけでtypeのないエントリは stdio として読まれ、失敗します。リモートサーバーには必ず"type": "http"(または"sse")を書きます。- 対話セッションでは、Claude Code はプロジェクトのサーバーを使う前に承認を求めます。クローンしたリポジトリが自分自身のサーバーを承認することはできません。承認するまで
claude mcp listではそのサーバーが承認待ちと表示されます。承認をリセットするにはclaude mcp reset-project-choicesを実行します。
環境変数でシークレットを git から切り離す
.mcp.json では command、args、env、url、headers の中で変数展開が使えます:
{
"mcpServers": {
"api-server": {
"type": "http",
"url": "${API_BASE_URL:-https://api.example.com}/mcp",
"headers": {
"Authorization": "Bearer ${API_KEY}"
}
}
}
}
${VAR} は変数の値に展開され、${VAR:-default} は未設定時にデフォルト値を使います。変数が未設定でデフォルトもない場合、文字列がそのまま設定に残り、claude mcp list が警告を出します。トークンを安全に扱う方法は MCP セキュリティのベストプラクティスを参照してください。
ステップ 4:OAuth で認証する
多くのホスト型サーバー(Notion、Sentry、Linear など)は固定キーではなく OAuth を使います。サーバーを追加してから、Claude Code 内でログインします:
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
claude を起動して /mcp と入力し、サーバーを選んでブラウザでログインを完了します。シェルから claude mcp login sentry でログインすることもでき(画面のないマシンでは --no-browser を付ける)、保存済みトークンは claude mcp logout sentry で消去できます。
知っておきたい制限:
- 非対話実行(
claude -p)では OAuth を完了できません。先に対話セッションで一度ログインしておきます。 - 事前登録済みの OAuth アプリが必要なサーバーは、追加時に
--client-id、--client-secret、--callback-portを指定できます。
このフローのプロトコル側の仕組みは MCP 認証と OAuth で解説しています。
ステップ 5:他のクライアント向けの手順からサーバーを追加する
README の多くは Claude Desktop や Cursor の設定しか載せていません。次のように読み替えます:
- URL ならリモートサーバー:
claude mcp add --transport http name URL。 npx -y @example/mcp-serverのような起動コマンドなら stdio:claude mcp add name -- npx -y @example/mcp-server。mcpServersの JSON ブロックなら、外側のラッパーではなく中のオブジェクトをadd-jsonに渡します。
claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'
add-json でも --scope user や --scope project が使えます。
Claude Desktop から取り込む
Claude Desktop ですでに動いているサーバーがあるなら、取り込めます:
claude mcp add-from-claude-desktop
対話式の選択画面で取り込むサーバーを選びます。この機能は macOS と WSL でのみ動作します。サーバー名に使えるのは英数字、ハイフン、アンダースコアだけなので、名前にスペースを含む Desktop のサーバーはスキップされ、重複する名前には server_1 のような接尾辞が付きます。
日常的な管理
claude mcp list # 全サーバーと稼働状態
claude mcp get notion # 1 つのサーバーの詳細
claude mcp remove notion # 削除(保存済みの OAuth トークンも削除)
セッション内の /mcp では各サーバーの状態とツールが表示され、再接続、再認証、削除せずに無効化することができます。表示される状態には ✔ Connected、! Needs authentication、✘ Failed to connect、⏸ Pending approval などがあります。
コンテキスト消費とツール検索
ツール検索はデフォルトで有効です。Claude Code は起動時にツール名だけを読み込み、Claude が必要としたときに完全な定義を取得するため、サーバーを増やしてもコンテキストウィンドウへの影響はわずかです。毎ターン使う小さなサーバーは、エントリに "alwaysLoad": true を設定すると最初から読み込まれます。遅延読み込みを完全に無効にするには ENABLE_TOOL_SEARCH=false claude で起動します。クライアントがツールを見つける仕組みについては MCP ツールディスカバリーをご覧ください。
リソースとプロンプト
サーバーは @ で参照できるリソース(例:@github:issue://123)や、/mcp__servername__promptname の形でスラッシュコマンドとして現れるプロンプトを公開できます。サーバーが何を公開しているか分からない場合は MCP のリソースとツールの違いを参照してください。
トラブルシューティング
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
✘ Failed to connect で 401 | トークンが不正または未設定 | 正しい --header で追加し直すか、/mcp でログイン |
! Needs authentication | OAuth が未完了 | /mcp でログイン、または claude mcp login <name> |
⏸ Pending approval | .mcp.json のサーバーが未承認 | プロジェクトで claude を起動して承認 |
.mcp.json のリモートサーバーがつながらない | url はあるが type がない | "type": "http" を追加 |
追加時に already exists in local config | 同じスコープに同名がある | 先に claude mcp remove <name> |
| 起動時にサーバーがタイムアウト | 初回の npx ダウンロードが遅い | MCP_TIMEOUT=10000 claude で上限を上げる |
| ツール出力が切り詰められる・警告が出る | 結果が大きすぎる | MAX_MCP_OUTPUT_TOKENS(デフォルト 25,000)を上げる |
Claude Desktop で spawn claude ENOENT | claude が PATH にない | which claude で得たフルパスを使う |
設定に ${VAR} がそのまま残る | 変数が未設定 | claude 起動前に export するか、デフォルト値を付ける |
stdio サーバーがクラッシュしたら、まずそのコマンドをターミナルで直接実行して確かめます。リモートサーバーの挙動がおかしいときは、MCP Inspector で実際の応答を確認できます。なお、stdio サーバーは自動では再接続されないので、/mcp から再接続してください。
Claude Code におすすめの MCP サーバー
| サーバー | Claude Code での使いどころ | 設定方式 |
|---|---|---|
| GitHub MCP Server | ターミナルを離れずに Issue、PR、コード検索 | リモート HTTP + トークン |
| Playwright MCP | 本物のブラウザを操作して作ったものをテスト | ローカル stdio(npx) |
| Context7 | 最新でバージョンに合ったライブラリドキュメント | リモート HTTP + API キー |
| Sentry MCP | 本番エラーをデバッグセッションに取り込む | リモート HTTP + OAuth |
| Notion MCP | 仕様書を読み、ドキュメントを書く | リモート HTTP + OAuth |
| Sequential Thinking | 難しい問題を段階的に構造化して考える | ローカル stdio |
ブラウザサーバーについては、専用の Playwright MCP の Claude Code セットアップガイドを参照してください。
次のステップ
今週本当に使うサーバーを 1 つ選び、local スコープで追加して、/mcp で ✔ Connected と表示されることを確認してから次を追加しましょう。役に立つと分かったら project スコープに移して、チームでも使えるようにします。ほかのサーバーは MCP サーバーディレクトリを見るか、カテゴリで絞り込んで探してください。
よくある質問
Claude Code に MCP サーバーを追加するには?
- リモートサーバーなら 'claude mcp add --transport http 名前 URL'、ローカルの stdio サーバーなら 'claude mcp add 名前 -- コマンド 引数' を実行します。その後 Claude Code 内で /mcp を開き、接続済みと表示されることを確認します。
Claude Code の MCP サーバー設定はどこに保存されますか?
- local と user スコープのサーバーは ~/.claude.json に、project スコープのサーバーはプロジェクトルートの .mcp.json に保存され、git にコミットできます。
Claude Code MCP の local・project・user スコープの違いは?
- local はデフォルトで、現在のプロジェクトで自分だけに有効です。project は .mcp.json でチームと共有し、user はすべてのプロジェクトでサーバーを使えるようにします。同じ名前が複数のスコープにある場合、local が project より、project が user より優先されます。
Claude Desktop の MCP サーバーを Claude Code に取り込めますか?
- はい。'claude mcp add-from-claude-desktop' を実行し、対話式の一覧から取り込むサーバーを選びます。このコマンドは macOS と WSL でのみ動作します。