Tool registry
The tool registry is the index of every ITool in the running Unity Editor. It is populated by reflection on Editor reload and re-queried whenever the LLM plans a step. There are 3,691 tools at the time of 1.0.
How discovery works
- On Editor reload, the registry scans every assembly in the current
AppDomain. - For each assembly, it enumerates types that implement
ITooland are not abstract. - Each candidate is instantiated once and added to a
Dictionary<string, ITool>keyed onName. - Duplicate names trigger a build-time error — Buril CI fails if two tools share a name.
There is no Tools.json manifest. There is no [BurilTool] attribute. The contract is structural: implement ITool, drop the file under Editor/Tools/, ship.
The CATALOG.md regen
A flat, human-readable catalog of every shipped tool lives at Tools/CATALOG.md. It is regenerated by a tool, naturally:
tool_catalog_regen
This tool walks the registry, sorts by family, and emits Markdown with one section per family and one row per tool. The CI regen-catalog job runs this on every push to main and commits the result — so CATALOG.md is always in sync with what actually ships.
Querying the catalog from chat:
What are all the asset_* tools?
This triggers tool_registry_list with a family: "asset" filter and returns ~150 rows.
Tool families (high level)
The 3,691 tools group into 322 families. The top 25 by tool count:
| Family | Approx. count | Purpose |
|---|---|---|
asset_ | 280 | AssetDatabase operations — import, move, label, refresh |
gameobject_ | 220 | GameObject lifecycle, transforms, components |
scene_ | 180 | Scene I/O, hierarchy, root sets |
script_ | 165 | C# script CRUD, compile checks, reference search |
editor_ | 150 | Editor windows, play mode, project state |
material_ | 140 | Material creation, shader binding, property edits |
mesh_ | 130 | Mesh import, deduplication, optimization |
prefab_ | 125 | Prefab create / apply / unpack / variant chains |
animation_ | 120 | AnimationClip authoring + ai-animation pipelines |
tester_ | 115 | Autoplay foundation (Wave 7 / mce-play absorbed) |
vroid_ | 95 | VRoid Studio bridge — VRM I/O, pipeline orchestration |
cascadeur_ | 85 | Cascadeur Indie+ bridge — keyframes, alembic |
marvelous_ | 80 | Marvelous Designer bridge — cloth bake, VTuber pipeline |
zbrush_ | 75 | ZBrush Python API bridge |
daz3d_ | 70 | Daz Studio bridge |
comfyui_ | 65 | ComfyUI workflow execution |
hunyuan3d_ | 60 | Local Hunyuan3D 2.1+ image-to-3D |
agent_team_ | 55 | Multi-Agent Studio orchestration |
mcp_ | 50 | External MCP server registration + dispatch |
clothing_ | 50 | Wave 8 clothing pipelines |
pixel_ | 45 | 2D pixel art pipelines + Aseprite bridge |
voice_ | 40 | Voice + lipsync (ElevenLabs, Audio2Face, uLipSync) |
build_ | 40 | Player builds, batchmode entrypoints |
lighting_ | 35 | Lightmaps, probes, environment |
physics_ | 30 | Colliders, rigidbodies, Obi family |
The full breakdown lives in Tools/CATALOG.md.
Dispatch
Every tool call travels the same path:
LLM tool_call {name, input}
→ MCP server validates {name exists, input matches schema}
→ Dispatcher pins to main editor thread (or honors [OffThread])
→ ITool.Run(input)
→ Result serialized as JSON
→ MCP server returns to caller
→ LLM consumes result and decides next step
The dispatcher logs every call to the Buril → History window with timestamps, input, output, and duration. This log is local-only and rotates after 10,000 entries by default.
Listing tools at runtime
From chat:
list tools matching "material"
From C#:
var allTools = BurilToolRegistry.Instance.ListAll();
var oneTool = BurilToolRegistry.Instance.Get("asset_import_fbx");
From the headless CLI:
buril --list-tools | rg material
buril --tool-info asset_import_fbx
Versioning
ITool names are part of the public contract. If you need to make a breaking change:
- Add the new tool with a new name (e.g.,
asset_import_fbx_v2). - Keep the old tool for at least one minor version, optionally with a deprecation notice in its
Description. - Add a one-line note to
CHANGELOG.mdunder the next release. - Remove the old tool in the following minor version.
Never silently swap Run semantics — even if the name and schema look the same, agents that learned the old behavior will be subtly broken.
Read next
- ITool architecture — the contract every tool implements.
- Multi-Agent Studio — composes tools across specialist agents.
- Headless mode — same registry, accessed from a CLI.