-
Notifications
You must be signed in to change notification settings - Fork 656
feat: make stdio transport default for Docker MCP Gateway compatibility #541
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,128 @@ | ||
| # Docker MCP Integration - Test Results | ||
|
|
||
| ## Test Environment | ||
|
|
||
| | Component | Version/Status | | ||
| |-----------|---------------| | ||
| | Docker Desktop | Running | | ||
| | Unity Editor | 2022.3+ LTS | | ||
| | Python MCP Server | Container `unity-mcp-test` | | ||
| | Transport | HTTP (port 8080) | | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add language specifiers to all fenced code blocks. All 5 fenced code blocks lack language specifications, violating markdown lint rule MD040. Update each to specify the appropriate language:
🔧 Proposed fixes for markdown linting-```
+```docker
NAMES STATUS PORTS-```
+```json
event: message-```
+```bash
INFO: WebSocket /hub/plugin [accepted]-```
+```text
Sahne: TerminalScene-```
+```bash
INFO: 172.17.0.1 - "POST /mcp HTTP/1.1" 200 OKAlso applies to: 16-16, 66-66, 78-78, 94-94, 107-107 🤖 Prompt for AI Agents |
||
|
|
||
| --- | ||
|
|
||
| ## Test 1: Container Status | ||
|
|
||
| ``` | ||
| NAMES STATUS PORTS | ||
| unity-mcp-container Up 41 minutes 0.0.0.0:8080->8080/tcp | ||
| ``` | ||
|
|
||
| ✅ **PASS** - Container running successfully | ||
|
|
||
| --- | ||
|
|
||
| ## Test 2: Health Check | ||
|
|
||
| **Request:** | ||
| ```bash | ||
| curl http://localhost:8080/health | ||
| ``` | ||
|
|
||
| **Response:** | ||
| ```json | ||
| { | ||
| "status": "healthy", | ||
| "timestamp": 1768045773.1821966, | ||
| "message": "MCP for Unity server is running" | ||
| } | ||
| ``` | ||
|
|
||
| ✅ **PASS** - Server healthy | ||
|
|
||
| --- | ||
|
|
||
| ## Test 3: MCP Protocol Initialize | ||
|
|
||
| **Request:** | ||
| ```bash | ||
| POST http://localhost:8080/mcp | ||
| Content-Type: application/json | ||
| Accept: application/json, text/event-stream | ||
|
|
||
| { | ||
| "jsonrpc": "2.0", | ||
| "method": "initialize", | ||
| "params": { | ||
| "protocolVersion": "2024-11-05", | ||
| "capabilities": {}, | ||
| "clientInfo": {"name": "test", "version": "1.0"} | ||
| }, | ||
| "id": 1 | ||
| } | ||
| ``` | ||
|
|
||
| **Response:** | ||
| ``` | ||
| event: message | ||
| data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05",...}} | ||
| ``` | ||
|
|
||
| ✅ **PASS** - MCP protocol working | ||
|
|
||
| --- | ||
|
|
||
| ## Test 4: Unity WebSocket Connection | ||
|
|
||
| **Docker Logs:** | ||
| ``` | ||
| INFO: WebSocket /hub/plugin [accepted] | ||
| INFO: connection open | ||
| ``` | ||
|
|
||
| ✅ **PASS** - Unity Editor connected via WebSocket | ||
|
|
||
| --- | ||
|
|
||
| ## Test 5: MCP Tool Execution (via Antigravity) | ||
|
|
||
| **Command:** "Unity sahnesinin adını söyle" | ||
|
|
||
| **Tool Called:** `manage_scene` (action: get_active) | ||
|
|
||
| **Result:** | ||
| ``` | ||
| Sahne: TerminalScene | ||
| Yol: Assets/Scenes/Terminal/TerminalScene.unity | ||
| Build Index: 0 | ||
| Root GameObjects: 4 | ||
| ``` | ||
|
|
||
| ✅ **PASS** - Full end-to-end integration working | ||
|
|
||
| --- | ||
|
|
||
| ## Test 6: Container Logs - Request Summary | ||
|
|
||
| ``` | ||
| INFO: 172.17.0.1 - "POST /mcp HTTP/1.1" 200 OK | ||
| INFO: 172.17.0.1 - "POST /mcp HTTP/1.1" 200 OK | ||
| INFO: 172.17.0.1 - "GET /health HTTP/1.1" 200 OK | ||
| ``` | ||
|
|
||
| ✅ **PASS** - All requests successful (200 OK) | ||
|
|
||
| --- | ||
|
|
||
| ## Summary | ||
|
|
||
| | Test | Result | | ||
| |------|--------| | ||
| | Container Status | ✅ PASS | | ||
| | Health Check | ✅ PASS | | ||
| | MCP Initialize | ✅ PASS | | ||
| | Unity WebSocket | ✅ PASS | | ||
| | MCP Tool Execution | ✅ PASS | | ||
| | Request Logs | ✅ PASS | | ||
|
|
||
| **All 6 tests passed. Docker integration is fully functional.** | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| { | ||
| "servers": { | ||
| "dockerMcp": { | ||
| "command": "docker", | ||
| "args": [ | ||
| "mcp", | ||
| "gateway", | ||
| "run" | ||
| ], | ||
| "type": "stdio" | ||
| } | ||
| } | ||
| } | ||
|
Comment on lines
+1
to
+13
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: Antigravity (and related MCP clients) accept a JSON servers/mcpServers object where each server entry for a local stdio server is specified with a command string, an args array, and optional env. Example schema + minimal example: Schema (fields)
Example JSON: Sources: Antigravity MCP JSON examples and docs (shows mcpServers/servers with command/args/env). [1][2] References: 🌐 Web query:
💡 Result: Below is a concise guide to integrating Antigravity (MCP-enabled client) with a Docker-run MCP Gateway/servers, plus a minimal example configuration you can drop into Antigravity’s mcp_config.json. Key points
Example: run Docker MCP Gateway and enable a server
{ Notes and options
References Would you like: (A) a ready-to-run docker-compose.yml for the Gateway + one server, or (B) a tailored mcp_config.json for a specific MCP server (e.g., Supabase, GitHub, DuckDuckGo)? 🏁 Script executed: # Search the repository for Antigravity-related documentation or examples
find . -type f \( -name "*.md" -o -name "*.json" -o -name "README*" \) | head -20Repository: CoplayDev/unity-mcp Length of output: 992 🏁 Script executed: # Search for any references to Antigravity in the codebase
rg -i "antigravity" --type-list all -A 3 -B 3Repository: CoplayDev/unity-mcp Length of output: 452 🏁 Script executed: # Check if there are other config examples or schemas in the repo
fd -e json -e schema -e example | grep -i configRepository: CoplayDev/unity-mcp Length of output: 131 🏁 Script executed: cat -n docker/antigravity-mcp-config.example.jsonRepository: CoplayDev/unity-mcp Length of output: 383 🏁 Script executed: # Check if there are any docs in the docker directory
ls -la docker/Repository: CoplayDev/unity-mcp Length of output: 320 🏁 Script executed: # Search for any documentation about config format
rg -i "antigravity\|mcpServers\|mcp config" -A 5 -B 2Repository: CoplayDev/unity-mcp Length of output: 45 Fix schema key and Docker command syntax — this config is invalid as written. Root key must be Use the proper Docker image and arguments instead: {
"mcpServers": {
"dockerMcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-p",
"8080:8080",
"ghcr.io/docker/mcp-gateway:latest",
"--port",
"8080",
"--transport",
"sse"
],
"type": "stdio"
}
}
}Alternatively, if using Docker Desktop's 🤖 Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| name: unity-mcp | ||
| image: mcp/unity-mcp | ||
| type: server | ||
|
Comment on lines
+1
to
+3
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: # Find the docker publish workflow mentioned in learnings
find . -name "*publish*docker*" -o -name "*docker*publish*" | head -20Repository: CoplayDev/unity-mcp Length of output: 95 🏁 Script executed: # Also look for the mcp-registry directory structure and any schema docs
find . -path "*/docker/mcp-registry*" -type f | head -20Repository: CoplayDev/unity-mcp Length of output: 96 🏁 Script executed: # Search for references to the image name in the codebase
rg "mcp/unity-mcp|msanatan.*mcp" --type yaml --type mdRepository: CoplayDev/unity-mcp Length of output: 774 🏁 Script executed: # Check if there's any docker build or publish configuration
find . -name "Dockerfile*" -o -name "docker-compose*" | head -20Repository: CoplayDev/unity-mcp Length of output: 103 🏁 Script executed: # Check the publish docker action to see what image name it actually pushes
cat -n ./.github/actions/publish-docker/action.ymlRepository: CoplayDev/unity-mcp Length of output: 4819 🏁 Script executed: # Check the Server Dockerfile for image configuration
head -50 ./Server/DockerfileRepository: CoplayDev/unity-mcp Length of output: 884 🏁 Script executed: # Look for any docker build or push commands in workflows
find ./.github/workflows -name "*.yml" -o -name "*.yaml" | xargs grep -l "docker" | head -5Repository: CoplayDev/unity-mcp Length of output: 223 🏁 Script executed: # Get the full content of the publish docker workflow action
cat -n ./.github/actions/publish-docker/action.ymlRepository: CoplayDev/unity-mcp Length of output: 4819 🏁 Script executed: # Find where the publish-docker action is called
rg "publish-docker" --type yaml -A 5 -B 2Repository: CoplayDev/unity-mcp Length of output: 45 🏁 Script executed: # Also check the release workflow specifically
cat -n ./.github/workflows/release.ymlRepository: CoplayDev/unity-mcp Length of output: 6536 🏁 Script executed: # Check what the entire server.yaml file contains
cat -n ./docker/mcp-registry/server.yamlRepository: CoplayDev/unity-mcp Length of output: 1667 🏁 Script executed: # Search for documentation about mcp-registry or Docker MCP format
find . -name "*mcp*registry*" -o -name "*registry*" | grep -i mcpRepository: CoplayDev/unity-mcp Length of output: 84 🌐 Web query:
💡 Result: Short answer — in Docker's MCP registry/catalog the top-level image field must be a Docker image reference (string). Recommended/expected rules:
Sources: Docker MCP registry repo and docs (registry catalog/CONTRIBUTING), Docker blog/catalog examples. [1][2][3] References 🏁 Script executed: # Get the exact image name with any tag/digest used in actual publishing
git log --oneline -20 --grep="docker\|Docker" -- '.github/workflows/release.yml' 2>/dev/null || echo "No recent changes"Repository: CoplayDev/unity-mcp Length of output: 142 🏁 Script executed: # Check if there are any other references to the image name in config or docs
rg "mcp/unity-mcp|mcp-for-unity-server" --type md --type txt --type jsonRepository: CoplayDev/unity-mcp Length of output: 721 Change The manifest references 🤖 Prompt for AI Agents |
||
| meta: | ||
| category: gamedev | ||
| tags: | ||
| - unity | ||
| - gamedev | ||
| - automation | ||
| - ai | ||
| - game-engine | ||
| about: | ||
| title: MCP for Unity | ||
| description: | | ||
| Control Unity Editor through AI assistants like Claude, Cursor, and VS Code Copilot. | ||
| Create scenes, manage assets, execute scripts, and automate workflows using natural language. | ||
|
|
||
| Features: | ||
| - Manage GameObjects, scenes, materials, and assets | ||
| - Execute scripts and menu items | ||
| - Run tests and read console output | ||
| - Support for multiple Unity instances | ||
| icon: https://raw.githubusercontent.com/CoplayDev/unity-mcp/main/docs/images/logo.png | ||
| source: | ||
| project: https://github.com/CoplayDev/unity-mcp | ||
| commit: 4c9beaffdefadee03c07f00eb3e3b6c5294fc99d | ||
|
Comment on lines
+24
to
+26
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: Short answer: source.commit is optional (not required). The registry's Go type marks Commit as omitempty, and the registry uses it as a commit pin when present (there are automated workflows to keep pins updated). [1][2] Sources:
🤖 Prompt for AI Agents |
||
| config: | ||
| description: Configure Unity MCP Server connection settings | ||
| env: | ||
| - name: DISABLE_TELEMETRY | ||
| example: "true" | ||
| value: "{{unity-mcp.disable_telemetry}}" | ||
| - name: LOG_LEVEL | ||
| example: "INFO" | ||
| value: "{{unity-mcp.log_level}}" | ||
| parameters: | ||
| type: object | ||
| properties: | ||
| disable_telemetry: | ||
| type: string | ||
| description: Disable anonymous telemetry (true/false) | ||
| log_level: | ||
| type: string | ||
| description: Logging level (DEBUG, INFO, WARNING, ERROR) | ||
|
Comment on lines
+39
to
+44
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. suggestion: Consider using more specific types/enums for config parameters instead of free-form strings.
This tightens validation and makes valid values clearer to clients. |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, check the full TEST_RESULTS.md file cat -n docker/TEST_RESULTS.mdRepository: CoplayDev/unity-mcp
Length of output: 3241
🏁 Script executed:
# Check the git log to understand the PR context git log --oneline -10Repository: CoplayDev/unity-mcp
Length of output: 142
🏁 Script executed:
# Look for the PR title/message git log -1 --format=fullerRepository: CoplayDev/unity-mcp
Length of output: 679
🏁 Script executed:
Repository: CoplayDev/unity-mcp
Length of output: 50785
🏁 Script executed:
# Check what files are in the docker directory ls -la docker/Repository: CoplayDev/unity-mcp
Length of output: 390
🏁 Script executed:
Repository: CoplayDev/unity-mcp
Length of output: 3562
🏁 Script executed:
Repository: CoplayDev/unity-mcp
Length of output: 692
🏁 Script executed:
# Check if there are any stdio transport examples in the docker/ additions git show 6ddd1f9 -- docker/Repository: CoplayDev/unity-mcp
Length of output: 5189
TEST_RESULTS.md contradicts the PR's objective—document demonstrates HTTP transport while PR makes stdio the default.
This newly-added file shows only HTTP transport tests (curl to
http://localhost:8080, POST to/mcp), but the PR is titled "make stdio transport default for Docker MCP Gateway compatibility" and the commit explicitly states stdio is required for Docker MCP Toolkit integration. Theantigravity-mcp-config.example.jsonin the same directory correctly uses"type": "stdio", making the HTTP-only test results inconsistent with the PR's intent.Either:
🤖 Prompt for AI Agents