zandronum-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZANDRONUM_EXE | No | Path to the Zandronum executable (optional, required for launching the game) | |
| ZANDRONUM_BRIDGE_HOST | No | Host for the bridge server (default 127.0.0.1) | |
| ZANDRONUM_BRIDGE_PORT | No | Port for the bridge server (default 7777) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| run_commandB | Send a raw console command to a running, bridge-patched Zandronum instance and return its captured output. |
| list_actor_classesB | Run |
| summonB | Spawn an actor of the given class at the player's position. |
| giveC | Give an inventory item to the player. |
| takeC | Remove an inventory item from the player. |
| load_mapB | Load a map by its lump name (e.g. MAP01, E1M1). |
| list_running_scriptsB | Run |
| run_scriptC | Run (puke) an ACS script by number or name, with optional integer arguments. |
| screenshotC | Take a screenshot of the game and return it as an image so it can be viewed. |
| menu_keyC | Send a single menu navigation key (GUI key event) to the active menu. |
| menu_navB | Send a sequence of menu keys (e.g. ["down","down","enter"]) with a small delay between each. |
| menu_textB | Type a string into the active menu text-entry field (e.g. the player name box after pressing enter on it), one character at a time. |
| mouse_moveA | Move the pointer to a screen position, in pixels from the top-left of the game window. Drives hover-only UI -- tooltips, hot states -- which nothing else here can reach. |
| mouse_clickA | Press and release the left button at a position. Give toX/toY to DRAG: press at the first point, move through it, release at the second. |
| mouse_wheelA | Wheel notches at the current pointer position. Positive scrolls up, negative down. |
| verify_menuC | Open a menu (via a console command like |
| set_pauseA | Set the engine's master pause flag directly. Use this to resume a backgrounded instance that auto-paused on focus loss, so the simulation keeps advancing while the MCP drives it. |
| stepA | Resume the game, let it run for the given number of tics (35 tics = 1 second), then pause again. Lets you advance the simulation a deterministic-ish amount to observe time-based effects (charging, projectiles, animations) without keeping the window focused. |
| get_acs_varB | Read an ACS world or global variable by index. |
| set_acs_varB | Write an ACS world or global variable by index. |
| list_acs_varsB | Run |
| acs_indexC | Parse a directory of .acs source files and return symbol counts (scripts, functions, numeric defines). Reads files directly; no game needed. |
| find_acs_symbolA | Resolve a script number or a script/function name to its symbol(s) — name, number, file:line. Turns a profiler 'script 1017' into a source location. |
| behavior_namesA | Read function and named-script names from a mod's compiled ACS (BEHAVIOR/library lumps) in a WAD or PK3 — for source-less mods. Numbered scripts have no names in bytecode (use find_acs_symbol with source for those). |
| list_savesA | List .zds savegames in the save directory with metadata (title, map, engine, game wad, creation time) read from each save's PNG text chunks. No running game needed. |
| save_gameA | Run |
| load_gameC | Run |
| play_demoB | Run |
| player_stateC | Run |
| actor_stateB | Run |
| read_hudC | Run |
| actors_nearA | Run |
| inspect_targetC | Run |
| list_scriptsA | Run |
| list_functionsC | Run |
| profile_scriptsB | Run |
| profile_windowA | Clear ACS profiling, wait N seconds, then return what ran during that window — |
| list_modulesB | Run |
| get_map_varC | Read a map-scope ACS variable by name (searched across loaded modules). |
| set_map_varB | Write a map-scope ACS variable by name. |
| get_map_arrayA | Read one element of a map-scope ACS array by name and index. |
| set_map_arrayC | Write one element of a map-scope ACS array by name and index. |
| renderer_infoC | Active backend (software/opengl), GL vendor/shader model, resolution, fullscreen/vsync. |
| viewport_infoC | The 3D view window rect (x/y/width/height) and screenblocks size. |
| hud_infoD | Status bar Y position, status bar / HUD scale, alt HUD, crosshair. |
| map_infoA | Read a map from a WAD and return its format (doom/hexen/udmf) and entity counts. Reads the file directly — the game need not be running. |
| get_sectorB | Return one sector's properties by index (all fields, format-native keys). |
| get_linedefB | Return one linedef by index, with its referenced sidedefs (textures + offsets) resolved. |
| find_sectors_by_tagA | Return all sectors whose tag/id matches (binary |
| launch_instanceB | Spawn a bridge-enabled Zandronum process with the given options and attach to it. Requires ZANDRONUM_EXE to be set. |
| attach_instanceA | Connect to a bridge-patched Zandronum that is ALREADY running — one you launched by hand, or from a terminal — and bind it to an instance number for the other tools. Only needed for engines this session didn't launch: launch_instance binds automatically. Defaults to this instance's conventional port. |
| kill_instanceA | Stop a launched instance and detach from it. Asks the engine to quit itself first (a hard kill mid-render can wedge macOS GPU teardown and leave an unkillable process), then force-kills if it doesn't exit. |
| resetA | Kill every instance this session launched, and reap engines ORPHANED by earlier sessions (whose launcher is gone) that could otherwise squat bridge ports. Engines belonging to another running editor window are left alone. Pass all:true to also kill those — only do that if you know no other session is using this engine build. |
| get_startup_errorsA | Read the engine's captured console log for an instance and surface DECORATE/ACS compile errors and fatal startup errors. Works even when the bridge never came up (e.g. the engine aborted on a bad script) — exactly when the other tools can't connect. |
| get_crashA | Return the signal, faulting address, and symbolized backtrace the bridge's crash handler captured the last time the engine crashed (segfault/abort/bus error/etc.). Use this when an instance dies unexpectedly — e.g. run_command reports the bridge closed. Empty if the instance has not crashed. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rc4l/ZandronumMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server