trenchbroom-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@trenchbroom-mcpAdd a player start entity near the center of the current map"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
trenchbroom-mcp
MCP server for editing Quake-format .map files, the format TrenchBroom
reads and writes. TrenchBroom has no scripting API, so this server treats the
map file itself as the API: an AI client edits the file, and TrenchBroom picks
the change up.
With the patched TrenchBroom the change appears in the editor as it happens, keeping your camera, selection and undo history, and it can be undone like any other edit. Without it, everything still works; you press reload.
What it can do
Read:
map_overview,list_entities,get_entity: counts, bounds, TrenchBroom layers/groups (_tb_*metadata), textures, per-entity detail.Edit:
add_entity,set_entity_properties,delete_entity,add_brush_box,delete_brush,translate_entity. Every edit snapshots the file first;undo_last_edit/list_backupsroll back.See:
render_previewdraws top/front/side orthographic SVG views; brush footprints are computed by real half-space intersection, so the model can reason about layout instead of editing blind.Know the game:
fgd_classes/fgd_classparse an FGD entity definition file, with base-class inheritance resolved.Compile:
compile_mapruns ericw-tools and reports what the compiler said: errors, grouped warnings, and leaks, with the coordinate the leak escaped from.Play:
launch_mapinstalls the compiled.bspinto the game's maps directory and starts an engine on it, reporting what the engine said if it refused.
Supports Valve 220 and standard (idTech) face formats, plus Quake 2 surface flags. Unmodified lines are written back byte-for-byte, so diffs only touch what actually changed.
Related MCP server: Roblox AI Agents
Setup
Build
You need Node.js 20 or newer (node --version to
check). The build step is not optional: the server runs from dist/, which is
not checked in, so a fresh clone that skips it registers a server that cannot
start.
git clone <repo-url> trenchbroom-mcp
cd trenchbroom-mcp
npm install
npm run buildNote the absolute path to dist/index.js; every client below needs it. On
Windows it looks like C:\Users\you\src\trenchbroom-mcp\dist\index.js.
Or: a single file, no clone, no build
npm run bundle produces dist/trenchbroom-mcp.mjs: the whole server and its
dependencies in one ~760 kb file that runs anywhere Node 20+ is installed, with
no node_modules beside it:
node /path/to/trenchbroom-mcp.mjsThis is the easiest way to move the server to another machine or hand it to
someone else: copy one file and point the client at it. Everywhere below that
says dist/index.js, you can say trenchbroom-mcp.mjs instead.
This is a plain MCP server speaking JSON-RPC over stdio, with nothing vendor-specific in it, so any MCP client can drive it, including local models. Three setups follow; they all say the same thing in different files.
Whatever the client, restart it after
npm run build. MCP servers are started when the client starts, so until you do you are running the old code. This is the single most common thing to trip over.
Claude Code
claude mcp add --scope user trenchbroom -- node /absolute/path/to/trenchbroom-mcp/dist/index.js--scope user makes it available in every project rather than only the one you
are in. Relative paths are stored verbatim and break as soon as you work
elsewhere, so use an absolute one. Check it with claude mcp list; you want
trenchbroom: ... - ✔ Connected.
Claude Desktop
Edit claude_desktop_config.json (on Windows
%APPDATA%\Claude\, on macOS ~/Library/Application Support/Claude/) and add
an entry under mcpServers:
{
"mcpServers": {
"trenchbroom": {
"command": "node",
"args": ["C:/Users/you/src/trenchbroom-mcp/dist/index.js"]
}
}
}Forward slashes work on Windows and avoid escaping every backslash. If the file already has other servers, add this alongside them rather than replacing them.
A local model
Any client that supports MCP and lets you point at a local backend works:
LM Studio, Goose,
Cline or Continue in VS Code, or
LibreChat, among others. They differ in where the
config file lives, but the entry is the same command plus args shape as
above, because that is the MCP standard rather than anything Claude-specific.
The plumbing is the easy part; the model is not. These tools need real multi-step tool use: read the map, reason about coordinates in 3D, emit exact numeric arguments, then check the result. A model that is weak at tool calling will pick the right tool with wrong numbers, which is worse than failing, because the map still changes. In practice a 30B-class coding model is about the floor.
Start a new model on the read-only tools (map_overview, list_entities,
get_entity, fgd_class, render_preview) and see how it does before letting
it write. The snapshots and undo_last_edit are there either way.
Using it
Point the client at a map by absolute path: "give me an overview of C:\quake\mymod\maps\e1m1.map". From there, things like "dim every light by 30%", "list any entity nothing targets", or "add a 512 unit room at the origin with 16 unit walls".
Live editing
By default you reload the map in TrenchBroom yourself after the server edits it; TrenchBroom does not watch the file.
There is a patched build that does. It notices when another program changes the open map and applies the change in place, keeping your camera, selection, hidden and locked objects, and undo history. The change itself becomes undoable, so Ctrl+Z undoes an edit made by the AI. With it, edits simply appear in the editor as they happen. A version of this is proposed upstream in TrenchBroom#5453.
Without the patch everything still works; you just press reload.
Compiling
compile_map runs ericw-tools and
returns what the compiler said, rather than a wall of text. Point it at the
tools with tools_dir, or set ERICW_TOOLS_DIR, or put them on PATH.
It runs qbsp by default, which is the fast structural check; pass
stages: ["qbsp", "vis", "light"] for a full build.
Two things it takes care of, both of which otherwise make the output useless to a model:
The tools print hundreds of percent counters, often several to a line with real output stuck on the end. Those are stripped, and repeated warnings are grouped with a count instead of listed one by one.
A leak is reported as a warning and the compiler still exits 0. So exit status is not a useful signal, and
compile_mapreportssuccess: falsefor a leak, along with the coordinate the compiler escaped from and the pointfile. That coordinate names an entity inside your level that can see the void, which is the thing you actually need to know.
"compile the map and tell me if it leaks"
-> qbsp ok, 6 warning(s), 0.01s | LEAK at 0 0 64Playing
launch_map copies the compiled .bsp (and its .lit, if there is one)
into <game_dir>/<mod>/maps/, then starts the engine on that map with
-basedir, -game and +map, which QuakeSpasm, vkQuake and ironwail all
understand. Anything engine-specific goes in extra_args.
The engine is started detached, so it outlives the request and you can go and
play. Its output is written to a file rather than a pipe, because a pipe dies
with the server and takes the engine with it. If the engine gives up during
the first few seconds (a missing pak0.pak, a map it cannot find), that is
reported back with whatever it said, taken from its output and from
qconsole.log, which -condebug asks it to write.
"compile it and run it"
-> qbsp ok, vis ok, light ok | launched e1m1 (pid 15588)The tools drop a .log beside the map: qbsp names it after the map, vis and
light write a fixed vis.log and light.log. Everything in them has already
been parsed out of the output, so they are removed afterwards; pass
keep_logs to leave them. A log that was already there before the compile ran
is left alone.
Workflow notes
Save in TrenchBroom before asking for edits; the server reads whatever is on disk, not what is in the editor.
Do not make changes in TrenchBroom and via the server at the same time. With the patched build the editor asks before discarding unsaved work; without it, last save wins.
Writes are atomic (temp file + rename, retried briefly if the OS has the file locked). Snapshots live in
<mapdir>/.tb-mcp/backups/, capped at 20, and that directory ignores itself in git.The comments at the top of a map file (
// Game: Quake) are preserved; TrenchBroom picks the game and format from them.
What this is actually for
Separately, each half is modest. This server is a .map file editor; the
patch is a file watcher. Together they remove the thing that made AI level
editing useless: the round trip. You don't export, or reload, or context
switch. You say something, and the map changes in front of you, in the editor
you were already using, with your camera where you left it and your selection
intact. And because the change arrives as an ordinary undoable edit,
Ctrl+Z is the escape hatch. That is what makes it safe
to try things instead of carefully vetting each one.
The subtler shift: the model can see the map. Between map_overview,
list_entities and the SVG previews, it reasons about your actual level (its
bounds, its entity graph, its layout) instead of generating plausible-looking
map text blind.
Typical use
The bread and butter is tedium at scale. Dim every light by 30%.
Retarget door1 to bridge_door everywhere. Delete every monster for a
no-combat build. Bump all health pickups up 8 units because they're clipping
the floor. These are minutes of clicking, or a script you'd have to write, and
now they're a sentence.
Second is interrogation. "Which entities does nothing target?" "What textures does this actually use?" (trim the WAD) "Is anything outside the world bounds?" TrenchBroom has an Issues panel, but it can't answer arbitrary questions about your map's logic.
Third is blockout. Rooms, corridors, stairs, pillar rows, lights at intervals. Axis-aligned boxes are exactly what greyboxing is, so the current limitation bites much less here than it would for detail work.
Fourth, and underrated: learning a game's entity vocabulary. The FGD tools
mean the model can tell you what func_door actually supports in your game
(including a custom FGD for a mod) instead of half-remembering Quake trivia.
Where it gets genuinely interesting
Parametric level design. "Make the courtyard 25% bigger and move everything that was against the north wall." Iterating on layout at the speed of conversation, with the editor as live preview. The map stops being a static artifact and becomes something you can nudge.
Closing the compile loop. compile_map and launch_map make the compiler
part of the
conversation rather than a separate ritual. Leaks are the case that matters:
the compiler reports one as a warning, exits successfully, and quietly
produces a broken build, so the tool treats a leak as failure and hands back
the coordinate it escaped from. "You leaked at 0 0 64" is a fixable sentence,
and fix, recompile, verify is a loop a machine is good at running. Quake
mapping's most painful chore becomes a dialogue, and "compile it and run it"
ends with the map open in front of you.
Whole-map refactors that nobody attempts by hand. Convert every func_wall
to func_detail. Renumber a broken trigger chain. Port entity names from Quake
to a mod's conventions. These are "I'd rather rebuild the level" jobs today.
Your own games. TrenchBroom's generic game config plus custom FGDs means this stack points at any brush-based game, not Quake alone.
Two people, one map. Nothing about the design assumes the other editor is an AI. It's "another program changed the file." Two mappers with a shared file, or a generator running continuously while you hand-detail, both work.
The honest ceiling
It can't do rotated or non-box geometry, so it greyboxes rather than finishes. It has no aesthetic judgement: it'll place lights at perfect intervals, which is exactly what a good mapper wouldn't do. And it can't play the level, so nothing it makes has been evaluated for whether it's fun.
The right mental model is a fast, tireless assistant who knows the file format cold and has no taste. You bring the taste.
Testing
npm testLimitations
Brushes can only be created as axis-aligned boxes. No wedges, cylinders, or rotation, so this builds blockouts rather than finished geometry.
No texture alignment control beyond what is preserved on untouched faces.
Editing a map by hand while the server is also editing it is not supported.
Compiling needs ericw-tools installed separately; it is not bundled, and launching needs an engine and the game data it expects.
Launching has only been proven against a stand-in engine, not a real Quake engine on a real install.
Roadmap
More brush primitives (wedge, cylinder), rotation, texture retargeting.
Upstreaming the editor patch: proposed in TrenchBroom#5453, starting with a simplified reload dialog per maintainer feedback. (#3505 asked for external reload back in 2020.)
Available Tools
17 toolsadd_brush_boxA
Add an axis-aligned box brush. Defaults to worldspawn (entity 0); pass entity_index to add to a brush entity like func_door. Matches the map's existing texture format; on an empty map inside a Shogo workspace it writes Standard, which is the only format that game's converter reads. Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| max | Yes | Maximum corner [x y z] | |
| min | Yes | Minimum corner [x y z] | |
| texture | Yes | Texture name, e.g. "__TB_empty" or a texture from map_overview | |
| map_path | Yes | Absolute path to the .map file | |
| entity_index | No | Owning entity index; default 0 (worldspawn) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility, and it delivers: it discloses that the tool writes the file, mentions texture format behavior in empty Shogo maps, and explains the editor reload policy when there are unsaved edits, including the default to keep the editor version. This is rich behavioral context well beyond a simple 'add brush'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then branches into target selection and technical behavior. The third sentence is slightly dense but each clause adds necessary behavioral information, so nothing feels wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no output schema and no annotations, the description covers the essential invocation requirements: file path, corners, texture, entity target, and side effects on the editor. It lacks explicit error-handling or return-value information, but it gives enough for an agent to call it correctly in the Shogo/TrenchBroom context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving each parameter a basic description, so the baseline is 3. The description adds meaning for entity_index (default worldspawn, can target func_door-like entities) and texture (auto-selects 'Standard' in empty Shogo workspaces), which goes beyond the schema. It does not add detail for min/max or map_path, but those are already clear from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb and resource: 'Add an axis-aligned box brush.' It differentiates itself from sibling tools by specifying it creates box brushes (as opposed to entities, deletion, or transformation) and clarifies the common target worldspawn vs. an explicit brush entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives solid within-tool guidance on the entity_index parameter, but it does not explicitly say when to choose this tool over alternatives like add_entity, delete_brush, or translate_entity. Usage context is implied rather than directly compared with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_entityA
Add a point entity (e.g. a light, monster, item). Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | No | Position [x y z]; omitted for non-positional entities | |
| map_path | Yes | Absolute path to the .map file | |
| classname | Yes | Entity class, e.g. "light" or "info_player_start" | |
| properties | No | Additional key/value properties |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It openly states that the tool writes the file and explains the reload behavior when TrenchBroom-HL has unsaved edits, including the default of keeping the editor version. This is valuable, though the phrasing leaves some ambiguity about the exact consequence of that default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, followed by the most important side-effect. It uses one somewhat run-on sentence with semicolons and dashes, but every clause earns its place and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity—writing a file, interacting with an editor, and optional parameters—the description covers the key behavioral caveat and the schema covers all parameters. It does not discuss return values or what happens if the editor is not running, but those are not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description adds examples for classname and clarifies the 'point entity' concept, but it does not add substantive parameter semantics beyond what the schema already documents for origin, properties, map_path, and classname.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Add') and resource ('point entity') with concrete examples, and the 'point entity' qualifier distinguishes it from sibling tools like add_brush_box. It clearly states the side effect of writing the file, leaving no doubt about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the tool for adding point entities rather than brushes or property updates, but it does not explicitly state when to prefer it over alternatives such as add_brush_box or set_entity_properties. Usage context is present but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_mapA
Compile a .map with ericw-tools and report what the compiler said. Runs qbsp by default; pass stages for a full build. Detects leaks, which the compiler reports as a warning and still exits successfully, and returns the coordinate the leak escaped from.
| Name | Required | Description | Default |
|---|---|---|---|
| stages | No | Which tools to run, in order. Default ["qbsp"]. vis is slow. | |
| map_path | Yes | Absolute path to the .map file | |
| vis_args | No | Extra vis arguments | |
| keep_logs | No | Leave the .log files the tools write beside the map. Off by default. | |
| qbsp_args | No | Extra qbsp arguments, e.g. ["-nopercent"] | |
| tools_dir | No | Directory holding qbsp/vis/light. Defaults to $ERICW_TOOLS_DIR, then PATH. | |
| light_args | No | Extra light arguments, e.g. ["-extra4"] | |
| timeout_seconds | No | Per-tool timeout. Default 600. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does more than state the operation: it reveals that leaks surface as a warning with a successful exit code and that the tool returns the escape coordinate. It does not explicitly mention filesystem side effects like generated .bsp or log cleanup, but the schema's keep_logs parameter partially covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The core purpose is front-loaded, followed by the default behavior and the most important edge case (leaks).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter build tool with no output schema, the description gives useful defaults and the leak caveat, but leaves the return shape vague ('report what the compiler said') and does not state prerequisites or side effects such as writing compiled artifacts. This is adequate with notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the stages default and the notion of a full build, but it does not add meaning for map_path, *_args, tools_dir, or timeout_seconds beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Compile a .map with ericw-tools and report what the compiler said.' This identifies the tool's job precisely and, by naming ericw-tools, sets it apart from sibling compile_shogo_map. The leak-detection sentence further clarifies the tool's special return value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for normal use ('Runs qbsp by default; pass stages for a full build') and makes it clear that stages control which tools run. It does not explicitly name alternatives such as render_preview or compile_shogo_map, so it stops short of a full when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compile_shogo_mapA
Compile a .map for Shogo: Mobile Armor Division and report what the compiler produced. This is a DIFFERENT toolchain from compile_map - Shogo uses the SDK's Processor.exe (.map -> .ed -> .dat), not ericw-tools, and the two are not interchangeable. Drives the Shogo mapping kit, so it inherits the compiler's documented traps rather than repeating them. Reports light map nodes, which is the number that says whether the world is lit or will render black.
| Name | Required | Description | Default |
|---|---|---|---|
| install | No | Copy the compiled .dat into the game's Custom folder. On by default. | |
| kit_dir | No | The ShogoMapping folder (holds tools/). Defaults to $SHOGO_KIT_DIR. | |
| lighting | No | Run the lighting stage. On by default; off is faster while blocking out. | |
| map_path | Yes | Absolute path to the .map file | |
| workspace | No | Folder holding shogo-mapping.json, written by the kit's setup.ps1. Defaults to $SHOGO_WORKSPACE. | |
| install_target | No | Where under Custom to install. "mp" is Custom\maps\mp, which the multiplayer host and rotation lists scan; "sp" is Custom itself, which the single-player custom menu scans. Left out, it follows the map's own GameStartPoint GameType, so a deathmatch map lands where the host list will find it. | |
| timeout_seconds | No | Per-step timeout. Default 600. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the .map -> .ed -> .dat pipeline and warns that reported light map nodes determine whether the world renders black, which is valuable behavior beyond a generic 'compile' statement. It does defer to 'documented traps' rather than spelling them out, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, with the core purpose and differentiating toolchain named up front. Every sentence carries information, though the vague 'documented traps' phrase is slightly less crisp than the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter compiler with no output schema and no annotations, it gives the pipeline and one critical output interpretation, but it omits failure modes, exact report contents, and operational prerequisites. The schema covers parameter semantics well, but broader context is only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all seven parameters. The description adds no parameter-level meaning beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Compile') and resource ('.map for Shogo: Mobile Armor Division'), and explicitly names what it produces. It also distinguishes itself from compile_map by naming the different toolchain and pipeline, so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names compile_map as the alternative and says the two are not interchangeable, giving a clear condition for choosing this tool. The Shogo-specific pipeline and mapping kit reference further frame when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brushA
Delete one brush from an entity. Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| map_path | Yes | Absolute path to the .map file | |
| brush_index | Yes | Brush index within the entity, from get_entity | |
| entity_index | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it discloses persistence (writes the file), editor integration (auto-reload), and the important conflict behavior (asks first, defaults to keeping the editor version on unsaved edits). This is exactly the side-effect information an agent needs for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the action is front-loaded and the behavioral caveat is stated in a compact second sentence. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter deletion tool with no output schema, the description provides the core action, the file-write side effect, and the editor reload/conflict behavior. It does not mention error conditions or index-shift consequences, but those are not critical for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description itself adds no parameter-level detail, but the schema already documents map_path and brush_index (including that brush_index comes from get_entity). entity_index is left undocumented, and the description only weakly infers it from 'an entity', so this is adequate but not exemplary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific action and resource ('Delete one brush from an entity'), which clearly distinguishes this from sibling delete_entity (whole entity vs. one brush). No ambiguity about what operation is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when deleting a single brush from an entity, and the sibling list makes it easy to contrast with whole-entity deletion. It does not explicitly name alternatives or exclusion criteria, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entityA
Delete an entity (and all its brushes). Refuses to delete worldspawn. Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description alone must disclose side effects. It does far more than say 'delete': it states that the tool removes all brushes, refuses worldspawn, writes the file, triggers an automatic editor reload, and asks before overwriting unsaved edits, defaulting to keeping the editor version.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the action and scope, then stacks only high-value behavioral caveats. There is no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive file-writing operation with no annotations, the description covers the outcome, the guard, the persistence behavior, and the unsaved-edits conflict policy. The main missing piece is operational detail about index; everything else an agent needs to anticipate side effects is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
map_path is already explained in the schema, but the required index parameter has no schema description and the tool description never explains what index identifies, how it is obtained, or whether it is zero-based. With schema description coverage at 50%, this is a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Delete an entity') and adds scope ('and all its brushes'), which clearly separates it from sibling delete_brush. It also notes the worldspawn exclusion, giving the agent a precise behavioral boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation is described clearly enough that the agent can infer when to call it, and the worldspawn refusal is a useful when-not condition. However, it never names alternatives such as delete_brush or undo_last_edit, nor does it state when those should be preferred, so routing between siblings is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fgd_classA
Full definition of one FGD entity class with inherited properties and spawnflags resolved from its base classes.
| Name | Required | Description | Default |
|---|---|---|---|
| fgd_path | Yes | Absolute path to the .fgd file | |
| classname | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds meaningful context about inheritance resolution and spawnflag processing, which is beyond a basic lookup. It does not mention output format, errors, or side effects, but the read-only intent is reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the core purpose and adds the inheritance-resolution detail economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter retrieval tool, the description is mostly adequate but leaves the return value phrased only as 'full definition,' which is vague without an output schema. Some guidance on what the agent should expect in the result would strengthen completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents fgd_path, and classname is left undocumented. The description references the class concept but does not specifically explain the classname parameter or how it relates to the returned definition. The parameter name is self-explanatory enough to be minimally adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'one FGD entity class' and distinguishes it from the plural fgd_classes sibling by emphasizing a single class. It communicates the output is a full definition, though it lacks an explicit verb like 'retrieves' or 'returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with inherited properties and spawnflags resolved from its base classes' implies this tool is needed when a fully resolved class definition is required, as opposed to a simple listing. However, it does not explicitly name alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fgd_classesA
List entity classes defined in an FGD file (name, type, description). Use this to learn what entities a game supports.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring filter on class name | |
| fgd_path | Yes | Absolute path to the .fgd file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure. It accurately conveys that this is a read-only listing operation and even describes the output contents. There are no hidden mutation or side effects disclosed or implied, so the behavior is transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the core operation and follows with a practical use case. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity listing tool with two well-documented parameters and no output schema, the description is complete. It tells the agent what the tool returns, what file to point it at, and when to use it. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both fgd_path and filter. The description adds no extra parameter-level meaning beyond what the schema provides, but it does not need to; the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('entity classes defined in an FGD file'), and the returned fields ('name, type, description'). This clearly distinguishes it from siblings like list_entities or fgd_class, which deal with map entities or a single class.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit use case: 'Use this to learn what entities a game supports.' This provides clear context for when the tool is appropriate. It does not name alternative tools or exclusion conditions, but for a simple listing tool this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entityA
Full detail for one entity: all properties, brush list with per-brush bounds and face count.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Entity index from list_entities | |
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does describe the return payload well (properties, brush list with bounds and face count), but it doesn't explicitly state that this is a read-only operation or describe error behavior for invalid indexes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence with no filler. The subject and scope are front-loaded, and every phrase adds relevant information about what the tool returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter get tool with no output schema, the description provides the essential return content. It could explicitly mention read-only behavior or invalid-index handling, but these are minor gaps given the straightforward nature of the operation and the schema's clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description adds no further parameter-level detail, matching the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full detail for a single entity, including all properties and brush data. This distinguishes it from list_entities and other entity-related siblings by emphasizing depth and per-entity scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context: use this when you need comprehensive detail for one entity rather than a list. It doesn't explicitly name alternatives or exclusions, but the 'one entity' scope and schema reference to list_entities imply the correct usage pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_mapA
Launch a compiled map in a Quake engine. Copies the .bsp into the game's maps directory, starts the engine on that map, and reports anything the engine said if it refused to start. Compile the map first: the engine loads the .bsp, not the .map.
| Name | Required | Description | Default |
|---|---|---|---|
| mod | No | Mod directory, e.g. "ad" or "copper". Defaults to id1. | |
| bsp_path | Yes | Absolute path to the compiled .bsp (a .map path is accepted and swapped) | |
| condebug | No | Ask the engine to write qconsole.log so failures are visible. On by default; writes that file into the game directory. | |
| game_dir | No | Directory containing id1. Defaults to the engine's own directory. | |
| extra_args | No | Extra engine arguments, e.g. ["-fitz"] | |
| engine_path | Yes | Absolute path to the engine, e.g. quakespasm.exe | |
| install_bsp | No | Copy the .bsp into the maps directory first. On by default. | |
| grace_seconds | No | How long to watch for the engine dying before calling it launched. Default 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and discloses key side effects: it copies the .bsp into the map directory, starts the engine, and reports engine output if startup fails. This is substantial transparency for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, all of which earn their place: the core action, the side-effect behavior, and the essential prerequisite. It is front-loaded with the main verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description adequately explains the workflow, prerequisite, and failure-reporting behavior. It does not describe the exact success return value, but the schema covers parameters and the description covers the main runtime flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema. The description adds context about the .bsp vs .map distinction but does not need to repeat parameter details; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Launch a compiled map in a Quake engine', and clarifies the tool's role versus compilation with 'Compile the map first: the engine loads the .bsp, not the .map.' This makes the tool's purpose distinct from siblings like compile_map or render_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: after compilation, because the engine loads the .bsp rather than the .map. It does not explicitly name alternative tools or state when not to use it, but the prerequisite context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backupsA
List snapshot backups (made automatically before every edit) for a map.
| Name | Required | Description | Default |
|---|---|---|---|
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It discloses that backups are generated automatically before each edit, and the verb 'List' signals a read-only operation. It does not cover ordering, retention, or return format, but the essential behavioral context is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with no filler. The key scoping fact about automatic pre-edit backups is front-loaded, and every clause contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter listing tool with no output schema, the description covers the resource, scope, and creation semantics well enough to invoke safely. It could explicitly link these backups to undo_last_edit or describe the returned entries, but the description plus schema is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, map_path, already has a complete schema description ('Absolute path to the .map file'), and the tool description's 'for a map' merely reinforces it. With 100% schema description coverage, no additional parameter meaning is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('List') and a specific resource ('snapshot backups') scoped to a map, and the parenthetical clarifies they are automatic pre-edit snapshots. This clearly distinguishes it from sibling tools like list_entities and undo_last_edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context by noting backups are made automatically before every edit, which implies the tool is relevant for inspecting restore points. However, it does not explicitly state when to use this tool versus undo_last_edit or other map tools, so usage routing is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entitiesA
List entities with index, classname, targetname, origin, brush count, and bounds. Optionally filter by classname substring or a property key/value.
| Name | Required | Description | Default |
|---|---|---|---|
| map_path | Yes | Absolute path to the .map file | |
| property_key | No | Only entities that have this property | |
| property_value | No | With property_key: require this exact value | |
| classname_filter | No | Case-insensitive substring match on classname |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It clearly states the output fields and optional filtering, and 'list' implies a read-only operation. However, it does not explicitly disclose absence of side effects, ordering, error behavior, or behavior when filters match nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly constructed sentence that front-loads the output scope and then adds filter options. Every word earns its place; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with four well-documented parameters and no output schema, the description adequately covers return fields and filter semantics. It could more explicitly state the output shape (e.g., array of entity objects) and error conditions, but these are largely inferable from the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mentions classname substring and property key/value filtering, but these simply restate the schema's parameter descriptions without adding new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with a clear resource ('entities') and enumerates the returned fields. This distinguishes it from sibling get_entity, which fetches a single entity, and from map_overview, which summarizes the map.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The optional filters (classname substring, property key/value) imply when this tool is useful, but there is no explicit guidance about when to prefer sibling tools like get_entity or when not to use this tool. The intended context is clear but exclusions and alternatives are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_overviewA
Summarize a .map file: entity/brush counts, bounds, format, TrenchBroom layers/groups, textures in use, and entity class histogram.
| Name | Required | Description | Default |
|---|---|---|---|
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavior. 'Summarize' implicitly signals a read-only operation, and the listed output categories give a concrete sense of what the tool exposes. It does not state side effects or failure modes, but for a non-mutating overview tool this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single crisp sentence front-loads the verb and resource, then uses a colon to list specific output dimensions. There is no filler, redundant wording, or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description is complete. It covers what the tool does and what the returned summary contains, despite the absence of an output schema. No critical information appears to be missing for selecting or invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter, map_path, is already well described as 'Absolute path to the .map file'. The description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Summarize') and a clearly identified resource ('.map file'), then enumerates the exact set of information it returns: entity/brush counts, bounds, format, layers/groups, textures, and entity class histogram. This makes it instantly distinguishable from siblings like get_entity, compile_map, and render_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: it is the go-to tool when an overview of a .map file is needed rather than a specific entity or operation. However, it does not explicitly state when to prefer this over siblings or provide exclusion criteria, leaving some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_previewA
Render a 2D orthographic preview of the map as an SVG file: brush footprints (worldspawn gray, brush entities orange) and point entities (blue dots with labels). Views: top (X/Y), front (X/Z), side (Y/Z).
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Default: top | |
| map_path | Yes | Absolute path to the .map file | |
| out_path | No | Where to write the SVG; default <mapdir>/.tb-mcp/preview-<view>.svg |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden, and it delivers: it discloses the output artifact (SVG file), the visual styling rules (gray worldspawn, orange brush entities, blue labeled dots), and the supported projections. It does not explicitly state that the map file is never modified or describe failure modes, but the rendering-focused behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The first sentence states the action, resource, output format, and rendering details; the second covers the view variants with axis mappings. Every clause earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately simple render tool with no output schema and no annotations, the description is nearly complete: it covers what is rendered, how items are styled, the three view options, and (via the schema's out_path description) where the SVG lands. The only real gap is the return value/confirmation format and behavior on invalid map paths, but nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents map_path, view, and out_path, establishing a baseline of 3. The description adds value by mapping the view enum values to coordinate axes (top X/Y, front X/Z, side Y/Z), which the schema does not provide, giving agents semantic meaning beyond the enum names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Render a 2D orthographic preview of the map as an SVG file') and details the exact visual encoding: brush footprints colored by type and point entities as labeled dots. This gives an agent a precise picture of what the tool produces, and the concrete output format (SVG) plus view list distinguishes it from the other map-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use vs alternatives guidance, no exclusions, and no mention of how this differs from the closely related map_overview sibling. The view axis list (top X/Y, front X/Z, side Y/Z) explains how to invoke it, but nothing tells an agent when it is the right tool compared to its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_entity_propertiesA
Set and/or remove properties on an existing entity. Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| set | No | Properties to set or overwrite | |
| index | Yes | ||
| remove | No | Property keys to delete | |
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that the tool writes the file, triggers an automatic TrenchBroom-HL reload, and has a specific conflict behavior with unsaved edits. This is significant and useful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core purpose, and the second delivers the most important behavioral warning. Information is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the critical side effects: file writing, reload behavior, and handling of unsaved edits. It does not explain return/error behavior or fully define index semantics, but the schema and sibling tool context cover most operational needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with set, remove, and map_path already documented. The description adds the context of targeting an existing entity and writing the file, but it does not clarify how index identifies the entity or provide additional meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Set and/or remove properties on an existing entity.' This clearly distinguishes it from siblings like add_entity, delete_entity, and get_entity, and the 'existing entity' qualifier adds important scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when modifying properties of an existing entity, versus adding or deleting entities. However, the description does not explicitly exclude alternatives or state when a different tool such as get_entity or add_entity would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_entityA
Move an entity by a delta: shifts all brush geometry (keeping textures locked in Valve format) and/or the origin property. Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| delta | Yes | Offset [dx dy dz] | |
| index | Yes | ||
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It does well by revealing that the file is written, TrenchBroom-HL reloads automatically, and that unsaved edits trigger a confirmation which defaults to keeping the editor version. It also mentions the Valve-format texture-locking nuance. It stops short of stating irreversibility, whether both brush geometry and origin move together or only one, or units for the delta, but it discloses more than most mutation tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both information-dense with zero filler. The core action is front-loaded, and the second sentence covers important side effects and editor behavior without redundancy. Everything included earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers file-writing and editor-reload behavior, which is essential for a mutating tool with no output schema. But it misses critical context: what 'index' refers to, whether the delta applies to brushes, origin, or both by default, and what happens after the confirmation when unsaved edits exist. These gaps could lead an agent to call the tool with incomplete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents delta as an offset and map_path as an absolute path, covering 67% of parameters. The description adds meaning to delta by explaining its effect on brush geometry and origin, and implies that map_path is the file being modified. However, the 'index' parameter is left entirely undocumented in both schema and description, which is a meaningful gap for an agent trying to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Move an entity by a delta'. It further clarifies scope by stating both what is affected (brush geometry and/or origin property) and a notable implementation detail (textures locked in Valve format). This clearly distinguishes it from siblings like delete_entity, set_entity_properties, or add_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the action verb and the delta parameter. However, there is no explicit when-to-use vs alternatives, such as saying 'use this instead of set_entity_properties when you need spatial translation', nor any exclusions. The context is clear enough for an agent to infer the basic use case, but guidance is not explicitly provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_last_editA
Restore the map to its state before the most recent edit made by this server (snapshot-based; one step per call). Writes the file; TrenchBroom-HL reloads it automatically, but asks first - and defaults to KEEPING the editor version - if the document has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| map_path | Yes | Absolute path to the .map file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does meaningful work: it discloses that the tool writes the file, that TrenchBroom-HL reloads automatically, and importantly that unsaved editor edits default to KEEPING the editor version. This is a subtle behavioral hazard that agents need to know. It stops short of a 5 because it does not mention what happens when no snapshot exists or what the tool returns on success/failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: the main action and scope are front-loaded, followed by the critical side-effect and editor-reload behavior. Every sentence earns its place, and there is no redundant restating of the tool name or schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool, the description covers the essential ground: purpose, edit scope, step granularity, file-write effect, and editor reload behavior. It is slightly incomplete because it does not specify the no-snapshot case or the tool's return/confirmation behavior, but these are not blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, map_path, and the schema already describes it fully as the absolute path to the .map file. The description adds no extra parameter-level meaning, so the baseline score of 3 applies given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Restore'), a resource ('the map'), and a precise scope ('state before the most recent edit made by this server'), while also clarifying the snapshot-based, one-step limit. This makes the tool's job unambiguous and distinguishes it from broader map-editing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool applies: only for edits made by this server, and only one step per call. It does not explicitly name an alternative tool or state when-not-to-use it, which keeps it a point below full guidance, but the scope and call-by-call limitation are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.5.0- First observed
add_brush_box - First observed
add_entity - First observed
compile_map - First observed
compile_shogo_map - First observed
delete_brush - First observed
delete_entity - First observed
fgd_class - First observed
fgd_classes - First observed
get_entity - First observed
launch_map - First observed
list_backups - First observed
list_entities - First observed
map_overview - First observed
render_preview - First observed
set_entity_properties - First observed
translate_entity - First observed
undo_last_edit
TDQS
Scored across 17 tools
Each tool targets a distinct operation: map info, undo, preview, two separate compilers, FGD queries, entity CRUD, brush add/delete, and translation. No two tools have overlapping purposes; even compile_map and compile_shogo_map are clearly differentiated by toolchain.
Most tools follow a verb_noun pattern in snake_case (list_entities, add_entity, delete_brush, translate_entity). Two tools (fgd_classes, fgd_class) use a noun-first structure, but the pattern is still predictable and all names are lowercase with underscores, so minor deviation only.
With 17 tools, the count is slightly above the typical 3-15 range, but each tool serves a distinct need for map editing, compilation, and FGD introspection. The scope is broad but well-justified, making the count reasonable.
The tool surface covers the full lifecycle: map analysis, editing (add/update/delete entities and brushes), transformation (translate), undo/backups, preview rendering, compilation for two engines, and FGD entity lookups. No significant gaps for the stated purpose of TrenchBroom map manipulation.
Maintenance
Related MCP Connectors
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
External Brain for AI Agents - persistent versioned memory for creators
Agent-Native design tool - create and edit visual designs with agent assistance
Related MCP Servers
- AlicenseCqualityAmaintenanceEnables AI assistants to interact with the Zandronum game engine for development, including running commands, spawning actors, and loading maps.5518 npm3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to build and edit Roblox Studio places by inspecting, generating terrain, geometry, and code, with validation and iteration.MIT
- FlicenseAqualityBmaintenanceEnables AI agents to control the DX12 Engine editor for game development, including scene editing, entity manipulation, and playback testing via natural language commands.73-
- FlicenseBqualityBmaintenanceConnects any AI agent to a live OmniMod game, enabling professional map building and Forge 1.20.1 mod authoring through 51 tools that translate modern block names, generate shapes, scaffold mods, inspect JARs, and bridge to the game over HTTP.51-