|
2 | 2 |
|
3 | 3 | Release history for the DaVinci Resolve MCP Server. The latest release is summarized in the root README; older entries live here to keep the README focused. |
4 | 4 |
|
| 5 | +## What's New in v2.69.2 |
| 6 | + |
| 7 | +Community bug-fix bundle: #100, #101 and #102, plus the installer half of #104. |
| 8 | +The headline is that a fresh clone had stopped working entirely. |
| 9 | + |
| 10 | +### Fixed |
| 11 | + |
| 12 | +- **A fresh install produced a server that could not start** (issue #103, PR |
| 13 | + #101 by @Mastaish). `install.py` installed `mcp[cli]` with no upper bound, and |
| 14 | + the MCP Python SDK published 2.0.0 — which restructured the package and |
| 15 | + dropped `mcp.server.fastmcp`, the module `src/server.py` imports. Every clone |
| 16 | + after that release died at import, surfacing to the user as nothing more |
| 17 | + informative than "Server disconnected". |
| 18 | + |
| 19 | + The contributed fix caps the SDK in `requirements.txt`, which `install.py` |
| 20 | + installs second. That works, but the unpinned first call still downloads 2.x |
| 21 | + and its `httpx2` tree before downgrading it, and the fix evaporates silently |
| 22 | + if the install order ever changes — so the cap is now on the `pip install` |
| 23 | + call as well. `McpSdkPinTest` guards both sites, reading the actual string |
| 24 | + literals rather than matching text: `install.py` discusses `mcp[cli]` in prose |
| 25 | + too, and a first cut of that guard was satisfied by a comment. It is |
| 26 | + conditional on `server.py` still importing `mcp.server.fastmcp`, so it retires |
| 27 | + itself when the server is ported to the 2.x layout instead of blocking it. |
| 28 | + |
| 29 | +- **The Advanced (Node) suite was not running at all on Node 20+** (PR #102 by |
| 30 | + @double2tea). `node --test` resolves a bare directory argument as a module |
| 31 | + entry point on Node 20 and later, so the suite exited with `MODULE_NOT_FOUND` |
| 32 | + at 4 failures and 0 passes — a shape that reads more like a broken checkout |
| 33 | + than 731 skipped tests. Explicit test-file globs restore the full run on 18, |
| 34 | + 20 and 22 alike. |
| 35 | + |
| 36 | +- **`RESOLVE_SCRIPT_API` / `RESOLVE_SCRIPT_LIB` were silently overwritten** (PR |
| 37 | + #100 by @abbc400). `get_resolve_paths()` returned only platform defaults, and |
| 38 | + `src/server.py` writes those straight back into `os.environ` — so a client |
| 39 | + that had correctly pointed at a Resolve installed outside `/Applications` had |
| 40 | + its setting discarded at import. Every other signal looked healthy (Resolve |
| 41 | + running, external scripting Local, `fuscript` listening) while `scriptapp()` |
| 42 | + returned `None`. The override now wins, but only when the path exists, so a |
| 43 | + stale variable cannot shadow a working default install. |
| 44 | + |
| 45 | +- **The bridge installer wrote to a tree Resolve did not read** (issue #104, |
| 46 | + reported by @RananjayRaj). Which script tree the free App Store build scans is |
| 47 | + not decidable from outside Resolve: this installer was measured on a machine |
| 48 | + where the documented Blackmagic Design tree listed, and #104 reports the exact |
| 49 | + opposite on the same 21.0.3.7 build — the documented tree listed nothing, not |
| 50 | + even the Lua canary (which rules out the framework-Python explanation and |
| 51 | + points at the folder), while the Fusion standalone tree listed everything with |
| 52 | + no restart. |
| 53 | + |
| 54 | + Rather than pick a winner from two contradictory measurements, both container |
| 55 | + trees now receive the files, documented path first. This stays inside the |
| 56 | + sandbox: outside a container that path really is Fusion's own tree and is |
| 57 | + still not targeted. |
| 58 | + |
| 59 | +- **`--probe-only` reported success on a machine with no Resolve installed** |
| 60 | + (also #104). A container outlives the app that created it, and the container's |
| 61 | + existence is precisely what makes the installer target it — so a stale |
| 62 | + container from an uninstalled Resolve produced a clean success listing files |
| 63 | + that had genuinely been written and would never be read. The installer now |
| 64 | + warns when no app bundle can be found, honoring `RESOLVE_APP` as |
| 65 | + `scripts/doctor.py` already does. It warns rather than refuses: not every |
| 66 | + legitimate install location can be enumerated, and refusing wrongly would |
| 67 | + block a working install. |
| 68 | + |
| 69 | +### Validation |
| 70 | + |
| 71 | +- Offline suite 2237 → 2247 (six new installer-target tests, one pin guard). |
| 72 | + Advanced Node suite 731 tests / 701 pass on Node 18. |
| 73 | +- The new guards were verified to fail against the pre-fix code, not merely to |
| 74 | + pass against the fix. |
| 75 | +- No DaVinci Resolve scripting behavior changed; the path-resolution change is |
| 76 | + env-var-gated with defaults unchanged. Live Resolve validation not required. |
| 77 | + |
5 | 78 | ## What's New in v2.69.1 |
6 | 79 |
|
7 | 80 | Bug fix. The Studio bridge differential no longer reports the Deliver page its |
|
0 commit comments