Claude Media
ClineからClaude CodeへMCP設定を移行する手順

ClineからClaude CodeへMCP設定を移行する手順

ClineのmcpServers設定をClaude Codeに移す手順。stdio/remoteサーバーの移行コマンドと、警告なしに落ちる2つのフィールド、type省略時の違いを解説。

ClineのMCP設定はClaude Codeに持ち込めるか

結論から言うと、部分的に持ち込めます。ClineのMCP設定ファイルは mcpServers というキーの下にサーバーごとの設定を並べる形式で、これはClaude Desktopなど他の主要なMCPクライアントと共通の書き方です。Claude Codeもこの形をそのまま読み替えるコマンド(claude mcp add-json)を用意しているため、エントリを1つずつコピーすれば移行できます。

ただし「そのまま流用」ではありません。Cline固有のフィールドはClaude Code側でエラーを出さずに落ち、Clineが使う一部の値は無効な入力として弾かれます。この記事ではその境界線を、v2.1.289で実行した出力とあわせて示します。

前提条件

  • Claude Codeがインストール済みで、ターミナルから起動できること
  • Cline側でMCPサーバーを1つ以上設定済みであること
  • 移行先のスコープ(自分専用か、チームで共有するか)を決めていること — 詳しい選び方は後述

以下の出力はClaude Code v2.1.289のものです。

claude --version

ステップ1: Cline側の設定を取り出す

Clineの設定はCLI版とIDE拡張版で置き場所が違います。

  • CLI版: ClineのMCP概要ページでは ~/.cline/mcp.json。CLIの設定ページは、MCP設定を ~/.cline/data/settings/ 配下に置くと書いています
  • IDE拡張版: ClineパネルのMCP Serversアイコン → Configureタブ → Configure MCP Serversボタンで開くJSON

Cline CLIでは、cline config mcp --json でMCPサーバーの一覧をJSONで表示できます。移行元として写すのは設定ファイル本体にして、一覧は取りこぼしがないかの突き合わせに使います。

どちらも中身の形は同じで、mcpServers の下にサーバー名をキーにしたオブジェクトが並びます。ローカルで動くサーバー(STDIO)はこの形になります。

{
  "mcpServers": {
    "local-server": {
      "command": "node",
      "args": ["/path/to/server.js"],
      "env": {
        "API_KEY": "your_api_key"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

リモートサーバー(Streamable HTTP)はこう書きます。

{
  "mcpServers": {
    "remote-server": {
      "type": "streamableHttp",
      "url": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer your-token"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

ステップ2: サーバーごとにclaude mcp add-jsonで移す

Claude Codeの公式ドキュメントは、他クライアント向けに書かれた mcpServers ブロックをそのまま流用する手順を示しています。mcpServers というラッパーキーではなく、その中のオブジェクト部分だけを claude mcp add-json <名前> '<json>' に渡します。

STDIOサーバーはフィールドの並びを変えずに渡せます。

claude mcp add-json local-server '{"command":"node","args":["/path/to/server.js"],"env":{"API_KEY":"your_api_key"}}'

リモートサーバーは type の値を書き換える必要があります。Clineの "type": "streamableHttp" はClaude Codeでは受け付けられないため、"http" に置き換えて渡します。

claude mcp add-json remote-server '{"type":"http","url":"https://example.com/mcp","headers":{"Authorization":"Bearer your-token"}}'

claude mcp add-json --help に出るオプションは --scope(local / user / project。省略時はlocal)と --client-secret です。公式ドキュメントが他クライアント向けの設定で直す点として挙げているのは、次の2点です。

  • url があるのに type が無いエントリ: Claude CodeはSTDIOサーバーとして読むため、http / sse / ws のいずれかを補う
  • サーバー名に英数字・ハイフン・アンダースコア以外の文字が入っている場合: そのままではキーとして使えないため名前を変える

公式ドキュメントが一括取り込みとして挙げるのはClaude Desktop向けの claude mcp add-from-claude-desktop で、Cline向けのものは載っていません。Clineの設定は、サーバーの数だけ claude mcp add-json を繰り返します。

Cline固有のフィールドとtypeの違いはどう扱われるか

公式ドキュメントが挙げる2点のほかに、Clineの設定ファイルをそのまま渡すと引っかかる箇所が3つあります。どれもv2.1.289の claude mcp add-json で出力を取りました。

移行時の差

Cline設定の行き先

  • disabled が消える

    "disabled": true を付けたエントリを渡しても、Added stdio MCP server demo to local config と表示され成功します。保存後の設定には disabled が残りません。

  • autoApprove が消える

    autoApprove も同じく警告なしに落ちます。保存されるのは command / args / env の3つ(リモートなら type / url / headers)だけです。

  • streamableHttp は弾かれる

    "type": "streamableHttp" は Invalid configuration: : Invalid input で追加ごと失敗します。"http" と "streamable-http" はどちらも Added http MCP server と表示されます。

保存先はlocalスコープなら ~/.claude.json のプロジェクトごとの mcpServers の下で、userスコープならトップレベルの mcpServers です。次のJSONを渡して保存後の設定を見ると、disabled と autoApprove は残っていません。

{
  "command": "npx",
  "args": ["-y", "@example/mcp-server"],
  "env": { "API_KEY": "x" },
  "disabled": true,
  "autoApprove": ["read"]
}

Cline側で無効にしていたサーバーは、Claude Code側では有効な状態で登録されます。止めておきたいサーバーは、移行後に /mcp パネルで切ります。localスコープやuserスコープのサーバーでは、Claude Codeはその選択をプロジェクトごとに ~/.claude.json の disabledMcpServers へ記録します。--scope project で .mcp.json に移したサーバーは、承認リスト側の disabledMcpjsonServers で扱われます。

autoApprove の行き先はpermissionsのallowルールです。mcp__<サーバー名>__<ツール名> を .claude/settings.json の permissions.allow に列挙すると、Cline側で自動承認していたツールを引き継げます。claude mcp add-json が書き込むのは接続情報だけで、ツール単位の許可には触れません。

typeを省略したClineのリモート設定

Clineのドキュメントは、type を省略するとレガシーの sse トランスポートとして扱われると書いています。Cline側で動いていた url だけのエントリは、Claude Codeに移すと同じ動きになりません。type を持たない url エントリを add-json に渡すと、v2.1.289では次の出力で失敗します。

claude mcp add-json s '{"url":"https://example.com/mcp"}'
Invalid configuration: : Invalid input

移行元のエンドポイントが旧SSEなら "type":"sse"、Streamable HTTPなら "type":"http" を補います。どちらか分からないときは、サーバー提供元のドキュメントに書かれたURLの種類を見て決めます。sse を指定した場合も、add-json は Added sse MCP server と表示して受け付けます。

スコープの選び方

Claude CodeのMCPサーバーには3つのスコープがあり、Clineには無い「チーム共有」という選択肢が増えます。

スコープ読み込まれる範囲チーム共有保存先
local読み込まれる範囲追加したプロジェクトのみチーム共有されない保存先~/.claude.json
project読み込まれる範囲追加したプロジェクトのみチーム共有される(.mcp.jsonをバージョン管理)保存先プロジェクト直下の .mcp.json
user読み込まれる範囲全プロジェクトチーム共有されない保存先~/.claude.json

Cline CLIの設定は、MCP概要ページが挙げる ~/.cline/mcp.json のとおりなら、userスコープに近い状態です(全プロジェクトで有効)。個人用に使っていたサーバーはそのまま --scope user で移せます。一方、チームのリポジトリで共通のMCPサーバーを使う運用に切り替えたいなら、--scope project で .mcp.json に書き出し、コミットしてチームに配ります。

プロジェクトスコープに切り替えると、Cline側には無かった「ワークスペース信頼」の手続きが挟まります。起動のしかたで、読み込まれ方が逆になります。

くらべる

`.mcp.json` のサーバーはいつ読み込まれるか

承認が先

対話的に起動

クローンしたばかりのリポジトリでは、ワークスペース信頼のダイアログを承認するまで、サーバーは ⏸ Pending approval のままです。リポジトリにコミットされた enabledMcpjsonServers では、リポジトリ自身が承認を済ませることはできません。

承認なし

claude -p・SDK・クラウド

承認プロンプトを出せないため、プロジェクトスコープのサーバーをそのまま読み込みます。読み込ませたくないサーバーは、disabledMcpjsonServers に登録してすべての権限モードでブロックするか、--strict-mcp-config で --mcp-config に渡したサーバーだけに絞ります。

承認の選択を最初からやり直したいときは、claude mcp reset-project-choices を使います。

チームで共有する .mcp.json にAPIキーを平文で書きたくない場合は、${VAR} 形式の環境変数展開が使えます。${VAR:-default} と書けば、変数が未設定のときのデフォルト値も指定できます。

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

展開対象は command / args / env / url / headers の5箇所です。参照した環境変数が未設定でもエラーにはならず、claude mcp list に警告が出た上で ${VAR} という文字列のままサーバーへ渡ります。チームに配る前に、変数名がREADME等に明記されているか見ておきます。

リモートサーバーの url と headers には、もう1つ罠があります。ANTHROPIC_API_KEY や ANTHROPIC_AUTH_TOKEN、AWS_BEARER_TOKEN_BEDROCK、NPM_TOKEN のような資格情報の変数名は、設定済みでも空として読まれ、:-default も無視されます。Bearer ${NPM_TOKEN} と書くとサーバーに届くのは Bearer だけで、多くは 401 になり、接続失敗として報告されます。API_KEY のように対象外の名前なら書いたとおり展開されます。対象の資格情報を渡したいときは、自分で付けた別名の変数にコピーして参照します。

認証つきのリモートサーバーを移すとき

Clineのリモートサーバー設定は headers に固定のBearerトークンを書く方式が基本ですが、Claude CodeはHTTPサーバーに対してOAuth 2.0によるサインインもサポートしています。ここで注意が必要なのは、headers.Authorization を設定したサーバーは、そのヘッダーが 401/403 で拒否されても要サインインの扱いにならず、接続失敗として報告される挙動です。Cline時代のトークンが失効しているなら、移行後に /mcp で failed と出たサーバーはまずヘッダーのトークンを疑います。

トークンをOAuthに切り替えたい場合は、移行時に headers を書かずにサーバーを追加します。

claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

追加後、Claude Code内で /mcp を実行するとブラウザでのサインイン手順が案内されます。認証情報は自動更新され、/mcp メニューの「Clear authentication」でいつでも失効させられます。

よくあるつまずき

  • claude mcp get <名前> がFailed to connectを返す: Added ... の表示はJSONが書き込まれたことを意味するだけで、接続の成否とは別です。接続は claude mcp list や claude mcp get で見ます
  • 同じ名前のサーバーを複数スコープで定義する: Claude Codeはlocal → project → userの優先順位で1つだけ接続します。フィールドはマージされず、優先度が高いスコープの定義がまるごと使われます
  • env の値にAPIキーを直書きしたまま移す: .mcp.json をコミットする運用に切り替えるなら、${API_KEY} のような環境変数展開に書き換えてから共有します
  • サーバー名が予約語や不正な文字と衝突する: workspace / claude-in-chrome / computer-use / Claude Preview / Claude Browser はClaude Code組み込みサーバーの名前として予約されています。設定ファイルに直接書いたエントリはこの名前だと起動時に警告付きでスキップされ、claude mcp add コマンドで追加しようとした場合はその場でエラーになります。Clineの設定で汎用的な名前を付けていた場合は移行時にリネームします。名前に空白が入っていると、Invalid name my server. Names can only contain letters, numbers, hyphens, and underscores. で追加できません
  • 同じスコープに同じ名前で追加し直そうとする: 一度移行したサーバーを別の内容で上書きしようとして再度 claude mcp add-json を実行すると、MCP server <名前> already exists in local config というエラーで弾かれます(v2.1.289で同じ出力)。設定を直すときは先に claude mcp remove <名前> で消してから追加し直します

まとめ

移行したら、まず /mcp で無効にしていたサーバーを切り直し、そのあと自動承認していたツールを permissions.allow に書き戻す順で進めると、意図しない有効化や承認の取りこぼしが出ません。サーバー定義そのものは、mcpServers の中身を1件ずつ claude mcp add-json に渡せば移せます。

Clineとの機能・課金モデルの違い全体はClaude Code Clineの違いと使い分けにまとめています。claude mcp add の構文やスコープの詳細はClaude Code MCP設定ガイド、Claude Desktop側からの移行はClaude Desktop MCP設定ガイドを参照してください。

この記事を共有:XはてブLinkedIn