unity-biome-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_hierarchyA | 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). |
| sceneB | 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. |
| search_sceneA | 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). |
| get_componentA | 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. |
| inspectA | 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. |
| set_propertyA | Set component property (Edit Mode, SerializedObject — for Play Mode use |
| create_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). |
| set_activeA | Set GameObject active/inactive. |
| delete_objectA | Delete GameObject by instance ID or scene path. |
| manage_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'). |
| set_parentA | Reparent existing GameObject. parent=null → move to scene root. world_position_stays=True (default): preserves world transform. False: stays local to new parent. |
| lint_scene_refsB | Read-only linter for scene references in DSL scripts or batch commands. path: project-relative path to .playtest fil… |
| run_playtestA | [Play Mode] Execute a playtest DSL script. Returns structured report (for NUnit tests, use |
| run_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. |
| compile_preflightA | 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]. |
| await_compileA | 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. |
| batchA | 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. |
| validate_referencesA | 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). |
| execute_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;" |
| sync_unityA | Unified Unity reload: trigger Refresh (+ optional Resolve), wait for new code to live. |
| discover_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. |
| resolve_tool_schemaB | Return full parameter schemas for deferred tools. tools=comma-separated names. |
| mcp_statusB | Compact MCP status: scene, dirty, play/compile state, port, alias count. |
| get_consoleA | 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. |
| get_compile_errorsA | Compilation errors with file:line:column. Not lost on Console.Clear(). Structured, typed. |
| console_markA | 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. |
| get_console_sinceA | 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). |
| screenshotA | 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). |
| run_testsA | Dispatch Unity tests and return their durable identity immediately. |
| run_tests_waitA | Dispatch tests and wait for the exact run to become terminal. Dispatches test run. No confirmation required. |
| editorB | Editor state/control. action: state|play|pause|stop|select|project_path. select: path (single) or paths (comma-sep multi, e.g. "/Player,/Enemy,/NPC"). |
| verify_after_changeC | Single verification gate after code/scene changes. Gates are additive — only enabled ones run: 1. |
| scene_change_planC | Pre-flight + plan for safe scene edit. 1. |
| apply_scene_changeB | Execute scene mutations with pre-check, post-verify, and optional save. 1. |
| reconnect_unityA | Reconnect to Unity. Port 0 or omitted = auto-discover from port files. |
| permission_promptB | Handle Claude permission prompts via MCP. Registered as --permission-prompt-tool so Claude routes all permission … |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| scene_hierarchy | Current scene hierarchy summary. |
| console_errors | Recent console errors. |
| editor_state | Editor state: play mode, scene, selection. |
| tool_categories | Available tool categories. |
TDQS
Scored across 36 tools
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.
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.
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).
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.