Could not import a serverエラー — Desktopインポート失敗の原因と対処
claude mcp add-from-claude-desktopで一部サーバーだけ「Could not import」になる原因はサーバー名の文字制限がほとんどです。直し方と対象外環境も解説します。
このTipsでできること
claude mcp add-from-claude-desktop を実行すると、選んだサーバーのうち一部だけが Could not import <サーバー名>: <理由> というメッセージとともに取り込まれないことがあります。コロンの後ろが理由で、もっとも多いのはサーバー名に使えない文字が含まれているケースです。
この記事では、v2.1.287で実際にこのエラーを出したときの画面、理由ごとの直し方、そしてコマンド自体が使えない環境の見分け方を扱います。
v2.1.287で再現した「Could not import」の出方
検証用に、claude_desktop_config.json へ名前の違う3つのサーバー(my server・docs.search・good-one)を書き、空のホームディレクトリで実行しました。macOSでは ~/Library/Application Support/Claude/claude_desktop_config.json が読み込み元です。--help の出力は次のとおりです。
claude mcp add-from-claude-desktop --helpUsage: claude mcp add-from-claude-desktop [options]
Import MCP servers from Claude Desktop (Mac and WSL only)
Options:
-h, --help Display help for command
-s, --scope <scope> Configuration scope (local, user, or project) (default:
"local")実行するとまず選択ダイアログが開き、3つのサーバーすべてにチェックが付いた状態で並びます。末尾の「Import selected」まで進んでEnterで確定すると、結果は次の3行でした。
Successfully imported 1 MCP server to local config.
Could not import my server: Invalid name my server. Names can only contain letters, numbers, hyphens, and underscores.
Could not import docs.search: Invalid name docs.search. Names can only contain letters, numbers, hyphens, and underscores.成功の行が先に出て、失敗したサーバーは1つずつ行を分けて並びます。ピリオドもスペースと同じく弾かれ、good-one だけが取り込まれました。
自分の環境を汚さずに同じ画面を出すには、空のディレクトリをホームに見立てます。~/.claude.json を含む実際の設定には触れずに済みます。
mkdir -p /tmp/try/Library/Application\ Support/Claude
# 上の3サーバーを書いた claude_desktop_config.json を置く
HOME=/tmp/try CLAUDE_CONFIG_DIR=/tmp/try/.claude claude mcp add-from-claude-desktop上のパスはmacOSでの例です。公式ドキュメントでは、読み込み元は各プラットフォームでの標準の場所とされています。
見た目より大事なのは「他のサーバーは取り込まれる」点
1つが失敗しても、コマンドは止まらずに残りを取り込みます。この挙動はv2.1.205で変わりました。それより前は、最初に無効な名前が見つかった時点で取り込みが止まり、選んだサーバーが1つも追加されませんでした。
複数のサーバーをまとめて選ぶ使い方をしている場合、古いバージョンでは「全部失敗した」ように見えます。changelogのv2.1.205の項目には「無効な文字を含む名前があるとコマンドが止まっていた問題を修正し、無効な名前は報告したうえで残りを取り込む」とあります。
ターミナルで claude --version を実行し、v2.1.205より前なら更新してから再実行します。更新しても残る失敗行は、1件ずつ原因が別にあると考えて読み進めます。
原因を切り分ける3ステップ
コロンの後ろの文言で、どの対処に進むかが決まります。
メッセージから対処を決める
- 1
「Invalid name」で始まる
サーバー名の文字制限です。次の節の2通りの直し方で解決します。
- 2
設定の検証エラーのような文言が出る
名前ではなく、そのサーバーの設定内容がバリデーションに通っていません。
commandやargsの書き方を見直します。 - 3
組織のMCPポリシーに触れる文言が出る
MCPポリシーによるブロックです。名前を直しても通らないので、管理者に許可を確認するか、許可済みの別サーバーに切り替えます。
もっとも多い原因はサーバー名の文字制限
Claude Desktopはサーバー名にスペースやピリオドを許しますが、claude mcp コマンド経由で追加する名前は英数字・ハイフン・アンダースコアのみです。claude_desktop_config.json に my server のような名前があると、先ほどの再現どおりに拒否されます。
直し方は2通りあります。
claude_desktop_config.jsonの該当サーバーの名前を、使える文字だけの形に書き換えて、コマンドをもう一度実行する- インポートを介さず、
claude mcp addかclaude mcp add-jsonで有効な名前を付けて直接追加する
1つ目の書き換えは、キー名だけを変えます。中身の command や args はそのままです。
{
"mcpServers": {
"my-server": { "command": "npx", "args": ["-y", "@example/mcp-server"] }
}
}Desktop側の設定ファイルを書き換えたくないときは、2つ目が向いています。claude_desktop_config.json の command・args・env をそのまま流用し、名前だけ付け替えます。
claude mcp add-json my-server '{
"command": "npx",
"args": ["-y", "@example/mcp-server"],
"env": { "API_KEY": "your-key" }
}'Desktopの個人設定が人によって違う名前になっているチームでも、直接追加なら名前を自分で揃えられます。
取り込んだサーバーが見つからないときは保存先を疑う
--scope を付けないと、既定は local です。既定の local では、取り込んだサーバーは ~/.claude.json の projects 配下、コマンドを実行したディレクトリのエントリの mcpServers に入ります。トップレベルの mcpServers ではありません。
つまりプロジェクトAで取り込んだサーバーは、プロジェクトBで claude mcp list を実行しても出てきません。「成功と表示されたのに見えない」ときは、実行したディレクトリが違っていないかを先に確かめます。
--scope user を付けると、ユーザー設定へ追加され、どのプロジェクトからも使えます。--help には project も選択肢として並びます。
同名のサーバーがあると連番になる
取り込み先にすでに同じ名前のサーバーがある場合、失敗にはならず、server_1 のように末尾へ連番を付けた名前で追加されます。再実行の際に、前回成功したサーバーまで選び直すと、同じ中身が連番付きで重複して並びます。
再実行するときは、ダイアログで失敗したサーバーだけにチェックを残してください。また、連番付きの名前になると、元の名前で書いた権限ルールは別のサーバーを指すことになります。mcp__サーバー名__ツール名 の書き方はClaude Code MCP権限ルールで扱っています。
インポートは通ったのにサインインだけ通らないとき
名前の制限をクリアして取り込めても、別の理由で使えないサーバーがあります。Anthropicがホストする microsoft365.mcp.claude.com・gmail.mcp.claude.com・gcal.mcp.claude.com などを指すサーバーです。
これらはサインインがclaude.ai経由に限られるため、/mcp パネルでも claude mcp login でも、ローカルのOAuthを開始できません。画面には is Anthropic-hosted and doesn't support local OAuth と出ます。
対処は、取り込んだエントリを claude mcp remove で削除し、claude.ai/customize/connectorsでサービスを接続し直すことです。Claude Codeで使っているアカウントと同じアカウントで接続します。接続後は、claude.aiのサブスクリプションでログインしていれば、コネクタがClaude Codeに自動で現れます。
TeamとEnterpriseのプランでは、コネクタを追加できるのは管理者だけです。自分の画面で接続できないときは、管理者に追加を頼みます。
DesktopアプリのローカルセッションやSSHセッションでは、コネクタはアプリが内部のサーバーとして登録します。この場合、MCPの設定ファイルや managed-mcp.json では制御できません。自分のセッションから外したいときは、claude.aiのコネクタ画面で接続を解除します。
このコマンドが使える環境と、Desktopアプリ内のCodeタブとの違い
--help の1行目にあるとおり、このコマンドはmacOSとWindows Subsystem for Linux(WSL)専用です。macOSとWSL以外の環境(ネイティブのWindowsなど)では使えません。標準の場所にあるDesktopの設定ファイルを読む作りだからです。
もう一つ紛らわしいのが、Desktopアプリ内のCodeタブです。
どこでMCPサーバーを使うかで手順が変わる
DesktopアプリのCodeタブ
claude_desktop_config.json のサーバーを、ローカルセッションへ直接読み込みます。Desktopのチャットでも同じサーバーが使えます。
ターミナルのスタンドアロンCLI
claude_desktop_config.json を読まないので、claude mcp add-from-claude-desktop で ~/.claude.json へコピーします。
「Desktopアプリの中では動くのに、ターミナルのclaudeでは同じサーバーが見えない」という状況は、この違いが原因です。同じ名前のサーバーが claude_desktop_config.json と ~/.claude.json・.mcp.json の両方にある場合、Codeタブは claude_desktop_config.json の定義を使います。
Desktop側でMCPサーバーの起動が間に合わず失敗する別の症状は、Not ready after 60 secondsエラーの原因と対処にまとめました。
チームで共有するなら.mcp.jsonに置く
claude_desktop_config.json は各メンバーの手元にしかない個人設定です。メンバーごとにインポートを繰り返しても、構成が揃う保証はありません。
チーム全員に同じサーバーを配りたいなら、バージョン管理にチェックインする .mcp.json へプロジェクトスコープで追加するほうが向いています。インポートは、自分がDesktopで設定済みのサーバーをスタンドアロンCLIへ持ち込む個人向けの移行手段です。スコープの階層と優先順位はClaude Code MCP設定ガイドにあります。
claude importコマンドとは別物
似た名前のコマンドに claude import があります。こちらは特定のビルドで not yet available in this build と出て使えないことがある、フィーチャーフラグ制御下の別のコマンドです。
claude mcp add-from-claude-desktop とは対象も実装も異なります。claude import でつまずいたときは、claude importが使えない「not yet available in this build」の意味と対処を参照してください。
まとめ
エラー行のコロンの後ろを読めば、名前の修正・設定の見直し・管理者への確認のどれに進むかが決まります。コマンドの実行環境と、取り込み先のスコープも、見えないときの切り分けに効きます。
チームで揃えたい構成は、個人設定のインポートに頼らず .mcp.json に置くのが安定します。Claude Code自体の全体像はClaude Code完全ガイドにあります。