GameDev-MCP-Server

Shared MCP host that relays an AI client to the Unity-MCP, Godot-MCP or Unreal-MCP editor plugin

By Ivan Murzak (individual) C# Local · stdio Developer tools

32 popularity score ★ 18 ⇣ 13k pulls

Connect your client

Local (Docker)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add gamedev -- docker run -i --rm -p 8080:8080 -e MCP_BIND=any aigamedeveloper/mcp-server
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "gamedev": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-p",
        "8080:8080",
        "-e",
        "MCP_BIND=any",
        "aigamedeveloper/mcp-server"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "gamedev": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-p",
        "8080:8080",
        "-e",
        "MCP_BIND=any",
        "aigamedeveloper/mcp-server"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "gamedev": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-p",
        "8080:8080",
        "-e",
        "MCP_BIND=any",
        "aigamedeveloper/mcp-server"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.gamedev]
command = "docker"
args = ["run", "-i", "--rm", "-p", "8080:8080", "-e", "MCP_BIND=any", "aigamedeveloper/mcp-server"]
Gemini CLITerminal
gemini mcp add --scope user gamedev docker -- run -i --rm -p 8080:8080 -e MCP_BIND=any aigamedeveloper/mcp-server
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
git clone https://github.com/IvanMurzak/GameDev-MCP-Server.git
cd GameDev-MCP-Server
dotnet publish com.IvanMurzak.GameDev.MCP.Server.csproj -c Release -o publish
Claude CodeTerminal
claude mcp add gamedev -- dotnet '<ABSOLUTE_PATH_TO_CLONE>/publish/gamedev-mcp-server.dll' --client-transport stdio --port 8080
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "gamedev": {
      "command": "dotnet",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/publish/gamedev-mcp-server.dll",
        "--client-transport",
        "stdio",
        "--port",
        "8080"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "gamedev": {
      "command": "dotnet",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/publish/gamedev-mcp-server.dll",
        "--client-transport",
        "stdio",
        "--port",
        "8080"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "gamedev": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/publish/gamedev-mcp-server.dll",
        "--client-transport",
        "stdio",
        "--port",
        "8080"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.gamedev]
command = "dotnet"
args = ["<ABSOLUTE_PATH_TO_CLONE>/publish/gamedev-mcp-server.dll", "--client-transport", "stdio", "--port", "8080"]
Gemini CLITerminal
gemini mcp add --scope user gamedev dotnet -- '<ABSOLUTE_PATH_TO_CLONE>/publish/gamedev-mcp-server.dll' --client-transport stdio --port 8080

Settings 12

MCP_PLUGIN_PORT Optional: Port the engine plugin connects to, and the HTTP port in streamableHttp mode (--port). Default 8080.
MCP_PLUGIN_CLIENT_TRANSPORT Optional: Client transport: stdio or streamableHttp (--client-transport). Default stdio.
MCP_BIND Optional: Bind address: loopback, any (0.0.0.0) or a specific IP (--bind). Default loopback.
MCP_PLUGIN_TOOL_TIMEOUT Optional: How long one tool call may run in the plugin, in ms (--tool-timeout). MCP_PLUGIN_CLIENT_TIMEOUT (10000) is used instead when larger. Raise it for builds or imports. Default 300000.
MCP_ALLOWED_ORIGINS Optional: Extra browser origins to allow on top of loopback and the public URL.
Set together: streamablehttp
MCP_PLUGIN_IDLE_TIMEOUT_SECONDS Optional: How long an idle streamableHttp session is kept before eviction, in seconds (8 hours). Default 28800.
REDIS_URL Optional: Redis address that keeps streamableHttp sessions across restarts. Ignored in stdio mode.
Set together: oauth
MCP_AUTH Optional: none or oauth. stdio defaults to none, streamableHttp to oauth once issuer and public URL are both set.
MCP_AUTH_ISSUER Optional: OAuth authorization server URL, needed for oauth mode.
MCP_PUBLIC_URL Optional: The server's public URL and token audience, needed for oauth mode.
Set together: crash-reports
MCP_SENTRY_DSN secret Optional: Sentry-compatible endpoint for crash reports. Unset means no reports are sent.
MCP_SENTRY_ENVIRONMENT Optional: Environment name attached to crash reports. Only used with MCP_SENTRY_DSN.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

GameDev-MCP-Server sits between an MCP client and a game engine editor. The client talks to it over stdio or streamable HTTP. On the other side it opens a port (8080 by default) that an editor plugin from the same author, Unity-MCP, Godot-MCP or Unreal-MCP, joins over SignalR. There is no engine code here. One binary serves all three engines, and everything a client sees comes from the connected plugin, so with no plugin attached there is nothing to call.

The protocol logic lives in the author's NuGet packages McpPlugin.Server and ReflectorNet. You can get it as self-contained executables for each desktop OS, a Docker image, a .NET global tool or source. A `configure` subcommand writes a project-scoped client config for agents like claude-code, codex, cursor and vscode-copilot.

Locally, stdio mode needs no sign-in. In streamableHttp mode it can check OAuth 2.1 tokens from an issuer you name, which is how the hosted service at ai-game.dev runs it.

Each tool call gets one try. If it runs past MCP_PLUGIN_TOOL_TIMEOUT (five minutes by default) the client sees an error, though the editor may still be busy with it. Newer releases add opt-in crash reporting: set MCP_SENTRY_DSN and unhandled exceptions go to that Sentry-compatible endpoint. The code in src/Startup/ErrorReporting.cs deliberately ignores the usual SENTRY_DSN and strips headers, cookies, query strings and request bodies before sending. Program.cs also reads REDIS_URL, missing from the README's table, to keep streamableHttp sessions across restarts. The csproj pins McpPlugin.Server 8.19.0, newer than the README's compatibility table lists.

What it needs

Runtime.NET 9+
Runs onmacOS, Windows, Linux
Also
  • Unity, Godot or Unreal editor open with the matching Unity-MCP, Godot-MCP or Unreal-MCP plugin

The plugin version must match the server: 9.2.5 and later pair with plugins on McpPlugin 8.x, older plugins need 9.2.4 or 8.0.3. The release zips are self-contained and need no .NET runtime. Docker works too. The .NET 9 SDK is needed for the dotnet tool or a source build. The plugin must reach the server's port (8080 by default).

Limits

  • Not covered Has no tools of its own. What a client can do depends on the engine plugin connected to it
  • Limit Server and plugin must share the McpPlugin major version (9.2.5+ for 8.x plugins, 9.2.4 for 7.x, 8.0.3 for 6.x)
  • Limit A tool call that times out or loses its connection fails and is not re-sent, though the editor may still be running it
  • Limit The README's docker run command sets no bind address, so the server stays on loopback inside the container. The snippet here adds MCP_BIND=any
  • Limit Logs go to logs/server-log.txt beside the binary. Trace level records every MCP message

Exposes no tools of its own; what a client can do depends entirely on the engine plugin connected. Server and plugin versions must match on the McpPlugin major version. The README's Docker command (`docker run -i --rm -p 8080:8080 aigamedeveloper/mcp-server`) sets no bind address, and the server binds to loopback unless MCP_BIND or --bind is given (src/Program.cs), so inside a container the plugin on the host may not reach the mapped port; the snippet here adds MCP_BIND=any. Writes logs to logs/server-log.txt beside the binary; Trace level logs every MCP message and is very verbose.

Who it suits

Suits Unity, Godot or Unreal developers who already use, or plan to use, one of Ivan Murzak's engine plugins and want a single standalone server process for them, run locally from a binary, Docker or dotnet. It is of no use on its own or with other engine plugins. Unity users can also look at Unity-MCP's own page (unity-mcp-2), which covers the Unity plugin and its tools; this page covers only the shared host process. Anyone wanting the author's cloud service should note that ai-game.dev is a separate hosted product.

Similar servers