Skip to main content
Glama

Unity Biome MCP

Control the Unity Editor from MCP-compatible AI clients or from chat inside Unity.

Inspect scenes, edit GameObjects, run playtests, and capture results through structured tools.

Quick Start

Requirements: Unity 6 (6000.0 or newer), Git 2.14+ on PATH, and uv. The MCP server does not need a separate Python installation when it runs through uvx; optional Codex skill synchronization requires Python 3.14 or newer on PATH. See the full Getting Started prerequisites.

1. Install uv

macOS and Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows:

winget install astral-sh.uv

2. Add the Unity package

  1. In Unity, open Window > Package Manager.

  2. Select + > Add package from git URL.

  3. Enter:

https://github.com/german-krasnikov/unity-biome-mcp.git?path=unity-plugin

3. Configure your client

Open MCP > Setup Wizard, choose a client, and follow the result shown by the Wizard.

Configuration depends on the client. The Wizard may write a project configuration, run the configuration helper, copy a client-specific snippet, or defer configuration until In-Unity Chat starts. Restart the selected client when prompted. The Wizard configures the integration; it does not perform an end-to-end connection test.

Use the matching guide:

Claude Code | Claude Desktop | Codex | Cursor | Junie | Kimi | OpenCode | Rider AI Assistant | VS Code | Windsurf

For external OpenCode setup, do not use the Wizard's standard clipboard JSON: OpenCode has a different configuration shape. Follow the OpenCode guide.

4. Verify the first connection

For an external MCP client, keep the Unity project open, restart the client if the Wizard asked you to, and send:

Read the active Unity scene hierarchy at depth 2 and summarize its root objects.

The client should call:

get_hierarchy(depth=2)

A successful response contains the active scene hierarchy. If the call fails, open MCP > Status > Diagnose in Unity. For Chat-only verification, use the Chat quick check. For command-line diagnostics, run:

uvx --from git+https://github.com/german-krasnikov/unity-biome-mcp.git#subdirectory=server unity-biome-mcp doctor

See Getting Started for recovery steps and platform details.

Requirements for a source checkout: Git and Python 3.14 or newer.

Upgrading from older Python: Install Python 3.14 via brew install python@3.14 (macOS), your system package manager (Linux), or python.org (Windows). Then run python install.py update to recreate the virtual environment.

git clone https://github.com/german-krasnikov/unity-biome-mcp.git
cd unity-biome-mcp
python install.py setup
python install.py configure --tool claude-code
python install.py doctor

The configuration helper supports claude-code, claude-desktop, cursor, windsurf, vscode, codex, kimi, junie, and opencode.

Related MCP server: Unity API Communicator MCP Server

Documentation

Goal

Guide

Install and connect

Getting Started

Choose and configure an MCP client

Client guides

Install project-local AI guidance

AI Skills and Agents

Find a tool for a task

Tool Guide

Use batch safely

Batch Operations

Build Play Mode workflows

PlayTest DSL

Configure In-Unity Chat

Chat Backends

Extend Unity Biome MCP

Plugin Quick Start

Diagnose failures

Diagnostics

What You Can Do

  • Scene and object editing: inspect and modify GameObjects, components, assets, materials, shaders, and UI.

  • Playtesting and verification: run PlayTest DSL workflows, compile checks, console checks, runtime diagnostics, and visual comparisons.

  • Animation and VFX: work with clips, Animator controllers, Timeline, particles, materials, shaders, and Shader Graph.

  • Efficient tool use: group compatible operations with batch, request deferred schemas, and enable capability categories only when needed.

  • Extensibility: add project-specific server tools, Unity commands, Chat context chips, and plugin hooks.

Example prompts:

Create a player object, add a Rigidbody, and place it at the scene origin.

Find enemies without colliders and add a BoxCollider to each.

Run a playtest that moves the player to the door and verifies that the score increases.

Capture the Game View and compare it with the saved baseline.

Summarize scene changes since the last checkpoint.

Batch example

Use batch for two or more compatible operations:

batch(commands="""
create_object name=Enemy
set_property path=Enemy component=Transform prop=position value=0,1,0
manage_component path=Enemy type=Rigidbody action=add
set_property path=Enemy component=Rigidbody prop=mass value=2
""")

Some typed tools are direct-only and cannot be placed in a batch. See the Batch guide for validation, Undo-backed rollback, and error handling.

Ways to Work

External MCP client

An MCP client launches the Python server over stdio. The server discovers the active Unity project and sends framed commands to the editor plugin over localhost TCP.

In-Unity Chat

Open MCP > Chat to work inside the editor. Select a supported CLI backend and use Ask or Agent mode. Authentication is handled by the selected CLI. Context chips can attach scene objects, scripts, and assets to a turn, while each completed AI turn is grouped for Unity undo.

See Chat backends for setup and behavior.

Architecture

The external path is MCP client -> Python MCP server -> localhost TCP -> Unity Editor plugin. In-Unity Chat invokes the selected CLI through the local chat relay; that CLI connects to the same Python MCP server and rejoins the shared TCP-to-plugin path.

AI Skills

The Unity package includes 12 reusable domain skills and 4 focused agents for Claude Code and Codex. They cover efficient MCP tool selection, batching, Unity authoring, playtesting, diagnostics, and evidence-based verification.

Open MCP > Install AI Skills to install them into the current project. Existing and generated files are ownership-checked before replacement. See AI Skills and Agents for paths, safe updates, and Codex synchronization.

Project Inventory

The values below are generated from registrations, pytest collection, Unity test discovery or source scanning, and package metadata. They are discovery counts, not a claim that every test was executed in the current checkout.

Unity MCP Product Comparison

Verified August 16, 2026:

  • Unity Biome MCP: 160 registered tools, deterministic PlayTest DSL, and visual baseline/diff workflows.

  • Unity MCP Server 2.17: first-party local bridge, connection approval, and multi-client support.

  • MCP for Unity 10.1.2: Unity 2021.3 compatibility, 47 tool entrypoints, and authenticated remote hosting.

  • AI Game Developer 0.87.0: compiled-player runtime plus local, HTTP, cloud, and Docker deployment.

  • MCP Unity: 33 listed tools, optional Undo rollback for batches, and an MCP App dashboard.

The detailed matrix cites exact source commits or versioned official documentation and records constraints as well as strengths.

Open the full source-backed comparison

Recent Changes

Current release: v2.0.0 (2026-09-08). Read the full changelog.

Contributing

Read CONTRIBUTING.md before opening a pull request. New contributors can start with good first issues.

Report security issues through SECURITY.md.

License

MIT · Third-Party Notices

Available Tools

36 tools
apply_scene_changeApply Scene ChangeB

Execute scene mutations with pre-check, post-verify, and optional save. 1.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, and the description's 'Execute scene mutations' aligns. The description adds behavioral details (pre-check, post-verify, optional save) beyond annotations, but doesn't explain what these steps entail, failure behavior, or reversibility. It adds some transparency but not rich context.

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 very concise and front-loaded, but the stray '1.' on the second line is a formatting artifact that adds noise and undermines structural quality. It could be a single clean sentence without the artifact.

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?

Given the empty schema and minimal annotations, the description covers the core behavior but lacks context about how it relates to sibling tools (e.g., whether it requires a plan), what 'optional save' means, and what happens on pre-check failure. It is minimally viable but not complete for an execution tool.

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 input schema has zero parameters, so the baseline is 4. The description appropriately avoids inventing parameter details, and no parameter documentation 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?

The description uses a specific action verb 'Execute' and clearly identifies the target as 'scene mutations', with qualifiers (pre-check, post-verify, optional save) that help distinguish it from planning or verification tools. However, it doesn't explicitly name sibling alternatives, so it falls 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 Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like scene_change_plan or verify_after_change. It does not state prerequisites, exclusions, or recommended workflow context, leaving the agent without usage direction.

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

await_compileAwait CompileA
Read-only

Block until Unity finishes compiling + reloading, then return compile errors. Use after writing .cs files instead of sleep. Returns errors or 'compile clean (Xs)'. Handles domain reload disconnects transparently. timeout=0 → immediate check, no loop. Epoch-aware via sync_status when available (+10 from MAJOR-1); falls back to compile_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoSeconds before giving up (default varies per tool)

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description reveals important behavioral traits: it blocks until compilation and reload finish, handles domain reload disconnects transparently, and provides a fallback mechanism based on sync_status. These are non-obvious behaviors that help the agent understand what to expect, without contradicting the annotation.

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?

The description is compact yet packed with essential information. It front-loads the primary purpose, then gives usage guidance, return format, edge cases, and internal behavior in just a few sentences. Every clause earns its place, with no wasted words.

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?

Given the tool's simplicity (one optional parameter, no output schema), the description is remarkably complete. It explains the return value ('errors or 'compile clean (Xs)''), the blocking nature, domain reload handling, timeout behavior, and fallback logic. The agent has enough context to use it correctly in various situations.

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 schema already provides a baseline (100% coverage) for the 'timeout' parameter, but the description adds valuable semantics: 'timeout=0 → immediate check, no loop' clarifies the effect of a zero value, which is not in the schema. This extra context justifies a score above the 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 clearly states the tool's function: 'Block until Unity finishes compiling + reloading, then return compile errors.' It uses a specific verb and resource, and distinguishes itself from siblings like get_compile_errors by focusing on the waiting/blocking behavior and returning compile status. The phrase 'Use after writing .cs files instead of sleep' further clarifies its unique role.

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?

Explicit guidance is given: 'Use after writing .cs files instead of sleep.' It also explains edge-case usage with 'timeout=0 → immediate check, no loop' and mentions fallback behavior ('falls back to compile_status'), giving clear context on when and how to invoke the tool. This effectively differentiates it from alternatives.

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

batchBatchA

Execute multiple commands in one call. Use for 2+ ops — reads AND writes. commands: one per line (cmd key=value). on_error: continue|stop (default continue). timeout: seconds (default 75). atomic: True reverts ALL prior ops on first failure (Unity Undo); execute_code fs side-effects NOT reverted. PREFER over individual tool calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
atomicNoTrue = revert ALL prior ops on first failure via Unity Undo (fs side-effects not reverted)
timeoutNoTotal timeout in seconds (default 75)
commandsYesOne command per line (e.g. 'get_component path=/Player type=Transform')
on_errorNoError behavior: continue (default) | stop — stop aborts remaining commandscontinue
validate_aliasesNoDry-run alias validation before executing any mutations

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses important behavioral traits beyond the minimal readOnlyHint annotation: atomic reverts prior ops via Unity Undo, execute_code filesystem side-effects are not reverted, and on_error behavior is defined. It does not cover return format or permissions, but the core side-effect behavior is well addressed.

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?

The description is three sentences, front-loaded with the purpose and usage. It packs essential details (command format, error handling, timeout, atomic behavior) without redundancy. Every sentence 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?

Given the tool's complexity and the absence of an output schema, the description provides substantial context: command format, error behavior, timeout, atomicity, and side-effect caveats. It does not describe the return value format, which is a minor gap, but overall it is comprehensive enough for agent use.

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?

The input schema already covers all five parameters with detailed descriptions, so the baseline is 3. The description adds a generic command syntax ('cmd key=value') but largely duplicates the schema's examples and does not significantly enhance parameter understanding beyond what the schema provides.

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 clearly states 'Execute multiple commands in one call' with a specific verb and resource. It distinguishes itself from individual tool calls by noting 'Use for 2+ ops — reads AND writes' and 'PREFER over individual tool calls'.

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?

The description explicitly states when to use the tool ('Use for 2+ ops') and provides a clear preference over alternatives ('PREFER over individual tool calls'). It also explains key options like on_error and timeout, guiding selection and configuration.

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

compile_preflightCompile PreflightA
Read-only

Validate C# WITHOUT writing/recompiling (Roslyn). Use before writing .cs — catches typos in ~200ms vs 30s recompile. file_path: Assets-relative. new_content: full file. Returns OK preflight (ms) / ERR preflight + diagnostics / [ROSLYN UNAVAILABLE].

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
new_contentYes

TDQS

A4.4/5.0
Behavior4/5

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

Discloses that the tool does not write or recompile (consistent with readOnlyHint=true) and adds valuable return behaviors: 'OK preflight (ms) / ERR preflight + diagnostics / [ROSLYN UNAVAILABLE]'. It also reveals the Roslyn dependency and typical latency, going beyond the basic annotation.

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?

Every sentence serves a purpose: purpose, when to use, parameter semantics, and return format. The description is compact, front-loaded with the key differentiator, and contains 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 two-parameter read-only tool, the description covers the core needs: what it does, when to use it, parameter meanings, and return values. It leaves minor ambiguity about the structure of diagnostics and how to respond to 'ROSLYN UNAVAILABLE', but overall it is sufficient given the simple tool signature.

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 input schema's properties have only titles (no descriptions), so the description provides essential semantics: 'file_path: Assets-relative' and 'new_content: full file'. This adds meaning that the schema lacks, though it stops short of giving examples or value formats.

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 uses a specific verb ('Validate') with a clear resource ('C#') and immediately distinguishes itself from siblings by noting it does so 'WITHOUT writing/recompiling (Roslyn)'. This contrasts with compile/error tools like get_compile_errors and await_compile, making its unique purpose 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?

Explicitly states 'Use before writing .cs' and provides a performance comparison (~200ms vs 30s recompile), giving clear context for when to invoke it. It does not name alternative tools or explicitly say when not to use it, but the intended use case is strongly implied and sufficient for an agent.

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

console_markConsole MarkA
Read-only

Create a console watermark. Returns mark_id encoding current timestamp. Pass to get_console_since() to retrieve only logs after this point. Pure Python — no TCP call.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only safety is covered. The description adds value beyond that by specifying the return behavior (mark_id encoding timestamp), the pure Python implementation (no TCP call), and the intended usage pattern. This is useful context not derivable from annotations alone.

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?

The description is extremely concise: three short sentences, each carrying essential information. It is front-loaded with the primary purpose, followed by return value, usage, and implementation detail. No filler or redundant wording.

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 tool with one optional parameter, no output schema, and readOnly annotation, the description covers most key points: what it does, what it returns, and how to use it. However, the lack of any explanation of the 'label' parameter and the absence of any mention of edge cases or error conditions leaves a small gap, preventing a perfect score.

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 only parameter 'label' has no description in the schema (coverage 0%) and the tool description completely omits it. The description must compensate for low schema coverage, but it fails to explain what 'label' is for (e.g., an optional identifier for the mark). This leaves a notable gap for a parameter that is present, even if optional.

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 uses a specific verb ('Create') and resource ('console watermark'), and clearly explains the function: returning a mark_id encoding the current timestamp. It distinguishes itself from sibling tools like get_console_since by describing the relationship (pass the mark to retrieve logs after that point).

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?

Provides explicit usage context: create a mark, pass it to get_console_since() to filter logs. Also notes 'Pure Python — no TCP call', which implies it is a lightweight option compared to network-based tools. This gives clear when-to-use guidance and even hints at an alternative.

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

create_objectCreate ObjectA

Create new GameObject. components: comma-separated types to add on creation. primitive: Cube|Sphere|Cylinder|Capsule|Plane|Quad. prefab_path: instantiate from prefab asset. scene: create in named loaded scene (omit = active scene).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new GameObject
sceneNoTarget scene name when multiple scenes are loaded (omit = active scene)
parentNoScene path of the parent (omit = scene root)
primitiveNoPrimitive mesh type: Cube|Sphere|Cylinder|Capsule|Plane|Quad
componentsNoComma-separated component types to add on creation (e.g. 'Rigidbody,BoxCollider')
prefab_pathNoAsset path to instantiate from prefab (e.g. Assets/Prefabs/Enemy.prefab)

TDQS

A3.9/5.0
Behavior3/5

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

The description discloses creation modes (primitive, prefab, components) and scene behavior, which goes beyond the minimal readOnlyHint annotation. However, it omits important behavioral details like the precedence when both primitive and prefab_path are provided, and it does not mention any side effects such as selection or undo. Given the lack of thorough annotations, this is a noticeable 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?

The description is compact and front-loaded with the core purpose. It uses a concise field: explanation format, but several sentences are redundant with the schema, slightly reducing efficiency. Overall, it is appropriately sized and easy to scan.

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 the schema is rich and fully descriptive, the description covers the main creation options and scene handling. It omits the parent parameter but that is well-documented in the schema. No output schema exists, so return values are not expected. The description is complete enough for an agent to invoke the tool correctly in most scenarios.

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?

The input schema has 100% parameter description coverage, so the baseline is 3. The description essentially restates the schema's parameter descriptions (e.g., 'components: comma-separated types to add on creation' is nearly identical to the schema text) and adds no new semantic detail. It does not help beyond what the schema already provides.

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 clearly states 'Create new GameObject' with a specific verb and resource. It distinguishes itself from sibling tools like delete_object and manage_component by focusing on the creation of new objects, which 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 Guidelines4/5

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

The description gives clear context for when to use the tool: when creating a new GameObject via primitive, prefab, or with components. It does not explicitly mention alternatives or exclusions, but the context is strong enough to guide the agent without confusion.

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

delete_objectDelete ObjectA
Destructive

Delete GameObject by instance ID or scene path.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already state destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds context that the target can be identified by instance ID or scene path, which is useful. However, it does not disclose details like permanence, effects on children, or required authentication.

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?

The description is a single sentence, front-loaded with the verb 'Delete', and contains no fluff. Every word adds meaning, making it concise and well-structured.

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?

Given the tool is simple and has annotations, the description covers the core function. However, it lacks details about return values, error handling, or behavioral nuances like whether the deletion is recursive or irreversible, and the empty schema leaves input structure unexplained.

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?

The input schema has zero properties, so the baseline for parameter semantics is 4. The description partially compensates by indicating the identifier types (instance ID or scene path), but it does not specify parameter names, formatting, or how to pass these arguments, leaving ambiguity for the agent.

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 uses a specific verb 'Delete' and resource 'GameObject', and clarifies the target via 'instance ID or scene path'. This clearly distinguishes it from sibling tools like create_object and set_property.

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 is provided about when to use this tool versus alternatives, nor any exclusions or prerequisites. The usage is only implied by the function itself, and the description does not mention related tools or conditions.

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

discover_toolsDiscover ToolsA

Find and enable tools by category. Canonical 8: SCENE, COMPONENTS, ASSETS, MEDIA, VERIFY, RUNTIME, TESTS, SYSTEM. include_legacy=True adds legacy aliases (object, animation, etc.). structured=True adds surface/mutability info. enable=False to browse only.

ParametersJSON Schema
NameRequiredDescriptionDefault
enableNo
categoryNo
structuredNo
include_legacyNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the effect of each flag: include_legacy adds aliases, structured adds surface/mutability info, and enable=False toggles to browse mode. This goes beyond simple operation naming and gives the agent insight into mutability implications and output richness.

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?

The description is two sentences, front-loaded with the core purpose, and the subsequent sentences efficiently enumerate canonical categories and parameter semantics. No filler or redundancy; every clause adds value.

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 four parameters, no annotations, and no output schema, the description covers the tool's purpose, categories, and parameter behaviors well. It doesn't explicitly describe the return format, but the mention of 'structured=True adds surface/mutability info' hints at output shape, making this a solid, complete description.

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 0%, so the description fully compensates. It explains 'category' via the canonical 8 list, and interprets 'include_legacy,' 'structured,' and 'enable' with meaningful behavioral detail (e.g., 'enable=False to browse only'). Every parameter receives descriptive context that the schema lacks.

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 clearly states the tool's function: 'Find and enable tools by category.' It identifies a specific verb (find/enable), a resource (tools by category), and distinguishes itself from sibling tools that perform scene operations, validation, or compilation. The canonical category list further sharpens the tool's scope.

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 provides clear context for when to use the tool—when discovering or enabling tools by category—and explains key behavioral switches like 'enable=False to browse only.' It doesn't explicitly reference alternatives or exclusions, but the distinct purpose relative to siblings makes usage intuitive.

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

editorEditorB

Editor state/control. action: state|play|pause|stop|select|project_path. select: path (single) or paths (comma-sep multi, e.g. "/Player,/Enemy,/NPC").

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoScene path to target GameObject (e.g. /Parent/Child)
pathsNo
actionNoOperation to perform — see tool docstring for allowed valuesstate

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, so the agent knows this can mutate state; the description adds the specific actions (play/pause/stop/select) as context. However, it does not disclose side effects (e.g., entering play mode may trigger compilation) or what information the 'state' action returns, leaving behavioral gaps beyond the annotation.

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?

The description is two sentences with zero filler. It front-loads the purpose and packs the essential usage details for the select action into a compact form, making every word useful.

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 control tool with no output schema and sparse annotations, the description omits important details like return values for 'state' and the consequences of play/pause/stop. It is not completely hollow, but leaves gaps in what the agent should expect after 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?

The description enriches the schema by explaining that 'select' uses 'path' for single targets and 'paths' for comma-separated multiple targets (with an example). It also enumerates allowed action values. This goes beyond the basic schema descriptions, though it does not clarify the 'project_path' action fully.

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 clearly states the tool controls editor state/playback and selection, listing specific actions (state, play, pause, stop, select, project_path). This distinguishes it from many sibling tools, though the phrase 'Editor state/control' is somewhat generic without the action list.

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 guidance on when to use this tool versus alternatives like set_active or scene. It does imply usage by describing the select action for paths, but lacks clear context or exclusions such as 'for scene inspection use get_hierarchy instead'.

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

execute_codeExecute CodeA

Execute C# code in Unity Editor via Roslyn. 10-40x faster than recompile. Security: no System.IO, System.Net, System.Diagnostics. Bare statements are auto-wrapped in a static class — no boilerplate needed. Example: "var go = new GameObject("Test"); return go.name;"

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesC# code to execute in the Unity Editor context
undo_labelNoLabel for the Undo group entry (default 'execute_code')execute_code

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses important behavior: security restrictions (no System.IO, System.Net, System.Diagnostics), auto-wrapping of bare statements, and shows an example. Annotations indicate readOnlyHint: false, which is consistent with executing code. While it does not mention side effects or undo behavior, the security and auto-wrap details add significant transparency beyond the annotation.

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?

The description is compact and well-structured: it opens with the core purpose, follows with security constraints, then clarifies auto-wrapping, and ends with a concrete example. Every sentence provides useful information without redundancy.

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 code execution tool without an output schema, the description covers the essential behavioral context: what code can be run, restrictions, execution speed, and a usage example. It does not explicitly mention error handling or return values, but given the tool's open-ended nature and sibling context, it is sufficiently complete for an agent to invoke it correctly.

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 (code and undo_label) are already documented. The description adds value by explaining code auto-wrapping and providing an example, but does not elaborate on undo_label beyond the schema. Baseline 3 is appropriate since schema handles parameter semantics adequately.

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 clearly states the tool executes C# code in the Unity Editor via Roslyn, with a specific resource (Unity Editor) and verb (Execute). It also distinguishes itself from sibling tools by highlighting its speed advantage over recompilation.

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 provides clear context on when to use this tool: for fast iterative code execution (10-40x faster than recompile). It implies an alternative (recompile) but does not explicitly say when not to use it or name alternatives. The speed comparison gives practical guidance for selection.

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

get_compile_errorsGet Compile ErrorsA
Read-only

Compilation errors with file:line:column. Not lost on Console.Clear(). Structured, typed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With readOnlyHint=true in annotations, the description adds valuable context by noting that errors persist across Console.Clear() and that they are structured/typed. This goes beyond the annotation and helps the agent understand reliability and data format, though it doesn't detail edge cases like whether a compile is triggered.

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 deliver all essential information: what is returned, the format, and a key behavioral distinction. No filler or redundant content; every word adds value.

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 read-only tool with no output schema, the description is mostly complete: it states the content, format, and persistence. However, it is slightly ambiguous whether the tool triggers a compilation or merely returns the latest available errors. Given sibling names like compile_preflight, this could matter, so completeness is high but not perfect.

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 has zero parameters, so the baseline is 4 per rubric. There is no schema information to augment, and the description appropriately omits parameter 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?

The description clearly states the tool retrieves compilation errors with file:line:column notation. This is a specific verb+resource definition that distinguishes it from console-related tools like get_console by emphasizing structured, typed output.

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 usage for obtaining compile errors in a persistent structured format ('Not lost on Console.Clear()'), but it does not explicitly explain when to choose this over sibling tools like compile_preflight, await_compile, or get_console. No alternatives are named, so guidance is implied rather than explicit.

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

get_componentGet ComponentA
Read-only

Component properties as key-value. For MULTIPLE objects, use inspect(paths='a,b,c') instead — 1 call vs N. fields: comma-separated field names to keep (e.g. 'mass,position') — projects the result to save tokens; shows requested fields even at default values. Aliases: position, rotation, scale, mass, enabled, active, name. full=True: bypass distillation, return raw response. compress=True: strip default values before transfer.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn raw uncompressed response (bypass distillation)
pathYesScene path to the GameObject (e.g. /Player or /World/Enemy)
typeYesComponent type name (e.g. 'Transform', 'Rigidbody', 'MeshRenderer')
fieldsNoComma-separated fields to return (e.g. 'mass,localPosition') — skips all others, saves tokens
compressNoStrip fields at their default value before TCP transfer — reduces response size

TDQS

A4.6/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds context about field projection ('shows requested fields even at default values') and the effects of 'full' and 'compress' flags, though the latter two largely mirror the schema descriptions.

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?

The description is well-structured with separate lines for alternatives and parameters. It is efficient, though the 'full' and 'compress' explanations partially duplicate the schema descriptions. Still, every sentence contributes to understanding.

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?

Given the tool's moderate complexity (5 parameters, no output schema, readOnly annotation), the description covers purpose, usage alternatives, parameter semantics, and behavioral flags. The return format is implied as key-value pairs, which is sufficient for a getter tool.

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%, but the description adds significant value for the 'fields' parameter by listing aliases (e.g., position, rotation, scale) and clarifying that requested fields are shown even at default values. The other parameters are adequately described in 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?

The description clearly states the tool's function: 'Component properties as key-value.' It distinguishes from sibling tools by explicitly noting that inspect should be used for multiple objects, making the single-object scope obvious.

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?

Provides explicit guidance on when to use this tool versus an alternative: 'For MULTIPLE objects, use inspect(paths='a,b,c') instead — 1 call vs N.' Also explains the intended use of the 'fields' parameter to save tokens.

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

get_consoleGet ConsoleA
Read-only

Recent console logs. For C# compile errors use get_compile_errors instead. keyword: case-insensitive substring filter. count_only: return N matches as string. since: only logs from last N seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax log entries to return (default 10)
firstNoSkip the first N entries (pagination offset)
levelNoFilter by level: log|warning|error|exception (omit = all)
sinceNo
keywordNo
count_onlyNo

TDQS

A4.6/5.0
Behavior4/5

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

The annotations provide readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral details: keyword is a case-insensitive substring filter, count_only returns N matches as a string, and since filters by last N seconds. These go beyond the schema, providing clarity on how the tool behaves.

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 concise sentences, front-loaded with the core purpose. Every sentence earns its place: purpose, exclusion, and parameter semantics. No filler or redundancy.

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?

The description is sufficient given the tool's complexity: 6 parameters, no output schema, and readOnlyHint annotation. It covers all filter options and the alternative tool. It doesn't describe the return format for non-count_only calls, but that is a minor gap given the intuitive nature of console logs.

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 schema covers count, first, and level with descriptions, but the description adds meaning for keyword, count_only, and since—parameters that lack schema descriptions. This fills the gap and achieves comprehensive parameter understanding, though not all parameter semantics are described in the description itself.

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 the tool returns 'Recent console logs' and explicitly distinguishes it from get_compile_errors for C# compile errors. This gives a specific verb+resource (retrieves console logs) and clear differentiation from a sibling.

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?

It directly tells the agent when to use this tool (for recent console logs) and when not to ('For C# compile errors use get_compile_errors instead'). This is explicit and actionable.

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

get_console_sinceGet Console SinceA
Read-only

Console entries after the watermark created by console_mark(). mark_id: string from console_mark() or bare float timestamp. level: optional filter ('error,exception,assert'). keyword: case-insensitive substring filter. count_only: return match count as string. count: max entries to return (default 500).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
levelNo
keywordNo
mark_idYes
count_onlyNo

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already mark this as readOnlyHint=true, so no mutation disclosure is needed. The description adds useful behavioral details: it filters by level and keyword, count_only returns a count as a string, and count has a default of 500. This goes beyond simple read-only and provides meaningful 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact bullet list, with the core purpose in the first sentence. Every line adds value 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?

The tool has 5 parameters and no output schema, but the description covers all parameters and the count_only return type. It doesn't describe the full return structure for normal calls, but given the sibling context and simple nature, this is sufficient. Could be slightly more explicit about return format, but overall complete.

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?

With schema description coverage at 0%, the description carries full burden for parameter meaning. Each parameter is explicitly explained: mark_id accepts a mark string or timestamp, level filters by allowed values, keyword is case-insensitive, count_only returns a string, and count has a default. This exceeds schema information.

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 clear verb phrase 'Console entries after the watermark' which specifies exactly what the tool retrieves. It distinguishes itself from sibling tools like get_console and console_mark by referencing the mark-based scoping.

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 when to use this tool: to retrieve console entries after a watermark created by console_mark() or a timestamp. It implies an alternative to get_console but doesn't explicitly state exclusions or when to prefer alternatives, so it provides clear context without explicit alternative guidance.

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

get_hierarchyGet HierarchyA
Read-only

Scene hierarchy as text tree. For finding specific object by name/type use search_scene. Max 3000 nodes. Use filter/depth to narrow. Set components=true to see component types. Set compress=true to group repeated slots/points/meshes. Set summary=true for compact root-only counts (60-100 tokens). Set incremental=true to get NO_CHANGE if scene unchanged since last call. full=True: bypass distillation. scene: filter to a single scene by name (multi-scene only).

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoBypass distillation — return raw response
rootNoScene path to scope the hierarchy (omit = whole scene)
depthNoTraversal depth (default 2; increase for deeper trees)
sceneNoFilter to a single scene by name (multi-scene only)
filterNoSubstring filter on GameObject name
summaryNoReturn compact root-only counts (~60-100 tokens) instead of the full tree
compressNoGroup repeated slot/point/mesh siblings to save tokens on dense scenes
componentsNoShow component types next to each object (increases token cost)
incrementalNoReturn NO_CHANGE if scene is unchanged since last call (saves tokens)

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses important behaviors: max 3000 nodes, token-saving options (components, compress, summary token estimate), incremental returning NO_CHANGE, and full bypassing distillation. No contradictions with 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?

The description is about six sentences, front-loaded with a clear purpose, then an alternative, followed by parameter guidance. Each sentence is informative, though the run of 'Set X=true' imperatives is slightly dense but justified by token-saving tips.

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 explains output types (text tree, summary counts, NO_CHANGE) and limits (3000 nodes). It covers all key params and their usage contexts, making it complete for a tool with 9 parameters and no explicit return structure.

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 covers all 9 parameters (100% coverage), so baseline is 3. The description adds value by explaining the purpose of filter/depth for narrowing, giving token estimate for summary, and clarifying compress grouping. However, it doesn't mention the root parameter or add detail for full, but schema already covers those.

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 'Scene hierarchy as text tree', clearly stating the tool's output format and purpose. It explicitly distinguishes from the sibling tool search_scene by directing users to use search_scene for finding specific objects by name/type.

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?

Provides an explicit alternative: 'For finding specific object by name/type use search_scene.' It also gives practical usage advice such as 'Use filter/depth to narrow' and explains when to enable flags like components, compress, summary, and incremental.

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

inspectInspectA
Read-only

Get components for multiple objects at once. paths: comma-separated. components: comma-separated types (default: all). find_type: component type to find — populates paths automatically (replaces explicit paths). fields: comma-separated field names to keep across all objects — projects the result to save tokens. full=True: bypass distillation. compress=True: strip default values before transfer.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn raw uncompressed response (bypass distillation)
pathsNoComma-separated scene paths (e.g. '/Player,/Enemy,/Camera')
fieldsNoComma-separated field names to project across all objects — reduces tokens
compressNoStrip fields at their default value before TCP transfer — reduces response size
find_typeNoComponent type — auto-populates paths from all scene objects with this component
componentsNoComma-separated component types to read (omit = all)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only include readOnlyHint=true, so the description carries the burden of explaining behavior. It discloses key operational traits such as automatic path population via find_type, field projection to save tokens, distillation bypass with full=True, and compression stripping default values. These go well beyond the annotation and materially inform the agent.

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?

The description is front-loaded with the primary purpose and follows with terse, information-dense parameter explanations. Every sentence contributes value without redundancy, making it appropriately sized for the complexity.

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 no output schema, the description could be more explicit about the return structure, but it adequately covers all parameters, behaviors, and defaults needed for correct invocation. The operational context (batch read, token saving, compression) is well handled, so the minor lack of return-shape detail costs a point.

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?

Although the schema already describes all 6 parameters with 100% coverage, the description adds meaningful usage semantics: it explains comma-separated formats, defaults ('default: all'), interaction between find_type and paths, and the purpose of fields/compress (token and size reduction). This enriches understanding 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?

The description opens with 'Get components for multiple objects at once', which clearly identifies the verb, resource, and scope. It distinguishes from sibling tool get_component by emphasizing support for multiple objects, making the tool's purpose unmistakable.

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 implies a batch inspection use case ('multiple objects at once') and explains parameter choices, but it does not explicitly name alternatives or exclude scenarios. This is clear context without formal when/when-not guidance, so a 4 is appropriate.

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

lint_scene_refsLint Scene RefsB
Read-only

Read-only linter for scene references in DSL scripts or batch commands. path: project-relative path to .playtest fil…

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint annotation already declares this as read-only; the description repeats that and adds the 'linter' behavior and the path input context. It does not disclose what the linter produces or any edge-case behavior, but given the annotation, this adds moderate value.

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 first sentence is concise and front-loaded, but the second sentence is truncated ('...fil…') and presented as a bare 'path:' line, which undermines the structure. The overall length is appropriate, but the incomplete second line reduces clarity.

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?

Given the empty schema, readOnlyHint annotation, and no output schema, the description still does not explain what the linter returns, what it checks, or whether the path is required. Combined with the path/schema mismatch, the context is incomplete for safe invocation.

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 description mentions a 'path' argument with project-relative path semantics, but the input schema has no properties and additionalProperties is false. This mismatch means the agent cannot correctly pass the described path, making the parameter guidance misleading rather than helpful.

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 clearly states it is a read-only linter for scene references in DSL scripts or batch commands, giving a specific verb and resource. It is not a tautology, but it does not explicitly contrast with the sibling validate_references, so it stops short of full distinction.

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 gives a clear context: linting scene references in DSL scripts or batch commands. It does not, however, state when to prefer this over validate_references or run_playtest, nor does it mention exclusions, so it lacks explicit when/when-not guidance.

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

manage_componentManage ComponentA

Add or remove a component. Mutates scene. No confirmation required. action: 'add' or 'remove' ONLY (no 'enable'/'disable' — use set_property with prop='m_Enabled' for that). type: short name (e.g. 'Button') or full namespace (e.g. 'UnityEngine.UI.Button').

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path to the GameObject
typeYesComponent type (short: 'Button' or full namespace: 'UnityEngine.UI.Button')
actionYes'add' or 'remove' — not 'enable'/'disable' (use set_property m_Enabled for that)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only include readOnlyHint:false, so the description adds 'Mutates scene' and 'No confirmation required', disclosing the immediate mutation side effect and lack of a confirmation prompt. This goes beyond the annotation's simple non-read-only flag.

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 compact sentences, front-loaded with the core action and mutation warning, followed by essential constraints. Every sentence earns its place without repetition.

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-param mutation tool with no output schema, it covers purpose, side effects, and constraints. It doesn't mention return values or error behavior, but these are less critical for a straightforward add/remove operation.

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 (path, type, action) already has a detailed description. The description repeats the action constraint and type examples, adding no new semantic value 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 'Add or remove a component' and 'Mutates scene' — a specific verb and resource. Clearly distinguishes from sibling tools like get_component (read) and set_property (property modification).

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?

Explicitly says action must be 'add' or 'remove' ONLY and directs to use set_property with prop='m_Enabled' for enable/disable. Also clarifies type format with short/full namespace examples.

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

mcp_statusMcp StatusB
Read-only

Compact MCP status: scene, dirty, play/compile state, port, alias count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

The description adds value by enumerating the fields included in the status (scene, dirty, play/compile state, port, alias count). Since readOnlyHint is already present in annotations, the read-only behavior is covered. However, it does not disclose any additional behavioral traits (e.g., whether it refreshes state, requires Unity connection, or how the status is computed).

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?

The description is a single, tightly packed sentence that front-loads the key information. Every word contributes: 'Compact' indicates scope, and the colon-delimited list specifies exact content. No filler or repetition.

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 must convey what is returned. It lists the fields, but does not explain their meaning or possible values (e.g., what 'dirty' means, what 'port' refers to, or what 'play/compile state' looks like). For a simple status tool, this is adequate but leaves room for ambiguity.

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 has zero parameters, so the schema provides no parameter information. Per the 0-param baseline, the description does not need to compensate for missing parameter semantics. The description's focus on output fields is appropriate here.

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 clearly identifies the tool as providing a compact MCP status with specific fields (scene, dirty, play/compile state, port, alias count). It is distinct from sibling tools focused on console output or compilation errors, though it does not explicitly use a verb like 'get' or 'show'. The resource 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?

No guidance is given on when to use this tool versus alternatives. The description simply states what the tool returns, leaving the agent to infer that it is for status checks. No exclusions or alternative tool mentions are provided.

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

permission_promptPermission PromptB
Read-only

Handle Claude permission prompts via MCP.

Registered as --permission-prompt-tool so Claude routes all permission …

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

The description only says it handles permission prompts, but does not disclose what actions are taken (e.g., showing a prompt, approving/denying) or any side effects. Annotations only provide readOnlyHint, so the description carries the burden but falls short.

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?

The visible description is short and front-loaded with the core purpose. However, the second sentence is truncated, leaving the text incomplete, which slightly reduces structure quality.

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?

The tool lacks an output schema and provides minimal behavioral info. It does not explain what the permission prompt shows, how it resolves, or the return format, making the description incomplete for an agent to understand the full tool behavior.

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?

There are zero parameters, and the schema is empty. Per the rubric, a baseline of 4 is appropriate since no parameter documentation 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?

The description explicitly states it handles Claude permission prompts via MCP, which is a specific verb+resource. It distinguishes itself from the sibling Unity tools, though the verb 'handle' is somewhat generic.

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 the tool is registered as --permission-prompt-tool so Claude routes all permission prompts to it, implying automatic usage. However, it does not mention alternatives or when not to use it.

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

reconnect_unityReconnect UnityA
Idempotent

Reconnect to Unity. Port 0 or omitted = auto-discover from port files.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and readOnlyHint=false, providing some safety and mutability context. The description adds that port 0 or omitted triggers auto-discovery from port files, which is useful behavioral information. However, it does not elaborate on potential side effects (e.g., whether an existing connection is closed) beyond the annotation hints, so the disclosure 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?

The description is extremely concise, consisting of a single direct sentence plus a short parenthetical note. It is front-loaded with the primary action and contains zero redundant or filler content. Every word earns its place.

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 parameters, no output schema, and simple tool behavior, the description covers all essential aspects. The combination of the clear purpose and the port auto-discovery note is sufficient for an agent to understand and invoke the tool correctly. Annotations further round out the context, so nothing critical 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?

The input schema has zero parameters, so the baseline is 4. The description adds meaningful context about port handling ('Port 0 or omitted = auto-discover from port files'), which clarifies how connection settings are resolved even though no explicit parameters exist. This goes beyond the schema by explaining the auto-discovery mechanism, though it is slightly ambiguous given the empty 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?

The description clearly states the tool's action ('Reconnect') and resource ('Unity'), making its purpose unambiguous. The verb 'reconnect' distinguishes it from siblings like 'sync_unity' or 'discover_tools', which are about synchronization or discovery rather than connection. It is specific and actionable.

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 the tool is for re-establishing a connection to Unity, but it does not explicitly state when to use it (e.g., after a disconnect) or when to prefer an alternative. The note about port auto-discovery gives operational context but no comparative guidance against siblings. While the name and description are self-explanatory, explicit usage scenarios or exclusion criteria are absent.

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

resolve_tool_schemaResolve Tool SchemaB

Return full parameter schemas for deferred tools. tools=comma-separated names.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolsYes

TDQS

B3.2/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 burden of behavioral disclosure. It only states that schemas are returned, but does not mention potential errors (e.g., unknown tool names), side effects, or whether the tool queries live or cached data. This is insufficient for a tool with no annotation safety hints.

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?

The description is extremely concise, with two short sentences that front-load the primary action and then specify the parameter format. No unnecessary words or redundancy.

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?

The tool is simple (one parameter, no output schema), so the description covers the basic behavior. However, it omits context about what 'deferred tools' are, what the output format looks like (e.g., JSON structure), and how failures are handled. A bit more detail would make it 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 description explicitly explains the 'tools' parameter as 'comma-separated names', which adds meaning beyond the schema's bare 'string' type. This clarifies the format and intended usage, though it could also mention that these names refer to deferred tool identifiers.

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 clearly states the tool returns full parameter schemas for deferred tools, using a specific verb ('Return') and resource ('parameter schemas'). It distinguishes itself from siblings like discover_tools by explicitly focusing on 'deferred tools', though the term 'deferred' is somewhat vague.

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 is provided on when to use this tool versus alternatives like discover_tools or mcp_status. The mention of 'deferred tools' implies a use case, but the description does not explain what deferred tools are or when resolution is needed.

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

run_playtestRun PlaytestA

[Play Mode] Execute a playtest DSL script. Returns structured report (for NUnit tests, use run_tests). Commands: MOVE TO x,y,z | WAIT n | WAIT_UNTIL query op value | ASSERT query op value | ASSERT_CONSOLE_CLEAN [IGNORE "pat"] | SNAPSHOT queries | INVOKE path comp method args | SET path comp field value | LOG msg | TIMESCALE n | ASSERT_CONSERVED SUM a+b OVER t | ASSERT_CTA VISIBLE|CLICKABLE | VAL name query | TELEPORT path x,y,z | ASSERT_BATCH...END | ASSERT_NEAR pathA pathB dist | INVARIANT query op value | SIMULATE name [DURATION n] [TIMESCALE n] | MONITOR name | TRACE_FLOW FROM a TO b FIELD f | CAPTURE label query | ASSERT_CAPTURED label INCREASED|DECREASED. defs: inline VAL definitions prepended to script.

ParametersJSON Schema
NameRequiredDescriptionDefault
defsNoInline VAL definitions prepended to script (alias block)
pathNoPath to .playtest DSL file on disk (mutually exclusive with script)
freshNoStop and restart Play Mode before running the script
scriptNoInline DSL script (mutually exclusive with path)
timeoutNoMax seconds to wait for the playtest to finish (default 120)
after_hookNoDSL commands to run after Play Mode exits
before_hookNoDSL commands to run before entering Play Mode
abort_on_failNoStop script execution on first ASSERT failure
snapshot_on_failureNoAuto-capture screenshot on first ASSERT failure

TDQS

A4.5/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false, already signaling mutation. The description adds context by mentioning Play Mode, structured report, and listing DSL commands that imply state changes (SET, INVOKE, TELEPORT). It doesn't specify report contents or side effects, but adds value beyond the annotation.

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?

The description front-loads purpose and exclusions, then lists DSL commands in a compact, pipe-separated format. It's long but information-dense; the command list is essential for understanding script/defs parameters.

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 the tool's complexity (9 params, 20+ DSL commands, no output schema), the description covers the DSL thoroughly and defers parameter details to the schema. The main gap is the lack of detail about the structured report's format, but this is not critical for 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 baseline is 3. The description enriches the `script` and `defs` parameters by enumerating the DSL commands, giving the agent concrete syntax knowledge that the schema lacks.

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 '[Play Mode] Execute a playtest DSL script', using a specific verb and resource. It clearly distinguishes from run_tests by stating 'for NUnit tests, use `run_tests`'.

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?

The description explicitly names an alternative for NUnit tests: 'for NUnit tests, use `run_tests`'. This provides a clear when-not and directs the agent to the correct sibling tool.

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

run_playtest_suiteRun Playtest SuiteA

[Play Mode] Run multiple .playtest files sequentially and return a compact matrix. Enters Play Mode. No confirmation required. pattern: glob pattern (e.g. 'Playtests/*.playtest'), comma-separated list, or newline-separated list of project-relative paths. suite_path: absolute path to a .suite file (lines = project-relative .playtest paths, # = comment). Exactly one of pattern or suite_path must be provided. stop_on_fail=True: abort suite after first failure. stop_after=True: exit Play Mode when suite completes. auto_play=True: enter Play Mode automatically if not already playing. restart_between=True: stop+play between each file to reset runtime state. Output: SUITE: X/Y passed (Zs) + per-file line + full failure details.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternNo
auto_playNo
stop_afterNo
suite_pathNo
stop_on_failNo
restart_betweenNo
timeout_per_testNo

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses key behavioral traits beyond the readOnlyHint=false annotation: it enters Play Mode, requires no confirmation, and describes how stop_after exits Play Mode. It also explains the output format. This provides useful operational context that annotations do not cover.

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?

The description is well-structured with an overview, parameter breakdown, and output summary. It is sufficiently detailed but not overly verbose; each sentence contributes to understanding the tool's behavior or parameters.

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 tool with 7 parameters and no output schema, the description covers most aspects: the parameter relationships, the output shape, and the action. It lacks an explicit usage context compared to alternatives, but the information provided is sufficient for an agent to invoke the tool correctly. The missing timeout_per_test description is the main 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?

With 0% schema description coverage, the description compensates well by explaining the format and accepted values for pattern, suite_path, and the boolean flags (stop_on_fail, stop_after, auto_play, restart_between). However, the timeout_per_test parameter is not described at all, leaving a gap for that parameter.

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 clearly states the tool runs multiple .playtest files sequentially and returns a compact matrix. It explicitly mentions entering Play Mode, which is a specific action. It distinguishes from siblings like 'run_playtest' by indicating batch execution of multiple files.

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 provides clear parameter usage guidance, including the constraint that exactly one of pattern or suite_path must be provided, and explains the effect of each flag. However, it does not explicitly state when to choose this tool over alternatives like 'run_playtest' or other test runners; the usage context 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.

run_testsRun TestsA
Idempotent

Dispatch Unity tests and return their durable identity immediately.

A successful response is
``tests-started|request_id=...|run_id=...|utf_guid=...|state=dispatched``.
If transport fails after dispatch may have happened, the result is
``START-UNKNOWN`` with the same request_id; resolve it instead of retrying
with a new identity.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoTest runner mode: EditMode or PlayModeEditMode
filterNoNUnit filter expression (e.g. 'MyNamespace.MyTest')
request_idNoCaller-supplied idempotency ID — reuse to retry a failed dispatch without double-running

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the idempotentHint annotation by disclosing the exact success response format, the START-UNKNOWN failure mode, and the correct resolution strategy (reusing the same request_id). This is critical behavioral information that an agent needs to handle dispatch reliably.

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?

The description is four concise lines, front-loaded with the core purpose. Every sentence adds value: the action, the success format, and the failure handling. No filler or redundant 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 specifying the response protocol. It covers the main dispatch flow and the transport-failure edge case. However, it does not mention how to check results later (e.g., via run_tests_wait), leaving a slight gap in the overall workflow for a dispatch-only tool.

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 adds meaning for request_id by explicitly tying it to the START-UNKNOWN resolution flow, and it mentions run_id and utf_guid in the response, reinforcing the durable identity concept. It does not explain mode or filter beyond the schema, but the added context for request_id elevates 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?

The description clearly states the action ('Dispatch Unity tests') and the distinctive outcome ('return their durable identity immediately'). This differentiates it from the sibling run_tests_wait by emphasizing the immediate, async nature of the dispatch.

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 usage for asynchronous dispatch and provides operational guidance on handling START-UNKNOWN, but it does not explicitly contrast with alternatives such as run_tests_wait or state when not to use this tool. The guidance is more about handling edge cases than selecting between tools.

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

run_tests_waitRun Tests WaitA

Dispatch tests and wait for the exact run to become terminal. Dispatches test run. No confirmation required.

Transport failures and domain reloads do not erase the last snapshot. A
caller timeout is observational only: it returns ``TIMEOUT`` with request,
run and snapshot data and never marks the Unity run complete.
ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoTest runner mode: EditMode or PlayModeEditMode
filterNoNUnit filter expression (e.g. 'MyNamespace.MyTest')
timeoutNoMax seconds to wait for completion (default 120)
request_idNoCaller-supplied idempotency ID
poll_intervalNoSeconds between status polls (default 5)

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the readOnlyHint: false annotation, the description reveals critical behaviors: no confirmation required, transport failures and domain reloads do not erase the last snapshot, and a caller timeout is observational—returning TIMEOUT with run data without marking the run complete. These details are valuable for agent decision-making and go well beyond annotation hints.

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?

The description is compact, with a clear first sentence followed by a short behavioral note. The slight redundancy ('Dispatches test run' repeats the first sentence) prevents a perfect score, but overall it is concise and front-loaded with the core purpose.

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 tool with 5 parameters, no output schema, and only a readOnlyHint annotation, the description covers the essential behavioral aspects: dispatch, wait, timeout semantics, and resilience. It does not describe the success return format or polling behavior, but the schema provides parameter details. Overall, it is sufficiently complete for the tool's complexity.

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%, with all five parameters having descriptive text in the schema. The description itself does not add further parameter-level meaning beyond what is already in the schema. It mentions timeout behavior but does not tie it to specific parameters, so the baseline of 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?

The description clearly states the tool's function: dispatching tests and waiting for the exact run to become terminal. It uses a specific verb ('dispatch' + 'wait') and resource ('tests'), and distinguishes itself from run_tests by emphasizing the waiting behavior. The added note about no confirmation further clarifies the action.

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 tool is for running tests and waiting for completion, but does not explicitly compare it to alternatives like run_tests. There is no direct 'when to use' or 'when not to use' guidance, though the wait semantics are clear. The absence of exclusions or alternative references makes the guidance only moderate.

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

sceneSceneB
Destructive

Scene management. action: new|open|save|discard|open_additive|close|set_active|list|save_copy. path: required for open/save/open_additive/close/set_active/save_copy. list requires no path. scene: save/discard/save_copy target when multiple scenes loaded (identifies by name). save_copy: writes current dirty state to path as backup; active scene reference unchanged. include_unsaved: always True — save_copy always captures current in-memory state.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAsset path — required for open/save/open_additive/close/set_active
sceneNoScene name for save/discard when multiple scenes are loaded
actionYesOperation: new|open|save|discard|open_additive|close|set_active|list
include_unsavedNo

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already mark the tool as destructive. The description adds specific behavioral context for save_copy (e.g., 'writes current dirty state to path as backup; active scene reference unchanged') and clarifies include_unsaved is always True. However, it does not explain side effects for destructive actions like discard or close beyond what the annotation states.

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?

The description is compact yet organized, listing actions as a shorthand and then explaining parameter requirements in a structured way. It efficiently packs essential details without unnecessary elaboration, though it reads as a dense run-on in places.

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?

Given the tool has nine actions and overlaps with siblings like `set_active` and `scene_change_plan`, the description could be more complete. It covers parameter mapping well but does not describe return values for actions like `list`, nor does it explain when to use the scene tool vs. its siblings. The absence of an output schema increases the need for these details.

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 description adds meaningful parameter semantics that go beyond the schema. It explicitly ties each action to required parameters ('path required for open/save/open_additive/close/set_active/save_copy'), clarifies the 'scene' parameter for identifying multiple loaded scenes, and explains the `include_unsaved` behavior (always True for save_copy). This compensates for the 75% schema coverage.

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 clearly states 'Scene management' and enumerates nine specific actions (new, open, save, discard, open_additive, close, set_active, list, save_copy), making it easy to understand the tool's scope. It is less explicit in differentiating from the sibling `set_active` tool, which also handles scene activation, so it loses a point on full distinction.

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 provides per-action parameter requirements (e.g., 'path: required for open/save/open_additive/close/set_active/save_copy'), but it does not explain when to use this tool versus alternatives like `scene_change_plan` or `apply_scene_change`. There is no mention of exclusions, warnings, or alternative tool guidance.

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

scene_change_planScene Change PlanC

Pre-flight + plan for safe scene edit. 1.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.6/5.0
Behavior2/5

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

The description does not disclose any behavioral traits beyond the annotation readOnlyHint=false. It does not explain side effects, expected output, or the nature of the 'safe scene edit' guarantee. With only a one-sentence description, the burden of transparency is almost entirely unmet.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but it is under-specified rather than concise. The '1.' appears to be a leftover from an incomplete numbered list, which is a structural flaw. It does not earn its place as a meaningful statement.

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?

Given there is no output schema, minimal annotations, and a description that provides almost no context, the tool is severely under-described. A planning/pre-flight tool likely has complex behavior, but nothing explains what the plan entails, how it is returned, or what 'safe' means.

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?

There are zero parameters, so the baseline score of 4 applies. The description does not need to explain parameter details. However, it could have elaborated on what aspects of a scene edit are checked or planned, but that falls under other dimensions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it is a 'Pre-flight + plan for safe scene edit', which gives a vague sense of purpose but lacks a specific verb or resource. The trailing '1.' suggests an incomplete list, adding confusion. It does not clearly distinguish from sibling tools like apply_scene_change or verify_after_change.

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 is provided on when to use this tool versus alternatives. The phrase 'pre-flight + plan' implies it might be used before edits, but there is no explicit context, exclusions, or mention of sibling tools.

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

screenshotScreenshotA
Read-only

Capture screenshot (file path); describe= -> Haiku text (15-100x fewer tokens), raw=True forces path. camera: scene_view|scene_view_frame|multi_view|single_view|overview|overview_game. angle (single_view): front|left|top|iso|ex,ey,ez. zoom: higher=closer. angles: per-view Euler "ex,ey,ez|..." (_=skip). supersample 1-4. offset/fixed_size: framing. highlight: paths[:#RRGGBB] for bbox. show_colliders: wireframes. annotation_id: frame + highlight annotation by id (auto sets camera=annotation_frame).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoForce returning file path even when describe= is set
pathNoSave to this file path (omit = auto-generate in ScreenShots/)
zoomNoZoom factor — higher = closer
angleNoEuler angle for single_view: front|left|top|iso|ex,ey,ez
widthNoImage width in pixels (default 640)
anglesNoPer-view Euler angles: 'ex,ey,ez|...' (underscore = skip this view)
cameraNoView type: scene_view|scene_view_frame|multi_view|single_view|overview|overview_game
heightNoImage height in pixels (default 480)
offsetNoFraming offset vector
describeNoHaiku prompt for AI text description instead of returning file path (15-100x fewer tokens)
highlightNoComma-separated paths to highlight with bounding box (e.g. /Player:#FF0000)
fixed_sizeNoFixed framing size override
output_pathNoAlias for path — save to this file path
supersampleNoAnti-alias quality 1-4 (higher = sharper, slower)
annotation_idNoFrame + highlight annotation by ID (auto-sets camera=annotation_frame)
show_collidersNoOverlay collider wireframes on the screenshot

TDQS

A4.3/5.0
Behavior4/5

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

The description significantly extends beyond the readOnlyHint annotation by explaining behavior such as returning a file path by default, forcing a path with raw=True, generating Haiku text with describe, auto-setting camera from annotation_id, and the meaning of zoom/angles/supersample. It does not contradict the annotation and provides valuable 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?

The description is compact and front-loaded with the core action, then follows with a dense but organized reference of parameters. Every sentence contributes, though the line-packed formatting is somewhat cryptic; still, it's appropriately sized for a tool with 16 parameters.

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 the tool's complexity (16 params, no output schema), the description covers nearly all behavioral aspects: output modes, camera options, framing controls, highlight syntax, and annotation handling. Minor gaps exist (e.g., exact return format/path details), but the description is substantially complete for a tool of this scope.

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?

Although schema coverage is 100%, the description adds key semantic value by explaining syntactic shorthand (e.g., 'ex,ey,ez', '_=skip', 'paths[:#RRGGBB]'), the relationship between describe and raw, and how annotation_id auto-configures camera. These details are not in the schema and help an agent invoke parameters correctly.

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 'Capture screenshot (file path)'—a specific verb+resource pairing that clearly states the tool's purpose. It goes on to describe the two primary output modes (file path or Haiku description), which distinguishes it from all sibling tools that are unrelated to image capture.

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 gives clear context on how to use the tool, including camera modes, angle presets, zoom semantics, and framing options. It doesn't explicitly name alternatives because no sibling tool serves a similar function, but the extensive parameter guidance makes its intended use evident.

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

search_sceneSearch SceneA
Read-only

Search scene objects. Syntax: name text, t:Component, tag=Tag, layer=N, active=bool. Combine with spaces. root: scope search to subtree (path or None for whole scene). limit: max results (default 50; 0=unlimited). scene: filter to a single scene by name (multi-scene only).

ParametersJSON Schema
NameRequiredDescriptionDefault
rootNoScene path to scope the search (omit = whole scene)
limitNoMax results (default 50; 0 = unlimited)
queryYesSyntax: 'name text', 't:Component', 'tag=Tag', 'layer=N', 'active=bool' — combine with spaces
sceneNoFilter to a single scene by name (multi-scene only)

TDQS

A3.6/5.0
Behavior3/5

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

The annotation readOnlyHint=true already indicates a safe read operation, and the description adds behavioral details like 'root: scope search to subtree (path or None for whole scene)' and 'limit: max results (default 50; 0=unlimited)'. It does not discuss return format or error behavior, but the annotation lowers the bar and the added details are useful.

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?

The description is front-loaded with the purpose, followed by a compact syntax line and then brief parameter explanations. Every sentence earns its place, with no fluff or redundancy, making it highly efficient.

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 search tool with no output schema, the description adequately documents the query syntax, all parameters, defaults, and special values (0=unlimited). It lacks explicit return-value details, but the read-only nature and clear invocation requirements make it sufficiently complete for an agent to use correctly.

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 baseline is 3. The description essentially repeats the parameter semantics found in the schema, though it adds the shorthand syntax summary (e.g., 'tag=Tag', 'layer=N') and clarifies 'multi-scene only' for the scene filter, which is a slight enhancement.

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 clearly states 'Search scene objects' with a specific verb and resource, making the core purpose obvious. However, it does not explicitly differentiate itself from sibling tools like get_hierarchy or inspect, so it stops 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 description implies usage through its query syntax and parameter explanations—use this when you need to find scene objects by name, component, tag, layer, or active state. It provides no explicit alternatives or when-not-to-use guidance, leaving the agent to infer context from the sibling list.

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

set_activeSet ActiveA
Idempotent

Set GameObject active/inactive.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path to the GameObject
activeYesTrue to activate, False to deactivate

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and idempotentHint=true, covering the mutation and idempotency aspects. The description adds no additional behavioral context such as side effects on children, persistence, or error behavior, but given the annotations, the minimum baseline is met.

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?

The description is a single concise sentence, front-loads the core action, and contains no redundant or filler content. Every word earns its place.

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?

Given the tool's simplicity, the two clearly documented parameters, and the presence of behavioral annotations, the description is sufficiently complete for an AI agent to understand and invoke the tool correctly. No output schema or complex return value needs explanation.

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 both parameters ('path', 'active') have clear descriptions. The tool description does not add extra parameter-level meaning beyond what the schema already provides, which fits the baseline for high coverage.

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 uses a specific verb ('Set') and clearly identifies the resource ('GameObject') and the operation scope (active/inactive). This unambiguously distinguishes it from sibling tools like set_property or set_parent, and directly names the state being modified.

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 provides no explicit guidance on when to use this tool versus alternatives, no prerequisites (e.g., valid scene path), and no exclusions. It only states what it does without contextualizing its place among the sibling tools.

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

set_parentSet ParentA
Idempotent

Reparent existing GameObject. parent=null → move to scene root. world_position_stays=True (default): preserves world transform. False: stays local to new parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path of the GameObject to reparent
parentNoNew parent scene path (omit or null = move to scene root)
world_position_staysNoTrue (default) = preserve world transform; False = keep local transform relative to new parent

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the behavioral impact of world_position_stays (preserving world vs. local transform) and the null-parent case, adding significant context. There is no contradiction with the idempotentHint or readOnlyHint annotations.

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?

The description is two sentences, front-loaded with the primary action, and contains no redundant or filler text. Every phrase adds value.

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 only three parameters, full schema coverage, and no output schema, the description combined with the schema leaves no significant ambiguity. It covers the main behavioral variations and is appropriate for the tool's complexity.

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?

The input schema already provides complete descriptions for all three parameters (100% coverage), and the tool description largely restates these definitions without adding new details or edge-case guidance. This earns the baseline score for high schema coverage.

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 the specific verb 'Reparent' and the resource 'GameObject', clearly stating what the tool does. It also clarifies the null-parent behavior, distinguishing it from sibling tools like set_active or set_property.

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 gives clear context for when to use the tool (any reparenting operation) and explains the effect of the key parameters. However, it does not explicitly mention alternatives or when not to use it, stopping short of the highest mark.

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

set_propertySet PropertyA
Idempotent

Set component property (Edit Mode, SerializedObject — for Play Mode use invoke_method or execute_code). find_type: component type — bulk-sets prop on all matching objects without specifying paths. For GO rename use rename_object(). ObjectReference: scene path (/Player), asset path (Assets/X.mat), sub-asset (Assets/X.fbx::ClipName), $hexId (e.g. $3E8) or #instanceID (legacy), or 'null'. dry_run=True shows what would change without applying. ref_component_type: when value is a plain scene path and the field expects a specific Component type (e.g. 'BoxCollider'), appends '::TypeName' to the value so C# resolves the correct component. Ignored when value already contains '::'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoScene path to the GameObject (e.g. /Player/Body)
propNoProperty name as shown in Inspector (e.g. 'mass', 'localPosition.x')
valueNoNew value. ObjectReference: scene path (/Player), asset path (Assets/X.mat), sub-asset (Assets/X.fbx::ClipName), $hexId (e.g. $3E8) or #instanceID (legacy decimal), or 'null'
dry_runNoShow what would change without applying (safe preview)
componentNoComponent type (empty string = Transform)
find_typeNoComponent type — bulk-sets prop on ALL scene objects with this component (no path needed)
ref_component_typeNo

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it notes the Edit Mode limitation, explains dry_run as a safe preview, and details how ref_component_type resolves plain scene paths. Annotations already indicate idempotency and non-read-only, so the description supplements without contradicting them.

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?

The description is dense but purposeful. Every sentence covers a distinct concept (mode, find_type, rename alternative, value formats, dry_run, ref_component_type) with no filler. A minor typo ('BoxClider') does not affect understandability.

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 the tool's complexity (7 params, no output schema), the description covers the key operational modes, bulk behavior, reference format details, and safety preview. Combined with the strong schema descriptions, it gives the agent enough to select and invoke 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 description coverage is high (86%), and the description further clarifies find_type for bulk operations, dry_run's preview effect, ref_component_type (which has no schema description), and the complete ObjectReference value format. This goes beyond the structured fields.

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 clearly states the tool sets a component property, with a specific verb and resource. It distinguishes itself from siblings by explicitly mentioning Edit Mode/SerializedObject and contrasting with Play Mode tools like invoke_method/execute_code, plus rename_object() for renames.

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?

It gives explicit usage context: 'Edit Mode, SerializedObject' and directly names alternative tools for Play Mode ('use invoke_method or execute_code') and for renames ('use rename_object()'). This makes the when-to-use boundary crisp.

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

sync_unitySync UnityA

Unified Unity reload: trigger Refresh (+ optional Resolve), wait for new code to live.

resolve=True: call Client.Resolve() first (use after package.json change).
bump=True: atomically increment plugin patch version BEFORE sync, implies resolve=True.
Returns: 'sync clean' / compile errors / timeout message.
ParametersJSON Schema
NameRequiredDescriptionDefault
bumpNo
resolveNo
timeoutNoSeconds before giving up (default varies per tool)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only state readOnlyHint=false, which aligns with the mutating refresh/bump behavior. The description goes beyond annotations by specifying the return contract ('sync clean' / compile errors / timeout message) and the ordering/atomicity of bump before sync.

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?

The description is compact and well-structured: a one-sentence overview, then bullet-like usage notes, then return outcomes. Every sentence earns its place with no filler or repetition.

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?

Despite having no output schema, the description states the three possible return outcomes. It also covers optional behavior, ordering, and atomicity. For a tool with three optional parameters, this is sufficient for an agent to select and invoke 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 low (33%), and the description compensates by explaining resolve and bump semantics, including their relationship. It does not add detail for timeout, but the schema already describes that parameter; overall the description adds meaningful meaning 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?

The description uses a specific verb+resource construction: 'Unified Unity reload: trigger Refresh (+ optional Resolve)' and clearly states the tool's purpose. It distinguishes itself by presenting a consolidated sync workflow, unlike sibling tools that target narrower actions like await_compile or reconnect_unity.

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 gives explicit situational guidance: 'resolve=True: call Client.Resolve() first (use after package.json change)' and explains that bump implies resolve. It does not name alternative sibling tools or state exclusions, but it provides clear context for when to use key options.

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

validate_referencesValidate ReferencesA
Read-only

Validate all ObjectReference fields under path recursively. Returns [ERROR]/[MISSING] for broken refs. Summary: "N ERROR, M OK". Use depth=1 for quick top-level scan, depth=3-5 for full subtree. verbose=True also shows [OK] lines (off by default to save tokens). ignore_optional=True skips fields marked [Optional] (reduces noise).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesScene path to target GameObject (e.g. /Parent/Child)
depthNoMaximum hierarchy depth to traverse
verboseNo
ignore_optionalNo

TDQS

A4.8/5.0
Behavior5/5

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

The description goes beyond the readOnlyHint annotation by detailing the return format ([ERROR]/[MISSING], summary line), explaining the effect of verbose and ignore_optional, and noting token savings. This provides substantial behavioral context.

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?

The description is compact and front-loaded: it states the core function first, then the output format, then practical parameter advice. Every sentence adds value.

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?

Given the tool's moderate complexity, the description covers the main purpose, output format, and parameter behavior. No output schema exists, but the description's mention of return format fills that gap. Combined with the readOnly annotation, the description is sufficient for correct usage.

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?

The schema only describes path and depth, leaving verbose and ignore_optional undocumented. The description adds meaningful explanations for these parameters and offers depth usage guidance, compensating for the 50% schema coverage.

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 clearly states the tool's function: validating ObjectReference fields under a path recursively. It uses a specific verb and resource, and differentiates from siblings by focusing on ObjectReference validation and providing output format.

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 provides parameter-specific usage guidance (depth recommendations, verbose usage, ignore_optional behavior). However, it does not explicitly mention alternatives or when not to use this tool, so it stops short of full guidance.

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

verify_after_changeVerify After ChangeC

Single verification gate after code/scene changes. Gates are additive — only enabled ones run: 1.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

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

The annotations only include readOnlyHint=false, providing minimal safety context. The description adds that gates are additive and only enabled ones run, but does not disclose what running a gate entails, potential side effects, or what happens on failure. Given the description carries the burden, this is insufficient behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, which is generally positive, but the second sentence ends abruptly with '1.' indicating a truncated list. This structural flaw makes the description incomplete and confusing, violating the principle that every sentence should be complete and useful.

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 parameters, no output schema, and minimal annotations, the description must carry the full explanatory burden. It fails to specify what the enabled gates are, how they are enabled, what verification means in practice, or what the tool returns. The truncated list and vague 'gate' terminology leave the tool under-specified for an agent to use 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?

There are zero parameters, so the baseline is 4. The schema already has an empty properties object, and the description does not need to explain any parameter semantics. No additional parameter description is necessary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the tool as a 'Single verification gate after code/scene changes,' which names the action (verification) and the context (after changes). However, the term 'gate' is vague, and the trailing '1.' suggests the description is truncated, so the full scope of what it verifies is unclear. It does not clearly differentiate from sibling tools like compile_preflight or run_tests.

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 provides a clear temporal usage context ('after code/scene changes') and states that gates are additive and only enabled ones run. However, it does not explain when to choose this tool over specific sibling tools, nor does it mention cases where other verification or preflight tools would be more appropriate.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.31.0
    • Changedset_property1 field changed
      • changedInput schema / properties / value / description
        Previous value: -"New value. ObjectReference: scene path (/Player), asset path (Assets/X.mat), sub-asset (Assets/X.fbx::ClipName), #instanceID, or 'null'"New value: +"New value. ObjectReference: scene path (/Player), asset path (Assets/X.mat), sub-asset (Assets/X.fbx::ClipName), $hexId (e.g. $3E8) or #instanceID (legacy decimal), or 'null'"
  2. 48 tool updatesv1.26.0
    • Removedalias_status
    • Changedapply_scene_change7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / commands
        Removed value: -{
        -  "title": "Commands",
        -  "type": "string"
        -}
      • removedInput schema / properties / plan_id
        Removed value: -{
        -  "title": "Plan Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / save
        Removed value: -{
        -  "default": true,
        -  "title": "Save",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / verify
        Removed value: -{
        -  "default": true,
        -  "title": "Verify",
        -  "type": "boolean"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "plan_id",
        -  "commands"
        -]
      • removedInput schema / title
        Removed value: -"apply_scene_changeArguments"
    • Removedask
    • Removedask_user
    • Changedawait_compile2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / timeout / description
        Added value: +"Seconds before giving up (default varies per tool)"
    • Changedbatch6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / atomic / description
        Added value: +"True = revert ALL prior ops on first failure via Unity Undo (fs side-effects not reverted)"
      • addedInput schema / properties / commands / description
        Added value: +"One command per line (e.g. 'get_component path=/Player type=Transform')"
      • addedInput schema / properties / on_error / description
        Added value: +"Error behavior: continue (default) | stop — stop aborts remaining commands"
      • addedInput schema / properties / timeout / description
        Added value: +"Total timeout in seconds (default 75)"
      • addedInput schema / properties / validate_aliases / description
        Added value: +"Dry-run alias validation before executing any mutations"
    • Changedcompile_preflight1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Removedconfigure_objects
    • Changedconsole_mark1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcreate_object7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / components / description
        Added value: +"Comma-separated component types to add on creation (e.g. 'Rigidbody,BoxCollider')"
      • addedInput schema / properties / name / description
        Added value: +"Name for the new GameObject"
      • addedInput schema / properties / parent / description
        Added value: +"Scene path of the parent (omit = scene root)"
      • addedInput schema / properties / prefab_path / description
        Added value: +"Asset path to instantiate from prefab (e.g. Assets/Prefabs/Enemy.prefab)"
      • addedInput schema / properties / primitive / description
        Added value: +"Primitive mesh type: Cube|Sphere|Cylinder|Capsule|Plane|Quad"
      • addedInput schema / properties / scene / description
        Added value: +"Target scene name when multiple scenes are loaded (omit = active scene)"
    • Changeddelete_object2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties
        Added value: +{}
    • Changeddiscover_tools1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changededitor3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / action / description
        Added value: +"Operation to perform — see tool docstring for allowed values"
      • addedInput schema / properties / path / description
        Added value: +"Scene path to target GameObject (e.g. /Parent/Child)"
    • Changedexecute_code3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / code / description
        Added value: +"C# code to execute in the Unity Editor context"
      • addedInput schema / properties / undo_label / description
        Added value: +"Label for the Undo group entry (default 'execute_code')"
    • Changedget_compile_errors1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_component6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / compress / description
        Added value: +"Strip fields at their default value before TCP transfer — reduces response size"
      • addedInput schema / properties / fields / description
        Added value: +"Comma-separated fields to return (e.g. 'mass,localPosition') — skips all others, saves tokens"
      • addedInput schema / properties / full / description
        Added value: +"Return raw uncompressed response (bypass distillation)"
      • addedInput schema / properties / path / description
        Added value: +"Scene path to the GameObject (e.g. /Player or /World/Enemy)"
      • addedInput schema / properties / type / description
        Added value: +"Component type name (e.g. 'Transform', 'Rigidbody', 'MeshRenderer')"
    • Changedget_console4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / count / description
        Added value: +"Max log entries to return (default 10)"
      • addedInput schema / properties / first / description
        Added value: +"Skip the first N entries (pagination offset)"
      • addedInput schema / properties / level / description
        Added value: +"Filter by level: log|warning|error|exception (omit = all)"
    • Changedget_console_since1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_hierarchy10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / components / description
        Added value: +"Show component types next to each object (increases token cost)"
      • addedInput schema / properties / compress / description
        Added value: +"Group repeated slot/point/mesh siblings to save tokens on dense scenes"
      • addedInput schema / properties / depth / description
        Added value: +"Traversal depth (default 2; increase for deeper trees)"
      • addedInput schema / properties / filter / description
        Added value: +"Substring filter on GameObject name"
      • addedInput schema / properties / full / description
        Added value: +"Bypass distillation — return raw response"
      • addedInput schema / properties / incremental / description
        Added value: +"Return NO_CHANGE if scene is unchanged since last call (saves tokens)"
      • addedInput schema / properties / root / description
        Added value: +"Scene path to scope the hierarchy (omit = whole scene)"
      • addedInput schema / properties / scene / description
        Added value: +"Filter to a single scene by name (multi-scene only)"
      • addedInput schema / properties / summary / description
        Added value: +"Return compact root-only counts (~60-100 tokens) instead of the full tree"
    • Removedget_test_results
    • Removedget_test_run
    • Changedinspect7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / components / description
        Added value: +"Comma-separated component types to read (omit = all)"
      • addedInput schema / properties / compress / description
        Added value: +"Strip fields at their default value before TCP transfer — reduces response size"
      • addedInput schema / properties / fields / description
        Added value: +"Comma-separated field names to project across all objects — reduces tokens"
      • addedInput schema / properties / find_type / description
        Added value: +"Component type — auto-populates paths from all scene objects with this component"
      • addedInput schema / properties / full / description
        Added value: +"Return raw uncompressed response (bypass distillation)"
      • addedInput schema / properties / paths / description
        Added value: +"Comma-separated scene paths (e.g. '/Player,/Enemy,/Camera')"
    • Removedlint_playtest
    • Changedlint_scene_refs2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties
        Added value: +{}
    • Changedmanage_component4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / action / description
        Added value: +"'add' or 'remove' — not 'enable'/'disable' (use set_property m_Enabled for that)"
      • addedInput schema / properties / path / description
        Added value: +"Scene path to the GameObject"
      • addedInput schema / properties / type / description
        Added value: +"Component type (short: 'Button' or full namespace: 'UnityEngine.UI.Button')"
    • Changedmcp_status3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties
        Added value: +{}
      • addedInput schema / title
        Added value: +"mcp_statusArguments"
    • Changedpermission_prompt2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties
        Added value: +{}
    • Changedreconnect_unity2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties
        Added value: +{}
    • Removedrelease_smoke
    • Removedresolve_scene_refs
    • Removedresolve_test_request
    • Changedresolve_tool_schema1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrun_playtest10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / abort_on_fail / description
        Added value: +"Stop script execution on first ASSERT failure"
      • addedInput schema / properties / after_hook
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "DSL commands to run after Play Mode exits",
        +  "title": "After Hook"
        +}
      • addedInput schema / properties / before_hook
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "DSL commands to run before entering Play Mode",
        +  "title": "Before Hook"
        +}
      • addedInput schema / properties / defs / description
        Added value: +"Inline VAL definitions prepended to script (alias block)"
      • addedInput schema / properties / fresh / description
        Added value: +"Stop and restart Play Mode before running the script"
      • addedInput schema / properties / path / description
        Added value: +"Path to .playtest DSL file on disk (mutually exclusive with script)"
      • addedInput schema / properties / script / description
        Added value: +"Inline DSL script (mutually exclusive with path)"
      • addedInput schema / properties / snapshot_on_failure / description
        Added value: +"Auto-capture screenshot on first ASSERT failure"
      • addedInput schema / properties / timeout / description
        Added value: +"Max seconds to wait for the playtest to finish (default 120)"
    • Addedrun_playtest_suite
    • Changedrun_tests4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / filter / description
        Added value: +"NUnit filter expression (e.g. 'MyNamespace.MyTest')"
      • addedInput schema / properties / mode / description
        Added value: +"Test runner mode: EditMode or PlayMode"
      • addedInput schema / properties / request_id / description
        Added value: +"Caller-supplied idempotency ID — reuse to retry a failed dispatch without double-running"
    • Changedrun_tests_wait6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / filter / description
        Added value: +"NUnit filter expression (e.g. 'MyNamespace.MyTest')"
      • addedInput schema / properties / mode / description
        Added value: +"Test runner mode: EditMode or PlayMode"
      • addedInput schema / properties / poll_interval / description
        Added value: +"Seconds between status polls (default 5)"
      • addedInput schema / properties / request_id / description
        Added value: +"Caller-supplied idempotency ID"
      • addedInput schema / properties / timeout / description
        Added value: +"Max seconds to wait for completion (default 120)"
    • Changedscene5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / action / description
        Added value: +"Operation: new|open|save|discard|open_additive|close|set_active|list"
      • addedInput schema / properties / include_unsaved
        Added value: +{
        +  "default": true,
        +  "title": "Include Unsaved",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / path / description
        Added value: +"Asset path — required for open/save/open_additive/close/set_active"
      • addedInput schema / properties / scene / description
        Added value: +"Scene name for save/discard when multiple scenes are loaded"
    • Changedscene_change_plan6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dry_run
        Removed value: -{
        -  "default": true,
        -  "title": "Dry Run",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / goal
        Removed value: -{
        -  "title": "Goal",
        -  "type": "string"
        -}
      • removedInput schema / properties / targets
        Removed value: -{
        -  "default": "",
        -  "title": "Targets",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "goal"
        -]
      • removedInput schema / title
        Removed value: -"scene_change_planArguments"
    • Changedscreenshot17 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / angle / description
        Added value: +"Euler angle for single_view: front|left|top|iso|ex,ey,ez"
      • addedInput schema / properties / angles / description
        Added value: +"Per-view Euler angles: 'ex,ey,ez|...' (underscore = skip this view)"
      • addedInput schema / properties / annotation_id / description
        Added value: +"Frame + highlight annotation by ID (auto-sets camera=annotation_frame)"
      • addedInput schema / properties / camera / description
        Added value: +"View type: scene_view|scene_view_frame|multi_view|single_view|overview|overview_game"
      • addedInput schema / properties / describe / description
        Added value: +"Haiku prompt for AI text description instead of returning file path (15-100x fewer tokens)"
      • addedInput schema / properties / fixed_size / description
        Added value: +"Fixed framing size override"
      • addedInput schema / properties / height / description
        Added value: +"Image height in pixels (default 480)"
      • addedInput schema / properties / highlight / description
        Added value: +"Comma-separated paths to highlight with bounding box (e.g. /Player:#FF0000)"
      • addedInput schema / properties / offset / description
        Added value: +"Framing offset vector"
      • addedInput schema / properties / output_path / description
        Added value: +"Alias for path — save to this file path"
      • addedInput schema / properties / path / description
        Added value: +"Save to this file path (omit = auto-generate in ScreenShots/)"
      • addedInput schema / properties / raw / description
        Added value: +"Force returning file path even when describe= is set"
      • addedInput schema / properties / show_colliders / description
        Added value: +"Overlay collider wireframes on the screenshot"
      • addedInput schema / properties / supersample / description
        Added value: +"Anti-alias quality 1-4 (higher = sharper, slower)"
      • addedInput schema / properties / width / description
        Added value: +"Image width in pixels (default 640)"
      • addedInput schema / properties / zoom / description
        Added value: +"Zoom factor — higher = closer"
    • Changedsearch_scene5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit / description
        Added value: +"Max results (default 50; 0 = unlimited)"
      • addedInput schema / properties / query / description
        Added value: +"Syntax: 'name text', 't:Component', 'tag=Tag', 'layer=N', 'active=bool' — combine with spaces"
      • addedInput schema / properties / root / description
        Added value: +"Scene path to scope the search (omit = whole scene)"
      • addedInput schema / properties / scene / description
        Added value: +"Filter to a single scene by name (multi-scene only)"
    • Changedset_active3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / active / description
        Added value: +"True to activate, False to deactivate"
      • addedInput schema / properties / path / description
        Added value: +"Scene path to the GameObject"
    • Changedset_parent4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / parent / description
        Added value: +"New parent scene path (omit or null = move to scene root)"
      • addedInput schema / properties / path / description
        Added value: +"Scene path of the GameObject to reparent"
      • addedInput schema / properties / world_position_stays / description
        Added value: +"True (default) = preserve world transform; False = keep local transform relative to new parent"
    • Changedset_property8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / component / description
        Added value: +"Component type (empty string = Transform)"
      • addedInput schema / properties / dry_run / description
        Added value: +"Show what would change without applying (safe preview)"
      • addedInput schema / properties / find_type / description
        Added value: +"Component type — bulk-sets prop on ALL scene objects with this component (no path needed)"
      • addedInput schema / properties / path / description
        Added value: +"Scene path to the GameObject (e.g. /Player/Body)"
      • addedInput schema / properties / prop / description
        Added value: +"Property name as shown in Inspector (e.g. 'mass', 'localPosition.x')"
      • addedInput schema / properties / ref_component_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Ref Component Type"
        +}
      • addedInput schema / properties / value / description
        Added value: +"New value. ObjectReference: scene path (/Player), asset path (Assets/X.mat), sub-asset (Assets/X.fbx::ClipName), #instanceID, or 'null'"
    • Removedsetup_objects
    • Changedsync_unity2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / timeout / description
        Added value: +"Seconds before giving up (default varies per tool)"
    • Removedundo_last
    • Changedvalidate_references3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / depth / description
        Added value: +"Maximum hierarchy depth to traverse"
      • addedInput schema / properties / path / description
        Added value: +"Scene path to target GameObject (e.g. /Parent/Child)"
    • Changedverify_after_change8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / changed_files
        Removed value: -{
        -  "default": "",
        -  "title": "Changed Files",
        -  "type": "string"
        -}
      • removedInput schema / properties / mark_id
        Removed value: -{
        -  "default": "",
        -  "title": "Mark Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / playtests
        Removed value: -{
        -  "default": "",
        -  "title": "Playtests",
        -  "type": "string"
        -}
      • removedInput schema / properties / run_tests_mode
        Removed value: -{
        -  "default": "",
        -  "title": "Run Tests Mode",
        -  "type": "string"
        -}
      • removedInput schema / properties / test_filter
        Removed value: -{
        -  "default": "",
        -  "title": "Test Filter",
        -  "type": "string"
        -}
      • removedInput schema / properties / timeout
        Removed value: -{
        -  "default": 300,
        -  "title": "Timeout",
        -  "type": "number"
        -}
      • removedInput schema / title
        Removed value: -"verify_after_changeArguments"
  3. 47 tool updatesv0.1.0
    • First observedalias_status
    • First observedapply_scene_change
    • First observedask
    • First observedask_user
    • First observedawait_compile
    • First observedbatch
    • First observedcompile_preflight
    • First observedconfigure_objects
    • First observedconsole_mark
    • First observedcreate_object
    • First observeddelete_object
    • First observeddiscover_tools
    • First observededitor
    • First observedexecute_code
    • First observedget_compile_errors
    • First observedget_component
    • First observedget_console
    • First observedget_console_since
    • First observedget_hierarchy
    • First observedget_test_results
    • First observedget_test_run
    • First observedinspect
    • First observedlint_playtest
    • First observedlint_scene_refs
    • First observedmanage_component
    • First observedmcp_status
    • First observedpermission_prompt
    • First observedreconnect_unity
    • First observedrelease_smoke
    • First observedresolve_scene_refs
    • First observedresolve_test_request
    • First observedresolve_tool_schema
    • First observedrun_playtest
    • First observedrun_tests
    • First observedrun_tests_wait
    • First observedscene
    • First observedscene_change_plan
    • First observedscreenshot
    • First observedsearch_scene
    • First observedset_active
    • First observedset_parent
    • First observedset_property
    • First observedsetup_objects
    • First observedsync_unity
    • First observedundo_last
    • First observedvalidate_references
    • First observedverify_after_change

TDQS

A3.5/5.0

Scored across 36 tools

Disambiguation5/5

Each tool targets a distinct resource and operation, with clear separation between similar tools like get_component vs inspect (single vs multi-object) and compile_preflight vs await_compile (pre-write validation vs post-write wait). No two tools appear to overlap.

Naming Consistency4/5

The dominant pattern is verb_noun snake_case (get_hierarchy, create_object, run_tests), with a few noun-only tools (scene, editor, batch) that function as grouped action commands. The inconsistency is minor but prevents a perfect score.

Tool Count2/5

With 36 tools, this exceeds the 25-tool threshold for 'too many' per the rubric. While the domain is complex, the server could reduce surface area by consolidating related operations (e.g., console_mark+get_console_since, scene_change_plan+apply_scene_change).

Completeness4/5

The set covers scene hierarchy creation/deletion/editing, component inspection/modification, play mode testing, test dispatch, compilation, console logging, screenshots, and editor state. Minor gaps exist (e.g., no duplicate object, no asset creation beyond prefabs) but execute_code provides a general escape hatch.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Seamless automation and intelligent control over your Unity projects. By integrating with the MCP server and client, it allows AI agents or external tools to interact with your Unity environment—creating, modifying, and managing GameObjects, Components, Assets, Scenes, and more.
    4,280
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    Control Unity Editor from AI agents. 200+ MCP tools for GameObjects, Scenes, Assets, Materials, Prefabs, Terrain, Physics, Lighting, and more. Works with Claude, Cursor, Windsurf, VS Code Copilot — any MCP client. Zero config: just npx and go.
    62
    6 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A native C# MCP server that gives AI agents real-time control and visual analysis of the Unity Editor, enabling dynamic code execution, scene manipulation, and debugging without external dependencies.
    6
    -