SpyBara
Go Premium

managed-mcp.md 2026-06-16 21:57 UTC to 2026-06-17 17:02 UTC

2 added, 2 removed.

2026
Sat 27 01:01 Fri 26 23:00 Thu 25 23:58 Wed 24 22:02 Tue 23 22:00 Mon 22 23:59 Fri 19 22:58 Thu 18 22:00 Wed 17 17:02 Tue 16 21:57 Mon 15 23:02 Sat 13 21:59 Fri 12 22:00 Thu 11 23:01 Wed 10 23:57 Tue 9 06:34 Mon 8 06:52 Sat 6 06:24 Fri 5 06:45 Thu 4 06:52 Wed 3 06:53 Tue 2 06:51

組織の MCP サーバーアクセスを制御する

管理対象設定ファイル、許可リスト、ブロックリストを使用して、ユーザーが追加または接続できる MCP サーバーを制限します。

デフォルトでは、Claude Code を実行している誰もが、選択した任意の MCP サーバー に接続できます。Anthropic は、Anthropic Directory に追加する前に、リスティング基準 に対してコネクターをレビューしていますが、MCP サーバーのセキュリティ監査や管理は行いません。管理者として、組織内で実行されるサーバーを制限できます。固定の承認済みセットをデプロイすることから、MCP 全体を無効にすることまで可能です。

このページでは、以下の方法について説明します。

パターンを選択する

Claude Code は、さまざまな制限レベルをサポートしています。各パターンは、以下で説明する 1 つまたは両方のメカニズムを使用します。固定セットをデプロイするための managed-mcp.json と、ユーザーが設定できる内容をフィルタリングするための allowedMcpServers/deniedMcpServers です。

パターン 機能 設定
MCP を無効にする サーバーはどこにも読み込まれません 空のサーバーマップを含む managed-mcp.json
固定デプロイ すべてのユーザーが同じサーバーを取得し、他のサーバーを追加できません 必要なサーバーを含む managed-mcp.json
承認済みカタログ 承認済みサーバーのリストを公開します。ユーザーは必要なものを追加し、他のものはブロックされます allowedMcpServers + allowManagedMcpServersOnly: true
プラグインサーバーのみ サーバーはプラグインからのみ取得できます。ユーザーは独自のサーバーを追加できません strictPluginOnlyCustomization とリストに mcp を含めます
ソフト許可リスト ユーザーが独自の設定で拡張できる許可リストを実施します allowManagedMcpServersOnly なしの allowedMcpServers
ブロックリストのみ 既知の悪いサーバーをブロックし、他のすべてを許可します deniedMcpServers
制限なし ユーザーは何でも追加できます 管理対象 MCP 設定をデプロイしません

managed-mcp.json による排他的制御

managed-mcp.json ファイルをデプロイすると、Claude Code はそのファイルで定義されたサーバーのみを読み込みます。ユーザーは、プラグイン提供のサーバーを含む他の MCP サーバーを追加、変更、または使用することはできません。また、このファイルは 管理対象セットと共に許可する場合を除き、claude.ai コネクターも抑制します。

2 つの他の設定は、管理対象セットをさらにフィルタリングできます。

  • allowedMcpServersdeniedMcpServers は管理対象サーバーにも適用されるため、管理対象サーバーがそれらを通過しない場合は読み込まれません。
  • ユーザー独自の deniedMcpServers は設定からマージされるため、ユーザーは管理対象サーバーを自分自身でブロックできます。

チェックの完全な順序については、サーバーの評価方法を参照してください。

managed-mcp.json はスタンドアロンファイルであるため、サーバー管理設定を通じて配信することはできません。管理者権限を持つシステムパスに書き込むことができるプロセスは、それをデプロイできます。大規模では、通常は Jamf などのデバイス管理ツール、macOS 上の設定プロファイル、Windows 上のグループポリシーまたは Intune、または Linux 上の選択したフリート管理を通じて行われます。Claude Code は、以下のパスのいずれかでファイルを探します。

プラットフォーム パス
macOS /Library/Application Support/ClaudeCode/managed-mcp.json
Linux と WSL /etc/claude-code/managed-mcp.json
Windows C:\Program Files\ClaudeCode\managed-mcp.json

ファイルは、プロジェクト .mcp.json ファイルと同じ形式を使用します。

{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/"
    },
    "sentry": {
      "type": "http",
      "url": "https://mcp.sentry.dev/mcp"
    },
    "company-internal": {
      "type": "stdio",
      "command": "/usr/local/bin/company-mcp-server",
      "args": ["--config", "/etc/company/mcp-config.json"],
      "env": {
        "COMPANY_API_URL": "https://internal.example.com"
      }
    }
  }
}

ユーザーごとの認証情報で認証する

マシン上の任意のユーザーがこのファイルを読むことができるため、env ブロックに API キーまたは他の認証情報を保存しないでください。代わりに、以下のいずれかを使用してユーザーごとの認証情報を渡します。

設定を検証する

ファイルが有効であることを確認するには、管理対象マシンで 2 つのチェックを実行します。

  1. claude mcp listmanaged-mcp.json 内のサーバーのみを表示します。ユーザー独自のサーバーがまだ表示される場合、ファイルが読み込まれていません。パスと権限を確認してください。
  2. claude mcp add --transport http test https://example.com/mcpCannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers で失敗します。URL は実際のサーバーである必要はありません。ポリシーチェックが何かに接続される前にコマンドを拒否するためです。

MCP 全体を無効にする

空のサーバーマップを含む managed-mcp.json をデプロイして、すべての MCP サーバーをブロックします。

{
  "mcpServers": {}
}

ユーザーは /mcp に MCP サーバーを表示しません。claude mcp add は上記のエンタープライズポリシーエラーで失敗します。ユーザーが以前に設定したサーバーは、次回セッションを開始するときに読み込みを停止します。ポリシーが理由であることについて警告はありません。

管理対象セットと共に claude.ai コネクターを許可する

managed-mcp.json をデプロイすると、デフォルトでは claude.ai コネクターが抑制されます。これには、管理者が claude.ai 管理コンソールで組織向けに設定したコネクターも含まれます。これらのコネクターを managed-mcp.json 内のサーバーと共に読み込むには、管理設定ソース"allowAllClaudeAiMcps": true を設定します。Claude Code v2.1.149 以降が必要です。

この設定が有効になると、Claude Code は managed-mcp.json がデプロイされていない場合に読み込むのと同じ claude.ai コネクターを読み込みます。許可リストと拒否リストは引き続きこれらのコネクターに適用されるため、deniedMcpServers で特定のコネクターをブロックできます。この設定は claude.ai コネクターのみに影響します。プラグイン提供のサーバーは抑制されたままです。

Claude Code は、この設定を管理者制御のポリシー層からのみ読み取ります。サーバー管理設定、MDM デプロイされた plist または HKLM レジストリキー、またはシステム managed-settings.json ファイルです。これをユーザーまたはプロジェクト設定に配置しても効果がないため、ユーザーは排他的制御が抑制したコネクターを再度有効にすることはできません。

許可リストとブロックリストによるポリシーベースの制御

許可リストとブロックリストは、設定されたサーバーのどれが読み込まれることを許可するかをフィルタリングします。これらはレジストリではありません。サーバーは、ユーザー、プラグイン、または managed-mcp.json によって追加される前に、許可リストまたはブロックリストが適用されます。ユーザーにサーバーをデプロイするには、managed-mcp.json を使用します。

許可リストを権限あるものにするには、管理設定ソース(サーバー管理設定またはデプロイされた managed-settings.json ファイルなど)で allowedMcpServersallowManagedMcpServersOnly: true を一緒に設定します。許可リストを管理設定のみに制限するは設定を示しています。allowManagedMcpServersOnly がない場合、すべての設定ソース(ユーザー独自の ~/.claude/settings.json を含む)からの許可リストがマージされるため、ユーザーは許可リストが許可する内容を拡張できます。ブロックリストは関係なくすべてのソースからマージされます。

URL、コマンド、または名前でサーバーを一致させる

allowedMcpServersdeniedMcpServers はエントリのリストです。各エントリは、URL、コマンド、または名前でサーバーを識別する単一のキーを持つオブジェクトです。

キー 一致 用途
serverUrl リモートサーバー URL。正確またはワイルドカード * を使用 HTTP および SSE サーバー
serverCommand stdio サーバーを開始する正確なコマンドと引数 Stdio サーバー
serverName ユーザーが割り当てたラベル。完全一致のみ。ワイルドカードは展開されません どちらのタイプでも、ただし下の警告を参照してください

allowedMcpServers を設定しないことは、空の配列に設定することとは異なります。

設定 設定なし(デフォルト) 空の配列 [] 入力済み
allowedMcpServers すべてのサーバーが許可されます サーバーは許可されません 一致するサーバーのみが許可されます
deniedMcpServers サーバーはブロックされません サーバーはブロックされません 一致するサーバーがブロックされます

サーバーの評価方法

managed-mcp.json からのサーバーを含む、サーバーを読み込む前に、Claude Code は順序に 3 つのチェックを実行します。

  1. リストをマージします。 すべての設定ソースからの許可リストとブロックリストエントリが 1 つの許可リストと 1 つのブロックリストに結合されます。allowManagedMcpServersOnlytrue の場合、管理対象許可リストのみが保持されます。ブロックリストは常にすべてのソースからマージされます。
  2. ブロックリストをチェックします。 URL、コマンド、または名前でブロックリストエントリと一致するサーバーはブロックされます。ブロックリスト一致をオーバーライドするものはありません。
  3. 許可リストをチェックします。 allowedMcpServers がどこにも設定されていない場合、ブロックリストを通過したすべてのサーバーが読み込まれます。設定されている場合、サーバーが一致する必要があるものは、その種類に依存し、以下の表に示されています。
サーバータイプ 一致するときに許可されます
リモート(HTTP または SSE) serverUrl エントリ。serverName 一致は、許可リストに serverUrl エントリが含まれていない場合にのみカウントされます
Stdio serverCommand エントリ。serverName 一致は、許可リストに serverCommand エントリが含まれていない場合にのみカウントされます

これらのチェック内で 2 つの一致ルールが適用されます。

  • コマンドは正確に一致します。 すべての引数、順序通り。["npx", "-y", "server"]["npx", "server"] または ["npx", "-y", "server", "--flag"] と一致しません。
  • URL は * ワイルドカード をパターン内の任意の場所(スキームを含む)でサポートします。ホスト名の一致は大文字と小文字を区別しません。末尾の FQDN ドットを無視します。したがって、https://Mcp.Example.com/*https://mcp.example.com/api と一致します。パスは大文字と小文字を区別したままです。
パターン 許可
https://mcp.example.com/* 特定のドメイン上のすべてのパス
https://mcp.example.com そのドメイン上のすべてのパスも。パスのないパターンは任意のパスと一致します
https://*.example.com/* example.com の任意のサブドメイン
http://localhost:*/* localhost 上の任意のポート
*://mcp.example.com/* 特定のドメインへの任意のスキーム

設定例

以下の設定は、ブロックリストを含むハード許可リストを設定します。強調表示された行は、リストの残りの部分がどのように評価されるかを変更し、ブロック後のコールアウトは各行を説明しています。

{
  "allowedMcpServers": [
    { "serverUrl": "https://api.githubcopilot.com/*" },
    { "serverUrl": "https://mcp.sentry.dev/*" },
    { "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "."] },
    { "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },
    { "serverUrl": "https://mcp.example.com/*" },
    { "serverUrl": "https://*.internal.example.com/*" }
  ],
  "deniedMcpServers": [
    { "serverName": "dangerous-server" },
    { "serverCommand": ["npx", "-y", "unapproved-package"] },
    { "serverUrl": "https://*.untrusted.example.com/*" }
  ]
}
  • 3 行目:最初の serverUrl エントリ。1 つが存在すると、すべてのリモートサーバーが URL パターンと一致する必要があるため、ユーザーは許可された名前を付けることで許可されていないリモートサーバーを取得することはできません。
  • 5 行目:最初の serverCommand エントリ。stdio サーバーでも同じ効果があるため、すべてのローカルサーバーが正確にリストされたコマンドと一致する必要があります。
  • 11 行目:ブロックリスト内の serverName エントリ。ブロックリストエントリは常に適用されるため、dangerous-server という名前のサーバーは URL またはコマンドに関係なくブロックされます。

この許可リスト内の serverName エントリは、両方のトランスポートタイプが既に厳密なエントリを持っているため、何とも一致しません。

以下のアコーディオンは、他の許可リストとブロックリストの組み合わせに対してサーバーがどのように評価されるかについて説明しています。

URL のみの許可リスト
{
"allowedMcpServers": [
{ "serverUrl": "https://mcp.example.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
]
}
サーバー 結果
https://mcp.example.com/api の HTTP サーバー 許可:URL パターンと一致
https://api.internal.example.com/mcp の HTTP サーバー 許可:ワイルドカードサブドメインと一致
https://external.example.com/mcp の HTTP サーバー ブロック:URL パターンと一致しません
任意のコマンドを持つ Stdio サーバー ブロック:一致する名前またはコマンドエントリがありません
コマンドのみの許可リスト
{
"allowedMcpServers": [
{ "serverCommand": ["npx", "-y", "approved-package"] }
]
}
サーバー 結果
["npx", "-y", "approved-package"] を持つ Stdio サーバー 許可:コマンドと一致
["node", "server.js"] を持つ Stdio サーバー ブロック:コマンドと一致しません
my-api という名前の HTTP サーバー ブロック:一致する名前エントリがありません
混合名とコマンド許可リスト
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverCommand": ["npx", "-y", "approved-package"] }
]
}
サーバー 結果
local-tool という名前で ["npx", "-y", "approved-package"] を持つ Stdio サーバー 許可:コマンドと一致
local-tool という名前で ["node", "server.js"] を持つ Stdio サーバー ブロック:コマンドエントリが存在しますが一致しません
github という名前で ["node", "server.js"] を持つ Stdio サーバー ブロック:stdio サーバーはコマンドエントリが存在する場合、コマンドと一致する必要があります
github という名前の HTTP サーバー 許可:名前と一致
other-api という名前の HTTP サーバー ブロック:名前が一致しません
名前のみの許可リスト
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverName": "internal-tool" }
]
}
サーバー 結果
任意のコマンドを持つ github という名前の Stdio サーバー 許可:コマンド制限なし
任意のコマンドを持つ internal-tool という名前の Stdio サーバー 許可:コマンド制限なし
github という名前の HTTP サーバー 許可:名前と一致
other という名前の任意のサーバー ブロック:名前が一致しません
ブロックリストオーバーライド付き許可リスト
{
"allowedMcpServers": [
{ "serverUrl": "https://*.example.com/*" }
],
"deniedMcpServers": [
{ "serverUrl": "https://staging.example.com/*" }
]
}
サーバー 結果
https://mcp.example.com/api の HTTP サーバー 許可:許可リスト URL パターンと一致、ブロックリスト一致なし
https://staging.example.com/api の HTTP サーバー ブロック:両方と一致しますが、ブロックリストが優先されます
https://other.com/mcp の HTTP サーバー ブロック:許可リストと一致しません

許可リストを管理設定のみに制限する

管理対象許可リストが適用される唯一のものにするには、管理設定ファイルで allowManagedMcpServersOnly を設定します。

{
  "allowManagedMcpServersOnly": true,
  "allowedMcpServers": [
    { "serverUrl": "https://api.githubcopilot.com/*" },
    { "serverUrl": "https://*.internal.example.com/*" }
  ]
}

allowManagedMcpServersOnlytrue の場合、ユーザー、プロジェクト、ローカル設定からの許可リストは無視されます。ブロックリストはすべてのソースからマージされるため、ユーザーは常に自分自身のサーバーをブロックできます。

制限がユーザーにどのように表示されるか

制限がサーバーをブロックすると、ユーザーは claude mcp add からエラーを表示するか、サーバーが静かに読み込みを停止します。このテーブルを使用して、これらのレポートを認識し、変更をロールアウトする前にユーザーに何が起こるかを伝えます。

制限 ユーザーが表示するもの
managed-mcp.json が存在し、ユーザーが claude mcp add を実行する Cannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers
サーバーがブロックリスト上にあり、ユーザーが claude mcp add を実行する Cannot add MCP server "<name>": server is explicitly blocked by enterprise policy
サーバーが許可リスト上にはなく、ユーザーが claude mcp add を実行する Cannot add MCP server "<name>": not allowed by enterprise policy
以前に設定されたサーバーがポリシーによってブロックされるようになった サーバーは /mcpclaude mcp list から警告なく静かに消えます

最後のケースでは、ユーザーはポリシーがサーバーが消えた理由であることについてシグナルを取得しません。新しい制限をロールアウトするときに、影響を受けるユーザーにどのサーバーがブロックされているかを伝えます。

MCP 使用状況を監視する

OpenTelemetry エクスポートが設定されている場合、Claude Code はユーザーが呼び出す MCP サーバーとツールを記録できます。OTEL_LOG_TOOL_DETAILS=1 を設定して、ツールイベントに MCP サーバーとツール名を含めます。その後、コレクターで集計して、ユーザーが実際に接続するサーバーを確認します。エクスポーターを設定し、完全なイベントスキーマについては、監視を参照してください。

設定の概要

このページで説明するすべてのファイルと設定、それが制御するもの、および配信方法:

サーフェス 制御するもの 場所 配信方法
managed-mcp.json 固定サーバーセット、排他的制御 システムパス:/Library/Application Support/ClaudeCode//etc/claude-code/、または C:\Program Files\ClaudeCode\ MDM、GPO、フリート管理、または管理者権限を持つプロセス。サーバー管理設定を通じて設定することはできません
allowedMcpServers 許可されたサーバーの許可リスト 任意の 設定ファイルallowManagedMcpServersOnly が設定されていない限り、すべてのソースからのエントリがマージされます 実施のため、管理設定ソース:サーバー管理設定、managed-settings.json、MDM プロファイル、またはレジストリ
deniedMcpServers ブロックされたサーバーのブロックリスト 任意の設定ファイル。すべてのソースからのエントリがマージされます allowedMcpServers と同じ
allowManagedMcpServersOnly 許可リストを管理ソースのみにロックします 管理設定ソースのみ。設定は他の場所では効果がありません allowedMcpServers と同じ
allowAllClaudeAiMcps managed-mcp.json と一緒に claude.ai コネクタを読み込みます。これらを抑制する代わりに 管理設定ソースのみ。設定は他の場所では効果がありません allowedMcpServers と同じ