Skip to main content
Glama

MB2-MCP

Turn your AI coding agent into a Mount & Blade II: Bannerlord modding partner.

English · 简体中文 · Tool reference

Node.js MCP Bannerlord Platform Tools License: MIT


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.Xml classes 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.1 and 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.xml automatically; 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 XslCompiledTransform and 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, write Languages/<lang>/ files with placeholder checks.

Scenes and prefabs (files, no game needed)

  • List, filter and edit scene.xscene entities: 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 AssetSources with checks (FBX version, texture size, naming), and search the resource tables of all .tpac packages (~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_status explains 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_play starts and stops the editor's play mode on a saved scene; live scene edits are refused while it runs.

  • mission action=walk lets 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_query asks the engine's path finder: the face under a point, whether two points connect and how long the path is.

  • editor_camera reads and moves the viewport camera; editor_command action=perf samples frame times; action=fill_dialog fills 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_logs restricts 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=0 turns 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=…png use 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=cleanup deletes screenshots, walk traces and logs from Documents\Mount and Blade II Bannerlord\MB2MCP; forget_history deletes 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's scene., editor. and resource. 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_status shows 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_assets only re-converts sources imported before. asset_import prepares and checks the files, asset_status verifies 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.bin is an undocumented compressed format. navmesh_query can 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=focus zooms toward an entity, and scene_settings editor_camera sets 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_play starts 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_edit covers 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 paths

The 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.js

Or 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: 300000

Other MCP clients (Cursor, Cline, Windsurf, Cherry Studio, …): node dist/index.js config json prints a generic mcpServers block.

Options (environment variables)

Variable

Meaning

MB2_GAME_DIR

Game folder (auto-detected otherwise)

MB2_MODULE_DIRS

Extra folders with your own modules (writable), ;-separated — link them into <game>/Modules for the game to load them

MB2_TOOLSETS

Tool groups to expose: core,edit,l10n,scene,assets,editor,logs (default all; fewer tools for small context windows)

MB2_WORKSHOP=0

Do not index Steam Workshop modules

MB2_READONLY=1

Disable module edits; cleanup actions can still delete server-owned records

MB2_DATA_DIR

History and backups (default %LOCALAPPDATA%\mb2-mcp)

MB2_MAX_OUTPUT

Max characters per tool result (default 40000)

MB2_POWERSHELL

Path to Windows PowerShell for XSD/XSLT

MB2_DEBUG=1

Log tool timings to stderr

MB2_REDACT=0

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)

  1. Install the Modding Kit (Steam → Library → Tools).

  2. Ask the agent to run editor_bridge_install while the game is closed. Run it again after game updates, and when editor_status says the bridge is outdated after an MB2-MCP update; restart your MCP client so it loads the new server.

  3. editor_launch modules=["MyMod"] starts the editor; poll editor_status until it reports edit 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 tools
asset_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).

NameRequiredDescriptionDefault
filesYesAbsolute paths of files or folders to import.
moduleYesWritable module.
reimportNoAsk the running editor to re-convert replaced sources (default true). New files are converted only through the Resource Browser's Import new asset.
overwriteNoReplace files that already exist (files over 200 MB are replaced without backup).
subfolderNoOptional subfolder inside AssetSources.
normalize_namesNoLower-case names and replace spaces/special characters (default false).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_statusAsset import statusA
Read-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.

NameRequiredDescriptionDefault
moduleYesModule id.
detailsNoList the resources inside every package (default false: first 40).

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 moduleA
Destructive

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}.

NameRequiredDescriptionDefault
setNoAttributes to change on the copy's root element, e.g. {"name": "Royal Blade", "value": "5000"}. Values are strings.
fileNoOptional target file under ModuleData.
moduleYesTarget writable module.
new_idNoId of the copy (omit to override the original with the same id).
sourceYesObject to copy: Item.x, NPCCharacter.x, Culture.x, … or bare id.
validateNoRun XSD validation after writing (default true).
source_moduleNoCopy this module's definition instead of the effective one.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
nameNoDisplay name in the launcher (default = id).
versionNoVersion like v1.0.0 (default v1.0.0).
categoryNoModuleCategory (default Singleplayer).
locationNoParent folder for the module (default <game>/Modules). Outside Modules the game will not see it.
module_idYesModule id = folder name (letters, digits, _ - .), e.g. MyArmory.
with_csharpNoAlso create a C# project skeleton (default false).
dependenciesNoDependencies as 'Id', 'Id@v1.2.3' or 'Id?' (optional). Default: Native, SandBoxCore, Sandbox, StoryMode?, CustomBattle? at the installed game version.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 moduleA
Destructive

Removes an object definition from a writable module's XML (all definitions of that id in the module).

NameRequiredDescriptionDefault
refYesObject: Item.x, NPCCharacter.x, … or bare id.
moduleYesWritable module id.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 schemaA
Read-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.

NameRequiredDescriptionDefault
pathNoOptional path suffix to disambiguate nested elements, e.g. Item/ItemComponent/Weapon.
xml_idNoXmlName id, e.g. Items, NPCCharacters, SPCultures, Factions, Kingdoms, Settlements, partyTemplates, CraftingPieces, Heroes, GameText.
elementNoElement name, e.g. Item, CraftedItem, NPCCharacter, Culture, Settlement, Weapon, equipment.
observedNoAlso show attribute values seen in official data (default true).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 serverB
Read-only

Lists recent changes made through this MCP server (every write is journaled with a backup), newest first.

NameRequiredDescriptionDefault
limitNoHow many entries (default 20).
moduleNoOnly entries of this module.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 bridgeA
Destructive

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.

NameRequiredDescriptionDefault
forceNoRecompile even if the current version is installed.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 cameraA
Destructive

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.

NameRequiredDescriptionDefault
deltaNomove: offset to add to the camera position.
actionNoAction (default get).
positionNoset: camera position.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
toNoraycast: end point.
fromNoraycast: start point.
pathNoscreenshot: keep a full-resolution copy in this .png file (default: nothing is kept on disk).
checkNofill_dialog: check boxes or radio buttons to set, by label, to true/false. Values are strings.
titleNodismiss_dialogs/fill_dialog: only dialogs whose title contains this text (e.g. 'RGL WARNING', 'Save Scene').
actionYesAction.
buttonNodismiss_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.
fieldsNofill_dialog: input fields to set, by label, name or #1, #2 … in order, e.g. {"Name": "my_scene_v2"}. Values are strings.
prefixNolist_commands: command prefix (default all).
selectNofill_dialog: text of a list or tree item to select (e.g. a module or scene name).
sourceNoscreenshot: '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).
commandNoconsole: the command line, e.g. 'help'.
confirmNoquit: must be true — closes the game; unsaved editor changes are lost.
messageNowarning: text to show in the editor's warning panel.
secondsNoperf: sampling time (default 5, max 120).
positionNoraycast/ground_height: [x, y, z] point to probe downwards from.
max_widthNoscreenshot: width of the image returned to you (default 1280; the saved file keeps full size).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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').

NameRequiredDescriptionDefault
forceNoStart even if a Bannerlord process is already running.
modulesNoYour module ids to load (with their dependencies), e.g. ["MyMod"].
open_editorNoEnter the scene editor automatically (default true; needs the bridge).
decline_safe_modeNoIf 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_problemsNoStart 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_warningsNoDuring 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

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 editorA
Destructive

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.

NameRequiredDescriptionDefault
sceneNostart: play another saved scene of the loaded modules by name instead of the open one (the editor keeps its scene).
actionNoAction (default status).
levelsNostart: scene levels for the mission, e.g. 'siege' or 'civilian' (default none).
missionNostart: the editor mission (default the first one listed by action=missions).
wait_secondsNostart/stop: wait until the player is spawned / the editor is back (default 120 / 30; 0 = return at once).
allow_unsavedNostart: play although changes made through this server since the last save are not in the file (default false).

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 statusA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.xmlA
Destructive

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.

NameRequiredDescriptionDefault
urlNoUrl value.
nameNoNew display name.
moduleYesWritable module id.
add_dllNoDLL SubModule entries to add.
versionNoNew version, e.g. v1.0.1.
categoryNoModuleCategory.
remove_dllNoSubModule names or DLL names to remove.
register_xmlsNoXML registrations to add. path is relative to ModuleData without extension (e.g. mymod_items or XSLT/MyMod_Items).
unregister_xmlsNoPaths (as in XmlName path) to unregister; 'Id:path' to match a specific id.
add_dependenciesNoAdd/update dependencies: 'Id', 'Id@v1.2.3', 'Id?' (optional).
remove_dependenciesNoDependency ids to remove.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 referencesA
Read-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.

NameRequiredDescriptionDefault
refYesReferenced object: Item.x, NPCCharacter.x, Culture.x, Faction.x, … or bare id.
limitNoMax results (default 50).
moduleNoOnly report referencing objects from these modules (id, comma list, official, mods…).

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 historyA
Destructive

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.)

NameRequiredDescriptionDefault
confirmNoMust be true: forgotten edits cannot be undone any more.
older_than_daysNoOnly forget edits older than this many days (default: all).

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 overviewA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 XMLA
Read-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.

NameRequiredDescriptionDefault
refYesObject reference 'Prefix.id' (Item.x, NPCCharacter.x, Faction.x, …) or a bare id.
langNoShow the translated name in this language (e.g. CNs).
moduleNoOnly show the definition from this module.
all_definitionsNoShow the XML of every definition, not only the effective one (default false).

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 stringsA
Destructive

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.

NameRequiredDescriptionDefault
moduleYesModule id.
code_dirNoFolder with the mod's C# sources if outside the module folder.
include_codeNoAlso scan .cs files (default: when a Source folder or code_dir exists).
fix_conflictsNoGive new ids to strings whose id is reused with a different text, here or in another module (default false).
fix_missing_idsNoAdd {=newId} to player-facing XML texts that have none (or {=}) (default false).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 translationsA
Destructive

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.

NameRequiredDescriptionDefault
fileNoTarget file relative to ModuleData/Languages (default <folder>/<module>_strings.xml).
moduleYesWritable module id.
removeNoString ids to delete from the language files (e.g. stale ones).
languageYesTarget language (CNs/zh/简体中文, CNt, RU, DE, …).
translationsNoMap of string id → translated text. Values are strings.
allow_unknown_idsNoWrite ids that do not occur in the module's sources (default false: they are skipped).
fill_untranslated_with_sourceNoAlso add every untranslated id with its source text (template for human translators).

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 translateA
Read-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.

NameRequiredDescriptionDefault
showNoWhich entries (default untranslated).
limitNoMax entries (default 100, max 500).
moduleYesModule id.
offsetNoSkip entries (paging).
code_dirNoFolder with C# sources outside the module.
languageYesTarget language: CNs/zh/简体中文, CNt/zh-TW, RU, DE, FR, JP, KO, TR, PL, BR, IT, SP, EN.
include_codeNoInclude strings from C# sources (default: when Source/ or code_dir exists).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 modulesA
Read-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.

NameRequiredDescriptionDefault
queryNoOptional substring of id or name.
filterNoWhich modules to show (default all).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 typesA
Read-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.

NameRequiredDescriptionDefault
moduleNoOptional module filter: an id, comma list, or official | mods | writable | workshop.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 missionA
Destructive

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.

NameRequiredDescriptionDefault
tagNouse: tag of the usable object's entity.
speedNowalk: maximum speed limit for the player while walking (default: unchanged).
actionNoAction (default status).
entityNouse: name of the usable object's entity (or of its parent).
pointsNowalk: targets in order, [[x, y, z], …].
radiusNoobjects: search radius in meters (default 10).
positionNoteleport: target; objects: search center (default the player).
directionNoteleport: direction to face.
toleranceNowalk: a target counts as reached within this horizontal distance in meters (default 0.5).
trace_fileNowalk/walk_status: where to save the JSON trace (default: Documents/Mount and Blade II Bannerlord/MB2MCP/walk_<id>_<time>.json).
leg_timeoutNowalk: seconds allowed per leg (default 30).
max_distanceNouse: how far the player may be from the object, in meters (default 3).
wait_secondsNowalk: wait for the result up to this long (default 120; 0 = return at once and poll with walk_status).
allow_mountedNowalk: test the route on horseback when the player is mounted (default false: dismount first).
stall_secondsNowalk: a leg fails as 'stuck' after this many seconds without 0.3 m of progress (default 6).
return_to_startNowalk: afterwards walk the route back to where the player started (default false).

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 detailsA
Read-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.

NameRequiredDescriptionDefault
moduleYesModule id (e.g. MyMod, Native, SandBoxCore).

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 prefabA
Destructive

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).

NameRequiredDescriptionDefault
xmlNoAlternatively a complete <game_entity> element.
nameYesPrefab name (unique across modules).
entityNoHandle or name of the entity in from_scene.
moduleYesWritable module.
overwriteNoReplace an existing prefab with this name in the same module.
from_sceneNoScene that contains the source entity.
keep_positionNoKeep the entity's position instead of moving it to the origin (default false).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

read_logsRead game logsA
Read-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.

NameRequiredDescriptionDefault
fileNolatest (default), latest-errors, launcher, a file name from action=list, or a full path inside a log folder.
grepNoRegex or text to filter lines (case-insensitive), e.g. your module id or 'xml'.
tailNoMax lines/matches to return (default 120, max 1000).
actionNoread (default) or list.
contextNoContext lines around matches (default 0, max 10).
errors_onlyNoOnly lines that look like errors/exceptions (default false).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

NameRequiredDescriptionDefault
nameYesScene name (folder name), e.g. mymod_arena_a.
moduleYesWritable module.
templateNoScene to copy (name or Module/name). Omit for an empty scene.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 entitiesA
Destructive

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.

NameRequiredDescriptionDefault
xmlNoadd (file mode): a complete <game_entity> element.
liveNoEdit the scene open in the running editor instead of the file (default false).
meshNoadd: meta mesh name (see asset_search kind=mesh).
nameNoName 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.
countNoadd/duplicate: number of copies (default 1).
scaleNo[x, y, z] scale (a single number scales uniformly).
sceneNoScene name, Module/scene or path (file mode).
actionYesWhat to do.
levelsNoupdate (file mode): the scene levels the entities belong to, e.g. ["siege"] ([] = every level). Define levels with scene_settings add_levels.
moduleNoModule to look in when the scene name is ambiguous.
offsetNoadd/duplicate: step between copies [dx, dy, dz] (duplicate default [1,0,0]).
parentNoadd (file mode): handle or name of the parent entity.
prefabNoadd: prefab name (see prefab_search).
scriptNoupdate (file mode): script component name whose variables to set (created if missing).
move_byNoupdate: relative move [dx, dy, dz].
physicsNoadd (file mode, with mesh): physics shape such as bo_…
visibleNolive update: show/hide the entities.
add_tagsNoTags to add.
entitiesNoTargets: handles ([12], 12/0 in files; #id numbers live), names, 'guid:{…}' or '@selected' (live).
positionNo[x, y, z] position (add: placement; update: absolute).
rotationNo[x, y, z] euler rotation (degrees unless rotation_unit=rad).
rotate_byNoupdate: relative rotation [dx, dy, dz] (degrees by default).
variablesNoupdate (file mode): script variables, e.g. {"SoundName": "event:/…"}. Values are strings.
attributesNoupdate (file mode): attributes to set on <game_entity>, e.g. {"mobility": "1"}. Values are strings.
remove_tagsNoTags to remove.
number_namesNoAppend _1, _2 … to `name`: default true when add makes several entities (never for siege spawners), false for update (every target gets exactly `name`).
rotation_unitNoUnit of rotation / rotate_by (default deg).
snap_to_groundNolive: drop new/moved entities onto terrain or geometry below.
add_to_selectionNolive select: keep the current selection.
remove_attributesNoupdate (file mode): attributes to remove.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 entitiesA
Read-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).

NameRequiredDescriptionDefault
tagNoExact tag.
liveNoQuery the scene open in the running editor (default false).
meshNoSubstring of a meta mesh name (file mode).
nameNoSubstring (or /regex/) of the entity name.
nearNoOnly entities within `radius` of this [x, y, z] point.
limitNoMax rows (default 60).
sceneNoScene name, Module/scene or path (file mode).
entityNoHandle or name of one entity to show in full.
moduleNoModule to look in when the scene name is ambiguous.
offsetNoSkip rows (paging).
prefabNoSubstring of the prefab name (files: prefab or old_prefab_name; live: linked prefab instances).
radiusNoRadius in meters for `near` (default 10).
scriptNoExact script component name (file mode).
selectedNolive=true: only the editor's current selection.
recursiveNoInclude child entities (default: true when filtering, false otherwise).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 checksA
Read-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).

NameRequiredDescriptionDefault
liveNoReport the scene open in the running editor (default false).
checkNoRun consistency checks (default true).
sceneNoScene name, Module/scene, or path. Not needed with live=true.
moduleNoModule to look in when several have a scene with that name.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 scenesA
Read-only

Lists scenes (SceneObj//scene.xscene) of all or selected modules with size, date and whether terrain/navmesh data exists.

NameRequiredDescriptionDefault
limitNoMax rows (default 100).
queryNoSubstring of the scene name.
moduleNoModule filter: id, comma list, official | mods | writable.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 & atmosphereA
Destructive

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.

NameRequiredDescriptionDefault
sceneYesScene name, Module/scene or path.
moduleNoModule to look in when the scene name is ambiguous.
add_levelsNoScene levels to define, e.g. ["siege"]; each gets the next free mask bit.
atmosphereNoatmosphere.xml value name → value. Values are strings.
environmentNoenvironment property name → value. Values are strings.
editor_cameraNoEditor camera to save: position, forward (direction; normalized, must not be vertical), elevation, bearing (or the full editor_camera_* names). Values are strings.
remove_levelsNoScene levels to remove (refused while entities still use them).
copy_editor_camera_fromNoCopy the editor camera fields from another scene (name, Module/scene or path), e.g. a backup that opened correctly.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 objectsA
Read-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'.

NameRequiredDescriptionDefault
langNoAlso show/match translated names in this language (CNs, zh, 简体中文, RU, …).
typeNoTag or reference prefix, e.g. Item (includes CraftedItem), NPCCharacter, Hero, Faction, Kingdom, Settlement, Culture, PartyTemplate, CraftingPiece. Comma list allowed.
limitNoMax results (default 30, max 200).
queryNoSubstring of id or name (case-insensitive), or /regex/. Optional when type/where is given.
whereNoAttribute filters on the object element: culture=Culture.empire, Type=OneHandedWeapon, level>20, is_hero=true, name~sword, tier?, !culture
moduleNoModule filter: id, comma list, official | mods | writable | workshop. Default: all.
offsetNoSkip this many results (paging).

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 objectA
Destructive

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.

NameRequiredDescriptionDefault
allNoApply to every element matched by path (default false = must match exactly one).
refYesObject: Item.x, NPCCharacter.x, … or bare id.
setNoAttributes to set, e.g. {"weight": "2.5", "value": "1200"}. Values are strings.
pathNoOptional path to nested element(s) inside the object.
moduleYesWritable module that defines the object.
removeNoAttribute names to remove.
validateNoRun XSD validation after writing (default true).

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 editA
Destructive

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.

NameRequiredDescriptionDefault
seqNoEdit number from edit_history (default: latest).
forceNoUndo even if files were modified after the edit (those later changes are lost).
moduleNoUndo the latest edit of this module.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 moduleA
Read-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).

NameRequiredDescriptionDefault
xsdNoRun XSD/XSLT checks through .NET (default true).
l10nNoCheck localization (default true).
refsNoCheck references (default true).
moduleYesModule id.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)A
Destructive

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.

NameRequiredDescriptionDefault
xmlYesOne or more object elements (a wrapping container like <Items>…</Items> is accepted). Use {=stringId}Text for names.
fileNoOptional target file under ModuleData, e.g. mymod_weapons.xml (created and registered if needed).
modeNoupsert (default), create (fail if exists), replace (fail if missing).
moduleYesWritable module id.
xml_idNoOptional XmlName id when it cannot be inferred from the tag (e.g. Items, NPCCharacters).
validateNoRun XSD validation after writing (default true).

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)A
Destructive

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.

NameRequiredDescriptionDefault
setNoAttributes to set/add, e.g. {"weight": "1.5"}. Values are strings.
pathNoOptional nested element inside the target (mini XPath), e.g. ItemComponent/Weapon or skills/skill[@id='Bow'].
clearNoRemove this module's existing rule for the target instead.
forceNoOverwrite a hand-written rule with the same match.
moduleYesYour writable module.
removeNoDelete the target node entirely.
targetYesObject to patch: Item.x, NPCCharacter.x, Culture.empire, Settlement.town_EN1, Faction.clan_x, …
previewNoShow the before/after diff (default true).
game_typeNoGame type used for the preview (default Campaign).
append_xmlNoAppend this XML as child element(s) of the target node.
replace_xmlNoReplace the target node with this XML.
remove_attributesNoAttribute names to delete.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 patchesA
Read-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.

NameRequiredDescriptionDefault
moduleYesModule whose XSLT to preview (any module, read-only is fine).
xml_idNoLimit to one XmlName id, e.g. Items.
targetsNoSpecific objects to diff, e.g. Item.x or Culture.empire (default: everything the rules target).
game_typeNoGame type (default Campaign).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 43 tool updatesv0.3.0
    • First observedasset_import
    • First observedasset_search
    • First observedasset_status
    • First observedclone_object
    • First observedcreate_module
    • First observeddelete_object
    • First observeddescribe_schema
    • First observededit_history
    • First observededit_submodule
    • First observededitor_bridge_install
    • First observededitor_camera
    • First observededitor_command
    • First observededitor_launch
    • First observededitor_play
    • First observededitor_status
    • First observedfind_references
    • First observedforget_history
    • First observedgame_info
    • First observedget_object
    • First observedl10n_scan
    • First observedl10n_set
    • First observedl10n_status
    • First observedlist_modules
    • First observedlist_types
    • First observedmission
    • First observedmodule_info
    • First observednavmesh_query
    • First observedprefab_create
    • First observedprefab_search
    • First observedread_logs
    • First observedscene_create
    • First observedscene_edit
    • First observedscene_entities
    • First observedscene_info
    • First observedscene_list
    • First observedscene_settings
    • First observedsearch_objects
    • First observedset_attributes
    • First observedundo_edit
    • First observedvalidate_module
    • First observedwrite_object
    • First observedxslt_patch
    • First observedxslt_preview

TDQS

A3.8/5.0

Scored across 43 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    2
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables 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.
    44
    1
    MIT