🤖

シンプルな解決策でClaudeデスクトップMCPサーバー構成の重大な問題を解決した方法

に公開

技術的な問題に直面して完全に困惑したものの、解決策が驚くほど単純だったという経験はありませんか?最近、私はMacでClaudeデスクトップのMCPファイルシステムサーバーを設定する際に、まさにこのような状況に遭遇しました。

課題:謎の構成失敗

mcp-server-sqliteuvxは完璧に動作したのですが、claude_desktop_config.jsonを使用してファイルシステムサーバーを構成しようとした際に障害に直面しました。npxnodeを直接使用する両方の試みが、私を困惑させる予期せぬエラーを引き起こしたのです。

最初の試み:NPXアプローチ

最初の構成は十分にシンプルに見えました:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/xxx/Desktop"
      ]
    }
  }
}

しかし、ログには奇妙なエラーが表示されていました:

==> /Users/xxx/Library/Logs/Claude/mcp-server-filesystem.log <==
command not found: /Users/xxx/Desktop

不思議なことに、ターミナルで同じコマンドを直接実行すると完璧に動作しました:

npx @modelcontextprotocol/server-filesystem '/Users/xxx/Desktop'
# 出力: Secure MCP Filesystem Server running on stdio... Allowed directories: [...]

二度目の試み:Node直接アプローチ

次のアプローチでは、Node.jsを直接使用してみました:

{
  "mcpServers": {
    "filesystem": {
      "command": "node",
      "args": [
        "/usr/local/lib/node_modules/@modelcontextprotocol/server-filesystem/dist/index.js",
        "/Users/xxx/Desktop"
      ]
    }
  }
}

しかし、これは構文エラーを引き起こしました:

==> /Users/xxx/Library/Logs/Claude/mcp-server-filesystem.log <==
/usr/local/lib/node_modules/@modelcontextprotocol/server-filesystem/dist/index.js:2
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    ...

ここでも、ターミナルで全く同じコマンドを実行すると問題なく動作しました。

この時点で、私は途方に暮れていました。パスの問題でしょうか?構成ファイルでnodeへのフルパス(例えば、/usr/local/bin/node)を指定してみたところ、一時的に機能するように見えましたが、それは脆弱な回避策であり、本当の解決策ではありませんでした。

予想外の解決策:バージョンの競合

かなりのトラブルシューティングの末、根本原因を発見しました:システムに潜む古いNode.jsのバージョンでした。

私のデフォルトのターミナルNodeは最新でしたが、Claudeが構成ファイルを通じてサーバーを起動しようとすると、古いバージョン(おそらくnvmによって管理されていた)が何らかの形で干渉していたのです。

状況を救った単純な修正

解決策は驚くほど簡単でした:古いNode.jsのインストールを削除し、システムに最新バージョンのみが残るようにしました。

結果はどうだったでしょうか?claude_desktop_config.json内のnpxnodeの両方の構成がエラーや混乱なく完璧に動作し始め、MCPを通じてファイルシステムにシームレスにアクセスできるようになりました。

この経験から学べること

コマンドがターミナルでは完璧に動作するのに、別のアプリケーションから起動すると失敗するような状況に遭遇した場合は、ランタイム環境におけるバージョンの競合を確認することを検討してみてください。

時には最も強力な修正は最もシンプルなものです:開発ツールの古いバージョンをクリーンアップすることです。

あなたも同様のソフトウェアバージョンの競合による幻のような問題を経験したことはありますか?下のコメントで、あなたのトラブルシューティングの成功例についてお聞かせください。

Discussion