zandronum-mcp (rc4l/ZandronumMCP) is an MCP server listed on the M8ven Trust Index. It scores 54 out of 100, grade D. It declares 48 tools. No publisher has claimed this listing.

D
Caution
54/100

zandronum-mcp

Enables AI assistants to interact with the Zandronum game engine for development, including running commands, spawning actors, and loading maps.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

rc4l

Source: Glama

Is this your MCP?

Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
🚨
Known vulnerabilities in dependencies: 2 critical, 3 high
Affects packages this MCP installs at runtime. Upgrade or remove the affected dependency.
// tools this server exposes48 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

run_command

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

list_actor_classes

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

summon

Spawn an actor of the given class at the player's position.

give

Give an inventory item to the player.

take

Remove an inventory item from the player.

load_map

Load a map by its lump name (e.g. MAP01, E1M1).

list_running_scripts

Run `scriptstat` and return the currently running ACS scripts and their states.

run_script

Run (puke) an ACS script by number or name, with optional integer arguments.

screenshot

Take a screenshot of the game and return it as an image so it can be viewed.

menu_key

Send a single menu navigation key (GUI key event) to the active menu.

menu_nav

Send a sequence of menu keys (e.g. ["down","down","enter"]) with a small delay between each.

menu_text

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.

verify_menu

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

set_pause

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.

step

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_var

Read an ACS world or global variable by index.

set_acs_var

Write an ACS world or global variable by index.

list_acs_vars

Run `dumpacsvars` and return all non-zero ACS world/global variables, optionally filtered by scope.

acs_index

Parse a directory of .acs source files and return symbol counts (scripts, functions, numeric defines). Reads files directly; no game needed.

find_acs_symbol

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_names

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_saves

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_game

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_game

Run `load` to restore a savegame by name.

play_demo

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

player_state

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

actor_state

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_hud

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_near

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

inspect_target

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

list_scripts

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

list_functions

Run `dumpfunctions` and return named ACS functions across loaded modules.

profile_scripts

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

profile_window

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_modules

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

get_map_var

Read a map-scope ACS variable by name (searched across loaded modules).

set_map_var

Write a map-scope ACS variable by name.

get_map_array

Read one element of a map-scope ACS array by name and index.

set_map_array

Write one element of a map-scope ACS array by name and index.

renderer_info

Active backend (software/opengl), GL vendor/shader model, resolution, fullscreen/vsync.

viewport_info

The 3D view window rect (x/y/width/height) and screenblocks size.

hud_info

Status bar Y position, status bar / HUD scale, alt HUD, crosshair.

map_info

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_sector

Return one sector's properties by index (all fields, format-native keys).

get_linedef

Return one linedef by index, with its referenced sidedefs (textures + offsets) resolved.

find_sectors_by_tag

Return all sectors whose tag/id matches (binary `tag` or UDMF `id`).

launch_instance

Spawn a bridge-enabled Zandronum process with the given options and attach to it. Requires ZANDRONUM_EXE to be set.

kill_instance

Stop a launched instance's process and detach from it.

// known CVEs in dependencies2 critical3 high

Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.

criticalvitest@2.1.0GHSA-5xrq-8626-4rwp

When Vitest UI server is listening, arbitrary file can be read and executed

criticalvitest@2.1.0GHSA-9crc-q9x8-hgqq

Vitest allows Remote Code Execution when accessing a malicious website while Vitest API server is listening

high@modelcontextprotocol/sdk@1.12.0GHSA-345p-7cg4-v4c7

@modelcontextprotocol/sdk has cross-client data leak via shared server/transport instance reuse

high@modelcontextprotocol/sdk@1.12.0GHSA-8r9q-7v3j-jr4g

Anthropic's MCP TypeScript SDK has a ReDoS vulnerability

high@modelcontextprotocol/sdk@1.12.0GHSA-w48q-cv73-mx4w

Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default

Depend on this server? Get alerted when its CVEs change.Watch this server free →
// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configZANDRONUM_ACS_SRC
configZANDRONUM_BRIDGE_HOST
configZANDRONUM_BRIDGE_PORT"": "7777",
configZANDRONUM_EXE"": "C:/path/to/zandronum.exe"
configZANDRONUM_IWAD
configZANDRONUM_SAVE_DIR
configZANDRONUM_SCREENSHOT_DIR
// quality suggestions

Tool annotations

No tools have read-only/destructive annotations

Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.

All four hints declared on every tool

48/48 tools missing one or more hints — run_command (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_actor_classes (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); summon (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +45 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.

For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.

Tool inputs are validated

32/48 tool handlers declare input schemas (67%)

Declare an inputSchema with zod/joi/yup on every tool definition.

Tool handlers catch errors

Only 0/48 tool handlers wrap calls in try/catch (0%)

Wrap each tool handler body in try/catch and return a structured error response.

Tool test coverage

Only 3/48 tools referenced in tests (6%)

Write tests that reference each tool by name so every tool has at least one test.

Shell command execution

3 child_process calls — runs shell commands

Prefer library functions over shell-outs. If you must shell out, ensure all inputs are properly escaped.

Production dependencies are patched

0 critical, 3 high severity in production deps — @modelcontextprotocol/sdk@1.12.0 (high), @modelcontextprotocol/sdk@1.12.0 (high)

Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.

Dev dependencies

2 critical/high in dev-only deps (does not ship to users)

Upgrade dev dependencies when convenient.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 8 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/rc4l/zandronummcp?variant=verified)](https://m8ven.ai/mcp/rc4l/zandronummcp)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 6e7ef47a3f9a5062e4f8ee59596a8f69bc2db8f2
code hash: 3cf40334a7c375b02c55f0c8593ee03eae9633b7038105b9f31334fcdf4a7c31
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client