MCP 設定:Windows パス対応
JSON 内 Windows パスのバックスラッシュエスケープ、%APPDATA% が場所によって展開される/されないこと、PATH 調整が必要なツール。
詳細な説明
JSON + Windows パス = バックスラッシュ地獄
JSON はリテラルバックスラッシュを 2 つ重ねる必要があります(\\)。Windows パスはバックスラッシュだらけです。組み合わせると "なぜサーバが起動しない?" の定番ハマりポイントになります。
正しいエスケープ
NG(バックスラッシュ 1 個):
"args": ["-y", "@modelcontextprotocol/server-filesystem", "C:\Users\me\Documents"]
これは無効な JSON です。
OK(バックスラッシュをエスケープ):
"args": ["-y", "@modelcontextprotocol/server-filesystem", "C:\\Users\\me\\Documents"]
さらに良い方法 — Node も Python も Windows でフォワードスラッシュを扱えます:
"args": ["-y", "@modelcontextprotocol/server-filesystem", "C:/Users/me/Documents"]
Windows での設定保存先
Claude Desktop が期待するパス:
%APPDATA%\Claude\claude_desktop_config.json
シェル変数 %APPDATA% は通常 C:\Users\<you>\AppData\Roaming に展開されます。これは 保存先パス であり、JSON 内に埋め込む値ではありません。args でパスを書く際は完全な形で書きます。
npx と PATH
Claude Desktop プロセスは最小限の環境を継承します。fnm、nvm-windows、その他のバージョンマネージャで Node を入れていると、GUI アプリは PATH に npx が見えず次のエラーになります:
[error] Failed to spawn server: 'npx' is not recognized
対処:
- nodejs.org の Node.js を入れる(システムインストーラはユーザ PATH に登録され、GUI アプリからも見える)。
- または
"command": "npx"を絶対パスに置き換える:"command": "C:\\Program Files\\nodejs\\npx.cmd"。
Windows での uvx
fetch サーバは uvx を使います。PowerShell ワンライナーで uv をインストールしたら、ターミナル再起動して uvx --version で確認します。同じ PATH 注意点があり、Claude Desktop の場合は絶対パスが必要なこともあります:"command": "C:\\Users\\me\\.local\\bin\\uvx.exe"。
設定ファイルの行末コード
JSON ファイル内では LF(CRLF ではなく)を使います。Notepad++、VS Code、Cursor はいずれもデフォルト LF。古い Windows メモ帳だけが CRLF を入れます。JSON 文字列値内の CRLF は一部クライアントでパーサ異常を引き起こします。
ユースケース
macOS チームと Windows チームが混在するチームに MCP を展開するとき。macOS 側で動く設定をそのまま Windows にコピーすると「npx が見つからない」や「無効な JSON」で詰まる、という典型的なケースの解決に役立ちます。