Skip to main content
Glama
JupiterianSoul

Abiotic Factor Mod Editor MCP server

Abiotic Factor Mod Editor MCP server

An MCP server that lets an MCP client read and edit mods in the official Abiotic Factor Mod Editor: browse vanilla data, add or override table rows, change asset properties, and validate a mod before you package it.

Unofficial community tool, not affiliated with or endorsed by Deep Field Games.

Quick start

You need the Mod Editor (1.5.0, from the Epic Games Launcher) on Windows, and uv.

  1. Install the server:

    uv tool install git+https://github.com/JupiterianSoul/Abiotic-Factor-Mod-Editor-MCP-server
  2. Set up the editor side (no admin rights needed):

    abiotic-mcp install

    This registers the server if the claude CLI is found. Otherwise it prints the config to paste.

  3. Restart the Mod Editor and open a mod project.

  4. Check everything:

    abiotic-mcp doctor

No uv? Run install.ps1 from this repo, it needs Python 3.10 or newer instead.

Related MCP server: mcreator-mcp

What install does

  • Copies the listener to %USERPROFILE%\.abiotic-mcp\editor.

  • Adds a small marked block to Documents\UnrealEngine\Python\init_unreal.py, which starts the listener whenever the Mod Editor launches. Other Unreal projects are skipped, and an existing init_unreal.py is kept.

  • Writes nothing to Program Files and does not patch the editor.

The listener binds to 127.0.0.1 only and needs a token that is regenerated on every editor start.

To start the listener for one session instead, use Tools > Execute Python Script in the editor and pick %USERPROFILE%\.abiotic-mcp\editor\start_listener.py.

MCP client config

Claude Code:

claude mcp add abiotic -- abiotic-mcp serve

Claude Desktop (claude_desktop_config.json) and Cursor (.cursor/mcp.json) use the same block:

{
  "mcpServers": {
    "abiotic": { "command": "abiotic-mcp", "args": ["serve"] }
  }
}

If the client can't find the command, run abiotic-mcp config to get the block with the full path.

Tools

Tool

What it does

editor_status

Connection, versions and the open mod

list_mods

Local mod projects, works without the editor

list_assets, search_assets

Browse content by path, name or class

read_asset

Asset properties as JSON

list_datatables, read_datatable

Vanilla and mod tables, paged

list_row_asset_types

Row asset classes a mod can create

upsert_datatable_rows

Create or update rows in the open mod

clone_row

Copy a vanilla row into the open mod as a starting point

duplicate_asset, set_properties

Copy assets into the open mod, edit them

save_all

Save changed assets in the open mod

validate_mod

Run the editor's validators

package_mod

Save, validate and open the editor's upload panel

open_mod_panel

Open the editor's Mod Management Tool

list_templates, create_mod

Create a mod from a template, see limitations

check_blueprint_symbol

Look up a class or function in the Blueprint filter

run_python

Run Python in the editor, for anything not covered

get_log

Tail the editor log with auth codes and API keys removed

Mods store one asset per row, at /<Mod>/DataTables/<Table>/<RowName>. upsert_datatable_rows follows that layout. Fields you leave out of a new row get struct defaults, so to change part of a vanilla row, use clone_row with override_existing_row and the same row name, then set what differs.

Configuration

Nothing is required. Optional settings go in %USERPROFILE%\.abiotic-mcp\config.json:

{
  "protected_mods": ["MyFinishedMod12345"],
  "editor_dir": "D:\\Epic Games\\AbioticFactorModEditor",
  "mods_dir": "D:\\Mods"
}

protected_mods lists mod folder names that write tools must refuse. Set ABIOTIC_MCP_PORT to change the listener port (default 47821).

Limitations

  • Writes stay in the open mod. Write tools refuse any other path, including /Game. run_python is not limited this way, so treat it like any other code you run on your PC.

  • Blueprint filter. Deep Field restricts which Blueprint nodes mods can use. check_blueprint_symbol reads their published list, and clients should check it before generating Blueprint logic. The editor has the final say. This server can't inspect Blueprint graphs for you.

  • Packaging and uploading are yours. Packaging is part of the editor's upload flow, so package_mod saves, validates and opens the editor's Mod Management Tool, then stops. Nothing here creates a mod.io page or uploads anything. mod.io rejects the 128x128 and 400x200 images in a new mod's Media folder, so use a listing image of at least 1024x576.

  • No deleting. There is no delete tool.

  • create_mod depends on the editor exposing templates to scripting, which 1.5.0 currently doesn't. Create the mod in the Mod Browser for now.

  • Validation details go to the editor's message log. validate_mod returns counts, plus any rows that share a name, because the editor only warns about those once per session.

  • Tested with editor 1.5.0 (UE 5.4.4). Other versions show a warning rather than failing outright.

  • Close open dialogs in the editor if a tool times out: commands run on the editor's main thread.

Uninstall

abiotic-mcp uninstall
uv tool uninstall abiotic-mcp

This removes the startup block and %USERPROFILE%\.abiotic-mcp. Your mod projects are not touched.

Development

uv venv
uv pip install -e ".[dev]"
.venv\Scripts\python -m pytest

src/abiotic_mcp/editor_side runs inside the editor (Python 3.11, standard library and unreal only). The rest runs outside it. After changing abiotic_commands.py, copy it to the install folder and send the listener a reload command, so you don't need to restart the editor.

License

MIT, see LICENSE.

Available Tools

21 tools
check_blueprint_symbolA

Check a class or function against Deep Field's Blueprint filter.

Check before generating Blueprint logic and never use a blocked symbol. Example: class_path="/Script/Engine.GameplayStatics", function="GetPlayerController".

NameRequiredDescriptionDefault
functionNo
class_pathYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the behavioral intent (filtering, blocking symbols) and the caller-side obligation implied by the result, which is meaningful. However, it never states what the response looks like (allowed/blocked flag? reason?), whether the filter is mod-scoped or global, or whether the call has any side effects — gaps that matter for a verification tool.

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 short sentences: what it does, when to call it, and a concrete example. Front-loaded with the action, nothing redundant, and the example earns its place by demonstrating the required path format.

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 small two-parameter read-style check with no output schema, the description covers purpose, timing, and input format adequately. The main remaining gap is the shape of the result and the nature of the filter, which would help an agent interpret and act on a blocked answer.

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 0%, so the description must compensate, and it partially does by giving a concrete format example ("/Script/Engine.GameplayStatics" plus a function name), which is genuinely useful for constructing class_path. It does not clarify that function is optional (only class_path is required) or what happens when function is omitted, leaving half the parameters semantically underspecified.

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 (check) and resource (class or function) against a named domain concept (Deep Field's Blueprint filter), which is clearly distinct from all siblings (asset/datatable/mod management tools). The example with class_path and function further pins down what object it operates on. It stops short of 5 only because 'Blueprint filter' is not explained, though the intent is still unambiguous.

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?

"Check before generating Blueprint logic and never use a blocked symbol" gives an explicit when-to-use rule and the consequence of skipping it. No sibling alternative is named, but no sibling plausibly overlaps with this check, so there is little ambiguity to resolve. The absence of any when-not guidance keeps it out of 5 territory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clone_rowC

Copy a vanilla row into a new row asset in the active mod, as a starting point.

NameRequiredDescriptionDefault
tableYes
source_rowYes
new_row_nameYes
source_tableYes
row_asset_classYes
override_existing_rowNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not say that this mutates the active mod, what permissions are needed, or what override_existing_row does when an existing row collides — a serious gap for a write operation with a destructive override flag.

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 with no filler. It is efficient, though its brevity contributes to the coverage gaps elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no annotations, no output schema, and zero schema descriptions, this description is far too thin — an agent cannot confidently map values to parameters or predict side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so all six parameters rely on the description for meaning. It only loosely implies source_row and new_row_name and leaves source_table vs. table, row_asset_class, and override_existing_row entirely unexplained.

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: copy a row into a new row asset in the active mod. This is more informative than a tautology, but it does not distinguish the tool from siblings like duplicate_asset or upsert_datatable_rows, and 'vanilla row' is unexplained jargon.

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?

Only 'as a starting point' hints at intent; there is no explicit guidance on when to use this instead of duplicate_asset or upsert_datatable_rows, and no prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_modC

Create a mod project from a template, if the editor exposes templates to scripting.

NameRequiredDescriptionDefault
nameYes
templateYes
substitutionsNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a mutation (project creation) but says nothing about what happens on name collisions, whether an existing project is overwritten, what permissions or editor state are required, or what the tool returns on success/failure. The one useful disclosure is that the tool may be unavailable depending on editor scripting exposure.

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 with the core action first and the caveat second; nothing is wasted. The trailing conditional is slightly muddying but is the only extra content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation/mutation tool with no annotations, no output schema, and undocumented parameters, the description is too thin. An agent needs to know template sourcing, substitution behavior, and failure/overwrite semantics before invoking it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for all three parameters. The description only obliquely connects to 'template'; it never explains what 'name' controls, what values 'template' accepts, or what 'substitutions' does (presumably key/value replacement inside template files). With zero coverage and no compensating text, the agent is guessing.

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: 'Create a mod project from a template'. An agent can tell it produces a new mod project. However, it does not distinguish itself from siblings like duplicate_asset or list_templates, and the trailing conditional ('if the editor exposes templates to scripting') introduces doubt about whether the operation is even available.

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?

No guidance on when to use this versus duplicate_asset, list_templates, or open_mod_panel. The conditional clause hints at a precondition but is a caveat about editor capability, not a usage rule or an alternative-routing instruction. The agent must infer that list_templates should be called first to obtain a valid template value.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_assetB

Copy an asset into the active mod. The destination must be inside that mod.

NameRequiredDescriptionDefault
sourceYes
destinationYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses only the destination-location constraint; it says nothing about overwrite behavior if the destination exists, permission requirements, reversibility, or what the operation returns for a mutation-style copy.

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 short sentences with the operation stated first and the constraint second. No padding, though it could have used the space for the missing behavioral details instead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and 0% schema description coverage, the description is too thin for a mutation tool: overwrite semantics, source/path expectations, and success/failure outcomes are all absent, leaving the agent to guess.

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 0%, so the description must compensate for both parameters. It gives useful meaning for 'destination' (must be inside the active mod) but leaves 'source' format/scope (path? asset ID? can it be outside the mod?) unexplained, so partial compensation only.

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 ('Copy') and resource ('asset') plus the target scope (the active mod), so the operation is unambiguous. It does not differentiate from siblings like create_mod or list_assets, but the action itself is clear.

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 constraint 'destination must be inside that mod' implies usage context and a precondition, but there is no explicit when-to-use vs alternatives guidance (e.g. versus create_mod or search_assets) and no mention of failure conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

editor_statusA

Report whether the Mod Editor is connected, its version and the open mod.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the returned data (connection, version, open mod), but does not state that it is a read-only, side-effect-free probe, nor what happens or is returned when the editor is not connected.

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 sentence with no waste, front-loading the core purpose and then the returned facts. Nothing would be gained by shortening or restructuring it.

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?

For a zero-param status tool without an output schema, the description supplies the key return fields, which is helpful. It still omits the not-connected behavior and failure semantics, leaving an agent unsure what a disconnected result looks like.

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, which is the baseline 4; there is nothing for the description to clarify beyond that, and it introduces no parameter confusion.

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 ('Report') and the exact facts returned: connection state, version, and open mod. Clearly distinguishes from siblings like list_mods or open_mod_panel, though it doesn't name them 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 implied: a zero-param status probe one calls before working with the editor. There is no explicit guidance on when to prefer it (e.g., as a precondition check before save_all or upsert_datatable_rows) or what to do if disconnected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_logC

Tail the editor log, with auth codes and API keys removed.

NameRequiredDescriptionDefault
linesNo
containsNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does usefully disclose that auth codes and API keys are redacted from output, which is real value beyond structured fields, but it never resolves whether 'tail' returns a snapshot of the last N lines or streams/follows the log, nor whether the call can block or fail.

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 with no filler; the redaction caveat is placed where it matters. It is efficient but so terse that the brevity shades into under-specification rather than economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool the description is thin: no output shape (log text vs structured entries), no parameter meaning, no indication of log scope or size limits, and no annotations to fall back on. An agent can call it, but cannot call it precisely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so both parameters ('lines' default 100, 'contains' default empty) are undocumented in structured data. The description mentions neither, leaving the filter semantics of 'contains' (substring vs regex, case sensitivity, which fields it matches) and the meaning of 'lines' entirely unspecified.

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 ('tail the editor log') and adds a redaction note, which is enough for an agent to know exactly what it retrieves. No sibling tool reads logs, so differentiation is implicit rather than stated, and 'tail' leaves the streaming-vs-snapshot semantics slightly fuzzy.

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 statement of when to reach for this tool, no prerequisites, and no named alternatives among the 21 siblings (e.g., editor_status or validate_mod for diagnostics). The agent must infer that this is a debugging aid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assetsC

List assets under a content path, such as /Game/Blueprints/Items or /MyMod.

NameRequiredDescriptionDefault
pathYes
limitNo
recursiveNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden, yet it says nothing about the recursive=true default (whether it descends into subfolders), the 500-result limit, truncation/pagination behavior, or what happens for a nonexistent path. For a tool whose defaults silently change result scope, that is a meaningful 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?

A single front-loaded sentence with no filler, and the examples are the highest-value information to lead with. It is efficient, though the brevity shades into under-specification rather than tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and 0% schema coverage, the description needs to explain result shape and the effect of recursive/limit. It covers only the path input, leaving an agent unable to predict what a default call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters; the description only clarifies the meaning and format of `path` through examples. The `limit` and `recursive` parameters — the ones that most affect output — get no explanation at all, so the compensation is partial at best.

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 verb and resource ("List assets") and gives two concrete path examples (/Game/Blueprints/Items, /MyMod), which makes the operation unambiguous. It does not distinguish itself from the sibling search_assets, so the agent must infer the boundary from the verb alone.

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 statement of when to prefer this over search_assets, list_datatables, or read_asset, and no prerequisites or exclusions. Usage is only implied by the word "List".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_datatablesB

List DataTable assets, optionally filtered by path substring.

NameRequiredDescriptionDefault
queryNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. "List" implies a non-destructive read, but nothing is said about pagination, result limits, scope (all mods vs. current mod), permissions, or return 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?

A single front-loaded sentence with zero waste; the resource comes first and the filter caveat follows.

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?

For a one-optional-param list tool with no output schema, the description is minimally adequate, but it never says what a DataTable asset is, whether results span all mods, or what the response contains — details an agent needs before calling.

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 0% and the only parameter is a bare "Query" string with an empty default, so the description's phrase "filtered by path substring" is the sole source of meaning. It usefully disambiguates that the filter matches paths rather than names or content, but gives no matching rules (case sensitivity, wildcards).

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 uses a specific verb and resource ("List DataTable assets") and adds the filtering capability, so an agent can tell it apart from generic siblings like list_assets or read_datatable. It stops short of explicitly naming the alternative tools, so it lands at 4 rather than 5.

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?

"Optionally filtered" hints at a use case but gives no when-to-use/when-not guidance and never references siblings such as search_assets or list_assets. An agent must infer on its own when this listing tool is preferable to the search or read tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modsA

List local mod projects (works without the editor open).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does contribute one real behavioral fact: the tool functions independently of an open editor session. However, it says nothing about whether results come from a filesystem scan, what a project entry contains, or ordering — meaningful gaps for an unannotated tool.

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 short sentence with the core action front-loaded and the qualifier tucked into a parenthetical. Every word earns its place and there is no 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?

For a zero-parameter listing tool with no output schema and no annotations, the description covers what it does and the notable editor-independence trait. A brief note on what each returned entry represents would close the remaining gap.

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. No parameter-level detail is needed or missing.

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 (List) and a specific resource (local mod projects), which is enough to distinguish it from asset-oriented siblings like list_assets and list_datatables. It stops short of explicitly contrasting with the nearest sibling, so a 4 rather than 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 parenthetical 'works without the editor open' implies a use condition (call it when no editor session exists), but the description never states when to prefer it over siblings such as list_assets or create_mod, nor any exclusions. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_row_asset_typesA

List row asset classes a mod can create, such as RecipeModRowAsset.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; 'List' implies a read-only enumeration but does not state whether it is workspace/mod-scoped, whether results are static, or what form they take. It adds the useful framing that these are classes 'a mod can create', but behavioral disclosure is thin.

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 example does real work by disambiguating the kind of value returned.

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 discovery tool with no output schema, the description conveys the return content (class names, e.g. RecipeModRowAsset) well enough to call and interpret it. Minor gap: it doesn't confirm the result is a flat list of identifiers.

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 the baseline is 4; there is nothing parameter-related the description could add, and it correctly doesn't invent any.

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 ('List') and a precise resource ('row asset classes a mod can create'), with a concrete example (RecipeModRowAsset) that makes the distinction from list_assets/list_datatables evident – this returns type/class names, not data. It does not name a sibling directly, so it falls just 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 purpose implies when to use it (discovering which row asset types exist before creating one), but there is no explicit statement of when to use this versus list_assets or list_templates, nor any prerequisites. Usage is inferable only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesB

List mod templates the editor exposes to scripting.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'List' implies a safe read and the phrase 'the editor exposes to scripting' usefully bounds the result set, but there is no disclosure of return shape, ordering, or whether the list is static per session.

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; every phrase ('mod templates', 'editor exposes', 'to scripting') contributes meaning.

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?

For a zero-arg read tool there is no output schema, so the description should convey what each returned template looks like (name only? path? metadata?). It identifies the resource but leaves the return shape entirely undocumented, which is a meaningful gap.

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 the baseline of 4 applies; the schema is trivially complete and the description adds no conflicting parameter expectations.

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 (List) and resource (mod templates) with a qualifier about scope ('the editor exposes to scripting'), which clarifies the subset returned. It is distinguishable from siblings like list_datatables and list_mods, though it never explicitly contrasts with them.

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 guidance on when to call this versus list_datatables, list_mods, or list_assets, nor any prerequisite context (e.g., must a mod be loaded first?). Usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_mod_panelA

Open the editor's Mod Management Tool. It presses nothing and uploads nothing.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does disclose the most important trait: 'It presses nothing and uploads nothing,' i.e. it is side-effect free and safe. However, it omits other relevant behavior — whether an editor session/connection is required, what happens if the panel is already open, and whether anything is returned.

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 short sentences with zero waste; the purpose is front-loaded and the safety caveat follows immediately. 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 no-parameter, no-output-schema UI action, the description covers what it does and that it has no side effects, which is the essential information. Only minor gaps remain, such as the editor-session precondition and idempotency when the panel is already open.

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 and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.

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: 'Open the editor's Mod Management Tool'. This is clearly distinct from siblings like create_mod, package_mod, and list_mods, which manipulate data rather than surface UI. It stops short of naming a sibling to contrast with, but the action 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to call this versus alternatives, nor any prerequisites (e.g. editor must be running, panel already open). The closest thing to guidance is the negative scoping in the second sentence, which tells the agent what the tool won't do rather than when to choose it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

package_modA

Save and validate the active mod, open the upload panel, and explain the next step.

Packaging happens inside the editor's upload flow, so this stops before it. It never creates a mod.io page or uploads anything.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavior: it writes (saves) the active mod, has a UI side effect (opens the upload panel), and hard-stops before any network upload or mod.io page creation. Not covered: whether a failed validation aborts the save, or whether existing mod data can be overwritten.

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 short sentences, action front-loaded in the first clause, and the crucial negative constraint ('never creates a mod.io page or uploads anything') placed where it will be read. Zero 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?

For a zero-parameter, no-output-schema action tool this is nearly complete: an agent knows what it mutates, what it will not do, and that it returns next-step explanation. The only gap is failure semantics — what the agent should do if validation fails.

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 clarify; baseline of 4 applies. The description correctly implies a no-argument, single-action invocation.

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?

Specific verb chain and resource: it saves and validates the active mod, opens the upload panel, and returns next-step guidance. It also carves out a clear scope boundary ('stops before' the upload flow), which separates it from a pure save or pure validate action. It never names save_all or validate_mod, so sibling differentiation is implied rather than explicit.

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?

Clear context for when to reach for it (when the mod is ready to be packaged), plus an explicit when-not: it never creates a mod.io page or uploads anything, so an agent shouldn't call it expecting publication. It stops short of naming the alternative tools for save-only or validate-only workflows, which would have made this a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_assetB

Read an asset's properties as JSON. DataTables return their rows.

NameRequiredDescriptionDefault
pathYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does disclose real behavioral information not present in the schema: results come back as JSON, and DataTable assets return rows instead of a property map. It says nothing about error behavior for a bad path, permissions, or whether non-datatable assets return nested structures.

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 short sentences, front-loaded with the core action, and the DataTable clause earns its place by flagging a non-obvious return-shape exception. It is lean rather than padded, though terseness comes at the cost of the missing path semantics.

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?

For a one-parameter read tool with no annotations and no output schema, the description covers the action and the JSON/rows return shape. The unresolved path format and the overlap with read_datatable leave gaps an agent would hit on first use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter "path" has 0% schema description coverage, so the description was the only place to explain it, and it does not. It never says whether path is relative to the mod root, includes extension, or accepts a name vs. a filesystem path — the main invocation risk for this tool.

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?

"Read an asset's properties as JSON" gives a specific verb and resource that separates it from list_assets, search_assets and set_properties. However, the appended clause "DataTables return their rows" blurs the boundary with the sibling read_datatable, so the scope is clear but not fully disambiguated.

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 statement of when to use this tool, when to prefer read_datatable or search_assets, or what preconditions apply. The only guidance is implied by the verb "Read", leaving the agent to infer routing from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_datatableC

Read rows from a DataTable. Pass row names, or page with offset and limit.

NameRequiredDescriptionDefault
pathYes
rowsNo
limitNo
offsetNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral-disclosure burden. It implies a read-only operation and mentions paging behavior, but says nothing about permissions, error behavior, return format, or whether partial row matches are possible.

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 short sentences with no wasted words, front-loading the core action and then compactly describing the two access modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and 0% schema description coverage, the definition is too sparse. An agent still lacks path semantics, return-shape guidance, and behavioral context needed to invoke or interpret the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for all four parameters. It adds useful meaning for rows, limit, and offset by describing the row-name versus paging modes, but it never explains the required path parameter or row-name format.

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: reading rows from a DataTable. It is clear enough to distinguish this from mutation tools like upsert_datatable_rows, though it does not explicitly compare itself with list_datatables or read_asset.

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 explains two access patterns—row names or offset/limit paging—but does not say when to use this tool versus alternatives such as list_datatables or read_asset, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_pythonA

Run Python inside the editor, with unreal imported, and return its output.

This is an escape hatch and is not limited to the active mod. Use it for inspection and for gaps in the other tools. Do not use it to bypass the write guards, delete assets, or upload to mod.io without the user asking.

NameRequiredDescriptionDefault
codeYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: execution happens in-editor, `unreal` is available, scope is not restricted to the active mod, and write guards exist as a constraint. It stops short of describing execution environment details an agent would want — timeouts, sandboxing, whether mutations persist, and how output is captured (stdout vs return value).

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 sentence and the guardrails follow in a compact block; nothing is padded. Slight cost is that the safety caveats occupy as much space as the capability statement, but they earn their place for an arbitrary-code tool.

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?

No output schema exists, so the description's 'return its output' is the only signal about return values and it doesn't say what form that takes (string of stdout, structured result, error surface). For a tool that executes arbitrary code with one undocumented parameter and no annotations, a bit more on failure/timeout behavior would round it out.

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?

There is a single required parameter `code` with 0% schema description coverage. The description implicitly tells the agent that `code` is Python executed with `unreal` imported, which is real added meaning, but it says nothing about whether the code is a snippet vs full script, how results are surfaced, or whether print vs expression value matters.

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 ('Run Python inside the editor'), adds the key execution detail that `unreal` is pre-imported, and says the result is returned. The framing as an 'escape hatch' with scope 'not limited to the active mod' cleanly separates it from the domain-specific siblings like read_asset or upsert_datatable_rows.

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 ('for inspection and for gaps in the other tools') and explicit when-not-to-use ('do not bypass the write guards, delete assets, or upload to mod.io without the user asking'). This is the rare case where alternatives and exclusions are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_allB

Save every changed asset in the active mod.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It reveals the useful scope detail that only *changed* assets are written, but says nothing about whether this is a destructive/irreversible disk write, whether it can fail or partially fail, whether new unsaved assets are included, or what the tool returns.

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 zero filler; the scope qualifier ("changed," "active mod") is packed into the same clause. Nothing needs trimming.

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 annotations and no output schema, the description is only minimally sufficient for a state-mutating batch operation. An agent can act on it, but it lacks error behavior, confirmation of what success looks like, and any hint about side effects on disk.

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 to disambiguate and the baseline of 4 applies. The description correctly implies no user input is needed.

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?

"Save every changed asset in the active mod" states a specific verb (save) and resource (changed assets) with a clear scope qualifier (active mod). It is distinguishable from siblings like `set_properties` or `package_mod`, though it never explicitly names how it differs from them.

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 offers no guidance on when to call this versus alternatives or prerequisites. There is no mention of when saving is appropriate (e.g., before `package_mod`/`validate_mod`) or whether unsaved edits must exist first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_assetsC

Find assets under a path by package path substring and/or exact class name.

NameRequiredDescriptionDefault
pathNo/Game
limitNo
queryNo
asset_classNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It never confirms this is a read-only operation, says nothing about result ordering, case sensitivity, truncation at the limit, or what happens when query is empty (which by default would return everything under /Game).

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 the goal front-loaded and no filler. Every clause maps to a real parameter distinction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations and no output schema, the description is thin: it omits limit behavior, default scope (/Game, empty query), and any indication of return shape. An agent cannot predict result size or pagination from this text.

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 0%, so the description must compensate and it partially does: 'under a path' maps to path, 'package path substring' to query, and 'exact class name' to asset_class, including the important substring-vs-exact distinction. However, the fourth parameter, limit, is never mentioned or explained.

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 ('Find assets') plus the scoping mechanism ('under a path', 'package path substring and/or exact class name'). This clearly separates it from read-heavy siblings like read_asset or list_assets, though it never names those alternatives explicitly.

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?

It implies a filtered search and that the two filters can be combined ('and/or'), but gives no when-to-use guidance, no exclusions, and no pointer to list_assets or read_asset as alternatives. An agent must infer whether this or list_assets is the right entry point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_propertiesC

Set properties on an asset in the active mod. Call save_all afterwards.

NameRequiredDescriptionDefault
pathYes
propertiesYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it only discloses the deferred-persistence workflow via save_all. It says nothing about whether properties merge or replace existing ones, what happens on an invalid path, whether unknown keys are rejected, or whether the change is reversible before save.

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, zero filler, with the primary action front-loaded and the follow-up requirement placed second. Nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, while the schema contains an unconstrained nested properties object, so the description would need to explain expected keys and result behavior. It covers only persistence, leaving the most ambiguous part of the tool undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across both parameters, and 'properties' is an open-ended nested object with additionalProperties true whose accepted keys and value types are entirely undocumented. The description adds no parameter meaning beyond repeating the field name in prose, leaving the agent unable to construct a correct call.

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 ('Set properties on an asset') scoped to the active mod, which is clearer than a bare name restatement. It does not distinguish itself from siblings like duplicate_asset or clone_row, and leaves 'properties' undefined, so an agent knows roughly what it does but not the scope of what can be set.

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 instruction 'Call save_all afterwards' implies this is a staging mutation that requires an explicit persist step, which is genuinely useful context. However, there is no guidance on when to use this versus other mutation tools, no prerequisites (e.g., asset must exist, mod must be open), and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_datatable_rowsA

Create or update rows in the active mod. Call save_all afterwards.

Mods add one asset per row, stored at //DataTables//<row_name>. Each entry is {"row_name": str, "override_existing_row": bool, "values": {...}}, with values in the snake_case form that read_asset returns.

Fields left out of a new row keep struct defaults, not vanilla values. To change part of a vanilla row, use clone_row with override_existing_row=True and the same row name, then set only what differs. When a row refers to another row in this mod, use <mod_prefix>_<row_name> (see editor_status).

NameRequiredDescriptionDefault
rowsYes
tableYes
row_asset_classYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it discloses a lot: one asset per row, the resulting asset path, the mandatory save_all follow-up, and the semantic difference between struct defaults and vanilla values. What it does not state is what happens when a row already exists (overwrite semantics are only implied by 'override_existing_row') or whether the write is atomic/validated.

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 mutation and the save_all follow-up, then progressively narrower detail on row shape and cross-references. Every paragraph carries information, though the clone_row paragraph is dense enough that it could be split or trimmed slightly.

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?

Adequate for the rows payload and the save lifecycle, but incomplete for a 3-required-parameter mutation with no annotations and no output schema: `row_asset_class` is unexplained, and there is no statement of what the tool returns or what happens on failure/validation error.

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?

With 0% schema coverage the description must compensate, and it does well for `rows`: it spells out the entry shape {"row_name", "override_existing_row", "values"}, the snake_case value convention matching read_asset, and the <mod_prefix>_<row_name> reference format. However, `table` and especially the required `row_asset_class` are never explained anywhere, leaving a third of the parameters undocumented.

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 pair and resource ('Create or update rows in the active mod'), plus the exact storage location each row lands at (/<Mod>/DataTables/<table>/<row_name>). It also explicitly separates itself from clone_row, so an agent can distinguish it from siblings 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?

Names the follow-up requirement ('Call save_all afterwards') and routes a specific case to the alternative tool: partial edits of vanilla rows should use clone_row with override_existing_row=True and the same row name rather than this tool. It also flags that omitted fields take struct defaults, not vanilla values — a real usage pitfall.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_modB

Run the editor's asset validators over the active mod.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description must carry the full behavioral burden and does not. It doesn't say whether validation merely reports problems or also mutates anything, whether it blocks on large mods, whether it requires a saved/loaded mod state, or how results are surfaced (log vs. return value).

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 scope constraint ('active mod') arrives immediately. Nothing in it is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a diagnostic tool whose entire value is its output, yet there is no output schema, no annotations, and the description says nothing about what the validators produce (error list, counts, log entries) or how the agent should consume it. For a zero-annotation, zero-output-schema tool, that is a significant gap.

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 to disambiguate; the description correctly implies no input is needed because it acts on the active mod. Baseline 4 applies for a parameterless tool.

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 verb (run validators) and a specific resource (the editor's asset validators over the active mod), so the agent knows exactly what the operation does. It does not, however, distinguish itself from nearby siblings such as package_mod or save_all, which also act on the active mod and involve validation-adjacent steps.

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?

'Over the active mod' implies the precondition that a mod must be open/active, but the description never states when to call this versus package_mod (which likely also validates) or what to do with the results. Usage is inferable but no explicit when/when-not or alternative is given.

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. 21 tool updatesv0.1.0
    • First observedcheck_blueprint_symbol
    • First observedclone_row
    • First observedcreate_mod
    • First observedduplicate_asset
    • First observededitor_status
    • First observedget_log
    • First observedlist_assets
    • First observedlist_datatables
    • First observedlist_mods
    • First observedlist_row_asset_types
    • First observedlist_templates
    • First observedopen_mod_panel
    • First observedpackage_mod
    • First observedread_asset
    • First observedread_datatable
    • First observedrun_python
    • First observedsave_all
    • First observedsearch_assets
    • First observedset_properties
    • First observedupsert_datatable_rows
    • First observedvalidate_mod

TDQS

B3.2/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have clearly distinct purposes, especially the write-path tools (upsert_datatable_rows, clone_row, duplicate_asset, set_properties). There is some overlap between list_datatables and list_assets/search_assets, and between read_asset and read_datatable, though descriptions mostly clarify the boundaries.

Naming Consistency4/5

The set predominantly follows a snake_case verb_noun convention (list_assets, read_asset, create_mod, validate_mod). Minor deviations like editor_status (noun phrase) and verb-only names save_all/package_mod are readable but slightly inconsistent.

Tool Count3/5

At 21 tools, the surface is on the heavy side for a mod editor, falling into the 16-25 borderline zone. Most tools appear purposeful, but some listing/reading variants could potentially be consolidated.

Completeness3/5

Core workflows are covered: listing, reading, writing datatable rows, cloning, duplicating, saving, validating, packaging, and a Python escape hatch. However, there are notable gaps around deletion/removal of rows or assets, and no explicit mod metadata editing beyond creation.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers