blog

Claude Code MCP設定の使い方|外部ツール連携の実装【2026】

目次

Claude Code MCPとは何か:AIコーディングを拡張する仕組みの全体像

Claude CodeのMCPとは、Claude CodeにGitHub・データベース・Notionなどの外部ツールをつなぐための仕組みです。追加はコマンド1行(claude mcp add)ででき、リモートのサービスは --transport http、手元で動かすものは --transport stdio を指定します。このページでは、追加の手順・保存先(スコープ)の違い・主なサーバー・つながらないときの対処までを、公式ドキュメント(2026年10月23日確認)に沿って説明します。

Claude Code(クロードコード)を日常業務で使い込んでいると、ある壁にぶつかります。「ファイルは書き換えられるのに、外部サービスのデータが取れない」「ブラウザを操作させたい」「社内ツールと連携したい」——そこで登場するのがMCP(Model Context Protocol)です。MCPはAnthropicが策定したオープン規格で、AIモデルと外部ツール・データソースを標準化されたプロトコルでつなぐ仕組みです。Claude CodeにMCPを組み合わせると、ターミナル上のAIエージェントが単なるコード生成機から、外部APIを呼び出し、DBを参照し、ブラウザを制御する「実務エージェント」へと広がります。本記事では、MCPの仕組みから具体的なサーバーの追加手順(実際の画面つき)、実務での活用パターン、トラブルシュートまでを一通り解説します。

MCPでできること:公式が挙げる6つの使い方

公式ドキュメント(MCP)は、サーバーをつないだClaude Codeに頼める仕事として次の例を挙げています(2026年10月23日確認)。判断の目安は「イシュー管理ツールや監視画面など、別のツールの内容をチャットにコピーして貼っている」ことが増えたときです。つないでおけば、貼り付けではなくClaudeがそのシステムを直接読み、操作します。

やりたいこと 頼み方の例(公式の例を要約) 必要になるもの
イシュー管理から機能を作る JIRAのチケットに書かれた機能を実装して、GitHubにPRを作る JIRA・GitHubなどのサーバー
監視データを分析する SentryとStatsigで、その機能の利用状況を調べる Sentryなどのサーバー
データベースに問い合わせる PostgreSQLのデータから、その機能を使った利用者を10人抽出する DBのサーバー(読み取り専用ユーザー推奨)
デザインを取り込む Slackに投稿された新しいFigmaのデザインに合わせて、メールのひな形を更新する Figma・Slackなどのサーバー
業務を自動化する その10人にフィードバック依頼を書いたGmailの下書きを作る Gmailなどのサーバー
外部の出来事に反応する TelegramやDiscordのメッセージ、Webhookを受け取ったら動く(チャンネル機能) claude/channel を宣言したサーバーと --channels オプション

どのツールにもつなげるわけではなく、つなげるのは「MCPサーバーが公開されているもの」だけです。探し方は、Anthropicが審査したコネクタを一覧できる公式のディレクトリを見るのが近道で、そこに載っているリモートサーバーは claude mcp add でそのまま追加できます。ただし、外部の内容を読み込むサーバーはプロンプトインジェクションの入り口にもなるため、つなぐ前に信頼できる提供元かを確かめます(後半の「MCPのセキュリティ」の章)。

このページの読み方:目的から章を選ぶ

いまの状況 読む章
まず1つ入れてみたい 「Claude CodeへのMCPサーバーの追加方法」→「どのMCPサーバーから入れるべきか」
設定がどこに保存されるか、チームで共有する方法を知りたい 「設定の保存先(スコープ)と設定ファイルの場所」→「.mcp.jsonで環境変数を使う」
ログイン・権限・安全面を決めたい 「MCPの認証と権限」→「MCPのセキュリティ」
つながらない・止まる 「MCPの設定と動作確認:よくあるトラブルと解決策」
外す・一時的に止めたい 「Claude CodeのMCPサーバーを削除するには?」

MCP以外にもClaude Codeの機能を追加する手段は、拡張機能の使い方で説明しています。

関連記事Claude Codeの外部連携コマンドは?

MCPの基本概念:なぜClaude Codeに必要なのか

MCPを理解する最短ルートは「AIのためのUSB規格」というアナロジーです。USBが登場する前、周辺機器ごとに独自ドライバが必要だったように、AI×外部ツール連携もかつてはツールごとに個別実装が必要でした。MCPはその接続口を標準化し、どのAIモデルでも同じプロトコルで外部機能を呼び出せるようにしました。

Claude Codeの文脈では、MCPは「Claude Codeが呼び出せる能力の拡張パック」として機能します。Claude Code自体はファイルシステム操作・コマンド実行・コード生成といったコア能力を持ちますが、MCPサーバーを追加することで以下のような能力が付け加わります。

  • GitHubのIssueやPRをリアルタイムで参照・操作できます
  • PostgreSQL / SQLiteなどのデータベースにクエリを投げられます
  • Webブラウザを制御してスクレイピングやE2Eテストを実行できます
  • SlackやNotionへの書き込み・読み取りができます
  • 外部APIのドキュメントを動的に取得して実装に活かせます

MCPのアーキテクチャ:ホスト・クライアント・サーバー

Claude Code
(ホスト/クライアント)
→
MCPプロトコル
(JSON-RPC 2.0 over
stdio / HTTP)
→
MCPサーバー
(GitHub / DB / Browser
など各種)
→
外部リソース
(API・DB・Web等)

MCPは3層構造で動作します。ホスト(Claude Code)がユーザーの指示を受け取り、必要なツールを呼び出す判断を行います。MCPクライアントはホストに組み込まれており、サーバーとの通信セッションを管理します。MCPサーバーは外部ツールやデータソースへの実際のアクセスを担当し、Claude Codeからは独立したプロセスとして動作します。通信にはJSON-RPC 2.0を使い、ローカルプロセス間通信(stdio)またはHTTP経由で接続されます(SSE方式は後述のとおり非推奨です)。

MCPサーバーで定義できる3種類の機能

MCPサーバーが提供できる機能は仕様上3種類に分類されています。用途に合わせて使い分けることで、Claude Codeへの情報提供の質が上がります。

種類 概要 AIによる制御 典型的な用途
Tools AIが能動的に実行できる関数 AIが判断して呼び出す API呼び出し・DBクエリ・ファイル操作
Resources AIが参照できるデータ・コンテンツ アプリケーション側が制御 ドキュメント・設定ファイル・ログ
Prompts 再利用可能なプロンプトテンプレート ユーザーが選択して使用 定型作業のワークフロー定義

Claude CodeへのMCPサーバーの追加方法

MCPサーバーの追加方法は、Claude Code公式ドキュメント(MCP)の分類に沿って整理すると、リモートのサーバーをHTTPで追加する、手元で動かすサーバー(stdio)を追加する、設定ファイルに直接書くの3つです。どれも claude mcp add コマンドか .mcp.json で行います。流れは「追加 → (必要なら)認証 → 状態の確認 → 不要になったら削除」です。

※ この章の画面は、ログイン情報のない空のホームフォルダで、Claude Code v2.1.296 を実際に実行して撮影しました(2026年10月12日)。Claudeにログインしていない撮影用の環境のため、起動画面のモデル表示は「Amazon Bedrock」になっています。ふだんの環境では、ご自身のプランやモデルが表示されます。

入力から選ぶ:手元にある情報で追加方法が決まる

MCPサーバーの説明書きは、使っているツール(Claude Desktop・Cursorなど)ごとに書かれていて、claude mcp add のコマンドが載っていないことがよくあります。その場合は、説明書きの中から次の3つのどれかを探します。見つかったものによって、使う方法が決まります(公式ドキュメントの整理、2026年10月23日確認)。

説明書きにあるもの サーバーの種類 Claude Codeでの追加
https://…/mcp のようなURL リモート(HTTP) claude mcp add --transport http 名前 URL(方法①)
wss://… のURL リモート(WebSocket) claude mcp add-json か .mcp.json に "type": "ws" で書く(--transport は ws を受け付けない)
npx -y … や uvx などの起動コマンド 手元で動かす(stdio) claude mcp add 名前 -- コマンド(方法②)
mcpServers のJSON 他のクライアント向けの設定 mcpServers の中の1件分だけを claude mcp add-json 名前 '{…}' に渡す(url だけで type が無いときは "type": "http" を足す)

方法①:リモートのサーバーをHTTPで追加する(公式の推奨)

Notion・GitHub・Sentryのように、サービス側がMCPサーバーを公開している場合はこの方法を使います。公式ドキュメントは、リモート接続にはHTTPを使うよう勧めています。

# 基本構文
claude mcp add --transport http <サーバー名> <URL>

# 例:Notionに接続する
claude mcp add --transport http notion https://mcp.notion.com/mcp

# 例:トークンをヘッダーで渡す
claude mcp add --transport http secure-api https://api.example.com/mcp \
  --header "Authorization: Bearer your-token"

下は、公式ドキュメントが認証の例に使っているSentryのサーバー(https://mcp.sentry.dev/mcp)を実際に追加した画面です。成功すると「Added HTTP MCP server sentry … to local config」と表示され、設定が書き込まれたファイル(~/.claude.json)も示されます。

ターミナルで claude mcp add --transport http sentry https://mcp.sentry.dev/mcp を実行した画面。Added HTTP MCP server sentry ... to local config と表示されている
claude mcp add --transport http でSentryのMCPサーバーを追加した画面(2026年10月12日に実際に実行して撮影)

認証が必要なサーバーは /mcp でログインする

ログインが必要なサーバーは、追加したあとにClaude Codeの中で /mcp を開いて認証します。トークンを設定ファイルに書かずに済むので、チームで設定を共有するときも安全です。下は、Claude Codeを起動して /mcp → sentry → Authenticate と進める操作の動画です。

Claude Codeを起動し、/mcp で一覧を開いてsentryを選び、Authenticateを実行する様子(約25秒・音声なし。2026年10月12日に実際に実行して撮影。ウィンドウの枠は描画したもので、表示されている文字は実行結果そのままです)
  1. /mcp を実行する:登録済みのMCPサーバーの一覧が出ます。ログインが必要なサーバーは「needs authentication」と表示されます。
  2. サーバーを選ぶ:詳細が表示されます。Statusが「needs authentication」、Authが「not authenticated」であることを確かめて、「1. Authenticate」を選びます。
/mcp で sentry を選んだ画面。Status は needs authentication、Auth は not authenticated で、Authenticate と Disable の2つが選べる
/mcp でsentryを選んだ画面。AuthenticateとDisableの2つを選べます(2026年10月12日に実際に実行して撮影)
  1. ブラウザで許可する:ブラウザが自動で開き、サーバー側のログインと許可の画面が表示されます。開かない場合は、画面に表示された認証用のURLをコピー(c キー)して、ブラウザで開きます。
Authenticate を選んだあとの画面。ブラウザが開くという案内と、開かない場合に手で開く認証用のURLが表示されている
Authenticateを選んだあとの画面。ブラウザが開かないときに使うURLが表示されます(2026年10月12日に実際に実行して撮影。URLは毎回変わります)

ログインと許可の画面(サーバー側のアカウントが必要です)は、この記事には載せていません。ブラウザで許可したあとに接続エラーの画面が出た場合は、ブラウザのアドレス欄のURLをコピーして、Claude Codeの「URL >」の欄に貼り付けます(公式ドキュメントの案内)。

Claude Code公式ドキュメント(MCP)には、/mcp を開かずにシェルから認証を始める claude mcp login <サーバー名>(ブラウザを使えないSSH接続などでは --no-browser)も載っています。認証を取り消すときは claude mcp logout <サーバー名> です。

方法②:手元で動かすサーバー(stdio)を追加する

自分のPCの中で動かすサーバー(ファイル操作や自作のスクリプトなど)は、stdio方式で追加します。サーバーを起動するコマンドは --(ハイフン2つ)の後ろに書きます。

# 基本構文
claude mcp add [オプション] <サーバー名> -- <コマンド> [引数...]

# 例:ファイルシステムMCPサーバーを追加
claude mcp add --transport stdio filesystem -- npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/dir

# 例:環境変数を渡す(公式ドキュメントの例)
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
  -- npx -y airtable-mcp-server

つまずきやすい点が2つあります。1つ目は -- の位置で、これより前がClaude Codeへのオプション(--transport・--env・--scope)、後ろがサーバーの起動コマンドになります。-- を省くと、サーバー側の引数をClaude Codeが自分のオプションとして読もうとして失敗します。2つ目は --env の直後にサーバー名を書かないことです。公式ドキュメントによると、--env は複数の「名前=値」を受け取るため、直後のサーバー名まで値として読まれて拒否されます。間に --transport stdio などを挟みます。

下は、ファイルシステムのサーバーをstdioで追加し、続けて claude mcp list で一覧を出した画面です。npx でサーバーを起動するため、Node.jsが必要です。filesystemは「✔ Connected(接続済み)」、先に追加したsentryは認証がまだなので「! Needs authentication(認証が必要)」と表示されています。

claude mcp add --transport stdio filesystem -- npx -y @modelcontextprotocol/server-filesystem を実行したあと claude mcp list を実行した画面。sentry は Needs authentication、filesystem は Connected と表示されている
claude mcp add --transport stdio と claude mcp list の画面(2026年10月12日に実際に実行して撮影)

方法③:設定ファイル(.mcp.json)に直接記述する

プロジェクトチームで設定を共有したい場合や、複数のサーバーをまとめて管理したい場合は、リポジトリの直下に置く .mcp.json に書く方法が便利です。claude mcp add に --scope project を付けると、このファイルが自動で作られます。下は、そのとおりに実行して .mcp.json の中身を表示した画面です(URLは公式ドキュメントが例に使っている mcp.example.com です)。

claude mcp add --transport http --scope project を実行すると .mcp.json が作られ、cat .mcp.json で mcpServers の中に type が http、url が指定した URL の設定が書き込まれているのが分かる画面
--scope project で追加すると .mcp.json が作られ、type と url が書き込まれます(2026年10月12日に実際に実行して撮影)

手で書く場合の記述例は次のとおりです。

{
  "mcpServers": {
    "notion": {
      "type": "http",
      "url": "https://mcp.notion.com/mcp"
    },
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/project"]
    },
    "db": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@bytebase/dbhub", "--dsn", "${DATABASE_URL}"]
    }
  }
}

環境変数は${VARIABLE_NAME}形式で参照できます。APIキーやパスワードなどの機密情報はファイルに直接書かず、必ず環境変数経由で渡します。また、url を書いたのに type を省くと、stdioサーバーとして読まれて設定エラーになります。リモートのサーバーには必ず "type": "http" を付けます。

.mcp.json に書かれたサーバーは、安全のため、対話セッションで最初に使う前に承認を求められます。他人のリポジトリを開いたときに、知らないサーバーが勝手に動くのを防ぐための仕組みです。承認する前の状態は、claude mcp list で「Pending approval (run `claude` to approve)」と表示されます(後述の画面)。承認の選択をやり直したいときは claude mcp reset-project-choices を実行します。

リモート接続の方式(HTTP・SSE・WebSocket)と、認証の2通り

リモートのMCPサーバーにつなぐ方式は、公式ドキュメントで3つ紹介されています。通常は HTTP を選びます。かつて主流だったSSE(Server-Sent Events)transport は現在では非推奨(deprecated)で、公式ドキュメントは「利用可能な場合は HTTP サーバーを使うこと」と明示しています。SSEしか提供していないサービスも、同じ --transport http のコマンドで追加でき、Claude Codeが先にHTTPを試して、受け付けられなければSSEに切り替えます(v2.1.265以降。公式ドキュメントより)。

claude mcp add --transport http notion https://mcp.notion.com/mcp

WebSocketは、サーバーが依頼なしにClaudeへ通知を送る(プッシュする)ような用途向けです。リクエストに答えるだけのサーバーなら、OAuthにも対応するHTTPを使います。WebSocketの認証はヘッダーだけで、静的なトークンを headers に書くか、接続のたびにヘッダーを作る headersHelper を使います。

認証には大きく2通りあります。静的な Authorization: Bearer ヘッダーを設定ファイルに書く方式と、リモートサーバーが OAuth 2.0 に対応している場合に、トークンをファイルに置かずに Claude Code 内の /mcp から対話的に認証する方式です。後者はAPIキーを .mcp.json に残さずに済むため、チーム共有時の情報漏えいリスクを下げられます。詳しくは後半の「MCPの認証と権限」で説明します。

なお .mcp.json に url だけ書いて type を省くと stdio サーバーと誤認されて接続に失敗します。Claude Codeはそのサーバーを読み込まずに警告を出すため、リモートは必ず "type": "http"(仕様上の別名 streamable-http も可)を明記します。

保存先(スコープ)の使い分けは、次の章「設定の保存先(スコープ)と設定ファイルの場所」にまとめました。

claude.aiで追加したコネクタは、そのままClaude Codeでも使える

Claude Code公式ドキュメント(MCP)によると、claude.aiのアカウントでClaude Codeにログインしている場合、claude.ai側で追加したMCPサーバー(コネクタ)は、Claude Codeでも自動的に使えるようになります。ブラウザ版ですでにNotionやGoogle Driveなどをつないでいる人は、Claude Code側で同じ設定をやり直す必要がありません。コネクタの追加は claude.ai/customize/connectors で行い、TeamプランとEnterpriseプランでは管理者だけが追加できます。

この自動連携には条件があります(公式ドキュメント、2026年10月23日確認)。コネクタが取り込まれるのは、claude.aiのサブスクリプションでログインしているときだけです。ANTHROPIC_API_KEY や ANTHROPIC_AUTH_TOKEN、apiKeyHelper を使っているとき、Amazon BedrockなどのクラウドのAPI経由で使っているときは取り込まれません。/mcp に出てこないときは、/status でどの認証方式になっているかを確かめます。また、同じURLを指すサーバーを自分でClaude Codeに追加してあると、そちらが優先され、コネクタは「hidden(非表示)」になります。Microsoft 365・Gmail・Google Calendarのように、claude.aiに登録された戻り先URLでしか認証を受け付けないコネクタは、Claude Code側の claude mcp add ではなく、claude.ai側で接続します。

他のクライアント向けの手順を、Claude Codeの書き方に読み替える

「Cursorの設定はこう」「Claude Desktopの設定はこう」とだけ書かれたMCPサーバーの案内は多く、そのままではClaude Codeに貼れません。読み替えのコツは3つです。

  • 起動コマンドは -- の後ろに丸ごと書く:claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server のように、-y などのフラグもサーバー側のものとして -- の後ろへ置きます。
  • JSONは mcpServers の「中身」だけ渡す:外側の "mcpServers": {…} は不要で、サーバー1件分のオブジェクトを claude mcp add-json 名前 '{…}' に渡します。
  • サーバー名は英数字・ハイフン・アンダースコアだけ:他のクライアントの名前に空白や記号があるときは、付け替えます。

どの方法でも、書き込み先は指定がなければ local スコープ(自分だけ・そのプロジェクトだけ)です。チームで共有するなら --scope project、自分の全プロジェクトで使うなら --scope user を付けます。成功すると「Added …」と表示され、これは設定が書き込まれたことを示します。実際につながったかは、次の claude mcp get 名前 で確かめます。

追加したサーバーの状態を確認する(claude mcp get・/mcp)

追加したあとは、サーバーの設定と接続状態を確認します。1つのサーバーの詳細は claude mcp get <サーバー名> で出せます。下の画面では、保存先(Scope: Local config)、接続状態(Status: ✔ Connected)、種類(stdio)、起動コマンドが分かります。最後の行には、削除するときのコマンド(claude mcp remove filesystem -s local)も案内されます。

claude mcp get filesystem の実行結果。Scope は Local config、Status は Connected、Type は stdio、Command は npx と表示されている
claude mcp get filesystem の実行結果(2026年10月12日に実際に実行して撮影)

Claude Codeの中では /mcp で、すべてのサーバーの状態を1画面で見られます。下の画面では、filesystemが「✔ 14 tools」、sentryが「needs authentication」と表示されています。

Claude Code で /mcp を実行した画面。Manage MCP servers の一覧に filesystem(14 tools)と sentry(needs authentication)が表示されている
/mcp のMCPサーバー一覧(2026年10月12日に実際に実行して撮影)

サーバーを選ぶと、状態・起動コマンド・設定の保存場所・ツールの数が出て、「View tools(ツール一覧)」「Reconnect(再接続)」「Disable(無効化)」を選べます。

/mcp で filesystem を選んだ画面。Status は connected、Command、Config location、Tools 14 tools と、View tools・Reconnect・Disable の選択肢が表示されている
/mcp でfilesystemを選んだ画面。接続済み(connected)で、ツールが14個あります(2026年10月12日に実際に実行して撮影)

「View tools」を選ぶと、そのサーバーのツールが一覧で出ます。ファイルを書き換えるツール(write_file・edit_file・move_file)には「destructive(破壊的)」、読み取り専用のツールには「read-only」と区分が付くので、何を許すかを決める材料になります。

View tools を選んだ画面。filesystem の14個のツール(read_file、write_file、edit_file など)が read-only または destructive の区分つきで一覧表示されている
「View tools」で表示された、filesystemの14個のツール(2026年10月12日に実際に実行して撮影)

claude mcp list の状態表示は、次の4つが目安です。

  • ✔ Connected:接続できています。
  • ! Needs authentication:認証が必要です。/mcp からログインします。
  • ✘ Failed to connect:接続に失敗しています。claude mcp get の Issue: の行に原因が出ます(公式ドキュメントより)。
  • ⏸ Pending approval:.mcp.json のサーバーをまだ承認していません。claude を起動して承認します。

表示される状態は上の4つのほかに、設定上の判断を示す次の3つがあります(接続は試していません)。Rejected は、設定の disabledMcpjsonServers で拒否された .mcp.json のサーバー(claude mcp get にだけ出ます)、Disabled for this project は、プロジェクトの disabledMcpServers に載っているサーバーで、/mcp から再び有効にできます。

設定の保存先(スコープ)と設定ファイルの場所:local・project・user

MCPの設定は、スコープ(local・project・user)で保存先が決まります。何も指定しないと local(自分だけ・そのプロジェクトだけ)に保存され、~/.claude.json に書き込まれます。チームで共有したいなら --scope project で、リポジトリ直下の .mcp.json に書き込みます。以下は公式ドキュメント(2026年10月23日確認)に沿った整理です。

スコープ 読み込まれる範囲 チーム共有 保存先 追加コマンド
local(既定) いまのプロジェクトだけ されない(自分だけ) ~/.claude.json(そのプロジェクトのパスの下) claude mcp add --transport http stripe https://mcp.stripe.com
project いまのプロジェクトだけ される(.mcp.jsonをバージョン管理に入れる) .mcp.json(プロジェクトのルート) claude mcp add --transport http shared-server --scope project https://example.com/mcp
user 自分のすべてのプロジェクト されない(自分だけ) ~/.claude.json claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic

管理者が組織の全員に配る管理設定(managed MCP)もあり、後述の「MCPの認証と権限」の章で触れます。

どのスコープで追加するか:目的別の選び方

やりたいこと 選ぶスコープ 理由
試しに1つ入れてみる。個人のAPIキーを使う local 他のプロジェクトにもチームにも影響しない。初期値のまま
チーム全員が同じサーバーを使う project .mcp.json をコミットすれば、クローンした全員に同じ設定が届く。認証情報は環境変数で渡す
どのリポジトリでも使う自分用のツール(メモ・ドキュメント検索など) user 一度入れれば、別のプロジェクトを開いても使える
別のプロジェクトに移ったらMCPが使えなくなった user local は追加したプロジェクトでしか効かないため。--scope user で入れ直す

local スコープの保存先は「プロジェクト内」ではない

混乱しやすい点です。MCPの local スコープのサーバーは、ホームディレクトリの ~/.claude.json に、そのプロジェクトのパスをキーにして保存されます。一般の設定で使う .claude/settings.local.json(プロジェクト内)とは別の場所です。「local だからプロジェクトのフォルダの中にあるはず」と探しても見つかりません。claude mcp get 名前 を実行すると、どのスコープのどのファイルから読んだかが表示されます。

{
  "projects": {
    "/path/to/your/project": {
      "mcpServers": {
        "stripe": { "type": "http", "url": "https://mcp.stripe.com" }
      }
    }
  }
}
claude mcp get filesystem の実行結果。Scope は Local config と表示され、Status は Connected、Type は stdio
追加したサーバーの保存先は claude mcp get 名前 の「Scope」で確かめられます。何も指定せずに追加したため「Local config」になっています(2026年10月12日に実際に実行して撮影)

同じ名前が複数のスコープにあるときの優先順位

同じサーバーが複数の場所で定義されているとき、Claude Codeは最も優先度の高い定義を1つだけ使って接続します。項目ごとの混ぜ合わせはなく、優先された定義がまるごと使われます。優先度の高い順は次のとおりです。

  1. local スコープ
  2. project スコープ(.mcp.json)
  3. user スコープ
  4. プラグインが提供するサーバー
  5. claude.aiのコネクタ

3つのスコープは「名前」で、プラグインとコネクタは「接続先(URLまたはコマンド)」で重複を判定します。組織が管理設定(managedMcpServers)で配ったサーバーは、これらすべてより優先されます(v2.1.259以降)。同じ名前を別の接続先で複数のスコープに登録すると、claude mcp list と /mcp に警告が出るので、片方を消して1つにまとめます。

project スコープのサーバーは、最初に承認を求められる

リポジトリに入っている .mcp.json は他人が書いたものです。そのためClaude Codeは、対話セッションで最初に使う前に承認を求めます。承認の選択をやり直したいときは claude mcp reset-project-choices を実行します。クローンしたばかりのリポジトリが、自分自身の設定で勝手に承認することはできません。ここは安全面で大切なので、「MCPのセキュリティ」の章であらためて注意点を整理します。

.mcp.jsonで環境変数を使う:APIキーを書かずにチームで共有する

チームで .mcp.json をGitに入れるときは、APIキーそのものを書かず、環境変数への参照を書きます。公式ドキュメントによると、.mcp.json では次の2つの書き方が使えます。

書き方 意味
${VAR} 環境変数 VAR の値に置き換わります
${VAR:-default} VAR が設定されていればその値、なければ default を使います

置き換えられる場所は、command(実行ファイルのパス)・args(引数)・env(サーバーに渡す環境変数)・url(HTTPサーバーのURL)・headers(HTTPサーバーの認証ヘッダー)の5か所です。

{
  "mcpServers": {
    "api-server": {
      "type": "http",
      "url": "${API_BASE_URL:-https://api.example.com}/mcp",
      "headers": {
        "Authorization": "Bearer ${MY_API_KEY}"
      }
    }
  }
}

上は公式ドキュメントの例をもとにした設定です。参照した環境変数が未設定で既定値もない場合、設定ファイルは読み込まれますが、${VAR} の文字がそのまま使われ、claude mcp list に警告が出ます。実際に上の設定を置いて実行した画面が次です。MY_API_KEY を設定していないため「Missing environment variables: MY_API_KEY」と表示されています。

claude mcp list の実画面。.mcp.json の MY_API_KEY が未設定のため Missing environment variables: MY_API_KEY の警告が出ている
.mcp.json の ${MY_API_KEY} が未設定のときの claude mcp list(2026年10月14日に実際に実行して撮影)

注意点がひとつあります。リモートサーバーの url と headers では、Claude Code自身の認証情報(ANTHROPIC_API_KEY など)やクラウドの認証情報(AWS_BEARER_TOKEN_BEDROCK など)、NPM_TOKEN のような環境変数は、書いても空として扱われます。リポジトリの .mcp.json や拡張機能が、手元の認証情報を外部のサーバーへ送ってしまうのを防ぐための仕組みです。Bearer ${ANTHROPIC_AUTH_TOKEN} と書いても中身が空のまま送られ、サーバーに拒否されて接続に失敗します。MCPサーバー用のトークンは、別の名前(例:MY_API_KEY)の環境変数で渡してください。

主要なMCPサーバーとClaude Codeでの活用パターン

主要なMCPサーバーと、Claude Codeでの具体的な使い方を整理します。MCPの公式リポジトリでは、以前「参照サーバー」として配布されていたもののうち、GitHub・PostgreSQL・Brave Search・Puppeteer・Slack・Sentryなどがアーカイブ(保守終了)に移されています。古い記事にある @modelcontextprotocol/server-github のようなパッケージ名は、現在は推奨されない点に注意してください(2026年10月12日確認)。

MCPサーバー 入手先(2026年10月時点) 主な機能 Claude Codeでの典型的な用途
Filesystem @modelcontextprotocol/server-filesystem(現行の参照サーバー) ファイル読み書き・ディレクトリ操作 指定したディレクトリだけに操作を限定する
Git 現行の参照サーバー(公式リポジトリの src/git) Gitリポジトリの読み取り・検索・操作 履歴や差分を調べさせる
Fetch 現行の参照サーバー(公式リポジトリの src/fetch) Webページの取得と変換 ドキュメントのページを読ませる
Memory @modelcontextprotocol/server-memory(現行の参照サーバー) ナレッジグラフ形式の記憶 設計判断やメモを蓄積する
GitHub GitHub公式のリモートサーバー https://api.githubcopilot.com/mcp/(旧参照版はアーカイブ済み) Issue/PR操作・コード検索・リポジトリ管理 Issue内容を読んでコードを修正し、PRを作成する
PostgreSQLなどのDB @bytebase/dbhub(Claude Code公式ドキュメントの例。旧参照版はアーカイブ済み) SQLクエリ実行・スキーマ参照 読み取り専用ユーザーでスキーマを読ませ、クエリを作らせる
Brave Search 旧参照版はアーカイブ済み。Brave公式のサーバーに置き換え Web検索 最新ライブラリのドキュメントを調べさせる
ブラウザ操作 旧参照版のPuppeteerはアーカイブ済み。Playwrightなど各提供元のサーバーを使う ブラウザ制御・スクリーンショット E2Eテストの自動化・画面の確認
Slack 旧参照版はアーカイブ済み(現在はZencoderが保守) メッセージ送受信・チャンネル管理 作業結果をSlackに通知する
Sentry 旧参照版はアーカイブ済み。Sentryが提供するサーバーを使う エラー・イベント情報取得 本番エラーのスタックトレースを読ませて修正する

GitHubにつなぐ場合、公式ドキュメントの例は次のとおりです。GitHubで発行した個人アクセストークンをヘッダーで渡します。

claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer YOUR_GITHUB_PAT"

データベースにつなぐ場合の公式ドキュメントの例は次のとおりで、接続文字列には読み取り専用のユーザーを使うよう勧められています。

claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
  --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

実務でよく使う組み合わせ:GitHub + Postgres + Brave Search

最初の組み合わせとして分かりやすいのが、GitHub + データベース + Web検索の3つです。典型的なワークフローは以下のとおりです。

  1. 「Issue #142を解決して」とClaude Codeに依頼します
  2. GitHub MCPがIssueの詳細・コメント・関連PRを自動取得します
  3. Postgres MCPで実際のDBスキーマを参照しながらコードを生成します
  4. 不明な外部ライブラリがあればBrave SearchでAPIドキュメントを取得します
  5. コードを書き、テストを走らせ、GitHub MCPでPRを作成して完了します

この一連の流れを、Claude Code単体ではできない範囲まで自律的に処理させられます。Issueを開いてコードを読み、PRを出すところまでを任せられるため、使い始めると開発フローへの影響が大きい部分です。

どのMCPサーバーから入れるべきか——導入優先度(2026年)

結論、まず入れるべきは「Filesystem・GitHub・Context7」の3つです。 この3つで「ファイルを読み書きし、Issueを読んで修正しPRを作り、最新ドキュメントを参照して古いAPIの誤りを防ぐ」という開発の基本形が完成します。そのうえで用途に応じて Playwright や Postgres を足すのが、迷わない順序です。

MCPサーバー 導入優先度 何ができるか 向いている人
Filesystem ★★★ 必須 指定ディレクトリのファイル読み書き・操作 全員(最初の1つ)
GitHub ★★★ 必須 Issue/PR操作・コード検索。Issueを読んで修正しPRまで作らせる GitHubで開発する人
Context7 ★★★ 推奨 最新ライブラリの公式ドキュメントをAIに読ませ、古い・誤ったAPIコードの生成を防ぐ 更新の速いライブラリを使う人
Playwright ★★☆ 用途特化 ブラウザを操作しE2Eテストの作成・実行を自動化 フロント/テスト自動化
Chrome DevTools ★★☆ 用途特化 画面のコンソールエラーやネットワークをAIに確認させる Webアプリのデバッグ
Postgres ★★☆ 用途特化 DBスキーマを読ませて安全にクエリを生成・検証 DBを扱う開発
Claude Code で /mcp を実行した画面。Manage MCP servers の一覧に filesystem(14 tools)と sentry(needs authentication)が表示されている
最初の1つとして入れたfilesystemサーバー。/mcp の一覧で「✔ 14 tools」と接続済みの状態が分かります(2026年10月12日に実際に実行して撮影。追加のコマンドは前章の方法②)

Claude Codeを1年以上実運用している経験から言えば、最初から多く入れるほど認識トラブルと権限管理が煩雑になります。Filesystem+GitHubで「読んで直してPR」の型を作り、次にContext7で最新ドキュメント参照を足すのが、実務で失敗しない立ち上げ順です。

Playwright・Chrome DevTools・Context7 を入れるときの注意

優先度の表に載せた3つのうち、ブラウザ操作の Playwright は、公式リポジトリ(microsoft/playwright-mcp)のREADMEに、Claude Code向けの追加コマンドが claude mcp add playwright npx @playwright/mcp@latest と載っています(2026年10月23日確認)。Node.jsが必要です。Chrome DevTools のサーバーは、READMEで /plugin marketplace add ChromeDevTools/chrome-devtools-mcp のあとに /plugin install chrome-devtools-mcp@chrome-devtools-plugins を実行する、プラグイン経由の入れ方が案内されています。Context7 は、現在のREADMEが専用のセットアップコマンドで導入する形に変わっており、この記事ではコマンドを載せません。導入の手順はサーバーごとに更新が早いので、入れるときは必ず各提供元のREADMEで最新の手順を確認してください。

MCP・CLAUDE.md・Skills・Hooksの違い:どれをいつ使うか

結論、外部のサービスやデータにつなぐ役目を持つのはMCPだけです。CLAUDE.md・Skills・Hooksは、Claude Codeの動き方を整える仕組みで、役割が違います。公式ドキュメントの「Extend Claude Code」では、次のように整理されています(2026年10月14日に確認)。

機能 役割 使う場面の例(公式の例)
MCP 外部のサービスにつなぐ データベースへの問い合わせ、Slackへの投稿、ブラウザの操作
CLAUDE.md 毎回の会話に読み込まれる常設の文脈 「npmでなくpnpmを使う」「コミット前にテストを実行する」といった決まりごと
Skills 知識や手順(ワークフロー)を渡す デプロイの確認手順、APIの書き方の資料
Hooks 特定のイベントのたびに必ず動かす自動処理 ファイルを編集するたびにESLintを実行する

公式は、MCPとSkillsを組み合わせて使うものとして説明しています。「MCPが接続を担当し、Skillsが使い方を教える」という分担で、たとえばMCPでデータベースに接続し、Skillsでテーブルの構成や問い合わせの書き方を文書にしておく、という使い方です。HooksからMCPのツールを呼ぶこともでき、公式の例は「重要なファイルを編集したらSlackに通知する」です。

迷ったときは、「Claude Codeが外の何かに触る必要があるか」で決めます。必要ならMCP、毎回守らせたい決まりごとならCLAUDE.md、決まった手順を呼び出したいならSkills、人が頼まなくても必ず動かしたいならHooksです。公式の機能一覧でも、機能を足すほど文脈を使うため、必要になったものから順に足すよう案内されています。

MCPのリソース(@)とプロンプト(/)を使う

MCPサーバーは、ツールのほかに「リソース」と「プロンプト」も提供できます(仕様上の3種類の機能は前の章のとおりです)。Claude Codeでは、どちらも普段の入力の延長で使えます。

  • リソース:プロンプトで @ を入力すると、接続中のMCPサーバーのリソースがファイルと並んで候補に出ます。@サーバー名:プロトコル://リソースのパス の形で指定します。公式の例は @github:issue://123 で、「この内容を分析して修正案を出して」のように頼めます。複数を同時に指定することもできます。
  • プロンプト:/ を入力すると、MCPサーバーのプロンプトがコマンドとして候補に出ます(/サーバー名:プロンプト名 (MCP) と表示されます)。/mcp__サーバー名__プロンプト名 でも実行でき、引数は空白で区切って後ろに書きます。公式の例は /mcp__github__pr_review 456 です。

どのリソースやプロンプトが使えるかは、サーバーごとに違います。使えるものはサーバーの提供元の説明で確認してください。

MCPの出力制限とタイムアウトを調整する

MCPのツールが大量のデータを返すと、会話の文脈をすぐに使い切ってしまいます。公式ドキュメントによると、Claude Codeは次のように扱います。

項目 内容
警告 ツールの出力が10,000トークンを超えると警告が表示されます(この値は固定です)
上限 既定は25,000トークンです。環境変数 MAX_MCP_OUTPUT_TOKENS で変えられます(例:MAX_MCP_OUTPUT_TOKENS=50000)
上限を超えたとき 結果はファイルに保存され、会話にはそのファイルの場所が入ります。必要なときにClaudeがファイルを読みます
起動の待ち時間 環境変数 MCP_TIMEOUT で変えられます(例:MCP_TIMEOUT=10000 claude で10秒)
ツール実行の待ち時間 サーバーごとに .mcp.json の timeout(ミリ秒)で指定できます(例:"timeout": 600000 で10分)

「データベースの結果が途中で切れる」「大きなファイルを返すサーバーで警告が出る」といったときは、まずサーバー側で返すデータを絞る(ページに分ける・件数を限る)のが基本で、それでも足りないときだけ MAX_MCP_OUTPUT_TOKENS を上げます。上限を上げるほど会話の文脈を多く使うため、必要な範囲にとどめてください。

長いツール呼び出しは2分でバックグラウンドに回る

メインの会話でMCPツールの呼び出しが2分を超えると、画面をふさがずにバックグラウンドのタスクへ移り、結果はタスク通知で届きます(/tasks で確認・停止できます)。この時間は CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS(ミリ秒)で変えられ、0 で無効になります。応答も進捗通知もないまま一定時間が過ぎると、呼び出しはエラーで打ち切られます。この「無反応の許容時間」の既定は、HTTP・SSE・WebSocket・claude.aiのコネクタで5分、stdioで30分です(CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT で変更、0 で無効。公式ドキュメント、2026年10月23日確認)。

サーバーを多く入れても重くなりにくい理由:ツール検索

Claude Codeは標準で「ツール検索」を使い、MCPのツールの詳しい定義を、必要になるまで読み込みません。セッションの開始時に読み込まれるのは、ツールの名前とサーバーの説明(instructions)だけです。環境変数 ENABLE_TOOL_SEARCH で挙動を変えられ、false で無効、auto ならツール定義の合計がコンテキストの10%を超えたときだけ検索に切り替わり、auto:5 のように割合も指定できます。ある1つのサーバーのツールだけを、検索なしで常に読み込ませたいときは、そのサーバーの設定に "alwaysLoad": true を書きます。

JSONで追加する・Claude Desktopから取り込む・Claude Code自体をMCPサーバーにする

claude mcp add のほかに、公式ドキュメントには次の3つの方法が載っています。

1. JSONをそのまま渡して追加する(claude mcp add-json)。他社の説明書にJSONの設定例だけが載っているときに便利です。サーバー名のあとに、JSONを1つの引数として渡します。次は、ファイル操作のサーバーをstdioで追加して一覧を出した実際の画面です(Connected と表示されています)。

claude mcp add-json fs-demo '{"type":"stdio","command":"npx","args":["-y","@modelcontextprotocol/server-filesystem","/path/to/project"]}'
claude mcp list

claude mcp add-json で stdio のサーバー fs-demo を追加し、claude mcp list で Connected と表示された実画面
claude mcp add-json で追加した直後の claude mcp list(2026年10月14日に実際に実行して撮影)。なお画面に出ている警告は、前の章の MY_API_KEY を設定していない .mcp.json のものです

公式ドキュメントによると、JSONはMCPサーバーの設定の形式に合っている必要があり、シェルの引用符の扱いに注意が必要です。--scope user を付ければ、そのプロジェクトだけでなく自分の全プロジェクトに追加できます。

2. Claude Desktopの設定を取り込む(claude mcp add-from-claude-desktop)。Claude Desktopで設定済みのサーバーを、対話画面で選んで取り込めます。取り込んだあとは claude mcp list で確認します。この機能が使えるのはmacOSとWSL(Windows Subsystem for Linux)だけで、claude mcp コマンドで付けられるサーバー名は英数字・ハイフン・アンダースコアに限られるため、名前に空白などを含むサーバーは取り込めません。

3. Claude Code自体をMCPサーバーとして動かす(claude mcp serve)。Claude Codeをstdioのサーバーとして起動し、Claude Desktopなど他のアプリから呼び出せます。起動しても何も表示されませんが、クライアントからの接続を待っている状態です。Claude Desktopの設定ファイル(claude_desktop_config.json)には、"command": "claude"、"args": ["mcp", "serve"] を指定します。claude コマンドにパスが通っていない場合は、which claude で調べたフルパスを指定します。

カスタムMCPサーバーの自作:Claude Codeを社内ツールと繋ぐ

既存の公開サーバーでカバーできない社内システムとの連携には、カスタムMCPサーバーの自作が必要になります。MCPのSDKはPython・TypeScript・Kotlinなど複数言語で提供されています。

TypeScript(Node.js)での最小実装例

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  ListToolsRequestSchema,
  CallToolRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

const server = new Server(
  { name: "my-internal-tool", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

// 利用可能なツールを宣言
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "get_ticket",
      description: "社内チケットシステムからチケット情報を取得する",
      inputSchema: {
        type: "object",
        properties: {
          ticket_id: { type: "string", description: "チケットID(例: TKT-123)" },
        },
        required: ["ticket_id"],
      },
    },
  ],
}));

// ツールの実行ハンドラ
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "get_ticket") {
    const { ticket_id } = request.params.arguments as { ticket_id: string };
    // 実際の社内APIを呼び出す処理をここに記述
    const ticketData = await fetchInternalTicket(ticket_id);
    return {
      content: [{ type: "text", text: JSON.stringify(ticketData, null, 2) }],
    };
  }
  throw new Error(`Unknown tool: ${request.params.name}`);
});

const transport = new StdioServerTransport();
await server.connect(transport);

作成したカスタムサーバーをClaude Codeに登録する際は、以下のようにコマンドで起動先を指定します。起動コマンドは -- の後ろに書きます(方法②のとおり)。

claude mcp add --transport stdio my-internal-tool -- node /path/to/my-mcp-server/dist/index.js

Claude Code MCPの実務活用:上級テクニック

CLAUDE.mdとMCPの組み合わせで一貫した作業文脈を作る

Claude CodeのCLAUDE.md(プロジェクトのメモリファイル)にMCPの使い方に関するルールを記述しておくと、Claude Codeがどのサーバーをいつ呼び出すべきかの判断精度が上がります。例えば、次のような記述をCLAUDE.mdに追加します。

## MCPツールの使用ルール

- GitHubのIssue番号が言及された場合は必ずGitHub MCPでIssue詳細を取得してから作業を開始する
- DBスキーマに関わる変更は必ずPostgres MCPで現在のスキーマを確認してから実装する
- 外部ライブラリのAPIを使う場合はBrave SearchでAPIドキュメントを確認する
- Slack通知はデプロイ完了・重大エラーの場合のみに限定する

複数MCPサーバーを連携させたエージェントワークフロー

MCPの本領は複数サーバーの組み合わせにあります。Claude Codeは複数のMCPツールを一つのタスクの中で順に呼び出せます。例えば「本番障害の調査と修正」というタスクは以下のように処理されます。

  1. Sentry MCPで直近のエラーイベントとスタックトレースを取得します
  2. GitHub MCPで関連コードの変更履歴(git blame / commits)を参照します
  3. Postgres MCPでエラー時のDB状態を確認するクエリを実行します
  4. コードを修正し、テストを実行します
  5. GitHub MCPでPRを作成し、Slack MCPで担当者に通知します

これらのステップが「本番障害を調査して修正PRを作って」という一文の依頼から自律的に実行されます。情報を集める手作業が減るぶん、初動の調査を短くできます。ただし、修正の内容は必ず人が確認してください。

MCPサーバーの承認制御:–permission-prompt-tool

Claude Codeはデフォルトでツール呼び出しの前に確認を求めますが、対話画面を使わない実行(非対話モード)では、--permission-prompt-toolオプションで、承認の判断を任せるMCPツールを指定できます。これにより、組織のポリシーに基づいた細粒度のアクセス制御が可能になります。CI/CD環境での自動化と、ヒューマンインザループの安全弁を両立させる際に有効です。

実際に日常運用しているMCPサーバーとCLAUDE.mdとの付き合い方

クリスタルメソッドでは河合継が1年以上、Claude Codeを日常業務で使い続けています。この過程で作業ルールを記録した「CLAUDE.md」は、当初20項目ほどだった運用ルールが、失敗のたびに教訓を書き足すかたちで現在は数十項目まで増えました。増え続けた理由のひとつが、MCPサーバーの「スコープ」(local/project/user)の取り違えです。あるプロジェクト限定のつもりで追加したMCPサーバーが、実は別スコープで登録されていて意図しない範囲から呼び出せてしまう、といった経験を経て、現在はMCPサーバーを追加するたびにclaude mcp listでスコープを目視確認する運用に落ち着いています。

また、MCP経由で外部ツールがファイルを書き換える操作を行う前提で、Claude CodeのPreToolUse Hookを使い、Edit/Write実行前に対象ファイルを日付別ディレクトリへ自動バックアップする仕組みを別途組み合わせています。MCPサーバー自体に誤操作防止機能を求めるのではなく、「操作前に必ず復元可能な状態を残す」という運用側の安全策とセットで使う、というのが実際に事故を経験したうえでの結論です。日常的に組み込んでいるのはファイル操作系とGit/GitHub連携系のMCPサーバーで、まずこの2種類から試すことを勧めています。

MCPの認証と権限:OAuth・ヘッダー・許可ルール・組織の管理

MCPでは「サーバーにログインする認証」と、「Claudeに何を許すかの権限」を別々に決めます。前者は /mcp や claude mcp login で、後者は設定ファイルの許可ルール(permissions)で行います。公式ドキュメントとPermissionsの文書(2026年10月23日確認)に沿って整理します。

サーバーにログインする3つの方法

方法 向いている場面 やり方
OAuth(ブラウザでログイン) Notion・Sentryなど、OAuth 2.0に対応するリモートサーバー /mcp でサーバーを選んで Authenticate。シェルからなら claude mcp login 名前(SSHなどブラウザが開けない環境は --no-browser)。取り消しは claude mcp logout 名前
静的なヘッダー GitHubの個人アクセストークンなど、固定のトークンで認証するサーバー --header "Authorization: Bearer …" を付けて追加。値は環境変数で渡す(前の章)
headersHelper 短い期限のトークンや社内SSOなど、接続のたびに新しい値が要る場合 サーバーの設定に "headersHelper": "/opt/bin/get-mcp-auth-headers.sh" のようにコマンドを書く。標準出力にJSONで返したヘッダーが、静的なヘッダーに上書きされて使われる

OAuthのトークンは安全に保存され、自動で更新されます。/mcp のメニューの「Clear authentication」で取り消せます。サーバーを claude mcp remove で削除したときは、保存していたトークンとクライアント登録も一緒に消えます。claude -p(非対話)やAgent SDKでは認証の画面を出せないため、先に対話セッションの /mcp、または claude mcp login でログインしておきます。

認証でつまずきやすい3つの場面

  • 戻り先のURLが決まっているサーバー:認証の戻り先(コールバック)のポートは既定では毎回変わります。サーバー側に戻り先URLを登録済みの場合は、claude mcp add --transport http --callback-port 8080 名前 URL のようにポートを固定します。
  • 「does not support dynamic client registration」と出る:サーバーが自動のクライアント登録に対応していません。サーバー側の開発者ポータルでアプリを登録して得たクライアントIDを、claude mcp add-json の oauth(clientId・callbackPort)で渡します。
  • Authorizationヘッダーを設定しているのに認証が通らない:ヘッダーの値をサーバーが拒否すると、OAuthには切り替わらず「接続失敗」として扱われます。トークンがそのサーバー向けに有効か、期限切れでないかを確かめるか、ヘッダーを外してOAuthに任せます。

許可ルールでMCPツールを制御する

MCPのツールも、Bash・Read・Editなどと同じ許可ルール(permissions)の対象です。ツールの名前は mcp__サーバー名__ツール名 という形で、次のように書き分けます。

書き方 意味
mcp__puppeteer puppeteerサーバーのすべてのツール
mcp__puppeteer__* 同じく、ワイルドカードでサーバーのすべてのツール
mcp__puppeteer__puppeteer_navigate そのサーバーの puppeteer_navigate ツールだけ
mcp__github__get_* githubサーバーの get_ で始まるツール(allowルールでは、サーバー名の部分にワイルドカードは使えない)
mcp__* (denyやaskルール) 全サーバーの全ツール
{
  "permissions": {
    "allow": ["mcp__github__get_*"],
    "deny": ["mcp__db__*"]
  }
}

書くときの注意が3つあります。ひとつ目は、MCPのルールにはかっこ(引数条件)を付けられないことです。かっこ付きの mcp__ ルールは設定の読み込み時にスキップされ、起動時の警告と claude doctor に出ます。引数で絞りたいときは、--disallowedTools を使います。ふたつ目は、サーバー名の . や空白が _ に置き換わることです(my.server は mcp__my_server__*)。みっつ目は、プラグインが持ってきたサーバーは mcp__plugin_プラグイン名_サーバー名__* という名前になることです。許可ルール全体の考え方と、承認のモードはClaude Codeの権限設定の解説で詳しく扱っています。

サブエージェントにだけMCPを持たせる

サブエージェントの定義ファイルには mcpServers という項目があり、メインの会話にはつないでいないサーバーを、そのサブエージェントだけが使えるようにできます。すでに設定済みのサーバー名を書くか、サーバーの設定をそのまま書きます。書いたサーバーはサブエージェントの開始時につながり、終了時に切れます。ただしプラグインが配るサブエージェントでは、この項目は無視されます。作り方はサブエージェントの解説にまとめています。

プラグインが持ってくるMCPサーバー

プラグインは、プラグイン直下の .mcp.json、または plugin.json の中にMCPサーバーを含められます。プラグインを有効にすると、そのサーバーが自動で起動します。追加と削除は /mcp ではなくプラグインの導入と削除で行い、/mcp でできるのは、プラグインを残したままサーバーだけを止める操作です。stdioやWebSocketのサーバーは、認証情報が入っていることがあるため、claude mcp get では値が [REDACTED] と伏せられます。入れる前に、プラグインの中身(追加されるサーバーやフック)を確認する習慣が安全です。

組織が配る・制限するMCP(管理設定)

管理者は、組織としてMCPサーバーを統制できます。公式ドキュメントでは、managed-mcp.json で固定のサーバーセットを配る方法、managedMcpServers で全員にサーバーを提供する方法、allowedMcpServers・deniedMcpServers で接続できるサーバーを絞る方法が案内されています。claude.aiのコネクタには、ツール単位で「承認を必須(ask)」「ブロック」を組織が設定でき、askのツールは自動承認のモードでも毎回確認が出ます。個人で使う場合は気にする必要はありませんが、チームに広げるときは、管理者と「どのサーバーを許すか」を先に決めておくと、後から外す手間が減ります。claude.aiのコネクタをまとめて止めたい個人は、disableClaudeAiConnectors を true にするか、ENABLE_CLAUDEAI_MCP_SERVERS=false claude で起動します。

MCPのセキュリティ:実務で押さえるべき注意点

MCPはClaude Codeの能力を大きく拡張しますが、それはリスクの拡大も意味します。外部サービスへのアクセス権をAIエージェントに渡す以上、セキュリティの考慮は必須です。

最小権限の原則を徹底する

MCPサーバーに渡す権限は、そのタスクに必要な最小限にとどめます。例えばGitHub MCPには読み取り専用のトークンを渡し、PR作成など書き込み操作が必要な場合のみwrite権限のトークンを使う、という運用が望ましいです。PostgreSQL MCPには読み取り専用のDBユーザーを割り当て、SELECT以外は実行できないようにするのが実務での基本です。

APIキー・認証情報の管理

設定ファイル(.mcp.json)にAPIキーをハードコードすることは絶対に避ける。環境変数経由で渡す設計にし、.envファイルは必ず.gitignoreに追加します。チーム開発では.mcp.json自体は環境変数のキー名だけを記述してgitに含め、実際の値は各自の環境変数またはシークレット管理サービスで管理する方式を推奨します。

MCPサーバーの信頼性評価

公開されているMCPサーバーをすべて無条件に信頼することは危険です。コミュニティ製サーバーを導入する際は、以下を確認する習慣をつけておきましょう。

  • ソースコードが公開されており読めるか(npmのリポジトリを確認します)
  • メンテナーが信頼できる組織・個人か(GitHubスター数・コミット履歴を見ます)
  • 要求するパーミッションがユースケースと釣り合っているかを見ます
  • 通信先が意図した外部サービスのみかを確認します(不審なエンドポイントへの通信がないか)

プロンプトインジェクション対策

MCPサーバーを通じて取得した外部データ(Issueのテキスト、DBの内容、Webページのテキスト等)には、悪意あるプロンプトが埋め込まれている可能性があります(プロンプトインジェクション攻撃)。Claude Code自体にも一定の防御機能はありますが、外部データを信頼せず、重要なオペレーション(本番DBの削除・外部への大量送信等)は必ず人間の確認ステップを挟む設計にすることが重要です。Claude Codeの--dangerously-skip-permissionsフラグは、テスト環境以外では使わないでください。

他人のリポジトリの .mcp.json と、承認が出ない場面

プロジェクトの .mcp.json は、リポジトリに入れた人の手元で作られたものです。知らないリポジトリを開いたときに、見知らぬサーバーが勝手に動くことを防ぐため、Claude Codeは対話セッションで最初に使う前に承認を求めます。claude mcp list では、承認前のサーバーが「Pending approval」と表示されます。クローンしたリポジトリの設定の中に承認済みという記述があっても、信頼していないフォルダでは無視されます。

一方、承認の画面を出せない場面では、project スコープのサーバーは確認なしで読み込まれます。claude -p(非対話)、Agent SDK、クラウドのセッションがこれに当たります。自動化で他人のリポジトリを扱うときは、次のどれかで備えます。

  • 特定のサーバーを disabledMcpjsonServers に入れて拒否する(どの権限モードでも効きます)
  • --setting-sources でプロジェクトの設定を読まないようにする
  • --strict-mcp-config を付けて起動し、--mcp-config で渡したサーバーだけを使う

また、リモートサーバーの url と headers では、ANTHROPIC_API_KEY やクラウドの認証情報、NPM_TOKEN などの環境変数は、設定していても空として扱われます。リポジトリの .mcp.json が手元の認証情報を外部のサーバーへ送ってしまうのを防ぐ仕組みです。サーバーに渡したい値は、自分で別の名前の変数にコピーして参照します。

MCPを実務で導入するときの勘所(一次情報)

Claude Codeを3.5の時代から1年以上、実務で運用してきた監修者・河合継の経験から、MCP導入の現実的な進め方を補足します。

  • 最初から多くを繋がない。必要な1つから。便利そうなサーバーを一度に繋ぐと、何がどの権限で動いているか把握できなくなります。本当に要る接続を一つ入れて挙動を確かめ、効果を見てから増やすほうが安全で、結局速かったです。
  • 権限の範囲を最初に決める。外部ツールと繋ぐほど、できることが増える分リスクも増えます。本文のセキュリティ注意のとおり、何を許して何を許さないかを接続時に明示しておくと、後の事故を防げます。
  • 繋いだら「想定どおり動くか」を一度通して確認する。設定が通っても期待どおり動くとは限りません。最小の操作で一往復させ、意図した範囲で動くことを見てから本番のワークフローに組み込むのが堅実でした。

Claude Code・AIエージェントの業務導入をご検討の方は、自社での開発実例を公開しているクリスタルメソッドの無料相談をご利用ください。

MCPの設定と動作確認:よくあるトラブルと解決策

MCPサーバーが認識されない場合

Claude Codeを起動した際、/mcpスラッシュコマンドや設定メニューでサーバーが表示されない、あるいは「failed」ステータスになる場合の確認手順は以下のとおりです。まず claude mcp list で状態を見ると、どこで止まっているかが分かります。下の画面では、filesystemが「✔ Connected」、sentryが「! Needs authentication」(認証が必要なだけで、故障ではありません)と区別されています。

claude mcp add --transport stdio filesystem -- npx -y @modelcontextprotocol/server-filesystem を実行したあと claude mcp list を実行した画面。sentry は Needs authentication、filesystem は Connected と表示されている
claude mcp list の状態表示。接続済み・認証が必要、の違いが一目で分かります(2026年10月12日に実際に実行して撮影)
ステップ1:サーバーの起動コマンドを単体でテスト
ターミナルでnpx -y @modelcontextprotocol/server-filesystem /tmpなどを直接実行し、エラーが出ないか確認します
ステップ2:必要な環境変数が設定されているか確認
echo $GITHUB_TOKENなどで環境変数が実際に設定されているか確認します。未設定の場合、サーバーは起動できません
ステップ3:JSON設定ファイルの構文チェック
cat .mcp.json | python3 -m json.toolなどでJSONの構文エラーを確認します。カンマや波括弧の誤りが原因になることが多いです
ステップ4:Claude Codeのログを確認
claude mcp list で各サーバーの状態(Connected/Needs authentication/Failed to connect)を確認し、claude mcp get <サーバー名> で設定の中身と失敗の原因(Issue: の行)を確認します。詳しいログが必要なときは claude --debug で起動します。画面は前章の「追加したサーバーの状態を確認する」のとおりです
ステップ5:npxキャッシュのクリア
npx clear-npx-cacheまたは~/.npm/_npxを削除して再試行します。古いバージョンのサーバーがキャッシュされていると問題が起きる場合があります

よくあるエラーと対処法

エラー・症状 主な原因 対処法
サーバーが「failed」と表示される コマンドパスが不正・環境変数未設定 コマンドを単体実行してエラーを確認
ツールが呼び出されるが結果が返らない タイムアウト・APIレート制限 サーバーのログを確認・APIクォータを確認
「Tool not found」エラー サーバーのバージョン不一致・設定ミス パッケージを最新版に更新・ツール名を確認
Filesystem MCPでアクセス拒否される 許可ディレクトリの範囲外をアクセスしようとしている 起動引数の許可パスを確認・修正する
SSEサーバーに接続できない(SSEは非推奨。可能ならHTTPで追加) CORS設定・認証ヘッダー不正 curlで直接エンドポイントを叩いてレスポンスを確認

設定の警告で原因が分かること

Claude Codeは、設定に問題があると claude mcp list と /mcp で警告を出します。原因の特定に役立つ代表的なものは次の4つです(公式ドキュメント、2026年10月23日確認)。

警告 原因 直し方
隠れた空白 トークンを貼り付けたときの末尾の改行など、command・url・args・env・headers の値の前後に空白がある 空白を削除する
同じ名前が複数のスコープにある 接続先の違う同名のサーバーが、local・project・userの複数にある 片方を消して1つにする(OAuthの認証は接続先ごとに保存される)
予約された名前 workspace・claude-in-chrome・computer-use など、組み込みサーバーの名前を使っている 別の名前に付け替える
環境変数が未設定 ${VAR} が未設定で、:- の既定値もない 変数を設定するか、${VAR:-既定値} にする(未設定のまま ${VAR} の文字がそのまま使われる)

自動で再接続されるとき、されないとき

リモート(HTTP・SSE)のサーバーが作業中に切れると、Claude Codeは最大5回、1秒から倍々に間隔を空けて再接続を試みます。5回失敗すると失敗扱いになり、画面に「MCP server … disconnected」と出ます。最初の接続が一時的なエラー(5xx・タイムアウトなど)で失敗したときも、3回まで自動で再試行します。認証エラーや見つからないエラーは、設定を直さないと解決しないため再試行されません。

手元で動かすstdioサーバーは、プロセスが終了するとすぐ失敗扱いになります。対話セッションでは、/mcp のサーバーのメニューから Reconnect を選んで起動し直します。失敗や要認証のサーバーをまとめて再試行したいときは /mcp reconnect all です(v2.1.284以降)。

Claude CodeのMCPサーバーを削除するには?

登録済みのMCPサーバーを外す最短の方法は、ターミナルで claude mcp remove <サーバー名> を実行することです。まず claude mcp list で登録名を確認し、その名前を指定して削除します。設定ファイルを手で編集するより、CLIから消すほうが記述ミスや壊れた設定が残りません。下は、実際にsentryを削除して、もう一度一覧を出した画面です。「Removed MCP server “sentry” from local config」と表示され、一覧からsentryが消えています。

claude mcp remove sentry で Removed MCP server と表示され、続く claude mcp list では project スコープの docs が Pending approval、filesystem が Connected と表示されている画面
claude mcp remove sentry のあとに claude mcp list を実行した画面(2026年10月12日に実際に実行して撮影。docsは --scope project で追加した未承認のサーバーです)
  • 確認 → 削除: claude mcp list で現在登録されているサーバー名を一覧表示し、claude mcp remove <名前> で削除します。セッション中は /mcp でも接続状況を確認できます。
  • スコープを指定する: MCPは登録時にスコープ(local / project / user)が分かれます。claude mcp get の最後に出る案内のとおり、-s でスコープを指定して削除できます(例:claude mcp remove filesystem -s local、-s user)。リモートのサーバーを削除すると、Claude Codeが保存していたOAuthのトークンとクライアント登録も一緒に削除されます(公式ドキュメントより)。
  • 設定ファイルの実体: プロジェクト単位の登録は作業ディレクトリの .mcp.json、ユーザー単位は ~/.claude.json に保存されます。CLIで消せば該当エントリだけが正しく除去されます。
  • 削除後の確認: 削除したらもう一度 claude mcp list(またはセッション再起動後に /mcp)で消えたことを確認します。反映されない場合はセッションを開き直します。

削除せずに一時的に止める

設定を残したまま接続だけ止めたいときは、/mcp でサーバーを選んで Disable します。一覧には「disabled」として残り、いつでも有効に戻せます。選択はプロジェクトごとに ~/.claude.json に記録されます。プラグインのサーバーやclaude.aiのコネクタも、この方法で止められます。

Claude Code MCPのよくある質問

Claude CodeのMCPとは何ですか?

結論、MCP(Model Context Protocol)とは、Claude Codeに外部ツールやデータ(GitHub・データベース・ブラウザ等)へのアクセスを与える標準規格です。 これを追加すると、Claude Codeはコード生成だけでなく、Issueを読む・DBを調べる・画面を操作するといった実務作業を自分で行えるようになります。

Claude CodeにMCPサーバーを追加するには?

結論、最も簡単なのは claude mcp add コマンドです。 リモートのサーバーは claude mcp add --transport http <名前> <URL>、手元で動かすサーバーは claude mcp add --transport stdio <名前> -- <起動コマンド> で追加でき、.mcp.json に直接記述する方法もあります。追加後は claude mcp list か、Claude Code内の /mcp で接続状態を確認できます。

Claude Codeのおすすめ MCPサーバーは?

結論、まず入れるべきは Filesystem・GitHub・Context7 の3つです。 Filesystemでファイル操作、GitHubで「Issueを読んで修正しPRを作る」、Context7で最新ライブラリのドキュメントを参照させて古いAPIの誤りを防げます。用途に応じて Playwright(ブラウザ操作)や Postgres(DB)を足します。

MCPのスコープ(local / project / user)はどう違いますか?

結論、localはそのフォルダだけ、projectはチームで共有(.mcp.jsonをコミット)、userは全プロジェクトで使える設定です。 プロジェクトをまたいで同じMCPを使いたいなら user スコープ(--scope user)で追加します。

MCPサーバーが認識されないときは?

結論、まず /mcp で状態を確認します。 多くは「起動コマンドやパスの誤り」か「Node.js等の実行環境の不足」が原因です。設定ファイルのJSON構文、絶対パス、必要なランタイムのインストールを順に確認してください。

リモートのMCPサーバーは、HTTPとSSEのどちらで接続すべきですか?

結論、HTTPです。 公式ドキュメントはSSE方式を非推奨とし、使える場合はHTTPサーバーを使うよう案内しています。追加するときは claude mcp add –transport http <名前> <URL> と書きます。設定ファイルに書く場合は “type”: “http” を必ず付けます(url だけを書いて type を省くと設定エラーになります)。

claude.aiで追加したコネクタは、Claude Codeでも使えますか?

結論、使えます。 公式ドキュメントによると、claude.aiのアカウントでClaude Codeにログインしていれば、claude.aiで追加したMCPサーバー(コネクタ)がClaude Codeでも自動的に使えるようになります。認証はclaude.ai側で済ませます。

MCPサーバーをたくさん入れると、動作が重くなったりしますか?

結論、以前ほど気にする必要はありません。 公式ドキュメントによると、Claude Codeは「ツール検索」という仕組みで、ツールの詳しい定義を必要になるまで読み込みません。起動時に読み込まれるのはツール名とサーバーの説明だけです。ただし、どのサーバーが何の権限で動いているかを把握するために、必要なものから1つずつ足す進め方をおすすめします。

MCPの設定ファイルはどこにありますか?

結論、保存先はスコープで決まります。 local(既定)と user は ~/.claude.json、project はプロジェクトのルートの .mcp.json です。local の設定は、一般の設定で使う .claude/settings.local.json ではなく、ホームディレクトリの ~/.claude.json に保存されます。claude mcp get 名前 で、読み込んだ場所を確認できます。

別のプロジェクトを開くとMCPが使えなくなりました。どうすればいいですか?

結論、user スコープで入れ直します。 何も指定せずに追加したサーバーは local スコープで、追加したプロジェクトでしか読み込まれません。claude mcp add --scope user --transport http 名前 URL のように --scope user を付けると、自分のすべてのプロジェクトで使えます。

MCPのツールだけ許可・拒否するには、どう書きますか?

結論、mcp__サーバー名__ツール名 の形で書きます。 サーバー全体なら mcp__サーバー名__*、1つのツールなら mcp__サーバー名__ツール名 です。かっこ付きの引数条件は付けられず、付けたルールは読み込み時にスキップされます。

チームで使うとき、APIキーはどこに置きますか?

結論、.mcp.json には環境変数の参照だけを書きます。 "Authorization": "Bearer ${MY_API_KEY}" のように書き、実際の値は各自の環境変数で渡します。OAuthに対応するサーバーなら、/mcp でログインすればファイルにトークンを置く必要がありません。

まとめ

Claude Code MCPは、AIエージェントと外部世界をつなぐための標準規格です。設定の基本はclaude mcp addコマンドまたは.mcp.jsonへの記述で、リモートのサービスはHTTPで、手元で動かすサーバーはnpxなどのコマンドで追加できます。社内ツールとの連携が必要な場合はMCP SDKを使ってカスタムサーバーを自作することで、あらゆる外部システムをClaude Codeの能力として取り込めます。

実務活用において最も重要なのは、最小権限の原則に基づく権限設計と、CLAUDE.mdによるコンテキスト管理の組み合わせです。MCPの利便性とセキュリティは相反しません。適切に設計されたMCP環境は、開発者が「コードを書く作業」から「解決すべき問題を考える作業」に集中できるための、強力な実務基盤になります。

関連記事

参考:Claude Code公式ドキュメント「Connect Claude Code to tools via MCP」、Model Context Protocol 公式リポジトリ(servers)(いずれも2026年10月23日確認)

Claude Code・AIエージェントの業務活用をご検討の方へ

クリスタルメソッドは、Claude Codeを日々の業務で使いながら、AIエージェント・社員AIの導入と開発効率化を支援しています。自社サイトの表示速度をAI社員(Claude Code)で12.89秒→2.03秒に短縮した実例も事例記事として公開しています。「自社の開発・業務にAIをどう組み込むか」といったご相談を承っています。

AIニュースのまとめをメールで

毎週月曜、海外AIニュースの日次ダイジェストを1週間分まとめてお届けします。無料・いつでも配信を停止できます。

監修

河合 継(クリスタルメソッド株式会社 代表取締役)

AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について | 編集方針

Read next

あわせて読みたい

  • 対話・チャットLLMのイメージ

    Claude Code 拡張機能の種類と選び方|CLAUDE.md・Skills・Hooks・MCP・プラグイン・VS Code【2026年10月】

    Claude Code の拡張機能とは、標準のまま使える Claude Code に「覚えておく指示(CLAUDE.md)」「呼び出せる手順(Skills)」「...

  • Claude Code GitHub連携の実装ガイド:アーキテクチャ設計から失敗回避まで

    Claude CodeとGitHubの連携方法|3つの連携パターン・設定手順・GitHub Actionsの例【2026年版】

    Claude CodeとGitHubの連携は、IssueやPRへのコメントひとつで、実装からPR作成までをClaudeに任せられる「エージェント型ワークフロー」...

  • 対話・チャットLLMのイメージ

    Claude Codeの外部連携コマンド完全ガイド|IDE integration(VS Code・JetBrains)・ブラウザ・GitHub【2026年版】

    IDE・ブラウザ・GitHub・Slackなど、外部ツールとClaude Codeをつなぐコマンド群です。導入時に一度設定しておくと作業がぐっと楽になります。 ...

View more