😊

WSL上のMCPサーバーをWindowsから動かすためのconfig設定

に公開

WSL上のMCPサーバーをWindowsから動かすためのconfig設定

はじめに

最近話題のMCPサーバーがありますね。それをwindowsのWSL2で進めていたところ、Claude Desktopの設定で詰まったのでメモをのこします。内容はかなり簡単です~。clineでも一緒です。
同じような状況で困っている方の参考になればと思い、解決方法を共有します。

環境

  • Windows 11
  • WSL2 (Ubuntu)
  • Claude Desktop App

遭遇した問題

MCPサーバーをWSLに置いて実行しようとしたら、こんなエラーが出ました:

Error: spawn /home/hy/src/github.com/haruotsu/mcp-tutorials/mcpserver ENOENT

最初の設定はこんな感じでした:

{
  "mcpServers": {
    "sisoku-enzan": {
      "command": "/home/hy/src/piyo/fuga/mcp-tutorials/mcpserver",
      "args": [],
      "env": {},
      "disabled": false
    }
  }
}

なぜエラーが出たのか

WindowsとWSLでは、ファイルの場所の指定方法(パス)が異なります:

  • Windowsは C:\Users\... という形式
  • WSLは /home/... という形式

そのため、Windowsが直接WSLのパスを理解できず、「そんなファイルないよ!」というエラーになっていました。

解決方法

wslコマンドを使って、WindowsからWSLのプログラムを実行するように設定を変更します:

{
  "mcpServers": {
    "sisoku-enzan": {
      "command": "wsl",
      "args": [
        "-e",
        "/home/hy/src/piyo/fuga/mcp-tutorials/mcpserver"
      ],
      "env": {},
      "disabled": false
    }
  }
}

ポイント

  • commandwslを指定
  • args-eフラグとWSL内のパスを指定

なぜこれで解決できるのか

この設定が機能する理由は、実行の流れにあります:

  1. Claudeアプリ(Windows)がwslコマンドを実行
  2. wslコマンドがWSL環境を起動
  3. -eフラグにより、WSL環境内でパスが解釈される
  4. WSL環境内でMCPサーバーが実行される

つまり:

  • WindowsはWSLのパスを直接解釈する必要がない
  • パスの解釈はWSL環境内で行われる
  • WSLとWindowsの間の「翻訳」をwslコマンドが担当

まとめ

WSL上のプログラムをWindowsから実行する場合は、wslコマンドを介することで、異なるファイルシステム間の橋渡しができるようになるのでした~~~!

Discussion