-
-
Notifications
You must be signed in to change notification settings - Fork 70
Connecting Your AI
Monolith works with any MCP-compatible client.
Claude Code has a known issue where HTTP MCP sessions die permanently when the Unreal Editor restarts. Monolith ships with a stdio-to-HTTP proxy that solves this — it keeps the MCP session alive across editor restarts, no manual reconnection needed.
The proxy is available as a standalone C++ executable (zero dependencies, recommended) or a Python script (fallback).
Option A: Native C++ proxy (recommended — no Python required)
{
"mcpServers": {
"monolith": {
"command": "Plugins/Monolith/Binaries/monolith_proxy.exe",
"args": []
}
}
}Option B: Use the Python launcher
Requires Python 3.8+ (python.org).
{
"mcpServers": {
"monolith": {
"command": "Plugins/Monolith/Scripts/monolith_proxy.bat",
"args": []
}
}
}Option C: Call Python directly (if you need a specific Python)
{
"mcpServers": {
"monolith": {
"command": "python",
"args": ["Plugins/Monolith/Scripts/monolith_proxy.py"]
}
}
}Or copy the template:
cp Plugins/Monolith/Templates/.mcp.json.proxy.example .mcp.jsonHow it works: The proxy handles
initializelocally so Claude Code always sees a live MCP server. It forwards tool calls to Monolith's HTTP endpoint (localhost:9316). A background health poll detects when the editor comes up or goes down and sendsnotifications/tools/list_changed— Claude Code auto-refreshes its tool list. When the editor is down, tool calls return graceful errors instead of killing the session.
Option D: Direct HTTP (no proxy, no auto-reconnect)
If you prefer a simpler setup, you can connect directly. You'll need to restart Claude Code each time the editor restarts.
{
"mcpServers": {
"monolith": {
"type": "http",
"url": "http://localhost:9316/mcp"
}
}
}Add the MCP server in Cursor's settings. The endpoint is http://localhost:9316/mcp.
{
"mcpServers": {
"monolith": {
"type": "streamableHttp",
"url": "http://localhost:9316/mcp"
}
}
}Cursor and Cline handle server restarts natively — the proxy isn't needed.
Any client supporting the Streamable HTTP transport can connect. Point it at:
http://localhost:9316/mcp
Monolith uses a namespace dispatch pattern — each domain exposes a single {namespace}_query(action, params) tool. Call monolith_discover() first to see what's available, or monolith_guide() to have your AI self-onboard. This keeps the tool list small while exposing ~1,400+ actions across 25+ in-tree namespaces (counts are approximate — query monolith_discover() for the live figure).
When an MCP client connects, it fetches the server's tools/list manifest once and keeps it in context for the session. Monolith exposes a small set of namespace-dispatch tools rather than ~1,400+ individual ones, but the manifest still carries each dispatcher's parameter schema, so it has a real (one-time) context cost.
The server now ships a trimmed manifest. Each dispatcher's action enum (the authoritative list of valid actions) is kept, but the full action list is no longer also duplicated as prose in the dispatcher description. That removed roughly 16k tokens (~40%) from the manifest. The action list is still available on demand — call monolith_discover("<namespace>") for any namespace.
You can trim further with client-side configuration:
-
Codex loads the full tool manifest eagerly on every request and has no native deferred-loading yet (codex#14507). Use the
enabled_toolsallowlist (and optionallydisabled_tools/ profiles) under[mcp_servers.monolith]in~/.codex/config.tomlto surface only the namespaces you need. The server-side manifest trim above is the main lever that reduces Codex's per-request load. -
Claude Code defers MCP tools by default through Tool Search (
ENABLE_TOOL_SEARCHunset orauto) — deferred tools are surfaced on demand instead of being loaded eagerly. HTTP-transport deferral has been version-sensitive in the past (claude-code#40314), so verify on your build by running/contextand checking whether themonolithtools are listed as deferred or eagerly loaded. On current Claude Code builds, Monolith's HTTP MCP tools were observed deferred (surfaced via Tool Search, not eagerly loaded).
curl -X POST http://localhost:9316/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'