VS CodeのMCP設定:mcpServersではなくserversを使う
ClaudeやCursorで動いていたMCPの設定をコピーして、VS Codeに貼り付け、再起動しても、何も起こりません。エラーも、警告も、一覧にサーバーも出ません。ファイルは正しいJSONで、VS Codeもそれを問題なく受け付けています。原因は、たった1語、それも一番外側の1語です。
- VS Codeは、MCPサーバーをserversの下にまとめます。Claude、Cursor、ほかのほとんどのクライアントはmcpServersを使います。
- 間違ったキーではエラーがまったく出ないため、多くの人が1時間を失います。
- 内側のサーバー定義は、どのクライアントでも同じです。違うのは外側のラッパーだけです。
違いを並べて比べる
同じサーバー、同じコマンド、同じ引数です。変わるのは、ラッパーのキーだけです。
| クライアント | 設定ファイル | ラッパーのキー |
|---|---|---|
| VS CodeのGitHub Copilot | .vscode/mcp.json | servers |
| Cursor | ~/.cursor/mcp.json | mcpServers |
| Claude Desktop | claude_desktop_config.json | mcpServers |
| 設定ファイル方式のほかのほとんどのクライアント | さまざま | mcpServers |
VS Codeが求める形
ワークスペースのルートにある .vscode/mcp.json に書きます。MyLinedChartのコネクターを例にすると、次のようになります。
{ "servers": { "mylinedchart": { "command": "npx", "args": ["-y", "@mylinedchart/mcp-chart-context"] } } }
commandとargsは、ご自身のサーバーのものに置き換えてください。内側のオブジェクトの形は、クライアントが違っても変わりません。
ほかのすべてが求める形
同じサーバーを、ClaudeやCursor向けに書くと次のようになります。
{ "mcpServers": { "mylinedchart": { "command": "npx", "args": ["-y", "@mylinedchart/mcp-chart-context"] } } }
両方のエディターを開いているなら、本当に両方のファイルが必要です。2つのエディターで1つの設定を共有することはできません。
エラーなしで失敗する理由
VS Codeはファイルを読み込み、正しいJSONだと確認して、serversというキーを探します。ファイルにserversキーがないので、VS Codeは起動すべきサーバーを0件と見なします。サーバーが0件であることは、エラーではありません。VS Codeから見れば、何も設定していないだけで、それはまったく正当な状態です。
そのため、赤い波線も、通知も、キーが間違っていると示すログの記載もありません。この失敗は、サーバーが起動時にクラッシュしたのとまったく同じに見えるため、多くの人がサーバー側のデバッグを始めてしまいます。
- ファイルは正しいJSONなので、構文エラーは出ません。
- 認識されない最上位のキーは、拒否されず無視されます。
- 設定されたサーバーが0件でも正常な状態なので、VS Codeは不具合を報告しません。
どちらの問題かを見分ける方法
サーバーが壊れていると決めつける前に、VS Codeが起動を試みたかどうかを確かめます。
- まず、ラッパーのキーを確認します。5秒で済み、たいていはこれが答えです。
- サーバーのコマンドを、ターミナルで手動で実行します。サーバーが起動するなら、問題はほかにあります。
- VS CodeのMCPサーバー一覧で、そのサーバーを探します。なければ一度も設定されておらず、あるのに失敗しているなら、実際の起動エラーです。
- 手作業ではなく、ワンクリックのリンクでインストールした場合は、この種の問題は当てはまりません。
関連する2つの落とし穴
ここまで来たついでに、同じく静かに失敗する例をあと2つ紹介します。
1つ目は、ワンクリックのMCPインストールリンクは、中身をURLエンコードされたプレーンなJSONとして運びます。Base64はURLパーサーに受け付けられたあと、何事もなく何も起こりません。ボタンが動いたように見えるという、最悪の失敗の仕方です。
2つ目は、VS Codeではサーバー名がペイロードの中に入っていて、Cursorのように別のクエリパラメーターとして渡すのではありません。Cursor向けの形で作ったリンクは、開くことはできても、VS Codeでは正しくインストールされません。
MyLinedChartの役割
MyLinedChartは、AIエージェントにライブのチャートを渡すMCPコネクターを同梱しています。銘柄、作図、インジケーターの値、画面上のバーが対象です。コネクターはお使いのマシンで動作し、データが当社のサーバーを経由することはありません。
アプリには、正しいキーを書き込んでくれるワンクリックの「Add to VS Code」ボタンがあります。手で編集するよりこちらを使う理由はそこにあります。設定方法とほかのクライアントについては、/resources/articles/ibkr-chart-data-github-copilot-vs-code をご覧ください。
次のステップ
キーを直して、VS Codeを再起動すれば、サーバーが表示されます。それでもサーバーが表示されないなら、問題は設定ではなくサーバーにあると分かるので、調べる範囲はずっと短くなります。
AIを接続するには、/mcp をご覧ください。
よくある質問
- なぜVS Codeは、mcpServersではなくserversを使うのですか?
- serversというキーは、VS Code独自のMCP設定形式での命名の選択で、Claude Desktopが確立した慣例とは独立して決められました。どちらが正しいということはありません。問題になるのは、2つが入れ替えられそうに見えて、片方が何も言わずに失敗するからです。
- 間違ったキーを使うと、VS Codeは警告してくれますか?
- いいえ。そこが難しいところです。ファイルは正しいJSONで、未知の最上位キーは拒否されず無視され、設定されたサーバーが0件でも正常な状態です。どれも不具合のようには見えません。
- VS CodeとCursorで、1つの設定ファイルを共有できますか?
- いいえ。読み込むパスも、求めるラッパーのキーも違うので、両方のファイルが必要です。内側のサーバー定義は同じなので、1語だけ変えたコピーになります。
- これはWindowsのCopilotにも当てはまりますか?
- いいえ。ここでのCopilotは、MCPサーバーに対応した、VS Code内のGitHub Copilotです。Windowsのタスクバーのアシスタントは、名前を共有する別の製品で、これらの設定ファイルは使いません。