MB2-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., "@MB2-MCPmake a mod called RoyalArmory with an imperial spatha sword worth 5000 denars"
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.
MB2-MCP
Turn your AI coding agent into a Mount & Blade II: Bannerlord modding partner.
English · 简体中文 · Tool reference
Introduction
MB2-MCP is an MCP server that gives Claude Code, Codex, DeepSeek Harness and other MCP clients the view of a Bannerlord install that an experienced modder has, plus safe tools to change it. You ask in plain language; the agent searches, writes, patches and validates, then shows you what changed.
"Make a mod called RoyalArmory with a sword based on the imperial spatha, worth 5000 denars." "Raise one-handed skill of every Vlandian cavalry troop above level 26 by 20 — patch it, don't override." "Translate MyMod into Simplified Chinese." "In the open editor scene, put three barrels on the ground in a row next to the gate and take a screenshot."
How it works:
Files — module XML, scenes and prefabs are edited with an offset-preserving XML scanner (only the touched characters change), and every write is journaled with a backup.
Validation and XSLT run on the .NET Framework through Windows PowerShell: the same
System.Xmlclasses the game uses.Live editing goes through a small bridge module that the server compiles on your machine against your game's editor assemblies, with the C# compiler that ships with Windows. It runs only inside the Modding Kit, listens on
127.0.0.1and requires a random token.
Requirements: Windows 10/11 · Node.js 18+ · Bannerlord (tested with 1.4.8; 1.2+ expected to work) · optional Mount & Blade II: Bannerlord – Modding Kit (Steam → Library → Tools) for the live editor.
Related MCP server: forge-x-reforger-mcp
What it can do
Know your install
Detects the game (Steam/Epic/GOG/Xbox) and indexes every module (official, Workshop and your own) in about a second.
Search objects by id, name (Chinese names too) or attributes, find reverse references, show load order and dependencies.
Edit game data safely
Create modules; write, clone and change items, troops, heroes, clans, kingdoms, settlements and cultures. Files are registered in
SubModule.xmlautomatically; indentation, comments and encodings (UTF-8/UTF-16) are preserved.Change vanilla or other mods without copying them, with XSLT patches (the mechanism the official naval DLC uses), previewed with the game's own
XslCompiledTransformand XSD validation.Validate like the game: XSD schemas, XSLT compilation, dependencies, DLLs, duplicate ids, broken references, unregistered files.
Localization: find untranslatable text, assign
{=ids}, list untranslated strings, writeLanguages/<lang>/files with placeholder checks.
Scenes and prefabs (files, no game needed)
List, filter and edit
scene.xsceneentities: add prefabs or meshes in rows, move/rotate (degrees)/scale, tags, script variables, scene levels, duplicate, delete; create scenes from templates; environment and atmosphere; the saved editor camera; save entities as prefabs.Catch what crashes the editor on load: siege spawners with custom names, a camera saved looking straight down, GI flagged without bake data.
Assets
Copy FBX meshes and textures into
AssetSourceswith checks (FBX version, texture size, naming), and search the resource tables of all.tpacpackages (~90k names).Check converted packages the way the editor loads them (sub-meshes without a material, names corrupted by the importer, collision shapes without their mesh) and refuse to launch the editor with packages that would freeze it.
Live scene editor (Modding Kit + bridge)
Launch the Modding Kit with your module and enter the scene editor; the startup prompts that block it (module-metadata warnings, the crash watchdog's collect necessary files?, Always Ignore?, the shader-cache notice) are answered for 10 minutes — always the choice that sends and changes nothing.
editor_statusexplains a stuck editor: message boxes (also those Windows shows for the game, and the editor's own Qt dialogs with their buttons), a frozen window, crash-watchdog dumps, engine warnings, which scene file is open and whether changes made through the server are unsaved.In the open scene: list, select, spawn (rows, snap to ground), move, rotate, scale, rename, tag, show/hide, duplicate and delete entities; raycast and ground height; console commands with the engine log they produced; the editor's scene check; screenshots of the editor window (viewport and UI) that the agent can look at.
Answer dialogs with explicit buttons in any Windows language (
button="No"presses否(N)).
Play mode, walk tests and navigation (new in 0.3.0, experimental: built on the game's own APIs, not yet tested in a running editor)
editor_playstarts and stops the editor's play mode on a saved scene; live scene edits are refused while it runs.mission action=walklets the player walk a route with the game's AI movement on the navigation mesh (never teleported) and reports each leg as reached, stuck or timed out, with a JSON position trace;objects/use/dismount/teleport(labelled as positioning).navmesh_queryasks the engine's path finder: the face under a point, whether two points connect and how long the path is.editor_camerareads and moves the viewport camera;editor_command action=perfsamples frame times;action=fill_dialogfills an editor dialog's fields, check boxes and list selections without pressing anything.
Safe by default
Official and Workshop modules are never written. Every file change has a backup:
edit_history,undo_edit.Launching and quitting the game always need an explicit call (quit also
confirm=true).
Privacy
No built-in telemetry. The editor bridge uses 127.0.0.1.
read_logsrestricts reads to game log folders, but module path checks are not a sandbox: junctions and symbolic links can lead outside a module. Only inspect modules and linked folders you trust.Tool output shows your home folder as
%USERPROFILE%and your user and computer names as<user>/<computer>; paths sent back with%USERPROFILE%still work (MB2_REDACT=0turns this off). Everything else the agent reads — mod files, game logs, screenshots — reaches the model provider of your MCP client, like any tool output. Debug logs and image contents are not fully redacted; review them before sharing.Screenshots without
path=…pnguse temporary files that are removed after a successful capture. Failures can leave raw capture files behind. Screen-copy masking is best-effort and can miss other programs' frozen windows; keep private windows out of view.editor_command action=cleanupdeletes screenshots, walk traces and logs fromDocuments\Mount and Blade II Bannerlord\MB2MCP;forget_historydeletes edit backups. These cleanup actions can currently delete server-owned records even in read-only mode.
All 43 tools with their parameters: docs/TOOLS.md.
What it can't do
Open another scene, reload it, or save it in the editor.
Why: the engine offers no call for it — neither the editor's managed API (
MBEditor) nor the native console'sscene.,editor.andresource.commands open or save a scene. The editor's toolbar buttons expose no names to accessibility tools, so the server would have to click by screen position, which is too risky for your scene. Open and save in the editor (Ctrl+S);editor_statusshows the file and whether changes made through the server are unsaved.
Convert new assets the first time (FBX/textures →
.tpac).Why: only the Resource Browser's Import new asset (with its FBX Import Settings) does it; no engine call or console command converts new sources, and
reimport_assetsonly re-converts sources imported before.asset_importprepares and checks the files,asset_statusverifies the result.
Edit the navigation mesh.
Why: the engine's navigation calls are meant for missions (switching face groups on and off at runtime) and cannot add, move or save faces; saving goes through the editor's NavigationMeshInspector, and
navmesh.binis an undocumented compressed format.navmesh_querycan inspect it.
Paint terrain or flora, or edit materials, shaders and textures.
Why: these are native editor tools with no engine call that modules could use. Static flora and other props can still be placed as entities.
Change script variables of a live entity.
Why: the engine exposes no supported call for the editor's script inspector that MB2-MCP could rely on. File mode writes them into
scene.xscene; reopen the scene to see them.
Turn the live editor camera or read its field of view.
Why: the engine only reports the last rendered camera frame and can move the camera's position.
scene_edit action=focuszooms toward an entity, andscene_settings editor_camerasets the camera saved with the scene.
Run a light bake as a tracked job (progress, cancel, result).
Why: baking runs through console commands that only answer "Done". The tools return what the engine logged meanwhile and explain known messages such as No border probes can be found; a "Done" is not proof that GI data exists.
Play unsaved changes.
Why: the test mission
editor_playstarts loads the scene by name from its saved file, so it refuses while changes made through the server are newer than the file.
Undo live editor changes.
Why: they are made through engine calls, outside the editor's undo history, and
undo_editcovers files only. Save or discard them in the editor.
Modify official or Workshop modules.
Why: by design, to protect your install. Patch them with XSLT from your own module instead.
Choose a button for you in editor dialogs or after a crash.
Why: editor dialogs can save or discard scenes, and crash prompts end a process; only startup prompts with a harmless answer are automatic. Everything else needs an explicit
button.
Test NPC behaviour, battles or sieges.
Why: the tools drive one player agent (walk, use, position). AI and combat need a real game test.
Run XSD/XSLT or the live editor outside Windows.
Why: they need the .NET Framework and the Windows-only Modding Kit; browsing and file editing work everywhere.
How to configure
Build once and check your setup:
git clone <this repository> MB2-MCP
cd MB2-MCP
npm install
npm run build
node dist/index.js doctor # game, index, schemas, .NET, Modding Kit
node dist/index.js config # prints the blocks below with your real pathsThe examples use the server name bannerlord; tools then appear as mcp__bannerlord__<tool>. Replace the paths with yours
(node dist/index.js config claude|codex|dsh prints them ready to paste).
Claude Code
claude mcp add bannerlord --scope user -e MB2_GAME_DIR="D:\SteamLibrary\steamapps\common\Mount & Blade II Bannerlord" -- "C:\Program Files\nodejs\node.exe" D:\MB2-MCP\dist\index.jsOr a project-scoped .mcp.json in your mod folder (example). Check with claude mcp list.
Codex
Codex CLI, the desktop app and the IDE extension share ~/.codex/config.toml (example):
[mcp_servers.bannerlord]
command = 'C:\Program Files\nodejs\node.exe'
args = ['D:\MB2-MCP\dist\index.js']
startup_timeout_sec = 30
tool_timeout_sec = 300
default_tools_approval_mode = "writes" # read-only tools are annotated, so only edits ask
[mcp_servers.bannerlord.env]
MB2_GAME_DIR = 'D:\SteamLibrary\steamapps\common\Mount & Blade II Bannerlord'Or: codex mcp add bannerlord --env MB2_GAME_DIR="…" -- "C:\Program Files\nodejs\node.exe" D:\MB2-MCP\dist\index.js.
DeepSeek Harness
Merge into ~/.dsh/cordis.patch.yml (all profiles) or ~/.dsh/profiles/<profile>/cordis.patch.yml
(example); dsh reloads it automatically:
- insert:
- id: mcp-bannerlord
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: bannerlord
transport: stdio
command: 'C:\Program Files\nodejs\node.exe'
args: ['D:\MB2-MCP\dist\index.js']
env:
MB2_GAME_DIR: 'D:\SteamLibrary\steamapps\common\Mount & Blade II Bannerlord'
toolCallTimeoutMs: 300000Other MCP clients (Cursor, Cline, Windsurf, Cherry Studio, …): node dist/index.js config json prints a generic mcpServers block.
Options (environment variables)
Variable | Meaning |
| Game folder (auto-detected otherwise) |
| Extra folders with your own modules (writable), |
| Tool groups to expose: |
| Do not index Steam Workshop modules |
| Disable module edits; cleanup actions can still delete server-owned records |
| History and backups (default |
| Max characters per tool result (default 40000) |
| Path to Windows PowerShell for XSD/XSLT |
| Log tool timings to stderr |
| Show the real home folder, user and computer names in tool output (default: masked) |
Before publishing a fork, run npm run privacy: it checks every file git and npm would publish for your home folder, user and
computer names, e-mail addresses, keys and tokens, and the private terms you list in %USERPROFILE%\.mb2-mcp\privacy-terms.txt
(kept outside the repository). Publish with git or npm pack, not by zipping the folder.
Also run npm pack --dry-run --ignore-scripts separately and review its file list: the privacy checker can currently omit npm
package files if that command fails. A clean source scan does not remove the runtime limitations described above.
Live editor (optional)
Install the Modding Kit (Steam → Library → Tools).
Ask the agent to run
editor_bridge_installwhile the game is closed. Run it again after game updates, and wheneditor_statussays the bridge is outdated after an MB2-MCP update; restart your MCP client so it loads the new server.editor_launch modules=["MyMod"]starts the editor; polleditor_statusuntil it reportsedit mode ON(1–5 minutes).
Long-running tools (launching, editor_play start, mission walk) wait up to two minutes by default. Keep the tool timeout at 300 s as in
the examples, or pass wait_seconds=0 and poll.
License
Released under the MIT License. See third-party notices for upstream acknowledgements and licenses.
Not affiliated with or endorsed by TaleWorlds Entertainment. Thanks to TaleWorlds for Bannerlord and its modding tools, and to BannerlordSceneToolkit for showing which editor APIs exist.
Available Tools
43 toolsasset_importImport asset sourcesA
Copies FBX meshes and textures (png/tga/dds/tif/psd/bmp/jpg) into /AssetSources (the folder the Modding Kit editor imports from), checks them (FBX version, texture size, naming) and creates Assets/. Copying is not converting: new files become Assets/*.tpac only through the editor's Resource Browser → Import new asset; the result says what to do next, in which order (materials before FBX, with an editor restart in between) and whether the running editor has the module loaded. Folders are expanded (top level).
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Absolute paths of files or folders to import. | |
| module | Yes | Writable module. | |
| reimport | No | Ask the running editor to re-convert replaced sources (default true). New files are converted only through the Resource Browser's Import new asset. | |
| overwrite | No | Replace files that already exist (files over 200 MB are replaced without backup). | |
| subfolder | No | Optional subfolder inside AssetSources. | |
| normalize_names | No | Lower-case names and replace spaces/special characters (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world write. The description adds real behavioral context beyond them: it validates FBX version/texture size/naming, expands folders only at top level, and reports whether the running editor has the module loaded plus the required ordering (materials before FBX, editor restart). It does not restate the safety hints, which is appropriate.
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?
Purpose is front-loaded in the first clause and each following sentence carries distinct information (validation, conversion path, reporting, folder expansion). The prose is dense and slightly run-on, but no sentence is filler.
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?
With no output schema, the description pre-empts the return-value question by saying the result tells the agent what to do next, in what order, and whether the editor has the module loaded. Combined with annotations and full schema coverage, an agent has enough to call it correctly, though the response format is left qualitative rather than structured.
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%, so the baseline is 3. The description goes beyond the schema by explaining that folders are expanded only at the top level (claryfing the files parameter) and by explaining the reimport-vs-new-asset distinction tied to the Resource Browser flow, adding value the property descriptions only partly cover.
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 (copies/imports) and resource (FBX meshes and textures into <module>/AssetSources), and the naming clearly separates it from siblings such as asset_search, asset_status, and editor_command. An agent can distinguish it without opening any schema.
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 makes clear the context of use (staging sources for the Modding Kit editor to convert) and warns that copying is not converting, pointing to the Resource Browser workflow. It stops short of naming sibling alternatives or explicit when-not conditions, so it lands at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_searchSearch game resourcesARead-only
Searches resource names inside every module's asset packages (vanilla AssetPackages and mod Assets): meshes, materials, textures, physics shapes, skeletons, animations, particle systems, shaders. Use the names in scenes (meta_mesh_component, physics shape), items (mesh=…) or materials.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Resource kind filter. | |
| limit | No | Max rows (default 50). | |
| query | Yes | Substring or /regex/ of the resource name. | |
| module | No | Module filter (id, comma list, official, mods). | |
| offset | No | Skip rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description usefully adds the search scope (vanilla AssetPackages plus mod Assets, across every module), but says nothing about result volume, pagination behavior, or what a match looks like beyond "resource names."
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 the primary action front-loaded and no filler. The parenthetical qualifiers and enum list make the second clause dense, but every element carries information about scope or downstream use.
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 search tool with no output schema and fully documented parameters, the description is adequately complete: it establishes domain, scope, and how results are consumed. It could note the return shape (rows/names with which identifiers), but that gap is minor given the annotation and schema coverage.
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 all five parameters are already documented in the schema, making 3 the baseline. The description's kind enumeration broadly mirrors the enum values but is actually shorter than the enum (omitting animation_clip, face_animation, source), so it adds no syntax or matching semantics beyond what the schema states.
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 ("searches") and resource ("resource names inside every module's asset packages") and enumerates the asset kinds covered, so the agent knows exactly what domain this touches. It stops short of naming how it differs from close siblings like prefab_search or search_objects, leaving some overlap to inference.
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 second sentence says where the returned names are consumed (scenes, items, materials), which implies usage but is guidance about the results, not about when to choose this tool over prefab_search or search_objects. No explicit when-not or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_statusAsset import statusARead-only
Compares a module's AssetSources with the editor's imported packages (Assets/*.tpac): imported, pending (copied but never converted), stale (source changed after import) and orphaned packages, plus the meshes/materials/textures/physics shapes each package contains. Checks the packages like the editor will when loading them: sub-meshes without a material or with an unknown one, resource names corrupted with control characters, physics shapes without their mesh.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Module id. | |
| details | No | List the resources inside every package (default false: first 40). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered; the description goes further by disclosing the four comparison categories, the resource types inspected, and the specific validation rules emulated (material-less sub-meshes, unknown materials, control-character corruption, mesh-less physics shapes). It does not mention result size limits or pagination, which is the remaining 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?
Two sentences, front-loaded with the comparison and its four result categories before moving to validation behaviour. The second sentence is dense but each clause adds a distinct check; nothing is redundant with the title or schema.
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?
With no output schema, the description must convey what comes back, and it does: the four package states plus the resource inventory per package and the validation findings. For a read-only two-parameter diagnostic tool this is largely sufficient, though truncation/limits on large modules are unstated.
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% for both parameters, so the schema already carries the semantics (module id, details listing resources). The description's clause about 'the meshes/materials/textures/physics shapes each package contains' loosely corresponds to the details flag but adds no syntax or default behaviour 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?
Names a specific verb (compares) and two concrete resources (module AssetSources vs editor's imported Assets/*.tpac packages), then enumerates the exact states it classifies: imported, pending, stale, orphaned. This clearly separates it from siblings like asset_import (performs the import), asset_search (finds assets) and validate_module (validates module structure).
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 mention that it 'checks the packages like the editor will when loading them' implies a pre-flight/diagnostic use case, so an agent can infer it should run this before import or when investigating load failures. However, no explicit when-to-use, when-not, or named alternative (e.g. asset_import or validate_module) is given, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_objectCopy an object into your moduleADestructive
Copies an existing object (usually vanilla) into a writable module under a new id, optionally changing attributes — the fastest way to make a new weapon/troop/hero/culture based on an existing one. With new_id omitted the copy keeps the id and fully overrides the original. A plain 'name' gets a fresh {=id}.
| Name | Required | Description | Default |
|---|---|---|---|
| set | No | Attributes to change on the copy's root element, e.g. {"name": "Royal Blade", "value": "5000"}. Values are strings. | |
| file | No | Optional target file under ModuleData. | |
| module | Yes | Target writable module. | |
| new_id | No | Id of the copy (omit to override the original with the same id). | |
| source | Yes | Object to copy: Item.x, NPCCharacter.x, Culture.x, … or bare id. | |
| validate | No | Run XSD validation after writing (default true). | |
| source_module | No | Copy this module's definition instead of the effective one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds meaningful non-obvious behavior: omitting new_id fully overrides the original with the same id, and a plain 'name' gets a fresh {=id}. That override semantics is exactly the detail an agent needs to avoid clobbering vanilla content. It doesn't mention writability prerequisites or return behavior, keeping it out of 5 territory.
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, purpose first, then the critical edge-case behavior. Zero filler and 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 destructive mutation tool with seven parameters (including a nested set object) and no output schema, the description covers the surprising override behavior and the id-generation nuance. Only minor gaps remain, such as the writable-module requirement and the effect of the validate flag.
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%, so the baseline is 3, but the description adds real semantics beyond the schema for two parameters: the new_id omission override rule and the name-to-{=id} behavior. Those are interpretations the raw schema strings don't convey.
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 (copies) and resource (an existing object into a writable module under a new id), and grounds it with concrete examples (weapon/troop/hero/culture). An agent can distinguish it from write_object, create_module, or set_attributes without opening the schema.
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?
Gives clear context for why you'd pick this tool ('the fastest way to make a new weapon/troop/hero/culture based on an existing one'), which implies when it beats authoring from scratch. It never names an explicit alternative or an exclusion, so it stops 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.
create_moduleCreate a new mod moduleA
Scaffolds a new module folder with SubModule.xml (dependencies on the installed official modules) and ModuleData/. Optional C# project (Source/.csproj + SubModule.cs that builds into bin/Win64_Shipping_Client). Default location: /Modules.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name in the launcher (default = id). | |
| version | No | Version like v1.0.0 (default v1.0.0). | |
| category | No | ModuleCategory (default Singleplayer). | |
| location | No | Parent folder for the module (default <game>/Modules). Outside Modules the game will not see it. | |
| module_id | Yes | Module id = folder name (letters, digits, _ - .), e.g. MyArmory. | |
| with_csharp | No | Also create a C# project skeleton (default false). | |
| dependencies | No | Dependencies as 'Id', 'Id@v1.2.3' or 'Id?' (optional). Default: Native, SandBoxCore, Sandbox, StoryMode?, CustomBattle? at the installed game version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a write (readOnlyHint=false) but non-destructive. The description adds real value beyond that: the concrete file layout it generates, that dependencies default to the installed official modules, and the default target folder. It does not state behavior when a folder already exists (overwrite vs. error), which is a notable 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?
Three dense but well-front-loaded sentences; the primary action and default location lead, and each clause carries concrete technical detail without filler.
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?
With no output schema and a mutation tool, the description is nearly sufficient: it explains what is created and where. Missing only the return value and the collision/overwrite behavior, which an agent would want before invoking it.
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%, so all seven parameters are already documented, setting the baseline at 3. The description adds some meaning for with_csharp by describing the generated csproj/SubModule.cs and bin output, but does not clarify the dependencies syntax or other parameters beyond 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?
States a specific verb ('Scaffolds') and resource ('a new module folder') and enumerates exactly what is produced: SubModule.xml with dependencies, ModuleData/, and an optional C# project. This clearly separates it from read-only siblings like module_info or list_modules.
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 by the name and the scaffolding detail, but there is no explicit when-to-use, no prerequisites (e.g. game install path requirement), and no routing to alternatives such as clone_object for duplicating an existing module. Adequate but gaps remain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_objectDelete an object from your moduleADestructive
Removes an object definition from a writable module's XML (all definitions of that id in the module).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object: Item.x, NPCCharacter.x, … or bare id. | |
| module | Yes | Writable module id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: deletion applies to ALL definitions of the given id, not just one, and is confined to module XML. It stops short of stating reversibility or not-found behavior.
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 front-loaded sentence with no filler. The verb, resource, and the critical 'all definitions of that id' qualifier all land immediately.
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 destructive tool with no output schema, the description plus annotations cover what an agent needs: what is removed, from where, and how broadly. Minor gaps (failure mode when the id is absent, whether an undo path exists) remain but are not blocking.
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 both params are documented inline (ref accepts 'Item.x' or bare id; module is a writable module id), so the schema carries the load. The description's phrase 'writable module' reinforces the module param but adds no new syntax or format detail.
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 — 'Removes an object definition' — and scopes it to 'a writable module's XML', which is more precise than the title. It does not, however, name or distinguish itself from nearest siblings like write_object, edit_submodule, or undo_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?
Usage is implied rather than stated: 'writable module's XML' hints the module must be editable, but there is no explicit when-to-use guidance, no mention of the undo_edit alternative, and no note on what to do if the id is not found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_schemaDescribe XML schemaARead-only
Explains which elements/attributes are valid, from the game's own XSD files (XmlSchemas folder) plus real values observed in official data. Use before writing XML. No args: list XmlName ids. xml_id only: root and object elements. element (+path for nested ones, e.g. element=Weapon path=Item/ItemComponent/Weapon): attributes with types/enums and children.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Optional path suffix to disambiguate nested elements, e.g. Item/ItemComponent/Weapon. | |
| xml_id | No | XmlName id, e.g. Items, NPCCharacters, SPCultures, Factions, Kingdoms, Settlements, partyTemplates, CraftingPieces, Heroes, GameText. | |
| element | No | Element name, e.g. Item, CraftedItem, NPCCharacter, Culture, Settlement, Weapon, equipment. | |
| observed | No | Also show attribute values seen in official data (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false). The description adds valuable provenance context beyond that: data comes from XSD files plus real values observed in official data, which tells the agent how authoritative the results are.
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?
Front-loaded with the purpose, then efficiently maps each argument mode in terse fragments. It is compact and each sentence carries weight, though the signature-style fragments are slightly harder to parse than prose.
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?
With no output schema, the description carries the burden of explaining returns, and it does so for each invocation mode. For a read-only introspection tool this is complete enough for an agent to call it correctly.
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 already 100%, yet the description still adds behavior mapping the schema alone cannot convey: no args lists XmlName ids, xml_id only returns root/object elements, element (+path) returns attributes with types/enums and children. This binds parameter combinations to concrete output behavior.
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 and resource: it explains which elements/attributes are valid, sourced from the game's XSD files plus observed official data. This distinguishes it from sibling validators and writers (e.g., validate_module, write_object) by framing it as a pre-write inspection tool.
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 says 'Use before writing XML', which gives a clear when-to-use context. It further documents three usage modes keyed to which params are supplied, though it never names alternative siblings to prefer over this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_historyList edits made by this serverBRead-only
Lists recent changes made through this MCP server (every write is journaled with a backup), newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many entries (default 20). | |
| module | No | Only entries of this module. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds two genuine behavioral facts beyond the annotations: every write is journaled with a backup, and results are returned newest first. It still omits pagination behavior and the default cap's effect on truncation.
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?
One sentence, no filler, with the core operation front-loaded and the ordering guarantee appended where it belongs. Every clause 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 zero-required-parameter read tool with full schema coverage and no output schema, the description covers what the tool returns at a conceptual level and adds a provenance detail. It could say more about result volume and pagination, which is the only remaining gap.
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% with both parameters documented (limit default 20, module filter). The description adds no syntax, format, or filtering semantics beyond what the schema already carries, so the baseline of 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?
States a specific verb+resource: lists recent changes made through this MCP server, with entries ordered newest first. It is clearly distinguishable from read_logs or undo_edit in intent, though it never explicitly contrasts itself with those 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?
The description gives no when-to-use guidance and no exclusions. An agent wanting to review or reverse a change cannot tell from this text whether to call edit_history, read_logs, undo_edit, or forget_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_bridge_installInstall the editor bridgeADestructive
Compiles the MB2-MCP editor bridge (a small C# module) against your installed game with the Windows .NET compiler and installs it as Modules/MB2MCP.EditorBridge. Inside the Modding Kit editor it lets the live tools (scene_* live=true, editor_command) inspect and edit the open scene. Re-run after game updates.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Recompile even if the current version is installed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds real prerequisites (installed game, Windows .NET compiler, recompile after updates) but never says what the destructive action overwrites or whether an existing bridge is replaced without confirmation. Useful additions, but the mutation semantics remain thin.
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?
Three sentences, front-loaded with the action and install location, with no filler. The parenthetical about scene_* live tools is dense but earns its place by linking the bridge to sibling tools.
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 installer with one optional boolean parameter, no output schema, and annotations covering safety, the description supplies the important missing context: the required toolchain, the install target, and the update re-run rule. Failure modes and whether a restart is needed are not covered, keeping it below 5.
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% and the single 'force' parameter is fully documented in the schema. The description adds no meaning beyond it, so the baseline 3 for a fully-covered schema 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 verb (compiles ... and installs) plus the exact artifact and install path (Modules/MB2MCP.EditorBridge), and names what the module enables. This is clearly distinguishable from every sibling, none of which install a bridge.
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?
It gives a clear trigger ('Re-run after game updates') and explains the enabling condition for the live tools, which is context an agent needs. It stops short of stating when not to run it (e.g. if the editor is running or the bridge is already current), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_cameraRead or move the editor cameraADestructive
The live viewport camera (needs the bridge): get (position, view direction, pitch and heading of the last rendered frame — also in play mode), set (move the editor camera to a position, keeping its direction), move (by a delta). The engine offers no call to turn the live editor camera: scene_edit action=focus zooms toward an entity keeping the direction, and scene_settings editor_camera sets the saved camera used when the scene is opened.
| Name | Required | Description | Default |
|---|---|---|---|
| delta | No | move: offset to add to the camera position. | |
| action | No | Action (default get). | |
| position | No | set: camera position. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true; the description is consistent with these and adds real context: 'set' preserves direction, 'get' works in play mode and returns pitch/heading, and the engine has no live-camera turn call. It does not explain the destructive framing, but the behavioral picture is otherwise well covered.
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?
Front-loads the resource and prerequisite, then expands each action tersely. The final sentence about the missing turn capability is dense but earns its place by preventing a wrong tool choice; overall efficient though a single dense block.
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 multi-action tool with no output schema, the description covers return values for 'get', the bridge prerequisite, direction-preservation semantics, and alternatives for the unsupported turn operation. An agent has everything needed to select and call it correctly.
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%, so the per-parameter descriptions carry the baseline (3). The description adds value beyond the schema by clarifying 'set' keeps direction and by describing the 'get' return content (position, view direction, pitch, heading) that the schema itself does not convey.
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 the specific resource (live viewport camera) and the three verbs (get/set/move) it supports. It explicitly differentiates itself from scene_edit action=focus and scene_settings editor_camera, so an agent can distinguish it from siblings without opening a schema.
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?
Names the prerequisite ('needs the bridge'), explains what each action does, and routes the agent to alternatives with the condition that selects them (turning the camera is impossible, so use scene_edit action=focus or scene_settings editor_camera). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_commandRun an editor actionA
Live actions in the running Modding Kit editor (needs the bridge): console (run a developer console command), list_commands (console commands by prefix; entries ending in '.' are groups such as 'scene.', 'resource.', 'prefab.' — list them with that prefix), check_scene (editor's scene problem check), reimport_assets (re-converts changed sources of earlier imports — new files need the Resource Browser's Import new asset), raycast (from/to or a position straight down → hit point), ground_height, warning (show a message in the editor), enter_editor (from the main menu), ping, quit (confirm=true; closes the game without saving). Also without the bridge: screenshot (captures the game window and returns the image; when the game is frozen or has no window yet, the message box blocking it), dialogs (the game's message boxes such as 'RGL WARNING', prompts Windows shows for it, the scene editor's modal Qt dialogs such as 'Do you want to save the scene?' with their texts, fields and buttons, and its other open windows), dismiss_dialogs (press OK, or button, on them; editor dialogs and file dialogs only with a named button) and fill_dialog (type into an editor dialog's input fields, set its check boxes and select a list/tree item — by label or #n — then read everything back; it never presses a button). With the bridge also: perf (frame times over seconds: average, percentiles, fps, plus the engine's main/renderer fps). cleanup deletes the screenshots, walk traces and dialog/bridge logs this server left in the bridge folder.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | raycast: end point. | |
| from | No | raycast: start point. | |
| path | No | screenshot: keep a full-resolution copy in this .png file (default: nothing is kept on disk). | |
| check | No | fill_dialog: check boxes or radio buttons to set, by label, to true/false. Values are strings. | |
| title | No | dismiss_dialogs/fill_dialog: only dialogs whose title contains this text (e.g. 'RGL WARNING', 'Save Scene'). | |
| action | Yes | Action. | |
| button | No | dismiss_dialogs: button text or control id to press (default: OK, or the only button). 'OK', 'Cancel', 'Yes', 'No', 'Retry', 'Ignore', 'Close' also match Windows boxes in any language (e.g. 否(N)). Scene editor (Qt) dialogs and file dialogs are only answered with a named button. Dialogs without a matching button are left open. | |
| fields | No | fill_dialog: input fields to set, by label, name or #1, #2 … in order, e.g. {"Name": "my_scene_v2"}. Values are strings. | |
| prefix | No | list_commands: command prefix (default all). | |
| select | No | fill_dialog: text of a list or tree item to select (e.g. a module or scene name). | |
| source | No | screenshot: 'window' (default) captures the game/editor window including the editor UI and works without the bridge; 'engine' asks the renderer (needs the bridge; black while the scene editor is in front). | |
| command | No | console: the command line, e.g. 'help'. | |
| confirm | No | quit: must be true — closes the game; unsaved editor changes are lost. | |
| message | No | warning: text to show in the editor's warning panel. | |
| seconds | No | perf: sampling time (default 5, max 120). | |
| position | No | raycast/ground_height: [x, y, z] point to probe downwards from. | |
| max_width | No | screenshot: width of the image returned to you (default 1280; the saved file keeps full size). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: quit loses unsaved changes, cleanup deletes the server's screenshots/traces/logs, dialogs without a matching button are left open, fill_dialog 'never presses a button', and engine-source screenshots go black while the scene editor is in front. One caveat: destructiveHint=false is arguably loose given quit and cleanup, though both are explicitly gated (confirm=true) and warned about, so I do not treat it as a hard contradiction.
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?
Nearly every clause maps to a distinct action, so the word count is largely earned for a 16-action dispatcher. The structure is poor, though: one dense run-on paragraph with nested parentheses instead of a scannable list, and the cleanup sentence is tacked on at the very end after the 'with the bridge' group.
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?
With no output schema, no structured param help beyond the schema, and 17 parameters, the description carries a lot and does it reasonably well, including light return-value notes ('returns the image', 'read everything back'). It stops short of describing failure modes, bridge-install prerequisites, or how errors/partial results are surfaced.
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% and every parameter's description already names the action it belongs to ('raycast: end point', 'prefix: list_commands', 'confirm: quit'). The description adds the cross-action rule that editor/file dialogs only answer to a named `button`, but otherwise restates what the schema carries, so the 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 opening clause names the resource (the running Modding Kit editor) and the description enumerates every one of the 16 actions with a concrete gloss (console runs a command, raycast returns a hit point, perf samples frame times). An agent can tell what each action does. It does not, however, position itself against siblings such as editor_status, editor_play or read_logs, so sibling routing is left to inference.
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?
Prerequisites and conditions are stated explicitly: 'needs the bridge' for live actions, and a clean split of which actions work without the bridge (screenshot, dialogs, dismiss_dialogs, fill_dialog) versus only with it (perf). It even routes one case away to another tool: 'new files need the Resource Browser's Import new asset'. Missing is explicit when-to-use guidance versus the sibling editor_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_launchStart the Modding Kit editorA
Starts the Modding Kit build (bin/Win64_Shipping_wEditor/Bannerlord.exe) with the official singleplayer modules, the given modules and the editor bridge, and (open_editor=true) enters the scene editor automatically (with an empty scene; open yours in the editor). Loading usually takes 1–5 minutes; poll editor_status until it reports 'edit mode ON'. While it loads, 'RGL WARNING' message boxes about other mods' SubModule.xml entries (common with Workshop mods made for launcher extensions) are answered automatically with OK, together with the two prompts that follow each of them (the crash watchdog's 'collect necessary files?' → No, nothing is collected or uploaded; 'Always Ignore?' → Cancel, no setting changes) and the shader-cache notices ('Mod change detected').
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Start even if a Bannerlord process is already running. | |
| modules | No | Your module ids to load (with their dependencies), e.g. ["MyMod"]. | |
| open_editor | No | Enter the scene editor automatically (default true; needs the bridge). | |
| decline_safe_mode | No | If the game asks to start in Safe Mode after a crash, answer No (keeps your modules and the bridge loaded). Default false: the question is left to you. | |
| ignore_asset_problems | No | Start even when your modules' packages contain meshes without a material (the editor then stalls on a crash-watchdog dump for each while loading). | |
| dismiss_module_warnings | No | During the first 10 minutes press OK on module-metadata warnings, No/Cancel on the 'collect files?' and 'Always Ignore?' prompts that follow each of them, and OK on shader-cache notices (default true). Other message boxes are left for you; editor_status lists them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark it as non-read-only and non-destructive; the description goes far beyond that, disclosing the 1-5 minute load time, every message box that gets auto-dismissed, and the reassuring fact that no files are collected/uploaded and no settings are changed. This is exactly the side-effect detail an agent needs before triggering a long, window-driving launch.
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?
Purpose is front-loaded and the long sentence is dense with non-redundant operational detail. It loses a point because the enumerations of which prompt gets which answer largely restate the dismiss_module_warnings schema text, making the description longer than strictly necessary.
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?
With no output schema and six optional parameters, the description supplies the timing, the polling target, and the automation side effects an agent needs. Minor gaps remain around failure/timeout handling, but nothing essential for a correct invocation 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 coverage is 100%, so the schema already documents all six parameters including the prompt-handling behavior of dismiss_module_warnings. The description adds only marginal value (e.g., the editor opens with an empty scene), so the 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?
States a concrete verb and resource ('Starts the Modding Kit build .../Bannerlord.exe') with the exact module set it loads, which cleanly separates it from siblings like editor_play, editor_bridge_install, and editor_status. An agent can identify the action without opening the schema.
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?
Gives the operational workflow explicitly: launch, then 'poll editor_status until it reports edit mode ON', and notes when open_editor takes effect. It does not state when NOT to use this versus editor_play or a bridge install, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_playPlay the scene from the editorADestructive
Play mode of the Modding Kit editor (needs the bridge). start plays the open scene with the editor's test mission — the same managed entry the editor's Play button reaches; the player spawns at spawnpoint_player_test or spawnpoint_player — and waits until the player is there. It loads the scene's SAVED file: save first (start refuses when changes made through this server are newer than the file). stop returns to the editor exactly like the leave key does in play mode, and waits for it. status / missions report. While playing, live scene_* commands are refused (they act on the edited scene); use mission, navmesh_query and editor_command screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| scene | No | start: play another saved scene of the loaded modules by name instead of the open one (the editor keeps its scene). | |
| action | No | Action (default status). | |
| levels | No | start: scene levels for the mission, e.g. 'siege' or 'civilian' (default none). | |
| mission | No | start: the editor mission (default the first one listed by action=missions). | |
| wait_seconds | No | start/stop: wait until the player is spawned / the editor is back (default 120 / 30; 0 = return at once). | |
| allow_unsaved | No | start: play although changes made through this server since the last save are not in the file (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=true; the description adds substantial context beyond that: the bridge requirement, that it loads the SAVED file rather than live edits, the save-refusal condition, spawn point fallbacks, blocking wait behavior, and the exact semantics of stop mirroring the leave key. Nothing here contradicts the destructive/read-write annotations.
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?
Purpose is front-loaded in the first clause and every subsequent sentence carries operational information (save requirement, restrictions, alternatives). It is dense and somewhat run-on, but there is little that could be cut without losing behavioral detail.
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?
With no output schema and six optional parameters, the description covers what an agent needs: prerequisite (bridge), save-state gate, per-action semantics, waiting behavior, and which sibling tools to use during play mode. Nothing required 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 coverage is 100%, so baseline is 3, but the description adds real meaning: it clarifies the saved-file constraint that motivates allow_unsaved, explains that start/stop block until the player is spawned or the editor returns (wait_seconds), and notes the scene override keeps the editor's own scene. It does not, however, restate the levels/mission enum details.
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+resource (play mode of the Modding Kit editor) and then spells out each action's effect: start plays the open scene, stop returns to the editor, status/missions report. An agent can distinguish this from editor_status, editor_launch, and scene_edit without opening the schema.
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?
Gives explicit when-to-use ('start plays the open scene... the same managed entry the editor's Play button reaches'), a prerequisite ('save first; start refuses when changes through this server are newer than the file'), and explicit when-not/alternatives ('while playing, live scene_* commands are refused... use mission, navmesh_query and editor_command screenshot').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_statusModding Kit editor statusARead-only
Shows whether the Modding Kit (scene editor) is installed, whether the MB2-MCP editor bridge module is installed and current, which Bannerlord processes run, message boxes that block the game (e.g. 'RGL WARNING', 'Safe Mode') and — if the bridge is connected — the editor state, open scene, entity and selection counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is already covered. The description adds meaningful context the annotations do not: that it reports on blocking message boxes like 'RGL WARNING' and 'Safe Mode', and that some results (editor state, scene, counts) are conditional on the bridge being connected. That conditional behavior is exactly the kind of trait structured fields cannot express.
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 long sentence, but it is front-loaded with the primary purpose ('whether the Modding Kit is installed') and then expands through a readable checklist. No filler sentences. The em-dash parenthetical for the bridge-connected case is efficient. Slightly dense list-form, but every clause 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 zero-param, no-output-schema read tool, the description covers the full surface an agent needs: what is checked, the conditional nature of the editor-state fields, and the blocking message-box concept. What is missing is a hint about return shape (structured vs. free text) and whether it is safe to call repeatedly, but annotations already signal it is a read operation.
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?
With zero parameters, the baseline is 4 per the rubric. There is nothing to document, and the description correctly omits any parameter narrative rather than inventing one.
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 read operation with a clearly enumerated set of outputs: installation status, bridge module currency, running processes, blocking message boxes, and editor state. This is distinguishable from siblings like editor_bridge_install or editor_command, which are mutations. The verb 'Shows' plus the exhaustive field list leaves no ambiguity about what the tool 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 description implies this is a diagnostic/status-read tool but never explicitly says when to call it versus alternatives, nor does it name a sibling. There is no 'use this before X' or 'if you need Y, use Z instead' guidance. For a zero-param status tool this is tolerable, but stronger routing would mention editor_bridge_install as the follow-up when the bridge is absent or stale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_submoduleEdit SubModule.xmlADestructive
Edits a writable module's SubModule.xml in place (formatting preserved): name/version/url/category, add or remove dependencies, register or unregister ModuleData XML files, add or remove DLL SubModule entries.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Url value. | |
| name | No | New display name. | |
| module | Yes | Writable module id. | |
| add_dll | No | DLL SubModule entries to add. | |
| version | No | New version, e.g. v1.0.1. | |
| category | No | ModuleCategory. | |
| remove_dll | No | SubModule names or DLL names to remove. | |
| register_xmls | No | XML registrations to add. path is relative to ModuleData without extension (e.g. mymod_items or XSLT/MyMod_Items). | |
| unregister_xmls | No | Paths (as in XmlName path) to unregister; 'Id:path' to match a specific id. | |
| add_dependencies | No | Add/update dependencies: 'Id', 'Id@v1.2.3', 'Id?' (optional). | |
| remove_dependencies | No | Dependency ids to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true/readOnlyHint=false, so the safety profile is covered. The description adds real behavior beyond that: edits happen in place, XML formatting is preserved, and only writable modules are eligible. It still omits reversibility/undo and failure behavior, but it earns credit for the formatting-preservation detail.
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 front-loaded sentence that leads with verb and resource, then lists capabilities without filler. Slightly dense with the trailing enumeration but nothing is wasted.
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 11-parameter destructive mutation with no output schema, the description covers the operation surface and the key precondition (writable module) while annotations carry the safety signal. It stops short of explaining side effects of removal operations or validation behavior, so it is good but not fully complete.
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% and every parameter, including nested add_dll and register_xmls fields, has its own schema description. The description names the same fields (name/version/url/category) the schema already documents, so it adds little syntax or format meaning beyond the baseline.
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 (Edits) and resource (SubModule.xml in place) and enumerates the concrete operations: name/version/url/category, dependencies, XML registration, DLL entries. An agent can tell it operates on module manifests, though it never explicitly distinguishes itself from siblings like write_object, set_attributes, or create_module.
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 only implied: use this to modify an existing writable module's SubModule.xml. The 'writable module' constraint hints at a precondition, but there is no statement of when to prefer this over write_object/set_attributes, nor any when-not guidance or prerequisite detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_referencesFind referencesARead-only
Lists objects that reference a given object (e.g. which troops carry Item.x, which troops upgrade into NPCCharacter.y, which settlements belong to Faction.z). Accepts 'Prefix.id' or a bare id.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Referenced object: Item.x, NPCCharacter.x, Culture.x, Faction.x, … or bare id. | |
| limit | No | Max results (default 50). | |
| module | No | Only report referencing objects from these modules (id, comma list, official, mods…). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered by structured data. The description adds useful semantic context about what kind of results come back (referencing objects of various types), but it says nothing about result grouping, truncation, or how the module filter narrows output. Given the annotations carry the safety burden, this is adequate but not rich.
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 tight sentences with zero filler; the core definition is front-loaded and the input-format note is appended where it is needed. Every clause 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?
With no output schema, the description must convey what comes back, and the examples do that well for a read-only query tool. The gap is the module parameter's filtering semantics ('official, mods…'), which is left entirely to the schema, but nothing critical for correct invocation 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 all three parameters (ref, limit, module) are already documented in the schema, including the 'Prefix.id or bare id' format restated in the description. The description adds no meaning beyond the schema, so the 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?
States a specific verb and resource ('Lists objects that reference a given object') and immediately disambiguates the direction of the lookup with three concrete examples (troops carrying Item.x, troops upgrading into NPCCharacter.y, settlements in Faction.z). These examples let an agent distinguish this reverse-lookup tool from forward-lookup siblings like get_object or search_objects without opening any schema.
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 examples imply when the tool is appropriate (you already know the target object and want its referrers), but there is no explicit when-to-use/when-not guidance and no sibling is named as the alternative for forward lookups. Usage must be inferred from the examples rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forget_historyDelete the edit historyADestructive
Deletes this server's edit journal and the file backups it keeps for undo_edit (in MB2_DATA_DIR, default %LOCALAPPDATA%\mb2-mcp\history): all of it, or only edits older than older_than_days. Forgotten edits can no longer be undone. Needs confirm=true. (Screenshots and traces in the bridge folder: editor_command action=cleanup.)
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true: forgotten edits cannot be undone any more. | |
| older_than_days | No | Only forget edits older than this many days (default: all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the bar is lower, yet the description adds substantial context: exactly what is destroyed (the edit journal plus the backup files undo_edit relies on), where they live (MB2_DATA_DIR), that the loss is irreversible, and that confirmation is mandatory. It also clarifies that screenshots/traces in the bridge folder are not covered here.
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?
Front-loaded with the action and its scope, then consequences, then the confirm gate, with the cleanup cross-reference placed last where it doesn't interfere. Dense but every clause carries weight; the stacked parenthetical paths make it slightly harder to scan than it needs to be.
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 tool with full annotation coverage, a fully documented 2-parameter schema, and no output schema, nothing an agent needs is missing: target, scope, irreversibility, confirmation requirement, and where the related-but-unhandled artifacts are cleaned up.
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%, so both parameters are already documented, and the description largely restates them ('Needs confirm=true', 'default: all'). It adds the consequence framing for confirm, but no syntax or edge-case detail beyond the schema, so the 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?
States a specific verb and resource ('Deletes this server's edit journal and the file backups it keeps for undo_edit'), scopes it ('all of it, or only edits older than older_than_days'), and ties it to the sibling undo_edit it feeds. An agent can distinguish it from edit_history and undo_edit without opening any schema.
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?
Gives clear context: this is the irreversible cleanup path ('Forgotten edits can no longer be undone') and requires confirm=true, while routing the adjacent-but-different cleanup (screenshots/traces) to editor_command action=cleanup. It never states the explicit alternative 'use undo_edit instead if you want to revert', so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
game_infoBannerlord environment overviewARead-only
Start here. Shows the detected Mount & Blade II: Bannerlord install, game version, module folders, which modules are writable, the launcher's enabled mods, index/validation status and the recommended editing workflow.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value by enumerating what gets surfaced (install detection, writable module folders, launcher-enabled mods, index/validation status, recommended workflow), which tells the agent what to expect from the response.
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 the imperative 'Start here.' front-loaded. The second sentence is a dense enumeration, but each listed item conveys distinct diagnostic value rather than filler.
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?
With no output schema, the description carries the burden of describing returns and does so comprehensively, listing every category of environment data the agent will receive. For a zero-parameter overview tool this is complete.
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 tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies for a no-argument tool.
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 (shows) and a well-defined resource (the detected install, version, module folders, writability, enabled mods, validation status, recommended workflow). The 'Start here' framing plus this enumerated scope lets an agent distinguish it from narrower siblings like module_info, list_modules, or editor_status.
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 'Start here' opener gives clear entry-point guidance, implying this should be called before other tools. It does not name explicit alternatives or when-not-to-use conditions, but for an orientation tool the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objectRead an object's XMLARead-only
Returns the XML of a game object, e.g. ref='Item.empire_sword_1_t2', 'NPCCharacter.imperial_recruit', 'Culture.empire' or a bare id. Shows which module's definition wins (load order), other definitions, XSLT patches that touch it and the absolute file path.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference 'Prefix.id' (Item.x, NPCCharacter.x, Faction.x, …) or a bare id. | |
| lang | No | Show the translated name in this language (e.g. CNs). | |
| module | No | Only show the definition from this module. | |
| all_definitions | No | Show the XML of every definition, not only the effective one (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is covered; the description then adds real behavioral value by disclosing what the result contains: load-order winner, other definitions, XSLT patches, and the absolute file path. This goes beyond the annotations.
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 front-loaded sentence that states the return value first, then illustrates with examples and enumerates result contents. Dense but every clause carries information.
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?
With no output schema, the description compensates by explaining what the response shows (effective definition, other definitions, patches, file path). Combined with readOnly annotations, this is nearly complete for an inspection 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 description coverage is 100%, so all four parameters are already documented in the schema. The description reinforces the ref format with examples but adds little beyond what the schema already states.
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 ('Returns the XML') and resource ('a game object') with concrete ref examples, clearly distinguishing it as a read tool. It doesn't explicitly name a sibling like write_object, but the read-only nature is unambiguous.
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 by the purpose (inspect an object's definition), but the description gives no explicit when-to-use guidance, prerequisites, or alternatives such as search_objects when the ref is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
l10n_scanScan localizable stringsADestructive
Scans a module's XML data, GUI prefabs and C# code (Source/ or code_dir) for {=id}Text strings. Reports texts without ids, empty ids, ids reused with different texts, ids colliding with other modules, and translation coverage per language. fix_missing_ids / fix_conflicts rewrite the module's XML with fresh unique ids.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Module id. | |
| code_dir | No | Folder with the mod's C# sources if outside the module folder. | |
| include_code | No | Also scan .cs files (default: when a Source folder or code_dir exists). | |
| fix_conflicts | No | Give new ids to strings whose id is reused with a different text, here or in another module (default false). | |
| fix_missing_ids | No | Add {=newId} to player-facing XML texts that have none (or {=}) (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=true, and the description corroborates by disclosing that the fix flags rewrite the module's XML with fresh unique ids — concrete detail beyond the annotation about what is mutated. It stops short of stating reversibility or whether a scan alone (no fix flags) is purely read-only.
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?
Three sentences, all informative and front-loaded with the scan scope before the reporting categories and the mutation behavior. The second sentence is a dense list but every item 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?
With no output schema, the description usefully summarizes the report contents (missing/empty/reused/colliding ids plus per-language coverage) and the mutation side effects, which is enough for an agent to call it correctly. Permission or rate-limit prerequisites are absent but are marginal here.
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%, so the structured fields already document all five parameters; the description still adds value by tying code_dir to the Source/ fallback and by characterizing the fix flags as XML rewrites with fresh unique ids rather than just boolean toggles.
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 and resource (scans a module's XML, GUI prefabs and C# code for {=id}Text strings) and enumerates exactly what problems it reports, so an agent knows the scope well. It does not explicitly distinguish itself from the nearby l10n_status / l10n_set siblings, which keeps it short of a 5.
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 closing sentence explains what fix_missing_ids / fix_conflicts do, implying when those flags apply, but there is no explicit when-to-use guidance or comparison to l10n_status / l10n_set, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
l10n_setWrite translationsADestructive
Writes translations for one language into the module's ModuleData/Languages// files (creates language_data.xml and _strings.xml when missing; existing ids are updated in place). Warns when {PLACEHOLDERS} differ from the source text.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Target file relative to ModuleData/Languages (default <folder>/<module>_strings.xml). | |
| module | Yes | Writable module id. | |
| remove | No | String ids to delete from the language files (e.g. stale ones). | |
| language | Yes | Target language (CNs/zh/简体中文, CNt, RU, DE, …). | |
| translations | No | Map of string id → translated text. Values are strings. | |
| allow_unknown_ids | No | Write ids that do not occur in the module's sources (default false: they are skipped). | |
| fill_untranslated_with_source | No | Also add every untranslated id with its source text (template for human translators). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the bar is lower, yet the description still adds real context: files are created when missing (language_data.xml, <module>_strings.xml), existing ids are updated in place, and a warning fires on placeholder mismatch. It does not mention that the `remove` parameter deletes ids, which is the most destructive behavior here.
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?
Dense and front-loaded: the primary action and target location come first, with file-creation and update semantics packed into one parenthetical. No filler sentences, though the parenthetical is heavy enough to slow a quick read.
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?
With annotations covering the safety profile and no output schema to explain, the description is nearly sufficient: it covers target files, creation, in-place updates, and placeholder validation. The gap is the deletion semantics of `remove` and any indication of return/confirmation behavior.
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 all seven parameters, making 3 the baseline. The description adds only indirect parameter context (placeholder validation tied to `translations`), with no elaboration on `remove`, `file` defaults, or id handling beyond 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?
States a specific verb (writes), a specific resource (translations for one language), and a precise scope (the module's ModuleData/Languages/<folder>/ files). The write semantics clearly distinguish it from read-oriented siblings like l10n_scan and l10n_status.
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 the operation but gives no explicit when-to-use, when-not, or named alternative (e.g. l10n_scan for reading, l10n_status for checking coverage). Usage is inferable from the verb and resource, but nothing routes the agent decisively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
l10n_statusList strings to translateARead-only
Lists a module's strings for one language as JSON lines {"id","text"[,"tr"]}: untranslated (default), translated, all, or stale (translations whose id no longer exists). Strings already translated by the game/other modules (same id and text) are skipped. Translate them and send the result to l10n_set.
| Name | Required | Description | Default |
|---|---|---|---|
| show | No | Which entries (default untranslated). | |
| limit | No | Max entries (default 100, max 500). | |
| module | Yes | Module id. | |
| offset | No | Skip entries (paging). | |
| code_dir | No | Folder with C# sources outside the module. | |
| language | Yes | Target language: CNs/zh/简体中文, CNt/zh-TW, RU, DE, FR, JP, KO, TR, PL, BR, IT, SP, EN. | |
| include_code | No | Include strings from C# sources (default: when Source/ or code_dir exists). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring safety, the description still adds real behavioral context: stale means translations whose id no longer exists, and strings already translated by the game or other modules (matching id and text) are silently skipped. That skip rule is essential to interpreting results and is not in the annotations or 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 dense sentences, front-loaded with the action and output format, then the filtering/skip semantics and the next-step handoff. The inline {id, text[, tr]} notation is compact and earns its space, though it reads slightly telegraphically.
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?
There is no output schema, so the description carries the return-value burden, and it does describe the JSON-lines record shape and skip behavior. Combined with 100% parameter coverage and readOnly annotations, an agent has nearly everything needed; only pagination behavior (limit/offset) is left to the schema.
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%, so baseline is 3, but the description adds meaning beyond the schema: it defines the default filter (untranslated) and clarifies the non-obvious 'stale' enum value as translations with vanished ids. This enriches the most ambiguous parameter rather than restating it.
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 (Lists) and resource (a module's strings for one language) and pins down the exact output shape as JSON lines of {id, text[, tr]}. It also names the counterpart tool (l10n_set) that consumes the results, so an agent can place it in the workflow without opening the schema.
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 explains the filter modes (untranslated default, translated, all, stale) and gives a clear workflow: list, translate, send to l10n_set. It does not explicitly state when to prefer this over l10n_scan, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modulesList modulesARead-only
Lists installed modules (official, Steam Workshop, your own) with id, version, flags (official / writable / workshop / enabled in launcher) and folder. filter: all | official | mods | writable | workshop | enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional substring of id or name. | |
| filter | No | Which modules to show (default all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful context by disclosing the sources scanned (official, Steam Workshop, user's own) and exactly which fields come back (id, version, flags, folder), which the annotations do not provide.
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 dense sentences, front-loaded with the verb and scope, then the return fields, then filter values. No filler; every clause carries information.
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?
With no output schema, the description usefully enumerates the returned fields and sources, and the two optional params are fully covered by the schema. It is nearly complete, though it could clarify the difference between the 'mods' and 'writable' filter buckets and note whether results are ever paginated.
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, including the enum values and default. The description merely restates the filter options and adds no syntax or format meaning beyond the schema; baseline 3 is correct.
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 ('Lists') and resource ('installed modules'), enumerates the module sources and the fields returned (id, version, flags, folder). It is unambiguous on its own, though it never names or differentiates itself from the sibling module_info.
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 only implied: the 'filter: all | official | mods | writable | workshop | enabled' list suggests how to narrow results, but there is no explicit when-to-use, no when-not-to-use, and no pointer to alternatives such as module_info for single-module details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_typesList data typesARead-only
Summarizes game data by XmlName id (Items, NPCCharacters, SPCultures, Factions, Kingdoms, Settlements, partyTemplates, …) with the object tags and counts per module. Use it to learn what exists before searching.
| Name | Required | Description | Default |
|---|---|---|---|
| module | No | Optional module filter: an id, comma list, or official | mods | writable | workshop. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds what the output contains (object tags and counts per module), but it does not disclose permissions, rate limits, or any other behavioral constraint beyond the summary shape.
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 zero filler: the first front-loads the purpose and examples, the second states the usage condition. Every phrase 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 simple, read-only listing tool with full schema coverage and no output schema, the description explains the return shape (tags and counts per module) and the intended use. It omits any direct mention of the module parameter, but the schema covers that completely, so the gap is minor.
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%, and the schema already explains the optional module filter in detail (id, comma list, or official | mods | writable | workshop). The description only indirectly references modules via 'counts per module' and adds no syntax or format details beyond the schema, so the baseline of 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 gives a specific verb (Summarizes) and resource (game data by XmlName id), plus concrete examples (Items, NPCCharacters, etc.) and the output shape (object tags and counts per module). It does not name a sibling tool explicitly, so it falls short of the top score, but an agent can still tell it apart from list_modules and search_objects from context.
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?
It states a clear use case: 'Use it to learn what exists before searching.' That implies search_objects is the alternative, but no sibling is named and there are no explicit when-not conditions or prerequisites, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
missionAct in the running missionADestructive
In play mode (editor_play) or another running mission (needs the bridge): status (player position, direction, mission state); objects (usable objects near the player — doors, chairs, passages, ladders… — and whether the player can use them); dismount (the editor's test mission spawns a horseman); walk (the player walks a route with the game's own AI movement on the navigation mesh, never teleported, and each leg reports reached / stuck / timed out with the closest approach; the position trace is saved as JSON — evidence that a route can be walked, or where it is blocked); walk_status / walk_stop; teleport (positioning before a test, reported as such — not evidence of a walkable route); use (use an object within reach, the same callback as the interaction key); stop_using.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | use: tag of the usable object's entity. | |
| speed | No | walk: maximum speed limit for the player while walking (default: unchanged). | |
| action | No | Action (default status). | |
| entity | No | use: name of the usable object's entity (or of its parent). | |
| points | No | walk: targets in order, [[x, y, z], …]. | |
| radius | No | objects: search radius in meters (default 10). | |
| position | No | teleport: target; objects: search center (default the player). | |
| direction | No | teleport: direction to face. | |
| tolerance | No | walk: a target counts as reached within this horizontal distance in meters (default 0.5). | |
| trace_file | No | walk/walk_status: where to save the JSON trace (default: Documents/Mount and Blade II Bannerlord/MB2MCP/walk_<id>_<time>.json). | |
| leg_timeout | No | walk: seconds allowed per leg (default 30). | |
| max_distance | No | use: how far the player may be from the object, in meters (default 3). | |
| wait_seconds | No | walk: wait for the result up to this long (default 120; 0 = return at once and poll with walk_status). | |
| allow_mounted | No | walk: test the route on horseback when the player is mounted (default false: dismount first). | |
| stall_seconds | No | walk: a leg fails as 'stuck' after this many seconds without 0.3 m of progress (default 6). | |
| return_to_start | No | walk: afterwards walk the route back to where the player started (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the agent already knows this mutates state. The description adds valuable behavior for walk (per-leg reached/stuck/timed out, closest approach, JSON trace location) and that teleport is cosmetic. However it never explains what the destructive actions change or need (dismount/use/stop_using side effects, bridge/auth requirements), leaving the destructive profile under-described.
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 run-on sentence with stacked parentheses covering nine actions is hard to parse and not front-loaded by action. The content is dense rather than padded, but the structure works against quick scanning.
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?
With no output schema and 16 parameters, the description compensates by describing what status returns (position, direction, mission state), what objects returns (usable objects and whether usable), and what walk produces. Coverage of the secondary actions is thinner, but the core workflows are adequately explained.
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% across 16 parameters, so the schema already defines every field including defaults. The description adds only high-level semantics (walk vs teleport, walk reports) rather than per-parameter meaning. Baseline 3 is appropriate when the schema carries the parameter burden.
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 tool role (acting inside the running mission) and enumerates each action with its effect: status, objects, walk, teleport, use, dismount, etc. It distinguishes itself from siblings by requiring play mode (editor_play) or another running mission via the bridge. The laundry-list form makes it verbose but the verbs and resources are concrete.
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?
It states the operating precondition ('In play mode (editor_play) or another running mission (needs the bridge)') and draws a meaningful discrimination between walk and teleport: walk is 'evidence that a route can be walked', teleport is 'positioning before a test ... not evidence of a walkable route'. No explicit exclusions or when-not guidance beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
module_infoModule detailsARead-only
Details of one module: SubModule.xml fields, dependencies (installed versions), DLL entries, every registration with its resolved files and object counts, XSLT patches, unregistered files and language files.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Module id (e.g. MyMod, Native, SandBoxCore). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral detail beyond that: it discloses that dependency versions are resolved/installed, that Xmls entries come with resolved files and object counts, and that unregistered files and language files are included — which tells the agent this is an aggregating inspection call, not a raw file dump.
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 that front-loads the core purpose ('Details of one module') and then lists contents. Nothing is wasted, though the long comma-separated enumeration is slightly harder to scan than a short lead sentence plus a bulleted scope list would be.
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?
With no output schema, the description carries the burden of describing return values, and it does so thoroughly across every section the agent will receive. It is nearly complete; the only gap is error behavior for an unknown module id and any note on output size for large mods.
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 'module' parameter is already documented with examples (MyMod, Native, SandBoxCore). The description adds nothing about the parameter itself, so the 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?
States a specific resource (one module) and enumerates exactly what the tool surfaces — SubModule.xml fields, dependencies, DLL entries, Xmls registrations, XSLT patches, unregistered/language files. It is clearly distinct from list_modules (singular vs plural) and from edit_submodule, but it never names those siblings to sharpen the 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?
There is no explicit when-to-use guidance, no statement of prerequisites (e.g. a valid installed module id), and no routing to alternatives such as list_modules for enumeration or game_info for broader game context. Usage is only implied by the singular 'one module'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prefab_createCreate a prefabADestructive
Saves a prefab into /Prefabs/_prefabs.xml from a scene entity (from_scene + entity; its position is reset to the origin) or from <game_entity> XML. The editor loads module prefabs at startup (restart it to see new ones).
| Name | Required | Description | Default |
|---|---|---|---|
| xml | No | Alternatively a complete <game_entity> element. | |
| name | Yes | Prefab name (unique across modules). | |
| entity | No | Handle or name of the entity in from_scene. | |
| module | Yes | Writable module. | |
| overwrite | No | Replace an existing prefab with this name in the same module. | |
| from_scene | No | Scene that contains the source entity. | |
| keep_position | No | Keep the entity's position instead of moving it to the origin (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description goes beyond them by disclosing that the entity position is reset to the origin, the destination file, and that the editor only picks up new prefabs at startup (a restart is required) — genuinely useful operational context.
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 tight sentences with the primary action and destination front-loaded, followed by the source-mode detail and the startup caveat. Dense with useful detail rather than padded.
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 create tool with full annotation coverage and no output schema, the description supplies the destination path, dual input modes, and the restart requirement. Minor gaps remain around error handling and how overwrite interacts with an existing prefab.
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% so the baseline is 3, but the description adds relational meaning the flat schema lacks: that from_scene and entity are used together as a pair and that position resets unless keep_position is set, clarifying how the source-mode parameters combine.
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?
Uses a specific verb (Saves) and resource (prefab) and names the exact output file path and the two source modes (scene entity or game_entity XML). The purpose is unambiguous, though it never explicitly contrasts itself with the sibling prefab_search.
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 two source modes (from_scene + entity vs. xml) imply when each input applies, and the startup-load note hints at the workflow context, but there is no explicit when-to-use/when-not guidance or reference to any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prefab_searchSearch prefabsARead-only
Searches prefab definitions (Modules//Prefabs/.xml — what the editor's prefab browser shows) by name, mesh, script or tag. name= returns the prefab's XML. Use the names with scene_edit action=add prefab=….
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag used by the prefab. | |
| mesh | No | Substring of a mesh used by the prefab. | |
| name | No | Exact prefab name to show in full. | |
| limit | No | Max rows (default 40). | |
| query | No | Substring (or /regex/) of the prefab name. | |
| module | No | Module filter (id, comma list, official, mods). | |
| offset | No | Skip rows. | |
| script | No | Script component name used by the prefab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: name=<exact> changes the result shape by returning the prefab's full XML, and it clarifies the underlying file scope. It does not mention pagination behavior, though limit/offset are schema-documented.
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 tight sentences with no filler: the search scope and fields come first, then the special exact-name behavior, then the integration hint. Every clause 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?
With no output schema, the description still conveys the key return-value nuance (full XML on exact name match) and the intended consumer (scene_edit). It omits what non-exact result rows contain, but with all 8 parameters fully described in schema and read-only annotations present, an agent has enough to call it correctly.
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, which sets the baseline at 3. The description adds only the exact-vs-substring distinction between name and query, which the schema already conveys via 'Exact prefab name to show in full', so net added meaning is marginal.
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 (Searches) and resource (prefab definitions) plus the exact searchable fields (name, mesh, script, tag) and where the data lives (Modules/*/Prefabs/*.xml). This cleanly separates it from prefab_create, asset_search and search_objects, so an agent can pick it without opening a schema.
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?
Gives a concrete downstream workflow: 'Use the names with scene_edit action=add prefab=…', which tells the agent why and when to call this. It does not explicitly exclude the overlapping siblings (asset_search, search_objects), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_logsRead game logsARead-only
Reads Bannerlord's logs to debug a mod: rgl_log_*.txt (main log), rgl_log_errors_*.txt, launcher and crash files under ProgramData and Documents. action=list shows recent files; action=read (default) shows the tail of the latest log or matches of grep / errors_only.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | latest (default), latest-errors, launcher, a file name from action=list, or a full path inside a log folder. | |
| grep | No | Regex or text to filter lines (case-insensitive), e.g. your module id or 'xml'. | |
| tail | No | Max lines/matches to return (default 120, max 1000). | |
| action | No | read (default) or list. | |
| context | No | Context lines around matches (default 0, max 10). | |
| errors_only | No | Only lines that look like errors/exceptions (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint; the description adds real context by naming the log locations (ProgramData/Documents), the file families, and default behaviors (tail of latest log, grep filtering). It does not cover output format or size limits, but the behavioral additions are solid.
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 dense but well-ordered single passage: purpose first, then actions, with no padding sentences. Slightly long, but every clause carries information about files or actions.
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?
With no output schema and six optional parameters, the description adequately conveys what the tool reads and how actions map to behavior. It lacks any note on result format, but for a read-only log tool it is close to complete.
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%, so the schema carries the per-parameter detail and baseline would be 3. The description raises this by describing how parameters combine - read returning the tail or grep/errors_only matches - which is interaction semantics the schema does not convey.
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 (Reads) and resource (Bannerlord's logs) and immediately names the goal (debug a mod), then enumerates the concrete file families involved. This is clearly distinguishable from data-oriented siblings like module_info or game_info.
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 differentiates action=list (recent files) from action=read (default, tail of latest log or grep/errors matches), giving the agent a clear selection rule. It stops short of stating when to prefer this over other diagnostic tools, so it misses the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_createCreate a sceneA
Creates SceneObj// in a writable module: a copy of an existing scene (template=…, any module; terrain/navmesh files are copied, name and unique token renewed) or a minimal empty scene like the editor's New Scene (envmap probe + ground plane, terrain off).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Scene name (folder name), e.g. mymod_arena_a. | |
| module | Yes | Writable module. | |
| template | No | Scene to copy (name or Module/name). Omit for an empty scene. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say it is a non-destructive, non-openWorld write), the description discloses concrete side effects: terrain/navmesh files are copied, and the name and unique token are renewed. It also specifies the contents of the empty-scene variant (envmap probe + ground plane, terrain off). This is useful behavioral context the annotations do not carry.
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 with the output path and primary behavior front-loaded, followed by the two modes in parentheses. Every clause carries information, though the parenthetical structure is dense enough to require careful parsing.
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 3-parameter write tool with no output schema but full annotation coverage, the description covers what gets created, where, and how the template parameter changes the result. It stops short of stating what is returned or whether the writable-module requirement is validated, but there is no major gap 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 coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: 'template=…, any module' clarifies the template may come from a different module than the target, and 'Omit for an empty scene' reinforces the optional parameter's branching behavior.
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 ('Creates') and the exact artifact produced ('SceneObj/<name>/ in a writable module'), plus the two distinct creation modes. The level of detail (directory layout, file copying, token renewal) makes it clearly distinguishable from scene_edit or clone_object without opening any schema.
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 tells the agent how to choose between the two modes: supply template=… to copy an existing scene, or omit it for a minimal empty scene. It gives clear context for when each path applies but names no explicit exclusions or alternative tools (e.g. clone_object).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_editEdit scene entitiesADestructive
Adds, updates, deletes or duplicates entities. File mode edits scene.xscene of a writable module (formatting preserved, undoable). live=true edits the scene open in the Modding Kit editor through the bridge (then save with Ctrl+S in the editor); live also supports select, focus and snap_to_ground. add: place a prefab (prefab=…) or a mesh (mesh=…, physics=bo_…) or raw <game_entity> XML, count+offset make rows. update: position/move_by, rotation/rotate_by (degrees unless rotation_unit=rad), scale, name (exact for every target unless number_names), add_tags/remove_tags, attributes, script+variables, levels (file mode). Live targets: #handles from scene_entities live (valid until the scene is reopened) or names (child entities included). Siege spawner names are protected: the editor derives their prefab from the name.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | No | add (file mode): a complete <game_entity> element. | |
| live | No | Edit the scene open in the running editor instead of the file (default false). | |
| mesh | No | add: meta mesh name (see asset_search kind=mesh). | |
| name | No | Name of new entities / new name for update. Siege spawners (BallistaSpawner, MangonelSpawner…) must keep '<prefab>_spawner' names — the editor derives their prefab from the name; other names are refused. | |
| count | No | add/duplicate: number of copies (default 1). | |
| scale | No | [x, y, z] scale (a single number scales uniformly). | |
| scene | No | Scene name, Module/scene or path (file mode). | |
| action | Yes | What to do. | |
| levels | No | update (file mode): the scene levels the entities belong to, e.g. ["siege"] ([] = every level). Define levels with scene_settings add_levels. | |
| module | No | Module to look in when the scene name is ambiguous. | |
| offset | No | add/duplicate: step between copies [dx, dy, dz] (duplicate default [1,0,0]). | |
| parent | No | add (file mode): handle or name of the parent entity. | |
| prefab | No | add: prefab name (see prefab_search). | |
| script | No | update (file mode): script component name whose variables to set (created if missing). | |
| move_by | No | update: relative move [dx, dy, dz]. | |
| physics | No | add (file mode, with mesh): physics shape such as bo_… | |
| visible | No | live update: show/hide the entities. | |
| add_tags | No | Tags to add. | |
| entities | No | Targets: handles ([12], 12/0 in files; #id numbers live), names, 'guid:{…}' or '@selected' (live). | |
| position | No | [x, y, z] position (add: placement; update: absolute). | |
| rotation | No | [x, y, z] euler rotation (degrees unless rotation_unit=rad). | |
| rotate_by | No | update: relative rotation [dx, dy, dz] (degrees by default). | |
| variables | No | update (file mode): script variables, e.g. {"SoundName": "event:/…"}. Values are strings. | |
| attributes | No | update (file mode): attributes to set on <game_entity>, e.g. {"mobility": "1"}. Values are strings. | |
| remove_tags | No | Tags to remove. | |
| number_names | No | Append _1, _2 … to `name`: default true when add makes several entities (never for siege spawners), false for update (every target gets exactly `name`). | |
| rotation_unit | No | Unit of rotation / rotate_by (default deg). | |
| snap_to_ground | No | live: drop new/moved entities onto terrain or geometry below. | |
| add_to_selection | No | live select: keep the current selection. | |
| remove_attributes | No | update (file mode): attributes to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (destructive=true, not read-only), but the description adds real behavior the annotations cannot: file edits preserve formatting and are undoable, live edits are not persisted until Ctrl+S, live handle targets are only valid until the scene is reopened, and Siege spawner names are protected/refused. This is exactly the value-add the higher bar looks for.
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?
For 30 parameters and two modes this is tightly compressed, front-loaded with the action list and the file/live split before the per-action detail. The semicolon-chained sentences are dense but every clause carries operational 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?
Given dual-mode complexity, 30 params and no output schema, the description covers mode semantics, target identity (handles/names/#ids), naming protection and the live save workflow. It omits what the tool returns (e.g. handles of newly added entities) and whether undo applies to live as well as file mode, which for a destructive multi-action tool would have closed the loop.
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%, so the baseline is 3; the description goes beyond it by mapping parameters to actions (add: prefab/mesh/xml/count+offset; update: position/move_by, rotation/rotate_by, scale, name, tags, attributes, script+variables, levels; live-only: select, focus, snap_to_ground) and clarifying relative vs absolute and units. It largely restates schema text (degrees unless rotation_unit=rad), so it lands just above baseline.
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 set of verbs (adds, updates, deletes, duplicates) applied to a concrete resource (scene entities), then immediately splits the tool into its two operating modes (file vs live editor bridge). An agent can distinguish this from read-only siblings like scene_entities or scene_info without opening the schema.
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?
It gives an explicit routing rule for the biggest decision — file mode edits scene.xscene of a writable module while live=true edits the scene open in the editor (then save with Ctrl+S) — and cross-references helpers (scene_entities for live #handles, prefab_search, asset_search kind=mesh, scene_settings add_levels). It stops short of stating when *not* to use it (e.g. vs editor_command or delete_object).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_entitiesList or inspect scene entitiesARead-only
Lists entities of a scene file with handles ([12], [12/0] for children), name, prefab, mesh, position, rotation (degrees), scale, tags and scripts; filters by name/prefab/tag/script/mesh or distance. entity=<handle|name> returns the entity's XML. live=true lists the scene open in the Modding Kit editor (#handles are session ids for scene_edit live=true).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Exact tag. | |
| live | No | Query the scene open in the running editor (default false). | |
| mesh | No | Substring of a meta mesh name (file mode). | |
| name | No | Substring (or /regex/) of the entity name. | |
| near | No | Only entities within `radius` of this [x, y, z] point. | |
| limit | No | Max rows (default 60). | |
| scene | No | Scene name, Module/scene or path (file mode). | |
| entity | No | Handle or name of one entity to show in full. | |
| module | No | Module to look in when the scene name is ambiguous. | |
| offset | No | Skip rows (paging). | |
| prefab | No | Substring of the prefab name (files: prefab or old_prefab_name; live: linked prefab instances). | |
| radius | No | Radius in meters for `near` (default 10). | |
| script | No | Exact script component name (file mode). | |
| selected | No | live=true: only the editor's current selection. | |
| recursive | No | Include child entities (default: true when filtering, false otherwise). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring safety, the description still adds real value: handle syntax ([12], [12/0] for children), rotation expressed in degrees, the XML return for entity=, and the live-mode session-id semantics. It doesn't cover paging/limit behavior in prose (deferred to schema), but the output-shape disclosure is strong for a tool with no output 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?
Three dense sentences, front-loaded with the core purpose and return columns, then the single-entity path, then live mode. No filler; every clause carries information an agent needs.
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 15-param read tool with no output schema and no enums, the description supplies the return-column list, mode semantics (file vs live), and the entity= drill-down path, fully compensating for the missing output schema.
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%, so the baseline is 3, but the description adds meaning beyond the schema: rotation is in degrees, handle vs name formats, and the composite filtering surface (name/prefab/tag/script/mesh or distance). These clarify parameter intent rather than merely restating field 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?
States a specific verb ('Lists') and resource ('entities of a scene file') and enumerates the returned columns (handles, name, prefab, mesh, position, etc.). An agent can distinguish this from scene_info (scene metadata) and scene_edit (mutation) without opening a schema.
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?
Gives clear conditional guidance: entity=<handle|name> to get one entity's XML, live=true to query the editor's open scene, and notes the #handle linkage to scene_edit live=true. It stops short of explicitly stating when to prefer this over scene_info or when not to use it, so it's clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_infoScene overview and checksARead-only
Overview of a scene file: header, environment/atmosphere settings, terrain, entity/prefab/script/tag statistics, spawn points, bounding box, where the game references it, and checks (unknown prefabs/meshes/physics shapes, XML errors). live=true reports the scene currently open in the Modding Kit editor instead (needs the editor bridge).
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | Report the scene open in the running editor (default false). | |
| check | No | Run consistency checks (default true). | |
| scene | No | Scene name, Module/scene, or path. Not needed with live=true. | |
| module | No | Module to look in when several have a scene with that name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, so safety is covered, and the description still adds real context: live=true depends on the Modding Kit editor bridge being available, and checks flag unknown prefabs/meshes/physics shapes plus XML errors. It doesn't disclose output format, but as a read-only tool that gap is modest.
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?
Front-loaded with the resource and its contents; the live/editor caveat comes last where it belongs. The first sentence is a long comma-delimited enumeration, but every listed item is informative given there is no output schema.
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?
With no output schema, the description usefully compensates by enumerating what is reported, and all four parameters are documented. It is nearly complete for a read-only overview tool; only the live-vs-file behavioral difference in returned data could be spelled out further.
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%, so 3 is the baseline, but the description adds meaning the schema doesn't: live=true reports the currently open editor scene rather than a named file, and 'checks' is expanded into the concrete problems it detects. The dependency note ('needs the editor bridge') is genuinely additive parameter context.
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 resource (scene file) and enumerates exactly what the overview contains: header, environment/atmosphere, terrain, statistics, spawn points, bounding box, references, and checks. This distinguishes it cleanly from siblings like scene_list, scene_entities, and scene_settings, which target narrower slices of scene data.
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?
Frames the tool as an overview/first-look and gives a clear conditional for the live variant (use live=true for the scene open in the editor, needs bridge). It does not explicitly name alternatives such as scene_settings or scene_entities or state when-not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_listList scenesARead-only
Lists scenes (SceneObj//scene.xscene) of all or selected modules with size, date and whether terrain/navmesh data exists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 100). | |
| query | No | Substring of the scene name. | |
| module | No | Module filter: id, comma list, official | mods | writable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that terrain/navmesh presence is reported and the file layout it inspects, which is useful context, but it says nothing about ordering, truncation behavior at the default 100-row limit, or cost on large module sets.
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 that front-loads the operation, then the path convention, then the returned fields. Nothing is padded and nothing needs re-reading.
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?
With no output schema, the description compensates by naming the fields returned (size, date, terrain/navmesh presence), which is exactly the information an agent would otherwise lack. Combined with annotations covering read-only semantics, it is close to sufficient; only ordering/pagination behavior is unstated.
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 limit, query and module (including the official|mods|writable filter). The description only echoes module selection at a high level and adds no syntax, default, or semantics beyond what the schema provides; 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?
States a specific verb and resource ('Lists scenes') and even names the storage layout (SceneObj/<name>/scene.xscene) plus the columns returned (size, date, terrain/navmesh presence). That scope ('all or selected modules') implicitly separates it from the single-scene sibling scene_info, though no sibling is named explicitly.
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 'of all or selected modules' implies when to reach for it (broad enumeration across modules) versus a single-scene lookup, but there is no explicit when-to-use, when-not-to-use, or named alternative such as scene_info. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_settingsScene environment & atmosphereADestructive
Reads or changes a scene's <environment_properties> (e.g. atmosphere_name, is_indoors, water_level, physics_world_min, gi_data_exists), its atmosphere.xml values (time_of_day, color_grade_name, season, fog_density, sun_altitude, …), its level definitions (base, siege, civilian… — entities join them with scene_edit levels) and the editor camera saved in <editor_data>. Without changes it lists the current values.
| Name | Required | Description | Default |
|---|---|---|---|
| scene | Yes | Scene name, Module/scene or path. | |
| module | No | Module to look in when the scene name is ambiguous. | |
| add_levels | No | Scene levels to define, e.g. ["siege"]; each gets the next free mask bit. | |
| atmosphere | No | atmosphere.xml value name → value. Values are strings. | |
| environment | No | environment property name → value. Values are strings. | |
| editor_camera | No | Editor camera to save: position, forward (direction; normalized, must not be vertical), elevation, bearing (or the full editor_camera_* names). Values are strings. | |
| remove_levels | No | Scene levels to remove (refused while entities still use them). | |
| copy_editor_camera_from | No | Copy the editor camera fields from another scene (name, Module/scene or path), e.g. a backup that opened correctly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a mutating, potentially destructive tool. The description adds useful context in disclosing the dual read/write behavior and the full scope of what it touches, but it does not explain reversibility or what removal actually destroys beyond what the schema already states ('refused while entities still use them').
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 sprawling sentence dense with parentheticals and ellipses. It is front-loaded with the read/change verb, but the packed example lists make it harder to parse than a structured multi-sentence form would be.
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 destructive tool with nested objects and no output schema, the description covers the scope of every resource it manages and notes the read-vs-write behavior. The remaining gap is the lack of any routing versus the overlapping editor_camera and scene_edit siblings, but nothing essential to invoking it is absent.
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?
With 100% schema description coverage the baseline is 3, but the description earns extra credit by giving concrete value-name examples for the atmosphere (time_of_day, color_grade_name, fog_density, sun_altitude) and environment (atmosphere_name, is_indoors, water_level) objects, clarifying what the otherwise opaque name→value maps should contain.
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 clear verb pair (reads or changes) and enumerates the specific resources involved: environment_properties, atmosphere.xml values, level definitions, and the editor camera in editor_data. It partially distinguishes itself from siblings by noting that entities join levels via scene_edit, but it is a bundled tool covering several resources at once, which blurs a single crisp purpose.
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?
'Without changes it lists the current values' implies the read mode, and the scene_edit reference hints at the level workflow. However, there is no explicit when-to-use guidance against the sibling tools editor_camera or scene_edit, which overlap directly with portions of this tool. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_objectsSearch game objectsARead-only
Searches every module's XML objects (items, troops, heroes, clans, kingdoms, settlements, cultures, crafting pieces, party templates, strings, …) by id / name and attribute filters. Chinese queries also match the 简体中文 names. Returns 'Tag.id "Name" — module file:line | key attributes'.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Also show/match translated names in this language (CNs, zh, 简体中文, RU, …). | |
| type | No | Tag or reference prefix, e.g. Item (includes CraftedItem), NPCCharacter, Hero, Faction, Kingdom, Settlement, Culture, PartyTemplate, CraftingPiece. Comma list allowed. | |
| limit | No | Max results (default 30, max 200). | |
| query | No | Substring of id or name (case-insensitive), or /regex/. Optional when type/where is given. | |
| where | No | Attribute filters on the object element: culture=Culture.empire, Type=OneHandedWeapon, level>20, is_hero=true, name~sword, tier?, !culture | |
| module | No | Module filter: id, comma list, official | mods | writable | workshop. Default: all. | |
| offset | No | Skip this many results (paging). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: it searches across every module, supports Chinese (简体中文) name matching, and specifies the exact return line format, which is valuable given no output schema exists.
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?
Three tight sentences with no filler; the scope and matching behavior are front-loaded and the return-format sentence earns its place by compensating for the absent output schema.
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 broad read-only search with no output schema, the description supplies the missing return shape and notes cross-module and multilingual matching. It is nearly complete, though it omits default result caps and paging interplay that the schema handles separately.
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 all seven parameters are already documented in the schema. The description only restates the id/name/attribute-filter dimension, adding no syntax detail beyond what the schema provides, so the baseline of 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?
States a specific verb (Searches) and resource (every module's XML objects), then enumerates the object families covered. This clearly distinguishes it from single-object retrieval tools like get_object and reference tools like find_references.
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?
It notes query is optional when type/where is given, implying filter-based search, and the schema notes default module scope. However, it never states when to choose this over siblings such as list_types, get_object, or find_references, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_attributesChange attributes of your objectADestructive
Changes attributes of an object that lives in a writable module, editing the file in place. Use path to reach nested elements (mini XPath): ItemComponent/Weapon, skills/skill[@id='OneHanded'], Equipments/EquipmentRoster[1]/equipment[@slot='Item0']. For objects owned by other modules use xslt_patch.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Apply to every element matched by path (default false = must match exactly one). | |
| ref | Yes | Object: Item.x, NPCCharacter.x, … or bare id. | |
| set | No | Attributes to set, e.g. {"weight": "2.5", "value": "1200"}. Values are strings. | |
| path | No | Optional path to nested element(s) inside the object. | |
| module | Yes | Writable module that defines the object. | |
| remove | No | Attribute names to remove. | |
| validate | No | Run XSD validation after writing (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so safety is covered; the description adds the important detail that the edit happens in place on the file and is limited to writable modules. It stops short of explaining reversibility, failure/rollback behavior on validation failure, or interaction with edit_history/undo_edit.
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?
Three sentences, front-loaded with the core action and scope, then path syntax, then the alternative tool. The dense XPath examples earn their space by being directly actionable.
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 in-place mutation with 7 fully documented parameters and no output schema, the description covers purpose, scoping, routing, and path semantics. The remaining gap is failure behavior (e.g., whether a failed XSD validation leaves the file modified).
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%, so baseline is 3, but the description goes beyond the schema's vague 'Optional path to nested element(s)' by supplying real mini-XPath syntax and three worked examples. It does not add anything for set/remove/all/validate 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?
States a specific verb and resource (changes attributes of an object) and immediately bounds the scope to objects in a writable module, edited in place. This clearly separates it from xslt_patch, which the description names as the tool for objects owned by other modules.
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?
Gives an explicit routing rule: use this tool for objects in a writable module, and use xslt_patch for objects owned by other modules. It also demonstrates when the path parameter is needed (nested elements) with three concrete XPath examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_editUndo an editADestructive
Reverts one change made through this server (default: the most recent not yet undone, optionally of one module), restoring backed-up files and deleting files it created. Refuses if the files changed afterwards unless force=true.
| Name | Required | Description | Default |
|---|---|---|---|
| seq | No | Edit number from edit_history (default: latest). | |
| force | No | Undo even if files were modified after the edit (those later changes are lost). | |
| module | No | Undo the latest edit of this module. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds real substance beyond that: it restores backed-up files, deletes files the edit created, and refuses when files changed afterwards unless force=true. The guard and the loss-on-force condition are exactly the behavioral detail an agent needs.
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 with zero filler, front-loading the core action and default behavior before the refusal/force caveat.
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 three-parameter mutation tool with no output schema, the description covers action, default selection, side effects, and the failure/override path completely; 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 coverage is 100% so the baseline is 3, but the description adds cross-parameter meaning: that seq defaults to the latest not-yet-undone edit and that module narrows selection to one module. The force condition is also explained in behavioral terms.
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 (reverts) and resource (one change made through this server), with the exact scope of a single edit. It is clearly distinguishable from siblings like edit_submodule or forget_history.
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?
Explains the default selection behavior (most recent not yet undone) and the condition under which the tool refuses and requires force=true. This gives clear operating context, though it does not explicitly name sibling alternatives such as edit_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_moduleValidate a moduleARead-only
Checks a module like the game would: SubModule.xml (ids, versions, dependencies, DLLs), every registered XML (exists, well-formed, game XSD), XSLT compiles, duplicate ids, unresolved references (Item.x, NPCCharacter.x …) against its dependencies, unregistered files, and localization (missing/conflicting {=ids}, translation coverage).
| Name | Required | Description | Default |
|---|---|---|---|
| xsd | No | Run XSD/XSLT checks through .NET (default true). | |
| l10n | No | Check localization (default true). | |
| refs | No | Check references (default true). | |
| module | Yes | Module id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds the meaningful behavioral detail that it checks "like the game would" and enumerates breadth, implying a heavyweight comprehensive pass, but it says nothing about cost, latency, or what the result contains beyond the annotation profile.
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 that front-loads the verb and the "like the game would" framing before the enumerated checks. It is long and list-heavy, but every clause names a distinct check, so little is wasted.
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?
With no output schema, the description carries the burden of explaining what comes back, and it never states the result shape (findings list, error severity, pass/fail). The input side is fully covered, but an agent knows what is checked yet not what to expect in return.
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 all four parameters (module, xsd, l10n, refs) are already documented with defaults. The description's check list loosely maps to the three boolean switches (XSD/XSLT, localization, references), adding marginal clarity, but supplies no syntax or semantics beyond 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?
States a specific verb ("Checks") and resource ("a module") and then enumerates the exact scope: SubModule.xml ids/versions/DLLs, XML well-formedness and XSD, XSLT compilation, duplicate ids, unresolved references, unregistered files, and localization. This clearly separates it from narrower siblings such as l10n_scan or find_references, which cover only subsets.
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 (run a full pre-flight validation of a module) but never stated explicitly, and there is no guidance on when to prefer this over the narrower sibling tools (l10n_scan, find_references, describe_schema) or when not to run it. An agent can infer the context but is given no routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_objectCreate or replace objects (XML)ADestructive
Writes one or more objects (e.g. , , , , , , , ) into a writable module. Replaces an object with the same tag+id in that module, otherwise appends it to the module's file for that data type (creating ModuleData/_.xml and registering it in SubModule.xml). Runs the game's XSD check afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | One or more object elements (a wrapping container like <Items>…</Items> is accepted). Use {=stringId}Text for names. | |
| file | No | Optional target file under ModuleData, e.g. mymod_weapons.xml (created and registered if needed). | |
| mode | No | upsert (default), create (fail if exists), replace (fail if missing). | |
| module | Yes | Writable module id. | |
| xml_id | No | Optional XmlName id when it cannot be inferred from the tag (e.g. Items, NPCCharacters). | |
| validate | No | Run XSD validation after writing (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes well beyond them: it discloses that a matching tag+id is replaced while non-matches are appended, that a new ModuleData/<mod>_<type>.xml file may be created and registered in SubModule.xml, and that an XSD check runs afterward. These are exactly the side effects and hidden registrations an agent needs before invoking a mutation.
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?
Three sentences, front-loaded with the core action and examples before the replacement/append mechanics and validation note. Dense but every clause carries information; the long parenthetical example list borders on verbose, keeping it just under a 5.
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 mutation with no output schema, the description covers write semantics, file creation/registration, and post-write validation. It omits permission or auth requirements for 'writable' modules and does not describe failure behavior beyond mode semantics, which are the only minor 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 schema already documents every parameter including the mode enum and validate default. The description adds the object-identity semantics (replace on matching tag+id) and the accepted container/wrapping form, but does not elaborate on mode or validate beyond what the schema says, 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 (writes/creates or replaces) and resource (XML objects in a writable module), naming concrete element types like <Item>, <NPCCharacter>, and <Culture>. This clearly distinguishes it from siblings such as set_attributes, clone_object, and delete_object, which the description implicitly contrasts with by covering the full create/replace path.
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 explains the internal upsert-vs-append behavior and the implied prerequisite of a 'writable module', which gives useful context for when this tool applies. However, it never explicitly routes the agent against alternatives (e.g. use set_attributes for partial field edits, clone_object to duplicate, edit_submodule to change file registration), so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xslt_patchPatch another module's object (XSLT)ADestructive
Changes an object owned by vanilla or another mod without copying it, by adding a rule to your module's XSLT (ModuleData/XSLT/_.xslt, registered automatically — the same mechanism the official DLC uses). One call per target node; repeated calls merge. Operations: set attributes, remove attributes, remove the node, replace it, append child XML, or clear the rule. Shows a before/after diff computed with the game's XSLT engine.
| Name | Required | Description | Default |
|---|---|---|---|
| set | No | Attributes to set/add, e.g. {"weight": "1.5"}. Values are strings. | |
| path | No | Optional nested element inside the target (mini XPath), e.g. ItemComponent/Weapon or skills/skill[@id='Bow']. | |
| clear | No | Remove this module's existing rule for the target instead. | |
| force | No | Overwrite a hand-written rule with the same match. | |
| module | Yes | Your writable module. | |
| remove | No | Delete the target node entirely. | |
| target | Yes | Object to patch: Item.x, NPCCharacter.x, Culture.empire, Settlement.town_EN1, Faction.clan_x, … | |
| preview | No | Show the before/after diff (default true). | |
| game_type | No | Game type used for the preview (default Campaign). | |
| append_xml | No | Append this XML as child element(s) of the target node. | |
| replace_xml | No | Replace the target node with this XML. | |
| remove_attributes | No | Attribute names to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description corroborates this by describing removal/clear operations. Beyond annotations it adds real context: the exact file written, automatic registration, that it uses the same mechanism as official DLC, and that repeated calls merge rather than overwrite. It stops short of stating permission/auth requirements or conflict-resolution rules.
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 dense sentences, front-loaded with the core action and its mechanism before enumerating operations and the diff behavior. Nearly every clause earns its place, though the parenthetical about the official DLC is slightly ornamental.
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 12-parameter destructive mutation with no output schema, the description covers mechanism, target file, merge semantics, operation set, and the before/after diff. It omits prerequisites (writable module, permission to patch another mod's object) and conflict behavior, but the essentials for correct invocation are 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?
Schema coverage is 100%, so the schema documents all 12 parameters and the baseline is 3. The description still adds value by grouping the operations (set attributes, remove attributes, remove node, replace, append child XML, clear the rule), which conceptually maps to set/remove_attributes/remove/replace_xml/append_xml/clear, helping an agent understand the tool's modes.
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+resource: it 'changes an object owned by vanilla or another mod without copying it' by adding a rule to the module's XSLT. This clearly distinguishes it from copy-based siblings like clone_object/write_object, which operate on your own objects. The mechanism (ModuleData/XSLT/<mod>_<XmlId>.xslt) is named precisely.
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 'without copying it' implies the copy-then-edit alternative it replaces, giving clear usage context. It also clarifies the merge model ('one call per target node; repeated calls merge'). It does not, however, explicitly name siblings like write_object, set_attributes, or xslt_preview or state when to prefer them, so no hard exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xslt_previewPreview XSLT patchesARead-only
Runs the game's merge + XSLT pipeline (System.Xml XslCompiledTransform, like the game) for a module and shows before/after diffs of every object its XSLT rules target (or only targets). Also reveals XSLT errors that would break loading.
| Name | Required | Description | Default |
|---|---|---|---|
| module | Yes | Module whose XSLT to preview (any module, read-only is fine). | |
| xml_id | No | Limit to one XmlName id, e.g. Items. | |
| targets | No | Specific objects to diff, e.g. Item.x or Culture.empire (default: everything the rules target). | |
| game_type | No | Game type (default Campaign). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine value beyond that: it runs the real game engine path (System.Xml XslCompiledTransform), claims fidelity to actual game loading, and discloses that XSLT load-breaking errors are surfaced — useful behavioral context not derivable from structured fields.
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 tight sentences, front-loaded with the core action, followed by the secondary benefit (error surfacing). No filler and nothing redundant.
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?
With no output schema, the description does the work of explaining the return shape (before/after diffs per object, plus XSLT errors). Combined with full schema coverage, an agent has enough to call it correctly; only the exact diff/error format is unspecified.
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% and each of the 4 parameters is documented in-schema (including the `targets` default). The description's '(or only `targets`)' merely restates the schema default rather than adding format or semantics, 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?
The description states a concrete verb+resource: it runs the game's merge + XSLT pipeline for a module and shows before/after diffs per targeted object. The dry-run/preview framing clearly separates it from the sibling xslt_patch, though it never names that sibling explicitly.
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 only implied — the preview/diff framing suggests 'check before patching', and it notes `targets` is optional, but there is no explicit when-to-use vs xslt_patch or validate_module, and no stated exclusions. The schema ('any module, read-only is fine') carries the little guidance that exists.
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.
43 tool updates
v0.3.0- First observed
asset_import - First observed
asset_search - First observed
asset_status - First observed
clone_object - First observed
create_module - First observed
delete_object - First observed
describe_schema - First observed
edit_history - First observed
edit_submodule - First observed
editor_bridge_install - First observed
editor_camera - First observed
editor_command - First observed
editor_launch - First observed
editor_play - First observed
editor_status - First observed
find_references - First observed
forget_history - First observed
game_info - First observed
get_object - First observed
l10n_scan - First observed
l10n_set - First observed
l10n_status - First observed
list_modules - First observed
list_types - First observed
mission - First observed
module_info - First observed
navmesh_query - First observed
prefab_create - First observed
prefab_search - First observed
read_logs - First observed
scene_create - First observed
scene_edit - First observed
scene_entities - First observed
scene_info - First observed
scene_list - First observed
scene_settings - First observed
search_objects - First observed
set_attributes - First observed
undo_edit - First observed
validate_module - First observed
write_object - First observed
xslt_patch - First observed
xslt_preview
TDQS
Scored across 43 tools
Tools generally target distinct resources and actions (modules, XML objects, scenes, assets, editor, history), and the descriptions clarify boundaries. However, with 43 tools there is some potential overlap between editor_command, editor_play, mission, and navmesh_query, and between scene_info, scene_entities, and scene_settings, which could cause occasional misselection.
All names use snake_case, with domain prefixes (scene_, prefab_, asset_, editor_, l10n_) for related groups. The pattern is not strictly verb_noun throughout (e.g., module_info vs list_modules), but it is consistent and readable.
43 tools is well above the 25-tool threshold for 'too many', even for a complex domain. While many tools earn their place, the set is heavy and could be consolidated.
The surface covers the full modding lifecycle: discovery, module/XML editing, XSLT patching, localization, scene/prefab editing, asset import, editor integration, play-testing, and history/undo. No obvious critical gaps for the stated purpose.
Maintenance
Related MCP Connectors
Patterns for designing and reviewing AI skills, agents, and multi-agent workflows. Find guidance on context economy, delegation, verification, and tool design; inspect claims, worked examples, maturity labels, and source references. Five read-only tools let agents discover relevant patterns, compare concise cards, read specific sections, and explore relationships. Hosted Streamable HTTP at https://agentic-atlas.dev/mcp/ — no installation, account, or API key required. Browse the atlas at https://agentic-atlas.dev/.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to search, browse, and manage mods across Nexus Mods, mod.io, Thunderstore, and Modrinth, as well as perform local diagnostics like detecting games and parsing crash logs.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to build Arma Reforger mods from natural language, including API research, code generation, project scaffolding, Workbench control, and in-editor testing.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to develop Banner of the Maid mods by reading and modifying game data (characters, items, weapons, skills, dialogue, saves, portraits) and to perform live in-game verification via launching the game, taking screenshots, and clicking by coordinates.2MIT
- AlicenseBqualityBmaintenanceEnables Baldur's Gate 3 modders to look up game data across base-game and mod layers, run static lint checks on stats and progressions, test changes in a running game through the Script Extender, and export mods for Larian Toolkit/mod.io publishing. It also packs, deploys and restarts the game so mods can be iterated on without leaving the assistant.441MIT