如何用 Docker 启动 MCP for Unity 服务器并接入 MCP 客户端
【免费下载链接】unity-mcpUnity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.项目地址: https://gitcode.com/GitHub_Trending/un/unity-mcp
MCP for Unity 由两部分组成:Unity Editor 内的插件(Bridge)和独立的 Python MCP 服务器。这篇文章解决的任务是:用 Docker 启动其中的 Python 服务器,并把 Cursor、VS Code 等 MCP 客户端接上去,最终能在客户端里用自然语言驱动 Unity Editor。适用前提是你已经在 Unity 项目中安装了 Unity MCP Plugin(这是 Server/DOCKER_OVERVIEW.md 明确标注的 Required 项,插件安装路径见 website/docs/getting-started/install.md,要求 Unity 2021.3 LTS 或更新版本),并且机器上有可用的 Docker 环境。
按照 website/docs/architecture/transports.md 中的选型表,"Remote-hosted server (cloud, Docker)" 对应的传输方式是 HTTP。stdio 传输由 MCP 客户端本地拉起 Python 进程,文档明确说明其 "Cannot host remotely",因此 Docker 部署走 HTTP。
拉取并启动官方镜像(主路径)
按 Server/DOCKER_OVERVIEW.md 的 Quick Start,两步启动:
docker pull msanatan/mcp-for-unity-server:latestdocker run -p 8080:8080 msanatan/mcp-for-unity-server:latest文档说明该命令启动后 "This starts the MCP server on port 8080"。
需要留意文档间的一处差异:仓库内 Server/Dockerfile 的注释写明镜像默认使用 stdio 传输(Docker MCP Gateway 兼容),而 HTTP 模式需要显式传参;根目录的 docker-compose.yml 正是这样做的,其启动命令为:
uv run python src/main.py --transport http --http-host 0.0.0.0 --http-port 8080如果你拉取镜像后发现 8080 端口上没有 HTTP 服务,在docker run后面补上相同的参数即可:
docker run -p 8080:8080 msanatan/mcp-for-unity-server:latest \ --transport http --http-host 0.0.0.0 --http-port 8080可选的环境变量(来自 Server/DOCKER_OVERVIEW.md):
DISABLE_TELEMETRY=true— 关闭匿名使用统计LOG_LEVEL=DEBUG— 开启详细日志(默认 INFO)
docker run -p 8080:8080 -e LOG_LEVEL=DEBUG msanatan/mcp-for-unity-server:latest可选分支:从仓库源码用 Compose 构建
如果你要基于本仓库代码而不是发布镜像来跑服务器,可以在仓库根目录直接使用 docker-compose.yml。该文件从仓库根目录构建(dockerfile: Server/Dockerfile),映射8080:8080,设置restart: unless-stopped和PYTHONPATH=/app/Server/src,并固定以 HTTP 模式、0.0.0.0:8080启动:
docker compose up --build构建过程会在镜像内执行uv sync --frozen --no-dev安装依赖(见 Server/Dockerfile),基础镜像为python:3.13-slim。
配置 MCP 客户端
服务器与 Unity Editor 之间无需额外配置——文档说明 "The server connects to the Unity Editor automatically when both are running"。你要做的只是让 MCP 客户端指向服务器的 HTTP 端点。
在客户端的 MCP 配置中加入(Server/DOCKER_OVERVIEW.md 给出的配置):
{ "mcpServers": { "UnityMCP": { "url": "http://localhost:8080/mcp" } } }如果客户端不在运行 Docker 的同一台机器上,把localhost换成服务器主机地址。VS Code 的配置结构不同,website/docs/getting-started/install.md 给出的写法是:
{ "servers": { "unityMCP": { "type": "http", "url": "http://localhost:8080/mcp" } } }一个边界要提前知道:Claude Desktop 只支持 stdio 传输(website/docs/getting-started/install.md 与 website/docs/architecture/transports.md 均说明),而 stdio 无法远程托管,所以这篇 Docker + HTTP 的部署方式不适用于 Claude Desktop。
验证连接
按文档给出的检查顺序确认整条链路:
服务器在 8080 监听——
docker run执行后按文档说明服务器运行在 8080 端口。若客户端连不上,website/docs/getting-started/install.md 的排查项是:确认 HTTP 服务器确实在localhost:8080运行,且客户端配置里的 URL 与之完全一致。Unity 侧状态——在 Unity Editor 打开Window → MCP for Unity,查看状态面板;文档说明当链路全部打通时状态面板显示
Connected。出现 "Unity Bridge not connecting" 时的处理是重启 Unity Editor。发一条真实 prompt——Server/DOCKER_OVERVIEW.md 给出的连接成功后的示例 prompt 包括:
List all GameObjects in the current scene
客户端能返回当前场景的 GameObject 列表,说明 MCP 客户端 → Docker 服务器 → Unity Editor 整条路径已通。
可选分支:远程托管模式(API Key 鉴权)
如果你要把这个 Docker 容器作为多人共享的远程服务部署,需要开启 remote-hosted 模式。该模式下所有 MCP 工具/资源调用和 Unity 插件的 WebSocket 连接都必须携带有效的X-API-Key,并且每个用户只能看到用自己 API key 连接的 Unity 实例。
启动命令(Server/DOCKER_OVERVIEW.md):
docker run -p 8080:8080 \ -e UNITY_MCP_HTTP_REMOTE_HOSTED=true \ -e UNITY_MCP_API_KEY_VALIDATION_URL=https://auth.example.com/api/validate-key \ -e UNITY_MCP_API_KEY_LOGIN_URL=https://app.example.com/api-keys \ msanatan/mcp-for-unity-server:latestUNITY_MCP_API_KEY_VALIDATION_URL是必填项:它指向一个外部鉴权端点,服务器把 API key 校验完全委托给该端点,自己不管理 key。website/docs/guides/remote-server-auth.md 说明,设置了--http-remote-hosted但缺少 validation URL 时,服务器记录错误并以退出码 1 终止。示例中的auth.example.com/app.example.com是文档示例值,必须替换为你自己的鉴权服务地址;该端点的请求/响应契约({"api_key": "<key>"}入参,valid/user_id出参,5 秒超时、失败即拒绝)见同一指南的 "Validation Contract" 一节。
其余远程托管相关环境变量(Server/DOCKER_OVERVIEW.md):
| 变量 | 说明 |
|---|---|
UNITY_MCP_HTTP_REMOTE_HOSTED | 开启远程托管模式(true、1或yes) |
UNITY_MCP_API_KEY_LOGIN_URL | 用户获取/管理 API key 的页面地址 |
UNITY_MCP_API_KEY_CACHE_TTL | 已验证 key 的缓存秒数(默认300) |
UNITY_MCP_API_KEY_SERVICE_TOKEN_HEADER | 服务器向鉴权服务自证身份所用的请求头名 |
UNITY_MCP_API_KEY_SERVICE_TOKEN | 发送给鉴权服务的 token 值 |
客户端配置要加上X-API-Key头(<your-api-key>替换为实际 key):
{ "mcpServers": { "UnityMCP": { "url": "http://your-server:8080/mcp", "headers": { "X-API-Key": "<your-api-key>" } } } }Unity 侧的设置是:在MCP for Unity窗口选择 HTTP Remote 连接模式,在 API Key 字段填入 key(存于 EditorPrefs,按机器生效),需要新 key 时点Get API Key(从服务器/api/auth/login-url端点取登录页地址)。
远程托管模式的行为变化(website/docs/guides/remote-server-auth.md)需要写入运维预期:
- 本地模式下服务器会自动选中唯一连接的 Unity 实例;远程托管模式下自动选择被禁用,用户必须显式调用
set_active_instance(参数为mcpforunity://instances资源中的Name@hash)。 POST /api/command、GET /api/instances、GET /api/custom-tools这三个 REST 端点在该模式下被禁用,防止未认证访问。/health(GET,用于负载均衡与健康监控)和/api/auth/login-url(GET)始终可访问,可用于容器健康检查。- Server/Dockerfile 注释另建议:远程托管部署时应加上
--project-scoped-tools参数。
常见问题
以下条目均出自 website/docs/guides/remote-server-auth.md 的 Troubleshooting 与 website/docs/getting-started/install.md 的 Troubleshooting:
- 服务器启动后立即以退出码 1 终止:
--http-remote-hosted需要配套的 validation URL。通过 CLI 参数或UNITY_MCP_API_KEY_VALIDATION_URL环境变量提供。 - 每次工具调用都报 "API key authentication required":服务器处于远程托管模式但请求没带 API key。检查客户端配置是否包含
X-API-Key头,或 Unity 插件连接设置里是否填了 key。 - WebSocket 连接被 4401 关闭:Unity 插件没有发送 API key,在 MCP for Unity 窗口的连接设置中填入。
- WebSocket 连接被 1013 关闭:外部鉴权服务不可达。检查 MCP 服务器到 validation URL 的网络连通性,Unity 插件可以重试。
- 用户看不到自己的 Unity 实例:会话隔离生效中,Unity 插件与 MCP 客户端必须使用解析到同一个
user_id的 API key。 - 密钥轮换后旧 key 仍短暂可用:已验证 key 按
--api-key-cache-ttl(默认 300 秒)缓存,旧 key 失效有等于 TTL 的延迟;调低 TTL 可加快吊销,代价是更频繁的校验请求。
相关文档
- Docker 快速启动与环境变量:Server/DOCKER_OVERVIEW.md
- 容器编排与源码构建配置:docker-compose.yml、Server/Dockerfile
- Unity 插件安装与客户端手动配置:website/docs/getting-started/install.md
- 远程服务器 API Key 鉴权完整指南:website/docs/guides/remote-server-auth.md
- HTTP / stdio 传输模式选型:website/docs/architecture/transports.md
【免费下载链接】unity-mcpUnity MCP acts as a bridge between AI assistants and your Unity Editor. Give your LLM tools to manage assets, control scenes, edit scripts, and automate tasks within Unity.项目地址: https://gitcode.com/GitHub_Trending/un/unity-mcp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考