痛点

AI 助手(Claude Code、Cline、Roo Code、AstrBot 等)运行在 Docker 容器中时,所有的工具调用——命令执行、文件读写、进程管理——都被限制在容器内部。它们接触不到 Windows 宿主机。

但很多时候我们真的需要这个能力:

  • 让 Claude Code 直接在宿主机上执行 ipconfignetstat 排查网络问题
  • 让 AstrBot 读取宿主机上的日志文件发到 QQ 群
  • 让 AI 助手在宿主机上打开浏览器、启动应用
  • 监控宿主机 CPU、内存、磁盘使用情况

MCP(Model Context Protocol,模型上下文协议) 正是为解决这类"AI 需要操作外部系统"的问题而生的标准协议。

项目介绍

MCP Docker Host Bridge 是一个轻量级的 Python 项目,在 Windows 宿主机上运行一个 MCP 服务器,通过 SSE(Server-Sent Events)传输协议将宿主机能力以标准 MCP 工具的形式暴露给 Docker 容器内的任何 MCP 客户端。

项目地址

👉 https://github.com/hastunemiku05231/mcp-docker-host-bridge


架构图

Docker 容器                              Windows 宿主机
  ┌─────────────────────┐                ┌─────────────────────┐
  │ 你的应用            │                │ python              │
  │ (MCP 客户端) ───────┼─ host.docker   │   windows_mcp_      │
  │                     │   .internal:   │   server.py         │
  │ Claude Code         │   8919/sse     │                     │
  │ Cline / Roo Code    │                │ 工具:               │
  │ AstrBot             │                │  • execute_command  │
  │ 任何 MCP 客户端     │                │  • get_system_info  │
  └─────────────────────┘                │  • read_file        │
                                         │  • write_file       │
                                         │  • list_processes   │
                                         │  • open_application │
                                         └─────────────────────┘

6 个内置工具

工具 功能 使用的 Shell
execute_command 执行 cmd.exe 或 PowerShell 命令 cmd / powershell
get_system_info 获取 OS 版本、CPU、内存、磁盘信息 powershell
read_file 读取文本文件(支持 UTF-8 / GBK)
write_file 写入或追加文件内容
list_processes 按 CPU 使用率列出进程 powershell
open_application 通过默认程序打开 exe/文件/URI

快速开始

1. Windows 宿主机上安装依赖

pip install "mcp[cli]" uvicorn starlette

2. 启动 MCP 服务器

python windows_mcp_server.py

看到以下输出即启动成功:

MCP Docker Host Bridge starting on http://0.0.0.0:8919/sse
   Health:    http://0.0.0.0:8919/health
   PID:       8412

3. 配置容器内的应用

创建 mcp_client_config.json

{
  "mcpServers": {
    "windows_host": {
      "url": "http://host.docker.internal:8919/sse",
      "transport": "sse",
      "timeout": 30,
      "sse_read_timeout": 300
    }
  }
}

在 docker-compose.yml 中挂载配置:

services:
  your-app:
    image: your-app:latest
    volumes:
      - ./mcp_client_config.json:/path/in/container/mcp_config.json:ro
    extra_hosts:
      - "host.docker.internal:host-gateway"

注意host.docker.internal 是 Docker Desktop 提供的内置 DNS 名称,自动解析到宿主机 IP,无需手动配置网络。

4. 使用

应用连接后,你的 AI 助手就可以直接调用这些工具了:

  • “在宿主机上运行 ipconfig
  • “查看宿主机系统信息”
  • “读取宿主机上的 C:\logs\app.log
  • “列出宿主机上占用 CPU 最高的进程”

安全设计

服务器内置了黑名单机制,在执行命令前进行安全检查:

默认拦截的命令:

  • 系统命令:shutdownrebootformatdiskpart
  • 文件破坏:delrmdirreg delete
  • 用户管理:net usernet localgroup
  • PowerShell cmdlet:Remove-ItemFormat-VolumeStop-Computer

自定义黑名单:

# 添加额外屏蔽
$env:MCP_BRIDGE_BLOCKED_CMDS = "taskkill,sc,reg"
python windows_mcp_server.py

配置选项

所有配置通过环境变量完成:

环境变量 默认值 说明
MCP_BRIDGE_HOST 0.0.0.0 绑定地址
MCP_BRIDGE_PORT 8919 监听端口
MCP_BRIDGE_BLOCKED_CMDS 内置列表 额外屏蔽的 cmd 命令
MCP_BRIDGE_BLOCKED_PS_CMDLETS 内置列表 额外屏蔽的 PowerShell cmdlet

实际应用场景

场景 1:Claude Code 在容器中控制宿主机

Claude Code 运行在 Docker 容器中,通过 MCP 协议连接宿主机上的桥接服务器,可以直接执行宿主机的命令、读写文件。

场景 2:AstrBot QQ 机器人获取宿主机信息

AstrBot 配置了 MCP 客户端后,在 QQ 群里发一条 查看宿主机CPU温度,机器人就会调用 MCP 工具在宿主机上执行命令,把结果返回群里。

场景 3:自动化 CI/CD

容器化的构建工具链通过 MCP 桥接调用宿主机上的原生编译工具、签名工具等。


工作原理

MCP (Model Context Protocol) 是 Anthropic 提出的开放协议,定义了一套标准化的接口规范,让 AI 模型能够调用外部工具和访问外部数据。

本项目实现了 MCP 协议的 SSE(Server-Sent Events) 传输模式:

  1. 服务器在 http://0.0.0.0:8919/sse 启动 HTTP 端点
  2. 容器内的 MCP 客户端通过 host.docker.internal:8919 发起连接
  3. 客户端与服务端通过 initializetools/listtools/call 的标准流程交互
  4. 所有工具调用在宿主机上执行,结果通过 SSE 流返回给容器

总结

MCP Docker Host Bridge 解决了一个很具体的痛点:“AI 在容器里,但我想让它操作宿主机”。它只有单个 Python 文件、零外部依赖(除了 MCP SDK),配置简单,安全可控。

如果你也在 Windows 上用 Docker 跑 AI 助手,不妨试试这个项目。

GitHub 仓库:https://github.com/hastunemiku05231/mcp-docker-host-bridge

许可证:MIT

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐