【備忘】WindowsのMCP構築ではまった話
はじめに
Windows環境でMCPを試そうとした際、トンカチアイコンが表示されず、つまづきポイントを調べても解決されなかったところで、自分の原因と確認点を共有します。
参考サイト
はじめにこちらのサイトを参考にさせていただきました。
公式には書いてない、Windowsの場合のやり方(つまずきポイント)がよくまとまっています。
Claude Desktopで「Could not attach to MCP server」というエラーが表示されるという同様の事象であったため、解決手順を順番に試しましたが、私の場合は解決されず。。
私の原因
「claude_desktop_config.json」で指定する参照を許可するフォルダとして、上記とは別のサイトを見ながら"C:\\Users\\[username]\\Desktop"と指定していたのが原因でした。
後述のように、そもそもローカルのホームディレクトリにDesktopは存在せず、Windows11でOneDriveが有効化されている場合、デスクトップフォルダはOneDrive上にあります。
わかってしまえば「そりゃそうだよね」というだけの話ですが、、、思い込みって気づけないですよね。
Windows 10とWindows 11のデスクトップパスの違い
デフォルトのデスクトップパス
Windows 10とWindows 11では、デスクトップフォルダのデフォルトのパスに主な違いがあります。
Windows 10:
C:\Users\{ユーザー名}\Desktop
Windows 11:
OneDriveが有効化されている場合、デスクトップフォルダがOneDriveと同期され、パスが変更されます。C:\Users\{ユーザー名}\OneDrive\Desktop
OneDriveの統合
Windows 11では、OneDriveとの統合が強化されており、デスクトップ、ドキュメント、ピクチャなどのフォルダがデフォルトでOneDriveと同期される設定になっています。これにより、デスクトップ上のファイルがクラウドに自動的にバックアップされるようになりました。
パスの確認方法
デスクトップフォルダの現在のパスを確認するには、以下の手順を実行します:
ファイルエクスプローラーを開きます。
アドレスバーに "%USERPROFILE%" と入力してEnterキーを押します。
デスクトップフォルダ(「デスクトップ」or「Desktop」)をダブルクリックします。
OneDriveが有効になっている場合、デスクトップフォルダのパスは C:\Users\{ユーザー名}\OneDrive\~ となっていることを確認できます。
今回の切り分け方
切り分けの一つとして、MCPのログファイルがあるのですが、こちらを見る限りは正常にコネクトしてるように見えました。
2024-12-15T04:25:19.064Z [info] Attempting to connect to MCP server filesystem...
2024-12-15T04:25:19.350Z [info] Connected to MCP server filesystem!
そこで、切り分けのひとつとしてコマンドから試してみる方法があります。
まずは「claude_desktop_config.json」の設定
{
"mcpServers": {
"filesystem": {
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": [
"C:\\Users\\[username]\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js",
"C:\\Users\\[username]\\Documents"
]
}
}
}
この設定により、filesystemを呼び出すコマンドとして以下が形成されます。
(見やすくするため nodejs のフルパス指定は省略)
node C:\\Users\\[username]\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js C:\\Users\\[username]\\Documents
nodeに渡す1つ目の引数が実行するコード、2つ目以降の引数に、コードの中で「mcp-server-filesystem」に渡す許可ディレクトリを指定するようです。
(2つ目の引数を指定しないときに表示されたUsage)
Usage: mcp-server-filesystem <allowed-directory> [additional-directories...]
これを実際にPowerShellのターミナルで打ってみると、フォルダの参照が許可されたメッセージが確認できます。
PS C:\Windows\system32> node C:\\Users\\[username]\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js C:\\Users\\[username]\\Documents
Secure MCP Filesystem Server running on stdio
Allowed directories: [ 'c:\\users\\[username]\\documents' ]
間違った指定をした場合(このエラーをMCPのログでは拾ってくれない)
PS C:\Windows\system32> node C:\\Users\\[username]\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js C:\\Users\\[username]\\Desktop
Error accessing directory C:\\Users\\[username]\\Desktop: [Error: ENOENT: no such file or directory, stat 'C:\Users\[username]\Desktop'] {
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'C:\\Users\\[username]\\Desktop'
}
つまずきポイントとしてレアな話かもですが、トンカチアイコンが表示されないときの切り分けのひとつとしての共有になります。
参考:解決策の提案@Felo.ai
問題の概要と原因
Cloud Desktopで「Could not attach to MCP server」というエラーが発生する場合、主に以下の原因が考えられます:
Node.jsやnpmのインストール問題
Node.jsやnpmが正しくインストールされていない、またはバージョンが古い場合にエラーが発生することがあります。特に、Node.jsのバージョンがv18以上であることが推奨されています。また、インストールパスが正しく設定されていない場合も問題の原因となります。claude_desktop_config.jsonの設定ミス
MCPサーバーの設定ファイルであるclaude_desktop_config.jsonに記載されたパスが間違っている、または相対パスが使用されている場合、接続エラーが発生します。Windows環境では、絶対パスを使用し、バックスラッシュ(\\)を正しく記載する必要があります。npxやuvxの使用に関する問題
一部のユーザーは、npxやuvxを使用した際にエラーが発生することを報告しています。これらのコマンドが正しく動作しない場合、直接Node.jsやPythonコマンドを使用することで問題が解決することがあります。管理者権限の不足
Claude Desktopを管理者権限で実行していない場合、必要な権限が不足してエラーが発生することがあります。MCPサーバーのインストールや実行の不備
MCPサーバーが正しくインストールされていない、または実行されていない場合、接続が失敗します。特に、グローバルインストール(npm install -g)が推奨されます。ソフトウェアのバージョン互換性
Claude Desktopのバージョンが古い場合、MCPサーバーとの互換性が失われる可能性があります。最新バージョンへのアップデートが推奨されます。
解決策
以下の手順で問題を解決してください:
1. Node.jsとnpmの確認
Node.jsとnpmが正しくインストールされているか確認します。以下のコマンドを実行してバージョンを確認してください: node --version npm --version
推奨バージョンはNode.js v18以上です。必要に応じて公式サイトから最新版をインストールしてください。
2. claude_desktop_config.jsonの設定を確認
MCPサーバーの設定ファイルclaude_desktop_config.jsonを開き、すべてのパスが正しい絶対パスで記載されていることを確認してください。
Windows環境では、バックスラッシュ(\\)を使用してパスを記載します。例: "mcpServers": { "filesystem": { "command": "C:\\Program Files\\nodejs\\node.exe", "args": [ "C:\\Users\\YourUsername\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js", "C:\\Users\\YourUsername\\Documents" ] } }
3. MCPサーバーのインストールとテスト
MCPサーバーをグローバルにインストールします: npm install -g @modelcontextprotocol/server-filesystem
サーバーが正しく動作するか、直接コマンドラインでテストします: node C:\\Users\\YourUsername\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js
4. 管理者権限で実行
Claude Desktopを管理者権限で実行します。Windowsでは、アプリケーションを右クリックし、「管理者として実行」を選択してください。
5. npxやuvxの代替
npxやuvxでエラーが発生する場合、直接Node.jsやPythonコマンドを使用してサーバーを起動してください。
6. ソフトウェアのアップデート
Claude Desktopを最新バージョンにアップデートします。「Help」メニューから「Check for Updates」を選択し、アプリケーションを再起動してください。
7. ログファイルの確認
Claude Desktopのログファイルを確認し、詳細なエラーメッセージを特定します。ログファイルは通常、アプリケーションのデータディレクトリに保存されています。
まとめ
「Could not attach to MCP server」というエラーは、主に設定ミスやインストールの不備が原因で発生します。上記の手順を順に実行することで、問題を解決できる可能性が高いです。特に、claude_desktop_config.jsonの設定とNode.jsのインストール状態を重点的に確認してください。