Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Generated by auto-changelog.

Unreleased

v2.26.1 - 2026-10-12

Commits

  • a pattern every ramp key shares answers with the ramp; menu_items refuses a string 177d86c
  • raise the mcp floor to 1.21.1 7780a62

v2.26.0 - 2026-10-12

Merged

  • set_playback_range widens the global range to hold it #153
  • node card shows OnCreated parms, every VOP signature, and outputs named by a parm #149
  • run_shelf_tool answers runningTool, cleans up a failed run, and takes dop_network #150
  • get_usd_attribute lists sample times, and values on request #156
  • delete_node takes several paths in one call #154
  • a merge keeps the scene's set -g variables #152
  • get_parameters filters by what a value holds #155
  • a parm at its factory default is not a broken reference #148
  • write_cache stops listing a File Cache's unused file parm #151
  • non_default_only reports a changed ramp as one entry, not a row per key #147
  • a spare menu takes its items, labels and default, and is refused without items #146

Commits

  • answer runningTool, clean up failed runs, take dop_network 2511dde
  • card shows OnCreated parms, signatures, parm-named outputs bcfa98e
  • keep reporting a spare or user asset's own default reference ee605a4
  • value_contains reads every keyframe and skips folders 8fc8332
  • a ramp key that holds value_contains is not folded away 5b75b4f
  • restore merge globals literally, and after a failed merge too 3d5ceb3
  • a batch delete refuses a node inside a locked asset before deleting any 8637be8
  • sample_times centres on the time read; all_samples refuses full c278273
  • a failed run never destroys the artist's moved nodes, and names the right alternatives c570591
  • named_by_parm is checked on the probe, not guessed from names 8fce247
  • widen the global range only when Houdini clamped the playback range a4de05a
  • the card runs OnCreated only for assets shipped under $HFS 4707973

v2.25.0 - 2026-10-05

Merged

  • viewer stays out of DOP views, cook_frame_range without a deadline, and four smaller fixes #145
  • get_parameters(non_default_only) reads only the changed parameters #144
  • get_attrib_stats gains group, unique, distance_to and attribute ratios #143
  • list_children(recursive=True) does not walk into locked assets #142
  • copy_node names the inputs the copy kept and the ones it lost #141
  • a ramp is written and read whole, as one value #140
  • run_shelf_tool names nodes added to existing networks and takes the selected objects #139
  • node card lists radio folder sets, default expressions and VOP output types #138
  • an {"expr": ...} component of a list sets that component's expression #137
  • "Node has no geometry" names the node's own cook error #136
  • frame_all pads a point to a 1-unit cube; the docs say what an object frames and what distance is #135
  • simulation_cache names a simulation that reads an edit upstream of it, and one a SOP Solver's SOPs sit in #134
  • FXHOUDINIMCP_TIMEOUT no longer puts a deadline on write_cache, start_render and press_button #133

Commits

  • the Scene Viewer stays out of DOP views, and captures name its network 06855f4
  • cook_frame_range has no deadline, shows progress and can be stopped 7e05d46
  • get_node_card gives a template menu's labels when they differ from its tokens e35cdb1
  • get_node_info names a SOP local variable instead of evaluating it 3ff0c6b
  • an unknown argument is refused with the argument meant 6b7c252
  • the GUI runner removes the camera it makes at /obj 1adb33a
  • a toggle's default expression is one string, not its letters 62d6989
  • list_children flags unsynced locked assets and walks a locked one's insides 9e20f5b
  • cook_frame_range is named among the commands with no deadline 9db3d5d
  • a SOP parent_path lends its editor to SOP tools only e387664
  • a dry run checks a ramp, and non_default_only reads ramps and folders right 42c8191
  • simulation_cache follows a subnet's output and keeps an asset's own network 72a96f7
  • get_attrib_stats names a missing group and counts string tuples whole ef5d639
  • a toggle's on/off default is not listed as an expression fb4cbd1
  • Esc during a cook stops cook_frame_range at that frame f37487e
  • rewiring a solver's inputs names its simulation_cache 4e2f01b
  • is_at_default judges a ramp as non_default_only does 93934a6
  • copy_node names a wire from the subnet's own input as such cacdf4a
  • run get_attrib_stats' numpy path in CI a310525
  • move the vocab fixture to module level 2278840

v2.24.3 - 2026-10-05

Merged

  • register Cline where Cline 3 reads its MCP servers #132
  • answer initialize before looking for Houdini #131
  • viewport captures draw no selection outline #128

Fixed

  • register Cline where Cline 3 reads its MCP servers #130
  • answer initialize before looking for Houdini #129

Commits

  • selection_hidden puts back boxes, notes, dots and hidden nodes 528caa2
  • time the lifespan with wait_for, which Python 3.10 has c0e72cd

v2.24.2 - 2026-10-01

Merged

  • start_render gives out-of-process renderers time to show their file #127
  • create_render_node resolves renderer names to the ROP types /out has #126
  • start_render watches Mantra's vm_picture output #125
  • get_dop_relationships lists the simulation's relationships #124
  • set_usd_attribute and set_light_properties accept vector values given as lists #123
  • set_parameter sees an expression that a write left on two keys #122

v2.24.1 - 2026-09-30

Merged

  • setup_render sets the resolution the Karma ROP renders at #121
  • clear_cache deletes the files on File Cache 2.0 #120

Commits

  • name #113 by its title, not its merge note d7344c4
  • list the nine PRs merged by hand in 2.24.0 3d05244
  • Connect a Client covers every client install registers, not only Claude 56f9d89
  • no client is featured over the others 59b3799
  • the JSON client example escapes its backslashes again be520eb
  • format the clone package-file example 735fb7d
  • re-encode the animated banner at webp quality 90 526b244
  • the Karma resolution test catches the bug without a licence 37972a8

v2.24.0 - 2026-09-29

Merged

  • The one conflict was the imports of parameter_handlers.py: main's #113
  • a locked parm is named before the write, and run_callbacks runs a parm's callback as the UI does #97

Commits

  • review of #97 -- cached locks, callback errors, no callbacks in a dry run unless needed f6818c9
  • get_attrib_stats measures several nodes over several frames in one call 5f2ef4b
  • press_button runs a field's action button with action=True and refuses a press that does nothing d67334b
  • build_network wires from an output by name, and a wrong name fails the dry run 0dec237
  • moving the network editor keeps the viewport camera and the selection 27d1ee7
  • get_parameters(include_defaults) reports the default beside the value 0d6fcf9
  • build_network takes any text in a code field whose menu lists snippets 8b7b15a
  • a recursive get_parameters sweep reads a locked HDA, not the nodes inside it fcdf948
  • a write inside a DOP network names the simulation to reset in simulation_cache b02420e
  • set_viewport_display sets the reference plane, particle point size and colour scheme f207e1c
  • set_viewport_direction places the free view, frame_all frames given nodes or a box deb6878
  • the free view's rotation turns the way a camera with the same r does 6e5eaca
  • a callback error names the route it came from 09cd047
  • get_attrib_stats refuses node_path with node_paths, and node_paths always answers rows 5833896
  • a whole float source_output stays an output index d92985d
  • a toggle's "on"/"off" default token is not reported as a default expression 706a161
  • let the cache-note mocks take the arguments main added 53314e7
  • include_locked_assets loads the locked assets' delayed contents before reading them 3cf34d9
  • Merge pull request #117 from d-potrivaev/feat/attrib-stats-frames-nodes 10dee13
  • Merge pull request #118 from d-potrivaev/feat/get-parameters-defaults 7a9081a
  • Merge pull request #119 from d-potrivaev/fix/get-parameters-skip-locked-hda-internals 66c93b9
  • re-selecting a node outside the new network no longer pulls the editor back c61af57
  • a view's camera is only bound again in the kind of network it was recorded in dc8b917
  • no default beside a value at its default; the locked-asset skip count follows node_type 78f59e1
  • set_current_network is checked to leave the editor where it went 4ebed2f
  • point_size in a LOP network sets the Solaris viewer, not the object one e61c20f
  • Merge pull request #110 from d-potrivaev/fix/build-network-source-output-by-name 98012a7
  • Merge pull request #111 from d-potrivaev/fix/build-network-code-field-not-strict-menu 976fbfd
  • Merge pull request #112 from d-potrivaev/feat/press-button-script-action 9ed1cc2
  • orbiting the free view is refused while a USD camera is looked through 6018742
  • Merge pull request #116 from d-potrivaev/feat/viewport-direction-framing 20fd8f9
  • Merge pull request #115 from d-potrivaev/feat/viewport-display-extras e40555e
  • Merge pull request #114 from d-potrivaev/fix/network-navigation-keeps-viewer-state b43101c
  • frame_all says when it drops a camera; the orbit refusal names the right tool 921a8b2

v2.23.0 - 2026-09-29

Commits

  • name the three PRs merged with conflicts by their titles 7700ec3
  • an animated spiral banner in place of the two header logos cdce4b6
  • even spacing between the banner, the tagline and the badges 81433b6
  • drop the tagline under the banner, which already names the project 6c55629
  • render_quad_view wrote one image and reported four 219ec40
  • output_path is optional on the five capture tools 8f3df18
  • refuse arguments a tool does not declare fba013a
  • a requested name that is taken is refused, not numbered up ed87722
  • volume sums, threshold boxes, sampling and field comparison 1059132
  • a requested USD time is cooked, not only labelled; world transforms over frames 6fb12b6
  • name a BaseException from the main thread instead of KeyError 'result' 1d814f7
  • list, switch, start and stop Houdini sessions; scan ports at once edccadb
  • render_sheet tiles a frame range into one image, no viewport needed 0a8f515
  • credit JTCHE/houdini-mcp for the adapted volume code fa516e7
  • write the banner through a context manager, as ruff's SIM115 asks d0e61dd
  • ruff format the banner script 3593195

v2.22.0 - 2026-09-29

Merged

  • Conflicts: #103

  • Conflicts: #104

  • Conflicts: #98

  • get_node_info reads a node's errors before it evaluates its parameters #102
  • copy_node places the copy beside its original, not on top of it #106

Commits

  • make the unwritable-path cases fail on Linux and macOS too efe7242
  • override_expression clears an expression without leaving warnings on the node deb7b83
  • capture_network_editor frames the requested node at once and reports what the image shows c87abec
  • a Python button callback that raises is an error reply, not a modal dialog that hangs the bridge 8760909
  • get_usd_prim reads attributes at the current frame, and get_usd_attributes reads many prims in one call 9922c25
  • get_geometry_info says when a node inside a for-each loop is read as one slice 1cf267c
  • update_hda says whether the library file was written dd4ac3b
  • the loop warning only suggests reading the loop's output 47820b8
  • verify_network names errors left over from an earlier cook and can recook them e601513
  • set_viewport_display shows or hides the environment background on every view d0620ee
  • start_render takes overrides for one render and waits for a Karma LOP to finish aea9603
  • a default expression is Hscript unless told otherwise, and a failing one is named 2d44359
  • explain_node reads a node's errors before it evaluates its parameters 9316397
  • Merge pull request #99 from d-potrivaev/feat/usd-at-stage-frame 251e0dc
  • Merge pull request #105 from d-potrivaev/feat/update-hda-says-saved 13528e0
  • Merge pull request #107 from d-potrivaev/fix/hda-default-expression-hscript 586a46c
  • Merge pull request #100 from d-potrivaev/fix/network-editor-no-fly 0e9eb34
  • Merge pull request #108 from d-potrivaev/feat/viewport-environment-background 439768c
  • tool count after get_usd_attributes; update_hda says so when the library mtime did not move 53d94e8
  • Merge pull request #94 from d-potrivaev/test/portable-unwritable-path 18f8b84
  • Merge pull request #109 from d-potrivaev/feat/start-render-overrides e6b2ce2
  • Merge pull request #96 from d-potrivaev/fix/press-button-no-modal ab1d243
  • a nested multiparm callback gets script_multiparm_index2..N as pressButton() gives it 7abb263
  • the live suite passes again on 22.0.368 ff58688
  • 208 tools, with the per-category counts recounted from the source 7fa0ce8

v2.21.0 - 2026-09-23

Commits

  • verify catches dangling channel references, and results come back compact 586b0b4
  • every setup_* sim now simulates, caches all its streams, and is seen alone d568e09
  • Solaris renders are verified against their real output, and Solaris builds report the stage 58ae3a6
  • wait for husk's late error before calling a render silent, and check every gprim for a material 1749f1f
  • create_hda keeps the promoted interface and the inputs; set_parameters sets expressions cf81c02
  • cook from a saved hip, build into /tasks, and validate multiparm menus 366d089
  • read Copernicus layers, and verify a copnet by its image 26f9ea6
  • node cards say where a multiparm's instances start counting 9b601a0
  • node reports list only what a node has, and reload_plugin re-imports the Houdini side 64d8089
  • statistics, pages and group queries stop building a Python object per element 21dd86f
  • eight tools no longer report success for things that did not happen 7bfbfc5
  • set_usd_attribute and set_light_properties edit the stage that is actually read 4119365
  • render ranges, render settings, sop chains, materials, resets and expressions report what they did 70f219f
  • the largest replies are capped, measured before and after c16c7b1
  • build_network probes each type once, USD walks stop at the depth asked for 43bf6d2
  • expressions replace animation instead of one key segment; CHOP and volume evidence 778c15f
  • click-waiting shelf tools run as a Ctrl+click; long frame ranges are thinned 36cab96
  • display lands on the finished network; material library builds report the stage ad86783
  • start from the Simulate shelf tool's default crowd 06bbaa1
  • compact tool wrapper registers on mcp 1.14 f06533f

v2.20.0 - 2026-09-23

Merged

  • get_node_card lists the items of a script-generated menu #91
  • read time-sampled USD attributes at the current frame and walk instance proxies on request #87
  • get_prim_intrinsics reads many prims in one call, with the prim each extreme is on #89
  • build_network takes expressions in parms and says when a literal did not take #86
  • set_parameter names a kept expression, a ch() write-through and the raw string #85
  • get_attrib_stats reads vertex attributes, so uv and N ranges come back in one call #90
  • get_parameters(inside=...) reads the same patterns across a network #93
  • get_stage_info accepts a LOP network and answers through its display node #88
  • get_parm_references about one parameter leaves the node-level lists out #92
  • recognise an embedded definition by its library path, since HOM has no isEmbedded() #84

Commits

  • layout_children names a bad parent path with auto-layout off, and the node-name check reads discipline.md d18d52a

v2.19.0 - 2026-09-20

Commits

  • guard link_parameters and upsert spare parameters d378d12
  • register the server with every MCP client on the machine, not only Claude 14516da

v2.18.0 - 2026-09-18

Merged

  • get_usd_bound_material resolves the material a prim renders with and where the binding comes from #82
  • get_parameter describes a Data parameter instead of answering null #79
  • load_scene merges named nodes from another hip file and reports what arrived #81
  • get_node_card lists connectors by index and name, and build_network wires inputs by input_name #76

Commits

  • set_hda_interface and edit_hda_interface author and edit an asset's Type Properties interface 421cc02
  • get_parm_references and get_parm_template_tree read who references a parameter and the whole interface as a tree f27a458
  • a subnet's indirect inputs are a wiring source for connect_nodes, connect_nodes_batch and build_network 6144a7e
  • merge_hip merges named nodes from another hip file and reports what arrived e88eec4
  • change_node_type swaps a node's type in place, and press_button presses a button parameter and reads the node back 66fa7b9
  • change_node_type and press_button answer what review found bb06d36
  • fold merge_hip into load_scene and attribute what a merge brought 8658b34
  • one Data-parameter reader for get_parameter and get_parameters 81970c2
  • one connector rule, and a card probe that leaves no trace it can avoid dc8f4fa
  • a wire from a subnet's input connector can be undone, and every refusal is named 61c9cf3
  • references cover every channel function and backticks; the tree shares the schema serializer 50b0725
  • resolve bindings for the purpose Karma renders, and let get_usd_materials say where a material renders 45937b4
  • set_hda_interface is edit_hda_interface with inserts, and one write path checks everything first b7c8bc3
  • a set KeyValueDictionary Data parameter keeps its value c382bb9
  • Merge pull request #83 from d-potrivaev/feat/hdaiface 8d2693a
  • Merge pull request #78 from d-potrivaev/feat/parmrefs f66c28b
  • Merge pull request #80 from d-potrivaev/feat/nodeverbs e96ebfd
  • Merge pull request #77 from d-potrivaev/feat/indirect 14f3e92
  • close the three leftovers from the #77, #78 and #83 reviews 41293d6

v2.17.0 - 2026-09-16

Merged

  • The package file carries every Houdini-side setting, and a reinstall keeps the values you changed #69

Commits

  • link_parameters writes chs() for a String destination and a path relative to the destination node 6a6c856
  • get_node_info compares a tuple component with its own default, not the whole tuple 33b6aaa
  • list_usd_prims and get_usd_prim_stats treat the root as a path, not a string prefix 0ab9384
  • list_hda_versions lists the whole version family of a type a1e924a
  • cooked-evidence replies say when the update mode keeps nodes from cooking 54496a6
  • USD arrays come back summarised unless asked for in full; get_usd_attribute reads windows 62ec2a1
  • adopt Conventional Commits in the changelog config and the release bot 8ecd78b
  • add a contributing guide and issue and pull request templates 289dd9d
  • full=True returns every element, and limit=0 cannot page forever 5045736
  • give the relativePathTo fake a real relative path 5f34da6
  • list_hda_versions fails cleanly on an unparsable type name 1c86d10

v2.16.0 - 2026-09-14

Merged

  • Auto-layout is off by default #67
  • Live tests for the two adoption promises: a failed build leaves nothing and costs no undo step, fresh nodes never move placed ones #66
  • Grab the network editor from Houdini's window, name the shader per render context, make the output grace period configurable #65
  • Fix what the August live-session reports found: lights on H22, MaterialX params, render settings on LOP ROPs, husk's late file, expression-driven parms #64
  • Keep flipbook captures from launching MPlay, which inherits the server socket and holds the port after Houdini exits #61
  • Read only material-path parameters in get_material_info instead of evaluating every parameter of every node #62
  • Leave the VOP signature menu to Houdini in build_network's strict-menu check #63

Commits

v2.15.2 - 2026-09-13

Merged

  • Name the upstream node when a render or cache chain fails #60

v2.15.1 - 2026-09-13

Merged

  • No deadline on cache writes and renders #59

v2.15.0 - 2026-09-13

Merged

  • Caches and renders run in the foreground by default again, with an hour's timeout, so the user sees Houdini's progress dialog #58

v2.14.2 - 2026-09-13

Merged

  • Report cache completeness and Load from Disk in get_cache_status, and turn the toggle on after a verified write #57

v2.14.1 - 2026-09-13

Merged

  • Fit the server instructions in the 2 KB a client shows, and serve the full rules as get_workflow_guide("discipline") #56

v2.14.0 - 2026-09-13

Merged

  • Refuse blocking shelf tools, run long caches and renders in the background by default, and report progress while Houdini works #55

v2.13.1 - 2026-09-12

Merged

  • Validate multiparm instance parameters at dry-run, and say why "no single node" is not a reason for VEX #54

v2.13.0 - 2026-09-12

Merged

  • Make write_cache background real, fix cache status on File Cache 2.0, add settle_seconds, and raise the client timeout #53
  • Serve the workflow guides as a tool, and tell the agent when to stop fixing and read #52
  • Fix what a live storm-shot session had to work around by hand #51
  • Tell the agent when a cache is mandatory, and to isolate the element it is iterating on #50

v2.12.0 - 2026-09-12

Merged

  • Stop embedding a JPEG in screenshot responses, return the file path only #49
  • Drop the custom stylesheet and use Zensical's default theme #48
  • Replace MkDocs with Zensical #47
  • Serialise docs deploys so a tag push and a main push stop racing to gh-pages #46

v2.11.1 - 2026-09-12

Merged

  • Make cook_top_node admit failed work items, and read in-process PDG logs #45
  • Remove the mkdocs git-committers cache that #43 committed by accident #44

v2.11.0 - 2026-09-12

Merged

  • Add undo, network annotations, object transforms, per-command timeouts, a project sandbox and a browser guard #43
  • Close the holes the placement floor left open #42
  • Place new nodes instead of stacking them at the origin #37

v2.10.0 - 2026-07-29

Merged

  • Stop tools reporting success they never checked, and test that they admit failure #35

Commits

  • Remove untitled.hip, a probe artifact that should never have been committed 6fcb274

v2.9.0 - 2026-07-29

Merged

  • Add the tools a real session needed, instead of leaving it in execute_python #34

v2.8.0 - 2026-07-29

Merged

  • Support mcp 2.x, correct the dependency floor, and stop the generator eating version markers #33

v2.7.0 - 2026-07-29

Merged

  • Give every shipped help corpus its own workflow guide #32

v2.6.2 - 2026-07-28

Merged

  • Put a number on what a tool call costs #31

v2.6.1 - 2026-07-28

Merged

  • Say which config file the client registration was written to #30

v2.6.0 - 2026-07-28

Merged

  • Make install finish instead of handing back homework #29

v2.5.0 - 2026-07-28

Merged

  • Stop the entry point swallowing unknown commands, and add uninstall #28

v2.4.0 - 2026-07-27

Merged

  • Consolidate the installation docs into one path #27
  • Make Connect a Client explain itself, and stop it handing out a footgun #26
  • Add fxhoudinimcp install, so setup is two commands instead of four #25

v2.3.0 - 2026-07-27

Merged

  • Generate the node domains, and correct the instructions against SideFX's docs #24

v2.2.1 - 2026-07-27

Merged

  • Claim mixed-case node names instead of hiding them #23

v2.2.0 - 2026-07-27

Merged

  • Generate search hints for the node contexts nobody had written up #22
  • Let a second Houdini serve, and let the client find it #21
  • Find hython under either documented macOS framework layout #20

Commits

  • Find hython under either macOS framework layout 2e1d548
  • Generate search hints for the contexts nobody had written up d09f1d5

v2.1.0 - 2026-07-27

Merged

  • Ship the plugin in the package, and detect a plugin older than the server #19

Commits

  • Detect a Houdini plugin older than the MCP server 25cec21
  • Ship the Houdini plugin in the package, with a command to wire it up 9b486f4

v2.0.1 - 2026-07-27

Merged

  • Confirm readiness off the main thread during auto-start #18

v2.0.0 - 2026-07-27

Merged

  • Hold advertised node types to a declared version range (fixes 20.5 and 22.0) #17
  • Fix #9, #10, #11, #15; add Houdini 22 support, an MCP menu, and loopback binding #16

Fixed

  • Merge pull request #16 from healkeiser/fix/houdini-issues-9-10-11-15 #9
  • Stop the package file's default path from looking like a working one #11
  • Keep mcp.health free of HOM access, and encode responses locally #9
  • Coerce HOM values to JSON instead of failing the whole response #15

Commits

  • Prevent blocking PDG calls from deadlocking Houdini ee1cf84
  • Fix Sdf.PrimSpec.nameChildren iteration for USD 0.26.5 27c35d5
  • Reconnect to Houdini after it restarts 41cd775
  • Resolve PDG graph context for TOP networks on Houdini 22 abeecc2
  • Add python3.13libs so the plugin loads in Houdini 22 b2c78cd
  • Load the plugin under Houdini 22 (python3.13libs) 5f0bb80
  • Bind the server to loopback, and make the run mode explicit 5e1739b
  • Add an MCP main menu cdfd022
  • Drop the shelf in favour of the MCP menu 9154b92
  • Keep hip_file in the connection-status payload 0d377b7
  • Wrap every transport failure, not the three we happened to name a50d886
  • Hold advertised node names to a declared version range c23d057
  • Let the Solaris scenario run on Houdini 20.5 2643578
  • Derive the node-availability annotations instead of maintaining them 27dcace
  • Accumulate the node table so one Houdini install is enough 79ab843
  • Warn when the connected Houdini has never been sampled 8cf8b4f

v1.3.0 - 2026-06-11

Commits

  • Force the node-first discipline: justification gate + modeling patterns e6ca077
  • Serve Houdini''s own shipped manual: search_help + get_help_page c113704

v1.2.0 - 2026-06-10

Commits

  • Bump workflow actions off the deprecated Node 20 runtime 7d7cf05
  • Fix network-editor capture on Houdini 21; add live GUI session checks b16664a
  • Fix setup_rbd_sim: it built a network that simulated nothing 0ac1bda
  • Add the senior-artist core: graph intelligence tools + discipline d4b8af5

v1.1.0 - 2026-06-10

Merged

  • User-facing scenario tests, 100% command coverage, cross-platform runner #8
  • Perf: benchmark sweep + geometry handler optimizations (14.2s outlier -> 70ms) #7
  • Add live integration test suite (hython) + fix three handler bugs it caught #6
  • Make automatic node layout a toggle via FXHOUDINIMCP_AUTO_LAYOUT #5
  • Fix untyped tool parameter schemas rejected by strict MCP clients #4
  • Harden Houdini MCP startup health checks #3

Fixed

  • Make automatic node layout a toggle via FXHOUDINIMCP_AUTO_LAYOUT #2
  • Fix untyped tool parameter schemas rejected by strict MCP clients #1

Commits

  • Versionning system 7787b2d
  • Versionning system e3bd909
  • Versionning system accc80e
  • Add live integration test suite + fix three handler bugs it caught 700cd1e
  • Optimize geometry handlers found slow by the perf sweep 9f79fc2
  • Add user-facing scenario tests, 100% command coverage, cross-platform runner bb183a0
  • Add deep authoring scenarios; fix silent light parm bugs in LOPs 3f7a48d
  • Close remaining test layers: HTTP transport e2e, prompts, resources 43d6575
  • Align documented tool counts with the 173 registered commands 3f02172

v1.0.0 - 2026-03-31

Commits

v0.3.1 - 2026-02-23

Commits

  • Version pulled from Git tag 86fae87

v0.3.0 - 2026-02-23

Commits

  • Relative depth for referenced parms 27abafe
  • Relative depth for referenced parms 5f23237
  • Node first prompting (was overly reliant on VEX) ae33fb9
  • LOPs material b254bff

v0.2.1 - 2026-02-23

v0.2.0 - 2026-02-23

Commits

  • Removed relative imports 8c40929
  • Black formatter 39779c8
  • Reduced docstrings for faster AI parsing fb7066f
  • Clearer instructions 7ba60d6
  • Fuzzy filtering for parm names cc2f7ec
  • Screenshot tools a0582b6
  • Hallucinations on parms, lack of node focusing for user visual feedback 6cfb9d7
  • Bloated token usage for images workflow 6d6a1d7
  • Removed tmp files 3ac16ac

v0.1.1 - 2026-02-22

v0.1.0 - 2026-02-22

Commits