claude mcp addが失敗する: プラグイン以外のMCP追加を管理設定が止める
claude mcp addが「plugins provide」のエラーで失敗する原因は、管理設定のstrictPluginOnlyCustomizationです。利用者と管理者それぞれの回避策を示します。
このエラーは「追加しても読み込まれないので保存しない」という挙動
claude mcp addやclaude mcp add-jsonを実行して、次のメッセージで終了コード1になることがあります。
Cannot add MCP server: your organization's managed settings allow only MCP servers that plugins provide. Install a plugin that provides this server, or ask your administrator to make it available.原因は、組織の管理設定でstrictPluginOnlyCustomizationがtrue、またはmcpを含む配列になっていることです。この状態のClaude Codeは、~/.claude.jsonと.mcp.jsonに書かれたMCPサーバーを読み込みません。読み込まれない定義を保存しても意味がないため、コマンド側が書き込む前に失敗させています。
つまり、コマンドの書き方や接続先のURLが間違っているわけではありません。何度打ち直しても結果は変わらず、解決の入口は「プラグインで届ける」か「管理者に配布してもらう」の2つです。
このエラーの要点
- 発生条件は、管理設定の
strictPluginOnlyCustomizationがtrueかmcpを含むリストであること - 失敗するのは
claude mcp addとclaude mcp add-json。終了コードは1 - 解消の経路は、プラグイン経由の導入か、管理者による配布(プラグインまたは
managedMcpServers)
自分の環境が対象かを見分ける
メッセージの文頭がCannot add MCP serverで始まるエラーは複数あります。文言の後半で原因が分かれるので、手元のメッセージと見比べてください。
| メッセージの後半 | 原因 | 対処の方向 |
|---|---|---|
your organization's managed settings allow only MCP servers that plugins provide | 原因strictPluginOnlyCustomizationがmcpをロックしている | 対処の方向プラグイン経由で導入する。管理者に配布を依頼する |
to scope: managed | 原因--scope managedを指定した。この範囲はmanagedMcpServers専用 | 対処の方向local・user・projectのどれかで追加する |
enterprise MCP configuration is active and has exclusive control over MCP servers | 原因managed-mcp.jsonが配備されていて、MCPを排他的に管理している | 対処の方向管理者に依頼する。ユーザー側での追加はできない |
3行目はmanaged-mcp.json方式のエラーで、今回のstrictPluginOnlyCustomizationとは別の仕組みです。見分け方は単純で、メッセージに「plugins provide」とあれば今回の話です。
別のエラーとして、/mcpでReconnectを選んだときのMCP server <name> is blocked by enterprise managed policyもあります。こちらは追加ではなく接続の段階で止まるもので、deniedMcpServersやallowedMcpServers、disableClaudeAiConnectorsでも起こります。strictPluginOnlyCustomizationでも同じメッセージが出るため、claude mcp addが通ったのに接続できない場合はこちらを疑います。許可リスト側の設計はManaged MCPの許可リスト解説で扱っています。
同じ原因で止まる3つの入口
メッセージが出るのはclaude mcp addだけではありません。MCPサーバーをユーザー設定へ書き込む経路が、まとめて止まります。
claude mcp add/add-json: 冒頭のメッセージを出してexit 1になるclaude mcp add-from-claude-desktop: 選択した各サーバーを「インポートされなかった」として報告し、理由に同じメッセージを表示する/import: 取り込もうとしたMCPサーバーごとに同じメッセージを報告する。ほかの項目(指示ファイルやskillsなど)は引き続き取り込まれる
Claude Desktopからの取り込みでは、サーバー名の文字種でも失敗します。そちらは「Could not import ...」で始まる別の報告で、名前に使える文字は英数字・ハイフン・アンダースコアだけです。名前を直しても今回のエラーは消えません。理由欄の文言で区別してください。
v2.1.284より前は「成功したのに動かない」状態だった
この挙動はv2.1.284で入ったものです。それより前のバージョンでは、同じコマンドがサーバーを保存して成功を報告し、そのサーバーは読み込まれませんでした。
成功と表示されても、サーバーは使えないままでした。
v2.1.284に上げてから同じコマンドが失敗するようになったなら、コマンドが壊れたのではありません。それまでエラーを出さずに無視されていた設定が、エラーとして表に出るようになっただけです。
以前に追加して保存済みのサーバーも、ロックが続く限り読み込まれません。昔追加したはずのサーバーが動かないときも、同じ原因を疑えます。ロックが外れるか、プラグイン経由で入れ直すまで、使える状態には戻りません。
trueの環境では他の拡張も同時に止まっている
エラーの原因がtrue指定だった場合、止まっているのはMCPだけではありません。trueはskills・agents・hooks・MCPの4面すべてをロックするので、個人のskillや.claude/agents/のサブエージェント、settings.jsonに書いたhookも読み込まれません。
MCPで引っかかったのを機に、「最近skillが出てこない」「自作のhookが発火しない」といった症状が同じ原因だったと分かることがあります。各面のロック範囲はstrictPluginOnlyCustomizationの解説の表にまとまっています。
利用者の回避策: プラグインで導入する
管理設定が許しているのは、プラグインが提供するサーバー、managed-mcp.jsonのサーバー、managedMcpServersのサーバーです。利用者が自分で動かせる経路はプラグインになります。
プラグインでMCPサーバーを入れる流れ
- 1
提供元を探す
欲しいサーバーを同梱するプラグインが、組織で許可されたマーケットプレイスにあるかを確かめます。
/pluginの画面から一覧できます。 - 2
インストールする
プラグインを入れます。マーケットプレイスの指定は組織の設定に従います。
- 3
サーバーの状態を確かめる
/mcpかclaude mcp listで、プラグイン由来のサーバーが並んでいるかを見ます。
/pluginclaude mcp list欲しいサーバーを同梱するプラグインが存在しない場合、利用者の側でできることは多くありません。次の節の内容を添えて、管理者に配布を依頼するのが近道です。
管理者の回避策: 配り方を3通りから選ぶ
管理者がこのエラーの根を断つ方法は、大きく3つあります。どれを選ぶかは、配りたいサーバーの種類で決まります。
| 方法 | 向くサーバー | 条件 |
|---|---|---|
| プラグインに同梱して配布 | 向くサーバー接続方式を問わない(プラグインのmcpServersで宣言) | 条件許可するマーケットプレイスの整備が前提 |
managedMcpServersで配る | 向くサーバーリモートのHTTPまたはSSEサーバー | 条件Claude Code v2.1.259以降。値は管理設定に書く |
ロック対象からmcpを外す | 向くサーバー利用者に自由な追加を戻したい場合 | 条件他の面(skillsやhooks)のロックは維持できる |
プラグインに同梱する
プラグインは.mcp.jsonをプラグインのルートに置くか、plugin.jsonのmcpServersでサーバーを宣言します。mcpServersにはJSONファイルのパス、MCPバンドル、インライン定義、それらの配列を指定できます。インライン宣言の例は次のような形です。公式のスキーマに沿った書き方の一例として読んでください。
{
"name": "acme-search",
"mcpServers": {
"search": {
"type": "http",
"url": "https://search.example.com/mcp"
}
}
}プラグインの検証コマンドは、v2.1.281以降でMCPサーバーの宣言内容も検査します。配布前に通しておくと、利用者の環境で初めて失敗する事態を避けられます。プラグインを組織内に配る手順は、移行の観点でClaude Codeプラグイン化の移行手順にあります。
managedMcpServersで配る
リモートサーバーなら、プラグインを作らず管理設定だけで届けられます。配られたサーバーは、ロックされた状態でも読み込まれ続けます。利用者は自分で追加したサーバーを持てる点も、managed-mcp.jsonの排他制御との違いです。ロック下では自分で足せないので、実質的には配られたものだけを使うことになります。
{
"strictPluginOnlyCustomization": ["mcp"],
"managedMcpServers": {
"search": {
"type": "http",
"url": "https://search.example.com/mcp"
}
}
}エントリは.mcp.jsonのhttpまたはsseの形で書き、urlはhttps://が必須です。検証に失敗したエントリは読み込まれず捨てられます。stdioのサーバーはこの方法では配れないので、プラグインに同梱する側を使います。同名のサーバーがユーザーやプロジェクトの範囲にあっても、配られたサーバーが優先されます。
ロックからmcpを外す
利用者にclaude mcp addを許したいなら、strictPluginOnlyCustomizationの配列から"mcp"を抜きます。trueを使っている場合は、ロックしたい面だけを並べた配列に書き換えます。
{
"strictPluginOnlyCustomization": ["skills", "hooks", "agents"]
}この場合、MCPは別の仕組みで管理します。許可リストと拒否リストで利用者の追加を絞る設計は、Managed MCPの許可リスト解説が詳しいです。各面のロックが止めるものの全体像はstrictPluginOnlyCustomizationの解説に置いています。
管理設定が効いているかを確かめる
エラーが出たとき、実際にどの管理設定が効いているのかを利用者側で調べる手段は限られます。/statusのSetting sourcesに管理設定の読み込み元が出るため、まずそこで管理設定が存在するかを確かめます。
/status管理設定が見えているのに自分の設定ファイルには該当キーが無い場合、原因は組織側です。ここまでで確かめられるのは「管理設定が存在する」ことまでで、mcpがロックされているかどうかは管理者に聞くのが確実です。管理者に伝えるときは、エラーメッセージの全文と、導入したいサーバーの種類(リモートかローカル起動か)を添えると話が早く進みます。
他の追加経路は使えるのか
claude mcp add以外にMCPを足す方法は、ロックが効いていると期待どおりには動きません。
.mcp.jsonを手で書く: ロックされた面そのもので、読み込まれません~/.claude.jsonを直接編集する: 同じく読み込まれない対象です--mcp-configフラグ: ロック下での扱いは、MCPと設定リファレンスのページに記載がありません。disableSideloadFlagsが有効な環境では、SDK以外の--mcp-configが起動時に拒否されます
管理設定の迂回を探る使い方は、そもそも組織のポリシーに反します。通したい正当な理由があるなら、経路を探すより配布の依頼を出したほうが確実です。
よくある質問
strictPluginOnlyCustomizationをtrueにした覚えがありません
管理設定は、MDM、managed-settings.json、サーバー管理設定などで配られます。利用者の手元の設定ファイルに書かれていなくても有効になるため、気づかないのは普通です。
まとめ
このエラーは、管理設定がmcpをロックした環境で、読み込まれないサーバーを保存しないための早期失敗です。回避の筋道は2つに絞られます。利用者はプラグインでサーバーを導入し、管理者はプラグイン同梱かmanagedMcpServersで配ります。リモートサーバーならmanagedMcpServersが最短で、ローカル起動型はプラグインに入れる必要があります。依頼を出すときは、メッセージ全文とサーバーの種類を揃えてください。