🙆

CursorのMCPサーバ設定「no tools or prompts」トラブルシューティングガイド

に公開

CursorでMCPサーバをセットアップしようとした際に表示される「no tools or prompts」というメッセージ。これは多くの開発者が一度は遭遇する壁です。このメッセージの正体は 「サーバープロセス自体の起動には成功したが、そのサーバーが持つべき能力(ToolsやPrompts)の定義をCursorが受け取れなかった」 という状態です。

原因は、認証情報の誤り、設定ファイルの記述ミス、ローカル実行環境の差異など多岐にわたります。しかし、正しい手順で切り分けていけば、必ず解決できます。

この記事では、これまでの試行錯誤の過程を体系化し、無用な手戻りを防ぐための決定木(デシジョンツリー)形式のトラブルシューティング方法をナレッジとして提供します。

解決へのロードマップ:3つのステップ

問題解決は、以下の3ステップで進めます。重要なのは、いきなりCursorで試すのではなく、まずMCP Inspectorという専用ツールで各サーバを単体で確実に動かすことです。これが最短の解決ルートです。

  1. 【静的チェック】mcp.json の記述を疑う

    • ファイル自体の文法や論理的な間違いがないかを確認します。
  2. 【動的チェック】MCP Inspectorでサーバの単体起動を試す

    • 問題の核心に迫る最も重要なステップです。エラーメッセージを元に原因を特定します。
  3. 【最終反映】成功した設定を mcp.json に書き戻す

    • 動くことが確認できた設定をCursorに反映させます。

ステップ1:【静的チェック】mcp.json の記述を疑う

まず、設定ファイル自体に明らかな誤りがないかを確認します。

チェックリスト

  1. JSON構文は正しいか?

    • 末尾の余分なカンマ、閉じ括弧 {}[] の不足はありませんか? エディタで構文エラーが表示されていないか確認してください。
  2. サーバ定義は重複していないか?

    • "playwright""playwright-mcp" のように、同じサーバを指す定義が複数存在していませんか? 必ず一つに統一してください。
  3. commandargs は正しく分離されているか?

    • "command": "npx -y @playwright/mcp@latest" のように1行で書くのは間違いです。

    • 正しくは "command": "npx", "args": ["-y", "@playwright/mcp@latest"] のように、コマンド本体と引数を明確に分離します。


ステップ2:【動的チェック】MCP Inspectorでサーバを単体起動する

mcp.json の見た目に問題がなければ、次に実際にサーバが起動するかを試します。ここで発生する具体的なエラーが、原因を特定する最大のヒントになります。

まず、ターミナルでMCP Inspectorを起動します。

Bash

npx -y @modelcontextprotocol/inspector

ブラウザでInspectorが開いたら、「Child process (stdio)」を選択し、以下の決定木に従って検証を進めてください。

MCP Inspector 起動テスト決定木

  1. 試行A:npx経由での起動

    • command: npx

    • Arguments: -y, (パッケージ名) (例: @playwright/mcp@latest)

    • ▶️ 結果は?

      • 成功: Capabilities欄にtoolspromptsが表示されればOKです。→ ステップ3へ。

      • 失敗: エラーメッセージを確認し、下記に進みます。

  2. エラー別対処法

    • エラー: ... ENOENT

      • 原因: 「ファイルが見つかりません」。npxコマンド自体が見つかっていません。

      • 対策: ターミナルで where npx (Windows) または which npx (macOS/Linux) を実行し、パスが表示されるか確認してください。表示されなければ、Node.jsのPATH設定を見直すか、Node.jsを再インストールしてください。

    • エラー: SyntaxError: Unexpected token 'M', "Microsoft "... is not valid JSON

      • 原因: 最も典型的な失敗パターンの一つです。MCPサーバは標準出力(stdout)をJSON形式のプロトコル通信にしか使いません。しかし、npxやWindowsのcmdが、著作権表示などのJSONではない余計な文字列をstdoutに出力してしまい、パースエラーを引き起こしています。

      • 対策: npxラッパーを介さず、サーバの実体を直接実行します。→ 試行Bへ。

    • エラー: Command not found, transports removed

      • 原因: commandnpxとだけ入力し、Argumentsが空の状態です。npxが何も実行せずに即終了したため、Inspectorが通信を切断したというログです。

      • 対策: Argumentsに実行したいパッケージ名を正しく入力してください。

    • エラー: Error: SSE connection not established

      • 原因: プロセスが起動直後に終了している可能性が高いです。多くはコマンドのパス間違いか、サーバが期待する通信方式(transport)が指定されていないことが原因です。

      • 対策: 実行パスが正しいか(特に <YOU> のようなプレースホルダーが残っていないか)を確認し、envTRANSPORT=stdioを追加します。→ 試行Bへ。

  3. 試行B:実体コマンドの直接実行(最安定策)

    この方法は、npxによる出力汚染を回避できるため、最も確実で推奨される方法です。

    • ① グローバルインストール:

      ターミナルで、使用したいサーバをPC全体で使えるようにインストールします。

      Bash

      npm i -g @playwright/mcp @notionhq/notion-mcp-server @bytebase/dbhub
      
    • ② 実行ファイルのフルパスを確認:

      インストールしたコマンドの場所を探します。

      Bash

      where playwright-mcp # Windowsの場合
      # 例: C:\Users\<YOU>\AppData\Roaming\npm\playwright-mcp.cmd
      
    • ③ Inspectorで直接実行:

      • command: 上記で確認したフルパス
        (例: C:\Users\<YOU>\AppData\Roaming\npm\playwright-mcp.cmd)

      • Arguments: (空欄でOK)

      • env:

        • TRANSPORT: stdio (←重要)

        • MCP_LOG_LEVEL: warn (余計なログを抑制)

    • ▶️ 結果は?

      • 成功: Capabilitiestoolsが表示されるはずです。おめでとうございます!これで動く設定が確定しました。→ ステップ3へ。

      • 失敗: フルパスの記述が間違っていないか(ユーザ名部分など)を再確認してください。


ステップ3:【最終反映】成功した設定をmcp.jsonに書き戻す

MCP Inspectorで成功した設定を、そのままmcp.jsonにコピーします。

  • 推奨設定例 (playwrightの場合):

    JSON

    {
      "mcpServers": {
        "playwright": {
          "command": "C:\\Users\\<YOU>\\AppData\\Roaming\\npm\\playwright-mcp.cmd",
          "args": [],
          "env": {
            "TRANSPORT": "stdio",
            "MCP_LOG_LEVEL": "warn"
          }
        },
        // ... 他のサーバー
      }
    }
    
    • 注意: JSONファイル内では、Windowsのパス区切り文字 \\\ とエスケープする必要があります。
  • 最終確認:

    1. mcp.json を保存します。

    2. Cursorを完全に終了させ、再起動します。 (設定を確実に再読み込みさせるため)

    3. エディタで @ を入力し、@playwright などのツールが候補に表示されれば、設定は成功です。


まとめ:3行サマリ

  • 「no tools」はサーバ起動後の能力取得失敗。原因の9割はパス、引数、環境変数のミス。

  • トラブル時は必ず MCP Inspector を使い、「グローバルインストール → フルパスで直接実行」 を試すのが最短ルート。

  • Inspectorで動いた設定(command, args, env)をそのままmcp.jsonにコピーし、Cursorを再起動すれば解決する。

Discussion