Skip to main content
Glama
@modelcontextprotocol/server-wsl

@modelcontextprotocol/server-wsl

by riparino

Local Opsecured Build: Release

Independent Build: Release

@modelcontextprotocol/server-wsl

An MCP server that gives Claude Desktop full access to your Windows Subsystem for Linux (WSL) environment. Run commands, read and write files, and inspect your distributions — all from a Claude conversation on Windows.

Prerequisites

  • Windows 10 version 2004+ or Windows 11

  • WSL 2 installed (wsl --install from an admin PowerShell)

  • At least one Linux distribution installed via the Microsoft Store or wsl --install -d <Distro>

  • Node.js 18 or later (for building from source)

Related MCP server: Linux Bash MCP Server

Installation

npm install -g @modelcontextprotocol/server-wsl

From source

git clone https://github.com/modelcontextprotocol/servers.git
cd servers/src/wsl
npm install
npm run build

Configuration

Add the server to your Claude Desktop configuration file.

Config file location:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Using npx (zero-install)

{
  "mcpServers": {
    "wsl": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-wsl"]
    }
  }
}

Using a globally installed package

{
  "mcpServers": {
    "wsl": {
      "command": "mcp-server-wsl"
    }
  }
}

Running via WSL itself (alternative)

If you prefer to run the server inside WSL, you can invoke it through wsl.exe:

{
  "mcpServers": {
    "wsl": {
      "command": "wsl.exe",
      "args": ["node", "/path/to/wsl-mcp/dist/index.js"]
    }
  }
}

After editing the config, restart Claude Desktop. You should see the WSL tools appear in the Claude tool picker.

Available Tools

Tool

Description

list_distros

List all installed WSL distributions, their state (Running/Stopped), WSL version, and which is the default

run_command

Execute a bash command in a WSL distribution; returns stdout, stderr, and exit code

read_file

Read a text file from the WSL filesystem by absolute path

write_file

Write or overwrite a file in the WSL filesystem

list_directory

List directory contents with names, types, permissions, sizes, and timestamps

get_distro_info

Get detailed info about a distribution: WSL version, state, kernel, OS release, current user

Tool parameters

run_command

Parameter

Type

Required

Description

command

string

✅

Bash command to run (passed to bash -c)

distro

string

Distribution name; defaults to your default distro

timeout_ms

number

Milliseconds before the command is killed; defaults to 30 000

read_file

Parameter

Type

Required

Description

path

string

✅

Absolute path within the WSL filesystem

distro

string

Distribution name; defaults to your default distro

write_file

Parameter

Type

Required

Description

path

string

✅

Absolute path within the WSL filesystem

content

string

✅

UTF-8 text content to write

distro

string

Distribution name; defaults to your default distro

list_directory

Parameter

Type

Required

Description

path

string

✅

Absolute path to the directory

distro

string

Distribution name; defaults to your default distro

get_distro_info

Parameter

Type

Required

Description

distro

string

Distribution name; defaults to your default distro

Example prompts

Once connected, try asking Claude:

  • "What WSL distributions do I have installed?"

  • "Run df -h in my Ubuntu distro and show me disk usage"

  • "Read the file /etc/hosts from WSL"

  • "Create a Python script at /home/user/hello.py that prints Hello, World"

  • "List what's in my home directory in WSL"

  • "What kernel version is my WSL instance running?"

Security considerations

  • Commands execute as the default user of the chosen distribution (typically your regular Linux user, not root).

  • There is no path sandboxing — Claude can read and write any file the WSL user has access to. Grant this MCP server only to trusted Claude conversations.

  • Command output is capped at 10 MB to prevent runaway processes from overwhelming the host.

  • The default command timeout is 30 seconds; use timeout_ms to increase it for long-running tasks.

Troubleshooting

"wsl.exe not found" WSL is not installed or not on the system PATH. Run wsl --install from an admin PowerShell.

"No default WSL distribution is configured" You have WSL installed but no distribution set as default. Fix with: wsl --set-default <DistroName>

Distribution shows as Stopped but commands still work This is expected — WSL automatically starts a stopped distribution when a command is run.

UTF-8 output looks garbled Some older Windows builds emit WSL list output as UTF-16 LE. The server normalises this automatically; if you still see issues, ensure your WSL is up to date (wsl --update).

License

MIT

Available Tools

7 tools
get_distro_infoA

Get detailed information about a specific WSL distribution. Returns the WSL version, running state, current user identity, Linux kernel version, and OS release details (distro name, version, etc.). Useful for understanding the environment before running commands.

Inputs: distro.

list_directoryA

List the contents of a directory in the WSL filesystem. Returns each entry with its name, type (file, directory, symlink), Unix permissions, size in bytes, and last-modified timestamp. Equivalent to running ls -la in the target directory.

Inputs: path (required), distro.

list_distrosA

List all installed WSL distributions and their current state. Shows each distribution's name, whether it is Running or Stopped, its WSL version (1 or 2), and which one is the default. Use this to discover available distributions before running commands.

Inputs: no named parameters.

read_fileA

Read the contents of a file from the WSL filesystem. Returns the file content as a UTF-8 string. Supports any text file accessible to the default WSL user. For binary files, consider piping through base64 using run_command instead.

Inputs: path (required), distro.

run_commandA

Execute a shell command inside a WSL distribution as the default (unprivileged) user. Returns stdout, stderr, and the exit code. Do NOT include 'sudo' in the command — it will hang waiting for a password that cannot be supplied. For operations that require root access use run_privileged_command instead.

Inputs: command (required), distro, timeout_ms.

run_privileged_commandA

⚠️ ELEVATED — runs as root (via wsl.exe --user root). IMPORTANT: Before calling this tool you MUST show the user the exact command that will be executed and ask for explicit confirmation. Only call it once the user has confirmed. Use this instead of sudo — do not include 'sudo' in the command string. Examples of operations that require this tool: apt install, systemctl, editing /etc files, chown/chmod on system paths, mounting filesystems.

Inputs: command (required), distro, reason, timeout_ms.

write_fileA

Write or overwrite a file in the WSL filesystem with the provided content. Creates the file if it does not exist; overwrites it if it does. The parent directory must already exist. Use run_command with mkdir -p to create missing directories first.

Inputs: path (required), content (required), distro.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 7 tools

    Disambiguation5/5

    Each tool has a clear, distinct purpose. File operations, command execution, and distro management tools are clearly separated with no overlap.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern with snake_case (e.g., read_file, list_distros, run_privileged_command). No mixing of conventions.

    Tool Count5/5

    7 tools is a well-scoped set for managing WSL: file operations, command execution (normal and privileged), and distro discovery/inspection. Not too few or too many.

    Completeness4/5

    Covers essential WSL operations (file management, command execution, distro info). Minor missing operations like starting/stopping distros or managing defaults, but these are less critical for typical workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers