Skip to main content
Glama
rc4l
by rc4l

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ZANDRONUM_EXENoPath to the Zandronum executable (optional, required for launching the game)
ZANDRONUM_BRIDGE_HOSTNoHost for the bridge server (default 127.0.0.1)
ZANDRONUM_BRIDGE_PORTNoPort for the bridge server (default 7777)

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
run_commandB

Send a raw console command to a running, bridge-patched Zandronum instance and return its captured output.

list_actor_classesB

Run dumpactors and return the registered DECORATE/actor classes as structured data.

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 scriptstat and return the currently running ACS scripts and their states.

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. double sends a double-click.

mouse_wheelA

Wheel notches at the current pointer position. Positive scrolls up, negative down.

verify_menuC

Open a menu (via a console command like menu_options), apply navigation steps, then return a screenshot to verify it.

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 dumpacsvars and return all non-zero ACS world/global variables, optionally filtered by scope.

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 save to write a savegame (single-player / cooperative only). NOTE: saving heavily-scripted mods can crash the engine — All-out-War crashes on save; vanilla and simple maps save fine.

load_gameC

Run load to restore a savegame by name.

play_demoB

Run playdemo to play back a recorded .lmp demo. (Recording is via the -record launch arg, not a console command.)

player_stateC

Run currentpos and return the player's position, angle, floor height, sector, and light level.

actor_stateB

Run dumpactor and return an actor's live state: class, health, position, current DECORATE state (sprite/frame/tics, e.g. TNT1 A 0), inventory, and (for players) ready weapon + morph status. Defaults to the player; pass a TID for any actor.

read_hudC

Run dumphud and return everything the engine painted last frame: HUD text strings (with screen x/y), images (by texture name + position), and active ACS HUD messages (full composed text, layer, position, remaining tics). Captures menus too.

actors_nearA

Run actorsnear and return actors within a radius (map units, default 512) of the player: class, health, position, and current sprite.

inspect_targetC

Run linetarget and return the actor the player is aiming at (class, health, spawn health).

list_scriptsA

Run dumpscripts and return every script across loaded modules (module, number, name, type, arg count).

list_functionsC

Run dumpfunctions and return named ACS functions across loaded modules.

profile_scriptsB

Run acsprofile and return per-script/function execution stats (total instructions, runs, avg/min/max).

profile_windowA

Clear ACS profiling, wait N seconds, then return what ran during that window — what's hot right now rather than cumulative since map start.

list_modulesB

Run dumpmodules and return the loaded ACS modules (id + name). Map vars live only while a map is loaded.

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 tag or UDMF id).

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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