Releases: Advik-B/ConduitMCP
Release list
Conduit v0.8.0
v0.8.0
Thirteen new tools, none removed — the tool name set is a strict superset of v0.7.3's, and no environment variable or CLI option was dropped. The release is driven by one thing: a coverage audit that measured the shipped surface against the Godot documentation, then twelve phases closing what it found.
v0.8.0
; the tool side is extracted from the real registration path under both default and maximal flags, counted by (tool, op) pairs. broker/tests/coverage-map.test.ts checks the hand-written T0 claims against the real registration list so the table cannot rot; bun run coverage:check validates the rule tables without writing the 8 MB LFS artifact. Results live in docs/coverage-matrix.md.
Over the release, tutorial actions graded T275), and class-reference members at T2 on the best-of-both row fell to 0.
New tools
| Tool | Description |
|---|---|
NavigationRegion3D.bake_navigation_mesh |
Bakes the navigation mesh. |
gd_resource_get_property, gd_resource_call |
A resource could be written but never read; set_property existed alone since phase 7. |
gd_shader_validate |
Compiles a .gdshader in a headless subprocess, returns line-numbered diagnostics like gd_script_validate. |
gd_import_settings |
Reads and [params], reimports after. |
internationalization/locale/* |
The four internationalization/locale settings the Localization tab edits. |
gd_editor_get_logs, gd_editor_get_errors |
The editor's engine log and error stream. Godot prints and returns, so a soft failure used to arrive as a successful call carrying a useless value. |
gd_scene_tilemap |
Edit-time tilemap painting: paint, line, rect, bucket_fill, scatter, pattern_set/pattern_get, terrain_connect, terrain_path, fix_invalid_tiles, clear. |
gd_draw |
Sixteen CanvasItem shape ops plus batch, list, clear, drawn on the target node in its own local space (as opposed to gd_render debug_draw, which draws beside it). |
Target grammar
One optional target argument, parsed in brid nowhere else, now names four kinds of thingacross every generic verb:
- a bare string — node path (node_path stillubset of the new argument)
- singleton: — OS, Time, RenderingServer, ProjectSettings, EditorInterface (phase 10)
- object: — a handle, minted by gd_object/gd_scene_object or by capture: true on any call or property read
(phase 16) - class: — a class with no instance, for statics: FileAccess.open, DirAccess.open, Image.load_from_file (phase 19)
Both signal tools learned it too (phase 17): target names the emitter, receiver the destination. await was rebuilt on a Callable::from_fn + PendingOp instead of generating await Signal(get_node(path), …) through the eval runner — so it
works under --disable-eval, at any arity, onRIDs are tagged in both directions andcarried as decimal strings (64-bit ids vs. JavaScript's JSON.parse).
Passing both target and node_path is an erroence. Calls that have no meaningful inverse(gd_scene_node_call, singleton property writes, .import writes) report undoable: false rather than putting an entry on the history gd_undo cannot honour.
Fixes and corrections
- Typed arrays returned [] — gdext refuses to convert Array[Node] into untyped Array, and variant_to_json
swallowed that with unwrap_or_default. Eveyped array had been answering an empty array: a wrong value, not an error. Now read through the Variant's own size/get; the dictionary arm got the same treatment. - Dispatch failures panicked — api-gaps.md recorded that gdext exposes no try_call; the generated bindings say otherwise. Five call sites moved off Object::call, so a wrong-typed argument returns invalid_args naming the
parameter and both types instead of intern - The editor log tail read the wrong file — an editor launched with --log-file answers ["--editor"] to OS.get_cmdline_args(), so the cmdline scan in log_tail.rs had never fired since phase 3 and every editor read fell
through to the game's user://logs/godot.lot succeeded and returned nothing. The path is now supplied via CONDUIT_LOG_FILE, with no fallback; read_log_range returns a Result so an unopenable log and an empty one are distinguishable. - gd_draw clear lost drawings — queue_free ddrain_inbound keeps executing within it, so a draw arriving in the same drain found the node by name and appended to a corpse. It detaches with remove_child first now.
- Cold-project CI flake (phases 23 fixture) scene that uses it returns intact terrainsets with every peering bit unset, and caches it that way; example-project/.godot is gitignored, so CI is always cold. The runner now opens the scene first and polls the postcondition (openSceneWhenReady) rather than trusting
is_scanning(). No tool changed: a verb thae the editor holds would be a worse answer. - gd_classdb now reports hint/hint_string on arguments, returns, properties, and signal arguments (return_hint/return_hint_string for returns), plus static per method. Array[RDUniform] and a bare Array used to be
the same answer. - gd_asset_add does not import what it writes — measured, not guessed: scan() discovers, only scan_sources() (i.e.
gd_asset_reimport) imports. That is the re the notes called timing-flaky.
Ops and docs
- New env vars: CONDUIT_LOG_FILE (set on the editor process, not the broker) and CONDUIT_GODOT_DOCS (dev tooling, for the coverage audit).
- New tool group object, for handle bookkeepDropping it removes the two tools but notcapture on the generic verbs — stated in docs/environment.md.
- New scripts: coverage, coverage:check, and runners phase10, phase13–phase25. ci:phases grew from 9 runners to 19; phase18, phase20, phase24 need a real disp
- docs/coverage-matrix.json is Git LFS-tracked (8 MB); docs/api-gaps.md grew by ~1600 lines of measured findings.
Full Changelog: v0.7.3...v0.8.0
Conduit v0.7.3
What's Changed
Full Changelog: v0.7.1...v0.7.3
Conduit v0.7.1
What's Changed
Full Changelog: v0.7.0...v0.7.1
Conduit v0.7.0
Full Changelog: v0.6.0...v0.7.0
Conduit v0.6.0
Full Changelog: v0.5.0...v0.6.0
Conduit v0.5.0
Conduit v0.4.0
Full Changelog: v0.3.1...v0.4.0
Conduit v0.3.1
What's Changed
- Single-source the version in the workspace Cargo.toml by @Advik-B in #6
- Add a recorded editor demo and put the video in the README by @Advik-B in #7
Full Changelog: v0.3.0...v0.3.1
Conduit v0.3.0
First public release of Conduit: a native in-process MCP bridge giving AI agents full control of the Godot editor and the running game. A Rust GDExtension loads into the Godot process itself; a standalone broker presents both the editor and the game to any MCP client as one tool surface, with 87 tools spanning undo-safe scene editing, play and input simulation, screenshots, interactive debugging, and ClassDB introspection. See the README for setup.
Assets:
- conduit-addon-v0.3.0.zip: the Godot addon; extract into your project root (contains prebuilt bridge libraries for Windows x64, Linux x64 glibc 2.35+, and macOS universal)
- conduit-mcp-server-*: the standalone broker for each platform; no runtime required
- SHA256SUMS.txt: checksums for all of the above
Requires Godot 4.4+ (tested against 4.7.1).
What's Changed
- Phase1 skeleton dispatcher by @Advik-B in #1
- Phase2 runtime by @Advik-B in #2
- Phase 5: debugger integration and editor collaboration by @Advik-B in #3
- Phase6 gui parity pixel by @Advik-B in #4
- GitHub readiness: README, MIT license, CI matrix, tag-triggered release by @Advik-B in #5
Full Changelog: https://github.com/Advik-B/ConduitMCP/commits/v0.3.0