MCP server providing development tools for the Timberborn game, including blueprint editing, UI/scene inspection, localization management, and C# code evaluation
Strong foundation with 11 well-named tools, comprehensive schemas, and detailed descriptions. All tools have explicit input schemas with typed properties and descriptions. Tool names follow verb_noun convention (get_, list_, edit_, eval_). Descriptions average ~180 chars, within the 10-1024 baseline. Tool annotations present for destructive operations. Key gaps: output schemas not documented; error handling lacks recovery guidance; some parameter descriptions could be more prescriptive about constraints and formats.
Edits a loaded blueprint in memory. operation 'set_field' changes one [Serialize] field on an existing spec. 'add_spec' adds a new spec of a given type (with optional initial field values). 'remove_spec' deletes an existing spec. In-memory only - reverts when the game closes. Only affects entities placed/spawned after the edit, not ones already standing. Use list_blueprint_spec_types first to see available spec types and fields.
Sets or deletes a localization entry's text for the currently active language, live. In-memory only: reverts when the game closes, or when the active language is reloaded (e.g. switching languages re-reads from disk). Can't change other languages or Comments - those only exist in Localizations/*.csv on disk.
Compiles and runs a snippet of C# in-process via a Mono.CSharp REPL evaluator, with every currently loaded assembly (game, mods, BCL) already referenced. Use this for anything the other tools here don't already cover - one-off queries, multi-step logic, or reaching game state through reflection. State (local variables, using directives) persists across calls on this tool until reset: true is passed. Runs on the calling (background) thread by default; pass main_thread: true only for snippets that touch genuinely Unity-thread-affine APIs (GameObject/Transform/UIElements, IAssetLoader) - see get_scene_hierarchy/get_ui_tree for examples of code that needs that. Two REPL quirks: a `using` directive must be its own call, not mixed with other statements in the same code string; and 'identifier * expr' (a variable/type name on the left of *) parses as an unsafe pointer declaration, not multiplication, and parens don't fix it - reorder so a literal or parenthesized expression leads instead, e.g. '2 * x' or '(x + 0) * 2', not 'x * 2'.
Returns a loaded blueprint's full spec tree by path (name, specs and their [Serialize] fields, and nested children). Use list_blueprints to find paths.
Output schemas not documented. Tools return McpToolResult but no schema describes the structure of success/error responses, fields returned, or data types. LLMs cannot plan downstream operations or extract chaining IDs without knowing response structure.
eval_csharp tool lacks constraint documentation. Parameter 'code' accepts arbitrary C# with no length limit, timeout specification, or safety guardrails documented. Description mentions REPL quirks but not execution limits, memory bounds, or what happens on infinite loops.
Error handling lacks recovery guidance. Tools return McpToolResult.Error() but error messages do not guide LLMs on next steps. E.g., 'Unknown spec type' should suggest 'Call list_blueprint_spec_types to see available types.' Errors are informative but not actionable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Returns the active Unity scene's GameObject hierarchy - name, active state, components, and children.
Returns the current UI Toolkit (UIElements) visual tree for every active UIDocument in the scene - name, type, USS classes, text and children.
Lists every registered blueprint spec type (e.g. 'BuildingSpec'), its JSON key/aliases, and its [Serialize] fields with their .NET types - use this before edit_blueprint's set_field or add_spec to know what's available.
Lists every loaded blueprint's path, optionally filtered by path substring or by containing a spec of a given type.
Lists every method currently patched by any mod via Harmony, with each patch's owner id and prefix/postfix/transpiler/finalizer counts.
Lists localization entries (ID, Comment, and Text per language) read directly from every mod's Localizations/*.csv files, independent of the currently active language.
Returns the last N lines of the game's Player.log (Unity's own log, including other mods' output).
Parameter descriptions lack format/constraint details. E.g., 'max_depth' has no min/max bounds; 'path' in get_blueprint has no validation pattern; 'code' in eval_csharp has no length limit. Descriptions should state ranges, formats, and constraints explicitly.
No pagination or result limits documented for list_* tools. list_blueprints, list_localizations, list_harmony_patches, list_blueprint_spec_types have no documented max result count or pagination mechanism. Large result sets could exhaust context windows.