WslContainerMcp
一个仅支持Windows的MCP服务器,允许任何支持MCP的AI代理通过Podman完全访问WSL内运行的Linux容器。
运作原理
服务器通过以下方式进行通信 标准 (stdin/stdout)并且始终精确地公开 一个工具 取决于环境是否准备就绪:
| 环境状态 | 工具已暴露 |
|---|---|
| 一切准备就绪 | run_linux_cli |
| 任何问题(WSL、Podman等) | environment_issue_report |
召唤 environment_issue_report 返回一个简单的语言描述,说明出了什么问题,以及修复它的分步说明——这样用户就可以在不离开人工智能聊天的情况下解决问题。
服务器尝试在可能的情况下自动修复问题:
- WSL未安装 → tries
wsl --install --no-launch自动地 - 没有 Linux 发行版 → tries
wsl --install -d Ubuntu --no-launch自动地 - Shell没有响应 → tries
wsl --shutdown并自动重试 - 未安装Podman → 通过安装
apt-get/dnf/apk自动地 - 代理映像丢失 → 从嵌入式Dockerfile自动构建
需求
- Windows 10/11 (必须支持WSL 2)
- WSL 2(如果缺失,则在首次运行时自动安装)
- WSL中的Linux发行版(如果没有,则自动安装Ubuntu)
- Podman(如果丢失,会自动安装在WSL中,需要无密码
sudo)
快速开始
# Option A: run directly (requires .NET 10 SDK)
dotnet run
# Option B: publish self-contained exe and run it
dotnet publish -c Release
.\bin\Release\net10.0-windows\win-x64\publish\WslContainerMcp.exe服务器标志
| 标志 | 描述 |
|---|---|
--no-network | 以以下方式启动容器 --network none (无互联网接入) |
向MCP客户端注册
添加到您的MCP客户端配置中(例如Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"WslContainerMcp": {
"command": "C:\\path\\to\\WslContainerMcp.exe"
}
}
}要阻止容器互联网访问,请执行以下操作:
{
"mcpServers": {
"WslContainerMcp": {
"command": "C:\\path\\to\\WslContainerMcp.exe",
"args": ["--no-network"]
}
}
}工具: run_linux_cli
在fresh中运行命令 wsl-sandbox-mcp-agent:latest 波德曼集装箱。
输入
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
cmd | string | ✓ | — | 可执行文件(例如。 python3, bash) |
args | string[] | ✓ | — | 传递给可执行文件的参数 |
cwd | string | "." | 工作目录,相对于工作区根目录 | |
timeout_s | int | 120 | 超时时间(秒)(限制在1-3600) | |
env | object | {} | 容器的额外环境变量 |
cwd 必须是 相对路径.绝对路径、驱动器前缀和 .. 片段被拒绝。
输出(JSON)
| 字段 | 类型 | 描述 |
|---|---|---|
exit_code | int | 进程退出代码(0=成功) |
stdout | string | 捕获的标准输出 |
stderr | string | 捕获的标准错误 |
timed_out | bool | 命令是否因超时而被终止 |
artifact_meta | string | 调用元数据JSON的相对路径(可选) |
工作区和文件访问
所有数据都存储在 %USERPROFILE%\.wsl-sandbox-mcp\ (每个Windows用户一个工作区——无跨用户混合):
%USERPROFILE%\.wsl-sandbox-mcp\
├── workspace\ ← mounted as /workspace inside every container
│ └── out\ ← call metadata JSON files
├── container\
│ └── Dockerfile ← auto-extracted; used to build the agent image从容器内部检查文件
工作空间安装在 /workspace 在每个集装箱内。 任何写入的文件 /workspace 在运行过程中,Windows会立即显示 在:
%USERPROFILE%\.wsl-sandbox-mcp\workspace\例如,一个写以下内容的命令 /workspace/result.txt 可以在Windows上阅读:
%USERPROFILE%\.wsl-sandbox-mcp\workspace\result.txt检查Podman图像存储(通过 \\wsl$)
Podman将图像和图层存储在WSL中一个稳定的每个用户的目录中:
\\wsl$\\home\
\.wsl-sandbox-mcp\podman\
├── graphroot\ ← image layers
└── runroot\ ← runtime state直接在Windows资源管理器中打开此路径。
项目结构
WslContainerMcp/
├── Program.cs ← Minimal startup (WSL/Podman bootstrap → MCP server)
├── AgentDockerfile.cs ← Embedded Dockerfile content (self-contained)
├── WslContainerMcp.csproj
├── Runtime/
│ ├── BootstrapResult.cs ← DI-shared state from startup bootstrap
│ ├── LinuxCliRunner.cs ← run_linux_cli core logic
│ ├── PathMapping.cs ← Windows ↔ WSL path conversion + cwd sanitization
│ ├── PodmanBootstrap.cs ← Podman setup: storage config, install, image build
│ ├── ProcessExec.cs ← Low-level process/WSL execution helpers
│ ├── WslBootstrap.cs ← WSL availability checks + auto-fix attempts
│ └── WslProbe.cs ← Low-level WSL probes (no side effects)
├── Tools/
│ ├── RunLinuxCliTool.cs ← MCP tool: run_linux_cli
│ └── EnvironmentIssueReportTool.cs ← MCP tool: environment_issue_report (fallback)
└── Container/
└── Dockerfile ← Source for wsl-sandbox-mcp-agent:latest