コンテンツへスキップ

media AI活用の最前線

AI導入戦略

Claude Code MCP設定|mcp addとスコープ【2026年9月】

Claude Code MCP設定|mcp addとスコープ【2026年9月】

結論(2026年9月時点):Claude Code の MCP は claude mcp add で追加します。--transport は stdio / http / sse(未指定は stdio・SSE は非推奨で HTTP 優先)、保存先は --scope の local・project・user で既定は local。チーム共有は法人環境の推奨である project スコープにし、.mcp.json をリポジトリに置きます。

結論: Claude Code × MCP(Model Context Protocol)連携は claude mcp add コマンド1行で始められ、GitHub・Notion・Slack・Linear・Filesystem・Database・カスタムの7パターンを.mcp.jsonに記述するだけで構成できます。OAuth認可フローとスコープ制限を正しく設定すれば法人の本番環境でも安全に運用できます。

この記事の要点(2026年8月時点の公式ドキュメントで再検証済み):

  • claude mcp add のstdio/http/sse各トランスポート、--scope local|project|user、.mcp.jsonの書き方を実機(Claude Code CLI)で動作確認したフラグ一覧付きで解説
  • OAuth 2.0認可フロー・スコープ制限・動的ヘッダー認証(headersHelper)の3段階セキュリティ設計と、claude mcp login によるコマンドライン認証
  • MCPリソースの@メンション参照、プラグイン経由MCPサーバーなど2026年8月時点の最新仕様を追加
  • よくある失敗4パターン(OAuth設定ミス・認証ループ・scope過剰・シークレット漏洩)と回避策

対象読者: Claude Codeで外部ツール連携を検討しているエンジニア・DX担当者・法人IT管理者

読了後にできること: 今日中に自社環境に合ったMCPサーバーを選んで.mcp.jsonを作成し、Claude Codeと外部ツールの連携を開始できる

「MCPって便利そうなのに、セキュリティが心配で本番に入れられない」

先日、ある製造業のDX担当者から相談を受けました。GitHub MCP自体は設定できたものの、「Slackのトークンをjsonファイルに直書きしてよいのか」「OAuth認可画面が出てきたけど何を許可しているのか分からない」と不安を抱えたまま止まっているというケースでした。

実はこれ、MCP導入あるあるなんです。設定の基本は簡単なのですが、OAuth認可フローとスコープ設計を理解していないと、必要以上の権限を渡してしまったり、逆に認証ループにはまったりします。法人環境で安心してMCPを使うには、仕組みを正しく理解した上で設計することが重要です。

この記事では、MCP仕様の基礎から7パターンの実装例、OAuth認可フロー、よくある失敗と回避策まで、公式ドキュメントに基づいて徹底解説します。コピペ可能な設定ファイル5つ付きで、今日から実装に入れます。

MCPとは何か — 公式仕様から読み解く基礎知識

MCP(Model Context Protocol)は、Anthropicが2024年末に公開したオープン標準プロトコルです。公式MCPレジストリでは2026年5月時点で9,652件のサーバーが登録されており(出典: MCP公式レジストリAPI集計、参照日: 2026-08-29)、OpenAI・Google・VS Code・Cursorなど主要なAIツールにも採用されています。なお2026年8月時点でこれ以降の公式レジストリの最新集計は確認できていません。Glama・PulseMCP・Smitheryなどのサードパーティレジストリでは2026年8月時点で1万件を大きく超える件数が公開されていますが、放置・重複登録も多く含まれるため参考値として扱ってください。

MCPの3層構造の図。MCPホスト内のMCPクライアントがstdioとHTTPで各MCPサーバーに接続する
公式仕様(modelcontextprotocol.io/参照日: 2026-06-04)の3参加者を1枚にした図。データ層はJSON-RPC 2.0、トランスポート層はstdio(ローカルプロセス)とStreamable HTTP(リモートサーバー)の2方式。

一言で言うと「AIのUSB-Cポート」です。USB-Cが機器の種類を問わず統一規格で繋げるように、MCPはAIアプリケーションとあらゆる外部システムを統一規格で接続します。

MCP アーキテクチャの3層構造

公式仕様(modelcontextprotocol.io/docs/learn/architecture、参照日: 2026-06-04)によると、MCPは次の3つの参加者で構成されます。

役割説明具体例
MCPホストAIアプリ本体。複数のMCPクライアントを管理Claude Code、Claude Desktop、Cursor
MCPクライアント各サーバーとの1対1接続を維持するコンポーネントClaude Code内部で自動生成
MCPサーバー外部ツールや機能を提供するプログラムGitHub MCP、Slack MCP等

データ層とトランスポート層の2層構造で動作します。データ層はJSON-RPC 2.0ベースのプロトコルで、ツール(Tool)・リソース(Resource)・プロンプト(Prompt)の3種類のプリミティブを提供します。トランスポート層はstdio(ローカルプロセス)とStreamable HTTP(リモートサーバー)の2方式をサポートします。

MCPの3つのプリミティブ

MCPサーバーが提供できる機能は次の3種類です(公式仕様準拠、参照日: 2026-06-04)。

  • Tools(ツール): AIが実行できる関数。ファイル操作、API呼び出し、DB更新など
  • Resources(リソース): コンテキスト情報の提供源。ファイル内容、DBレコード、APIレスポンスなど
  • Prompts(プロンプト): 再利用可能なテンプレート。システムプロンプト、few-shotサンプルなど

2026年8月時点でtool search(ツール検索)は既定で有効です。Claude CodeはMCP接続時にすべてのツール定義を事前ロードせず、Claudeがタスクで必要になったタイミングでオンデマンド検索・取得する仕組みに変わっています。これによりMCPサーバーを何個追加しても文脈窓(コンテキストウィンドウ)への影響を最小限に抑えられ、サーバーごとのツール数上限も設けられていません(出典: code.claude.com/docs/ja/mcp、参照日: 2026-08-29)。挙動は環境変数 ENABLE_TOOL_SEARCH で調整できます。

設定値動作
未設定(既定)すべてのMCPツールを遅延ロードし、必要時にオンデマンド取得
true常に遅延ロード。プロキシ経由でもベータヘッダーを送信
autoツール定義の合計がコンテキストウィンドウの10%未満なら事前ロード、10%に達したらすべて遅延
auto:Nしきい値を任意のパーセンテージ(0-100)に変更(例: auto:5)
falseすべて事前ロード(遅延なし)

頻繁に使う少数のツールだけは常時ロードしたい場合、.mcp.jsonのサーバー設定に "alwaysLoad": true を追加すると、そのサーバーのツールはツール検索を経由せずセッション開始時から利用可能になります。

MCPの全体像についてはAIエージェント導入完全ガイドでもエージェント連携の観点から解説しています。

MCPサーバー3つのスコープと.mcp.jsonの基本構造

まず設定の前に「どこに設定を書くか」を決めます。Claude Codeには3つのスコープがあります(出典: code.claude.com/docs/en/mcp、参照日: 2026-06-04)。

MCPサーバー3つのスコープの図。local・project・userの保存場所と用途、チーム共有の可否を対比
法人環境での推奨はprojectスコープ。同名サーバーが複数スコープに存在する場合の優先順位は「local > project > user > プラグイン提供 > claude.aiコネクタ」の順。
スコープ保存場所チームで共有用途
local(デフォルト)~/.claude.jsonしない個人の開発環境・実験的設定
projectプロジェクトルートの.mcp.jsonする(Git管理)チーム全員が使うツール連携
user~/.claude.jsonしない全プロジェクト横断で使う個人設定

法人環境での推奨は「project スコープ」です。.mcp.jsonをGitにコミットすることで、チーム全員が同じMCP設定でClaude Codeを使えます。ただしAPIキーは.mcp.jsonに直書きせず、環境変数で渡すのが鉄則です。

「claude mcp 設定」で検索して古い記事が出てきたら要注意: local スコープは以前「project」、user スコープは以前「global」という名称でした(出典: Claude Code の変更履歴 CHANGELOG.md の v0.2.49、参照日: 2026-09-30)。旧ドキュメントや古いブログ記事の --scope project(個人用の意味)と、現行の「project スコープ」(.mcp.jsonでチーム共有する意味)は指しているものが違うので混同しないでください。同名サーバーが複数スコープに存在する場合の優先順位は「local > project > user > プラグイン提供 > claude.aiコネクタ」の順です。

コピペ可能: claude mcp add コマンド構文早見表(2026年8月時点)

実際にローカルのClaude Code CLI(claude mcp add --help)で動作確認したフラグ一覧です。

フラグ意味
-t, --transport <stdio|sse|http>トランスポート種別。未指定時はstdio。SSEは非推奨(HTTP優先)
-s, --scope <local|project|user>設定の保存先スコープ(既定はlocal)
-e, --env <KEY=value...>stdioサーバーに渡す環境変数
-H, --header <文字列...>HTTP/SSEサーバーに渡すヘッダー(例: Authorization: Bearer ...)
--callback-port <port>OAuthコールバックのポート固定(企業のリダイレクトURI事前登録向け)
--client-id / --client-secretDynamic Client Registration非対応サーバー向けの事前設定OAuth認証情報
# stdio型(ローカルプロセス)
claude mcp add my-server -e API_KEY=xxx -- npx my-mcp-server

# HTTP型(リモート・推奨トランスポート)
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

# HTTP型+認証ヘッダー
claude mcp add --transport http corridor https://app.corridor.dev/api/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

# JSON設定から一発追加(add-json)
claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp"}'

stdioサーバーを追加する時は --(ダブルダッシュ)で自コマンドのオプションとサーバー実行コマンドを区切ります。-- の前は claude mcp add 自身のオプション、後ろはサーバーにそのまま渡るという役割分担です。

コピペ可能: 基本的な.mcp.jsonの構造

{
  "mcpServers": {
    "サーバー名": {
      "type": "http",
      "url": "https://mcp.example.com/mcp"
    },
    "ローカルサーバー名": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-example"],
      "env": {
        "API_KEY": "${API_KEY}"
      }
    }
  }
}

重要な注意点: 2026年現在、Claude Codeの旧ドキュメントには .claude/mcp.json という記述が残っていますが、正しいパスはプロジェクトルート直下の .mcp.json です(出典: code.claude.com/docs/en/mcp、参照日: 2026-06-04)。

7パターンMCPサーバー導入ガイド

パターン1: GitHub MCP — コードレビューとPR自動化

GitHub公式MCPサーバー(remote HTTP型)。Personal Access Token(PAT)をAuthorizationヘッダーで渡します。

# CLIで追加(local スコープ)
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer YOUR_GITHUB_PAT"

.mcp.jsonに直接書く場合(project スコープ、チーム共有向け):

{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}"
      }
    }
  }
}

設定後、Claude Codeで使えるようになる操作例:

  • 「ENG-4521のissueを実装してdevelopブランチにPRを作って」
  • 「先週の自分のコミットを一覧表示して」
  • 「PR #123のコードレビューをして改善点を教えて」

トークン権限の最小化: PATはFine-grained tokenを使い、「対象リポジトリのみ」「Read/Writeのみ必要な権限」に絞ること。全リポジトリ・全権限のClassic tokenは使わない。

GitHub MCPをClaude Codeに導入する4ステップ(実例)

  1. GitHubでFine-grained PATを発行: github.com/settings/personal-access-tokens を開き、対象リポジトリのみ選択し、Pull requests/Issues/Contentsなど必要な権限だけをRead/Writeで付与してトークンを発行する
  2. Claude CodeにMCPサーバーを追加:
    claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
      --header "Authorization: Bearer YOUR_GITHUB_PAT"
  3. 接続確認: Claude Code内で /mcp を実行し、githubサーバーが接続済み(ツール数が表示される状態)になっているか確認する。claude mcp list でも一覧確認できる
  4. 動作テスト: 「PR #123のコードレビューをして改善点を教えて」のように具体的な指示を出し、実際にGitHub上のデータを取得できているか確認する

チームで共有する場合は --scope project を付けて.mcp.jsonに書き込み、トークン部分だけ ${GITHUB_TOKEN} の環境変数参照に変えてGit管理する(本文中の.mcp.json記述例を参照)。

パターン2: Notion MCP — ドキュメント管理とタスク連携

Notion公式MCP(remote HTTP型)。NotionはBearerトークン認証ではなくOAuth認証のみサポートします。

# まずサーバーを追加
claude mcp add --transport http notion https://mcp.notion.com/mcp

# 次にClaude Code内でOAuth認証
/mcp
# → Notionが「要認証」として表示される → ブラウザでOAuth承認

.mcp.json記述例:

{
  "mcpServers": {
    "notion": {
      "type": "http",
      "url": "https://mcp.notion.com/mcp"
    }
  }
}

OAuth認証後のClaude Code使用例:

  • 「プロジェクト管理DBの未完了タスクを一覧表示して」
  • 「今日の会議メモをNotionの議事録DBに追加して」
  • 「仕様書ページに先ほどの実装内容を追記して」

パターン3: Slack MCP — チームコミュニケーション連携

Slack公式MCP(remote HTTP型、OAuth認証)。スコープを必要最小限に制限することが重要です。

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "scopes": "channels:read chat:write search:read"
      }
    }
  }
}

oauth.scopes で許可スコープを明示的に制限しています。これはRFC 6749の scope パラメータに準拠した指定です(出典: code.claude.com/docs/en/mcp、参照日: 2026-06-04)。

Claude Codeでの使用例:

  • 「#devチャンネルの今日のメッセージをサマリーして」
  • 「Figmaの新デザインをSlack #designチャンネルに通知して」

パターン4: Linear MCP — プロジェクト管理連携

Linear公式MCP(remote HTTP型)。APIキーをAuthorizationヘッダーで渡します。

{
  "mcpServers": {
    "linear": {
      "type": "http",
      "url": "https://mcp.linear.app/mcp",
      "headers": {
        "Authorization": "Bearer ${LINEAR_API_KEY}"
      }
    }
  }
}

Claude Codeでの使用例:

  • 「自分にアサインされた未完了issueを一覧表示して」
  • 「このバグのissueをLinearに作成してdevelopチームにアサインして」

パターン5: Filesystem MCP — ローカルファイル操作

ローカルストレージへの安全なアクセスをClaude Codeに提供します。stdio型(ローカルプロセス)。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/projects/myproject",
        "/Users/username/documents/specs"
      ]
    }
  }
}

アクセス許可するパスを明示的に列挙することで、想定外のパスへのアクセスを防ぎます。

パターン6: Database MCP — PostgreSQL/MySQL接続

DBhub経由でPostgreSQLに接続するstdio型MCP。接続文字列には読み取り専用ユーザーを使うことを強く推奨します。

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub",
        "--dsn",
        "postgresql://readonly_user:password@prod.db.com:5432/analytics"
      ]
    }
  }
}

研修先の現場では「本番DBに書き込み権限のあるユーザーをMCPに渡して事故が起きかけた」という事例がありました。DBMCPには必ず読み取り専用ユーザーを作成して設定することを徹底してください。

パターン7: Custom MCP Server — 社内システム連携

社内の独自APIやシステムをMCP化する方法です。Python SDKを使った最小実装例:

# custom_mcp_server.py
from mcp.server import MCPServer

app = MCPServer("custom-internal-api")

@app.tool()
async def get_customer_info(customer_id: str) -> str:
    """社内顧客管理DBから顧客情報を取得"""
    # 社内APIを呼ぶロジック
    response = await internal_api.get(f"/customers/{customer_id}")
    return response.json()

@app.tool()
async def create_support_ticket(
    customer_id: str,
    subject: str,
    description: str
) -> str:
    """サポートチケットを作成"""
    # チケット作成API
    result = await internal_api.post("/tickets", {
        "customer_id": customer_id,
        "subject": subject,
        "description": description
    })
    return f"チケット作成完了: #{result['ticket_id']}"

if __name__ == "__main__":
    app.run()
# .mcp.json への登録
{
  "mcpServers": {
    "internal-crm": {
      "command": "python3",
      "args": ["/path/to/custom_mcp_server.py"],
      "env": {
        "INTERNAL_API_URL": "${INTERNAL_API_URL}",
        "INTERNAL_API_KEY": "${INTERNAL_API_KEY}"
      }
    }
  }
}

社内CRMとClaude Codeを連携した法人での活用例として「顧客IDを伝えるだけで過去の問い合わせ履歴・購入履歴・対応状況を瞬時に把握できる」という使い方があります。想定シナリオとして構成したものですが、このパターンのMCPは顧客サポートや営業の現場で特に効果的です。

番外編: プラグイン経由でMCPサーバーを配布する(2026年8月時点の最新機能)

Custom MCP Serverを自作せず、Anthropicの公式プラグイン機能でMCPサーバーをスキャフォルド(雛形生成)することもできます(出典: code.claude.com/docs/ja/mcp、参照日: 2026-08-29)。

# 公式プラグインをインストール
/plugin install mcp-server-dev@claude-plugins-official

# マーケットプレイスが見つからない場合は先に登録
/plugin marketplace add anthropics/claude-plugins-official

# 対話形式でMCPサーバーをビルド
/mcp-server-dev:build-mcp-server

プラグインにMCPサーバーをバンドルしておくと、プラグインを有効化した瞬間に全メンバーへ同じMCPツールが自動配布されます。プラグインルートの.mcp.jsonまたはplugin.json内に、${CLAUDE_PLUGIN_ROOT}(プラグインのインストール先)というプレースホルダーを使ってサーバーを定義します。

{
  "mcpServers": {
    "database-tools": {
      "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
      "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
    }
  }
}

プラグイン提供のMCPツールは mcp__plugin_<プラグイン名>_<サーバー名>__<ツール名> という完全名で呼び出されます。権限ルールやスキルの許可ツールリストでプラグイン提供ツールを指定する時は、この完全名を使う必要があります(ベアのサーバー名だけを書いたルールは発火しません)。プラグイン導入・無効化は /mcp ではなく /reload-plugins で反映します。

OAuth認可フロー完全解説 — MCP OAuth Authorization

Notion・Slack・Sentry等のリモートMCPサーバーを使う際に必要なOAuth 2.0認可フローについて詳しく説明します(出典: code.claude.com/docs/en/mcp、参照日: 2026-06-04)。

MCPのOAuth認可フロー図。サーバー追加から認証チェック、ブラウザ認可、コールバック、トークン保存まで
Claude Codeはサーバーが 401 Unauthorized または 403 Forbidden を返した時点でOAuth認証が必要と判断する。コールバック先は http://localhost:PORT/callback で、トークンはキーチェーン等に保存され自動更新される。

OAuth認可の基本フロー(5ステップ)

  1. サーバー追加: claude mcp add --transport http サーバー名 URL でサーバーを登録
  2. 認証チェック: /mcp コマンドでサーバーの認証ステータスを確認。「要認証」と表示されたらOAuthフローへ
  3. ブラウザ認可: 自動的にブラウザが開き、外部サービスのOAuth認可画面が表示される。許可するスコープを確認して承認
  4. コールバック処理: 認可完了後、http://localhost:PORT/callback にリダイレクトされClaude Codeがトークンを受け取る
  5. トークン保存: 認証トークンはシステムキーチェーン(macOS)またはcredentialsファイルに安全に保存され、自動更新される

Claude Codeは、サーバーが 401 Unauthorized または 403 Forbidden を返した時点でOAuth認証が必要と判断し、/mcp パネルにフラグを立てます。

コマンドラインから認証する(claude mcp login)

claude mcp login <サーバー名> を使うと、対話セッション内で /mcp パネルを開かなくても、シェルから直接OAuthフローを実行できます(実機のClaude Code CLIで動作確認済み)。

# 設定済みサーバーのOAuth認証を実行
claude mcp login sentry

# ブラウザが使えない環境(SSH/ヘッドレス)では認可URLを表示させる
claude mcp login sentry --no-browser

# 保存済みの認証情報をクリアする
claude mcp logout sentry

SSHセッション中やディスプレイサーバーのないLinux環境では、Claude Codeが自動でブラウザなしのフローを検出し、認可URLを出力します。ローカルマシンでそのURLを開き、ブラウザのアドレスバーに表示された完全なリダイレクトURLをターミナルに貼り付けて認証を完了させます(ssh -t で接続していることが前提です)。

コールバックポートの固定(企業環境向け)

企業のセキュリティポリシーで特定のリダイレクトURIを事前登録する必要がある場合は、--callback-port で固定できます。

# コールバックポートを固定してサーバー追加
claude mcp add --transport http \
  --callback-port 8080 \
  my-server https://mcp.example.com/mcp

# 事前設定済みOAuthクレデンシャル(Dynamic Client Registration非対応サーバー向け)
claude mcp add --transport http \
  --client-id your-client-id --client-secret --callback-port 8080 \
  my-server https://mcp.example.com/mcp

スコープ制限で最小権限の原則を実現

OAuthのスコープは「必要最小限」に絞るのが鉄則です。oauth.scopes フィールドで制限できます(RFC 6749 §3.3準拠)。

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "scopes": "channels:read chat:write search:read"
      }
    },
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
      "oauth": {
        "scopes": "repo:read pull_request:write"
      }
    }
  }
}

動的ヘッダー認証(社内SSO・Kerberos対応)

OAuthが使えない社内認証(Kerberos、短期トークン、社内SSO)の場合は headersHelper で対応できます。

{
  "mcpServers": {
    "internal-api": {
      "type": "http",
      "url": "https://mcp.internal.example.com",
      "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
    }
  }
}

headersHelperコマンドはJSON形式のヘッダーオブジェクトをstdoutに出力する必要があります。接続毎に実行されるため、短期トークンの動的生成にも対応できます。

MCPリソースを@メンションで直接参照する

MCPサーバーが公開する「リソース」(ファイル・DB行・チケット等のデータ)は、ツール呼び出しを介さず、チャット入力欄で直接@メンションして読み込ませることができます(出典: code.claude.com/docs/ja/mcp、参照日: 2026-08-29)。

# 書式: @サーバー名:プロトコル://リソースパス
@github:issue://123
@postgres:table://users
@sentry:issue://PROJECT-1

@ を入力するとリソース一覧がオートコンプリートで表示され、選択したリソースの中身がそのままプロンプトのコンテキストに追加されます。ツール呼び出し(Claudeが判断して実行する)と違い、@メンションは「このデータを今すぐ読み込ませる」というユーザー側の明示的な指示です。対応しているかどうかはMCPサーバー側の実装次第で、すべてのサーバーがリソースを公開しているわけではありません。

また、MCPサーバーはプロンプト(定型指示)を提供でき、スラッシュコマンドとして /mcp__サーバー名__プロンプト名 の形式で呼び出せます。よく使う定型作業(週次レポート生成など)をサーバー側にプロンプトとして登録しておくと、チーム全員が同じ手順で実行できます。

この記事の内容を社内で使うなら

要点と手順をまとめた資料を無料で受け取れます。研修4,000名以上・支援100社以上の実績をもとに、自社の業務に当てはめる相談も30分から受け付けています。

Claude Code × ビジネス活用 実践ガイド無料で受け取る →AI顧問に相談する(30分・無料)→

5ステップ実装フロー — 初めてのMCP導入から本番稼働まで

  1. スコープ設計: 「個人のみ」「チーム全員」「全プロジェクト」のどれかを決め、保存場所(~/.claude.json / .mcp.json)を選択する
  2. サーバー選定: Anthropicディレクトリ(claude.ai/directory)で対象サービスのMCPサーバーを検索し、HTTP型(推奨)かstdio型かを確認する
  3. 認証方式の確定: Bearer Token / OAuth 2.0 / 動的ヘッダーのどれを使うか確認し、最小権限のスコープを設計する
  4. .mcp.json作成・環境変数設定: APIキー・トークンは絶対に直書きせず環境変数(${ENV_VAR})で参照する。claude mcp list で認識を確認
  5. 動作確認・セキュリティレビュー: /mcp でツール一覧を確認。OAuth認証を完了し、必要最小限のスコープで動くことをテストする

Claude Codeのセキュリティ設定全般についてはClaude Codeセキュリティ設定完全ガイドで詳しく解説しています。

法人向けセキュリティ設計 — プロジェクトスコープ運用ベストプラクティス

チームでMCPを使う場合の設計指針をまとめます。

法人向けMCPセキュリティ設計の図。シークレット管理3原則とマネージドMCP設定、インジェクション対策
マネージドMCP設定は managed-mcp.json をエンドユーザーの権限では書き換えられない管理対象ディレクトリに置くのが前提。プロンプトインジェクション対策は本文の3項目のうち代表の1つだけを図に示している。

シークレット管理の3原則

  • APIキーは環境変数で渡す: ${GITHUB_TOKEN} のような参照形式を使い、.mcp.jsonにAPIキー本文は書かない
  • .mcp.jsonは.gitignoreしない: project スコープの.mcp.jsonはGit管理対象にする(チーム共有のため)。ただし内容にシークレットが入っていないことを必ず確認する
  • CIではenv secretsを使う: GitHub Actionsのsecrets、AWSのSecrets Manager等から環境変数として注入する

マネージドMCP設定(Enterprise向け)

企業のIT管理者がメンバー全員に使えるMCPサーバーを一元管理する場合、managed-mcp.json による配布と allowedMcpServers / deniedMcpServers による許可制御が可能です。特定のMCPサーバーのみ許可し、外部への接続を制限するホワイトリスト管理ができます。

{
  "allowedMcpServers": [
    { "serverUrl": "https://api.githubcopilot.com/*" },
    { "serverUrl": "https://mcp.notion.com/*" },
    { "serverUrl": "https://mcp.linear.app/*" }
  ],
  "allowManagedMcpServersOnly": true
}

この例では GitHub・Notion・Linear の3つのURLに一致するサーバーだけを許可します。allowedMcpServers と deniedMcpServers の各項目は、serverUrl・serverCommand・serverName のいずれか1つをキーに持つオブジェクトで書きます(文字列の配列ではありません)。serverName は利用者が付けるラベルなので、実際に動くサーバーを縛るには serverUrl か serverCommand を使います。利用者が自分の設定で許可リストを広げられないようにするには、管理設定(managed-settings.json など)に allowManagedMcpServersOnly: true を併記します。managed-mcp.json はOS標準の管理対象ディレクトリ(macOSなら/Library/Application Support/ClaudeCode/)に配置し、エンドユーザーの権限では書き換えられないようにするのが基本です。

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

外部コンテンツ(Webページ、ドキュメント、メッセージ)を取得するMCPサーバーは、プロンプトインジェクションのリスクがあります(出典: code.claude.com/docs/en/security、参照日: 2026-06-04)。対策として:

  • 信頼できる公式サーバーのみを使う(Anthropicディレクトリで確認済みのもの)
  • 外部コンテンツを取得するサーバーの出力は鵜呑みにせず確認する
  • 書き込み系ツール(PR作成、メッセージ送信等)には明示的な確認ステップを設ける

【要注意】MCP設定よくある失敗パターン4選

MCP設定の失敗パターン4選の図。OAuth設定ミス・認証ループ・scope過剰設定・シークレット漏洩
ヘッダー認証とOAuthを混在させない、oauth.scopes を必ず明示する、APIキーは環境変数参照にする——この3点で4つとも防げる。

失敗1: OAuth設定ミス — 「Dynamic Client Registration非対応」エラー

❌ よくある間違い: OAuthが必要なサーバーをBearerトークンで設定しようとする、または「Dynamic Client Registration非対応」エラーでOAuthが通らない

⭕ 正しいアプローチ: エラーが出たらサーバーの開発者ポータルでOAuthアプリを登録し、クライアントIDと秘密鍵を取得してから --client-id と --client-secret フラグを使って設定する

# 解決手順
# 1. サービスの開発者ポータルでOAuthアプリ登録
# 2. リダイレクトURI: http://localhost:8080/callback を登録
# 3. クライアントIDと秘密鍵を取得して以下を実行
claude mcp add --transport http \
  --client-id your-client-id --client-secret --callback-port 8080 \
  my-server https://mcp.example.com/mcp

なぜ重要か: このエラーはサーバー側の認証フローに従わないと永遠に解決しません。Notionのように「OAuthのみ対応」のサービスにBearerトークンを渡しても認証できません。

失敗2: 認証ループ — ブラウザが何度も開く

❌ よくある間違い: headers.Authorization でトークンを設定しているのに、/mcp を開くたびにOAuth認証画面が再表示される

⭕ 正しいアプローチ: 2つの原因が考えられます。①トークンが正しくない・期限切れ → サーバー側で新しいトークンを発行する。②headers.Authorization をサーバー側が拒否している → ヘッダーを削除してOAuthフローを使う

顧問先の企業でこの問題を見た時、Authorization ヘッダーに間違えて古いトークンを入力していたことが原因でした。Claude Codeはヘッダーが拒否された場合、OAuthにフォールバックせず「接続失敗」として扱います。ヘッダーとOAuthを混在させないのが安全です。

失敗3: scope過剰設定 — 必要以上の権限を渡す

❌ よくある間違い: oauth.scopes を設定せず、サーバー側が決めたスコープをそのまま許可してしまう(組織で承認した範囲より広いことがある)

⭕ 正しいアプローチ: 必ず oauth.scopes で必要な権限だけを列挙する。後から 403 insufficient_scope が出たらスコープを広げればよい。最初から全権限を渡すのはNG

# NG: スコープ未設定(要求する範囲をサーバー側に任せる)
{
  "slack": {
    "type": "http",
    "url": "https://mcp.slack.com/mcp"
  }
}

# OK: 最小スコープを明示
{
  "slack": {
    "type": "http",
    "url": "https://mcp.slack.com/mcp",
    "oauth": {
      "scopes": "channels:read chat:write"
    }
  }
}

失敗4: シークレット漏洩 — APIキーのcommit

❌ よくある間違い: .mcp.jsonにAPIキーを直書きしてGitにコミットしてしまう

⭕ 正しいアプローチ: 必ず ${ENV_VAR} 形式で環境変数参照にする。万が一コミットしてしまったらGitリポジトリの履歴から削除し、即座にAPIキーを無効化・再発行する

# NG: シークレット直書き
{
  "github": {
    "type": "http",
    "url": "https://api.githubcopilot.com/mcp/",
    "headers": {
      "Authorization": "Bearer ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
  }
}

# OK: 環境変数参照
{
  "github": {
    "type": "http",
    "url": "https://api.githubcopilot.com/mcp/",
    "headers": {
      "Authorization": "Bearer ${GITHUB_TOKEN}"
    }
  }
}

過去に研修受講者の一人が誤って本番GitHubトークンを.mcp.jsonに直書きしてpushしてしまったケースがありました(想定シナリオ)。事前に .gitignore に追加するか、git-secretsのようなツールで防ぐ習慣をつけてください。

MCPサーバー管理コマンド一覧

日常的に使うCLIコマンドを整理します(出典: code.claude.com/docs/en/mcp、参照日: 2026-06-04)。

# サーバー一覧表示(接続状態も確認)
claude mcp list

# 特定サーバーの詳細確認(OAuth設定・承認状態)
claude mcp get github

# サーバー削除
claude mcp remove github

# JSON設定から直接追加
claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp"}'

# Claude Desktop の設定からインポート(macOS/WSL)
claude mcp add-from-claude-desktop

# プロジェクトスコープの承認リセット
claude mcp reset-project-choices

# Claude Code内でサーバー状態確認(ツール数・認証状態)
/mcp

claude.aiで設定したMCPコネクターはClaude Codeでも自動的に利用可能です。ただしこの機能はClaude.aiアカウントログイン時のみ有効で、APIキー認証時は無効です。

Claude CodeをMCPサーバーとして使う — 逆転の発想

Claude Code自体をMCPサーバーとして動かし、Claude DesktopやCursorからツールとして呼び出すこともできます。

# Claude CodeをMCPサーバーとして起動
claude mcp serve

Claude Desktop(claude_desktop_config.json)への登録:

{
  "mcpServers": {
    "claude-code": {
      "type": "stdio",
      "command": "/usr/local/bin/claude",
      "args": ["mcp", "serve"],
      "env": {}
    }
  }
}

この設定により、Claude DesktopからClaude Codeのファイル操作・編集・コマンド実行ツールを呼び出せます。複数のAIツールを組み合わせたエージェントワークフロー構築に活用できます。

MCPとCodexの違い — Claude Code vs Codex の視点から

【2026年9月30日追記】2026年9月30日時点で、Codex(CLI・IDE拡張・ChatGPTデスクトップアプリ)もMCPサーバーに対応しています。接続方式はSTDIOとStreamable HTTP、認証はBearerトークンとOAuthです。下の表はOpenAIの公式ドキュメントに合わせて書き直しました。

Claude CodeとCodex(OpenAI)は、どちらもMCPに対応しています。違いは設定ファイルの置き場所と書き方です。

項目Claude Code(MCP)Codex(MCP)
標準規格MCP(オープン標準)MCP(同じオープン標準)
接続方式stdio・HTTP・SSE(非推奨)STDIO・Streamable HTTP
OAuth対応OAuth 2.0標準対応(claude mcp login)OAuth対応(codex mcp login)。Bearerトークンも可
カスタムサーバーPython/Node.js SDKで自作可同じMCPサーバーをそのまま接続可
設定の置き場所~/.claude.json と .mcp.json~/.codex/config.toml と .codex/config.toml

MCPはオープン標準のため、一度MCPサーバーを作れば Claude Code・Cursor・VS Copilotなど複数のAIツールで使い回せます。これがClaude CodeとMCPの組み合わせが法人導入で選ばれる大きな理由の一つです。

ツール比較の詳細はCodex AGENTS.md完全ガイドもご参照ください。

MCP導入前に確認すべき組織要件チェックリスト

法人でMCPを本番環境に導入する前に、以下の項目を確認してください。特にセキュリティポリシーや情報管理規定がある組織では見落としがちなポイントをまとめました。

  • □ 外部サービスへの接続許可: 社内セキュリティポリシーで外部MCPサーバーへの接続が許可されているか。ファイアウォール設定の確認も必要
  • □ APIキーの管理規定: 発行したAPIキーの管理台帳、有効期限、失効手順が定まっているか
  • □ アクセスログ: MCPツール経由でどのデータにアクセスしたかのログを記録・監査できるか
  • □ スコープの承認フロー: OAuthスコープの変更に情報セキュリティ担当の承認が必要か
  • □ データ分類: MCPが接続するシステムに機密データ(個人情報、顧客情報等)が含まれる場合、法的コンプライアンス要件を確認
  • □ インシデント対応手順: APIキー漏洩や不正アクセスを検知した場合の対応手順が整備されているか

「便利だからすぐ使いたい」という気持ちはよく分かりますが、100社以上のAI研修・導入支援の経験から言うと、この事前チェックをスキップして後から制度整備に追われるケースを何度も見てきました。最初の30分を組織要件確認に使うだけで、後の運用が格段に楽になります。

よくある質問

Claude CodeにMCPサーバーを追加するコマンドは何ですか?

Claude CodeにMCPサーバーを追加するコマンドは「claude mcp add」です。リモートのHTTPサーバーは、トランスポートの種類にhttpを指定し、サーバー名とURLを渡して追加します。ローカルのstdioサーバーは、サーバー名の後ろに起動コマンドを書きます。保存先はlocal・project・userの3つのスコープから選べ、指定しない場合はlocal(そのプロジェクトで自分だけが使う設定)になります。

Claude Codeに追加したMCPサーバーの一覧はどこで確認できますか?

追加したMCPサーバーの一覧は、ターミナルで「claude mcp list」を実行すると確認できます。1つのサーバーの詳細は「claude mcp get サーバー名」、削除は「claude mcp remove サーバー名」です。Claude Codeのセッション中は「/mcp」と入力すると、各サーバーの接続状態と、OAuth認証が必要かどうかを見られます。

.mcp.jsonはどこに置き、local・project・userスコープは何が違いますか?

.mcp.jsonはプロジェクトのルート直下に置くファイルで、projectスコープの設定が入ります。Gitで管理するとチーム全員が同じMCPサーバーを使えます。localスコープ(既定)とuserスコープは ~/.claude.json に保存され、チームには共有されません。localは今のプロジェクトだけ、userは自分の全プロジェクトで有効で、同名のサーバーがある時は local、project、user の順に優先されます。

GitHubのMCPサーバーをClaude Codeに追加するにはどうすればよいですか?

GitHubのMCPサーバーは、「claude mcp add」でトランスポートにhttp、URLに https://api.githubcopilot.com/mcp/ を指定し、Authorizationヘッダーに個人アクセストークンを渡して追加します。トークンはGitHubの設定画面でFine-grained tokenとして発行し、対象リポジトリと権限を必要な範囲に絞ります。追加後に「/mcp」で接続済みと表示されれば使えます。

allowedMcpServersはどのように書きますか?

allowedMcpServersは、serverUrl・serverCommand・serverName のいずれか1つをキーに持つオブジェクトの配列で書きます。文字列を並べた配列では書けません。serverNameは利用者が付けるラベルなので、確実に制限するにはserverUrl(URLのパターン)かserverCommand(起動コマンド)を使います。許可リストを固定するには、管理設定で allowManagedMcpServersOnly を true にします。

まとめ:今日から始める3つのアクション

  1. 今日やること: GitHubかNotionのMCPサーバーを1つ追加して /mcp でツール一覧を確認する。まず「繋がる感覚」を掴む
  2. 今週中: チームで使うツール連携を.mcp.jsonでproject スコープに設定し、APIキーを環境変数に切り出してGit管理する
  3. 今月中: 社内固有のシステムをCustom MCP化し、Claude Codeから業務システムを直接操作できる環境を構築する

MCPの設定は一度理解すれば難しくありません。今日まず1つのサーバーを繋いでみて、「指示1つで外部ツールを操作できる」感覚を体験してみてください。


参考・出典


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー約10万人。
100社以上の企業向けAI研修・導入支援。著書『AIエージェント仕事術』(SBクリエイティブ)。
SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。

監修:株式会社Uravation(生成AI活用書籍シリーズ累計59,900部の著者チームが運営。自社7メディアの実運用でAI検索からの引用・流入を継続計測し、その知見に基づいて編集しています。仕様・料金が変わりやすい領域のため、重要な意思決定の前には各公式情報の最新版をご確認ください)

この記事の内容を社内展開する方へ: Claude Code × ビジネス活用 実践ガイド(無料・PDF 30ページ+Excel) をダウンロードできます。

佐藤傑
この記事を書いた人 佐藤傑

株式会社Uravation 代表取締役CEO/生成AIエバンジェリスト。法人向けAI研修・コンサルティングを手がけ、日経・SBクリエイティブ・GMO等のメディアで生成AIについて執筆。

執筆・監修:佐藤傑/下書き・図版・機械検査:当社のAI社員(人が確認してから公開しています)。記事の作り方と検査の方針

この記事をシェア

Contact お問い合わせ

30分の無料相談では、いま時間を取られている業務を伺い、稼働中のAI社員62体の事例の画面と一緒に近い進め方をお見せします。
売り込みはしません。

Claude Code 個別指導(1対1・12セッション)をご希望の方はこちら、Codex 個別指導はこちらから別途お申し込みください

Claude Code 個別指導 無料相談