davinci-resolve-mcp 2.61.1 → 2.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/README.md +1 -1
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/granular/common.py +1 -1
- package/src/server.py +516 -189
- package/src/utils/background_jobs.py +108 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,70 @@
|
|
|
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.62.0
|
|
6
|
+
|
|
7
|
+
Community contribution by [@lukeashford](https://github.com/lukeashford)
|
|
8
|
+
([#87](https://github.com/samuelgursky/davinci-resolve-mcp/pull/87), closing
|
|
9
|
+
[#88](https://github.com/samuelgursky/davinci-resolve-mcp/issues/88)): server
|
|
10
|
+
robustness for long operations plus a batch of timeline-tool ergonomics and
|
|
11
|
+
correctness fixes. Every new option is opt-in; default behavior is unchanged.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **Background jobs for long ops** — transcription, subtitle generation,
|
|
16
|
+
scene-cut/Dolby analysis, and timeline export/import can exceed the MCP
|
|
17
|
+
client's tool-window timeout. Passing `background=true` now returns a
|
|
18
|
+
`job_id` immediately; poll with `resolve_control(action="job_status")` or
|
|
19
|
+
list with `list_jobs` (both connection-free). Generic registry in
|
|
20
|
+
`src/utils/background_jobs.py`; workers run under the `resolve_busy` gate,
|
|
21
|
+
and finished jobs are pruned after an hour.
|
|
22
|
+
- **`create_variant_from_ranges` pack mode** — `pack=true` butts clips
|
|
23
|
+
together at the end of each track (omits `recordFrame`), gap-free even when
|
|
24
|
+
source and timeline frame rates differ. Live-validated.
|
|
25
|
+
- **`timeline set_current` by id/name** — accepts a stable `id`/`name`
|
|
26
|
+
selector (precedence id → name → index), not only the shifting 1-based
|
|
27
|
+
index.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Transport wedge** — synchronous tool bodies ran inline on the single
|
|
32
|
+
asyncio event-loop thread, so a blocking Resolve call (or the up-to-60s
|
|
33
|
+
launch wait) froze the whole server including the stdio read loop. Sync tool
|
|
34
|
+
bodies now run in a worker thread, serialized on a bridge lock so the
|
|
35
|
+
single-threaded scripting bridge is never entered concurrently; degrades to
|
|
36
|
+
inline behavior if the SDK shape changes.
|
|
37
|
+
- **`create_variant_from_ranges` honesty** — results report actual placement
|
|
38
|
+
(`items[].placed` in both frame spaces, plus a `placement_mismatches`
|
|
39
|
+
count) instead of echoing the requested frames; `dry_run` resolves clip ids
|
|
40
|
+
and validates frame ranges so it fails on the same errors as the commit
|
|
41
|
+
path (and no longer leaves an orphan timeline on a bad id); the response
|
|
42
|
+
reports audio presence and warns on a video-only (silent) range list.
|
|
43
|
+
- **`get_items` / `get_items_in_track`** — validate their track selector
|
|
44
|
+
(structured error instead of a bare `KeyError`), accept `index` or
|
|
45
|
+
`track_index`, and gained `action_help` entries.
|
|
46
|
+
- **`apply_cuts`** — reports `skipped` cuts with reasons instead of silently
|
|
47
|
+
dropping non-applicable entries.
|
|
48
|
+
- **`action_help`** — lists every valid action (not only the documented
|
|
49
|
+
subset) and distinguishes an unknown action (`UNKNOWN_ACTION`) from a
|
|
50
|
+
valid-but-undocumented one (`HELP_NOT_REGISTERED`).
|
|
51
|
+
|
|
52
|
+
### Documentation
|
|
53
|
+
|
|
54
|
+
- Corrected `create_variant_from_ranges` help: `clip_id` is a media-pool item
|
|
55
|
+
id (not a timeline-item id); `start_frame`/`end_frame` are SOURCE frames,
|
|
56
|
+
`end_frame` exclusive. Stated the timeline tool's frame-space convention
|
|
57
|
+
once, clarified `lift_range` ripple behavior on empty gaps,
|
|
58
|
+
`begin_run`/`end_run` batching, and the timeline-subtitle vs clip-level
|
|
59
|
+
transcript distinction.
|
|
60
|
+
|
|
61
|
+
### Validation
|
|
62
|
+
|
|
63
|
+
- Full offline suite: 1,483 tests green (70 new).
|
|
64
|
+
- Transport offload, background jobs, and `create_variant_from_ranges`
|
|
65
|
+
placement/pack behavior were live-validated against Resolve Studio 21 by
|
|
66
|
+
the contributor; the threaded-dispatch SDK coupling was additionally
|
|
67
|
+
verified against the pinned mcp SDK (1.27) over a real stdio session.
|
|
68
|
+
|
|
5
69
|
## What's New in v2.61.1
|
|
6
70
|
|
|
7
71
|
The strata cleanup batch deferred from the v2.61.0 review — behavior-neutral
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DaVinci Resolve MCP Server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
|
|
4
4
|
[](https://www.npmjs.com/package/davinci-resolve-mcp)
|
|
5
5
|
[](docs/reference/api-coverage.md)
|
|
6
6
|
[-blue.svg)](#server-modes)
|
package/install.py
CHANGED
|
@@ -35,7 +35,7 @@ from src.utils.update_check import (
|
|
|
35
35
|
|
|
36
36
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
37
37
|
|
|
38
|
-
VERSION = "2.
|
|
38
|
+
VERSION = "2.62.0"
|
|
39
39
|
# Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
|
|
40
40
|
# Resolve's scripting bridge loads into newer interpreters on recent builds
|
|
41
41
|
# (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
|
package/package.json
CHANGED
package/src/granular/common.py
CHANGED
|
@@ -80,7 +80,7 @@ if not logging.getLogger().handlers:
|
|
|
80
80
|
handlers=[logging.StreamHandler()],
|
|
81
81
|
)
|
|
82
82
|
|
|
83
|
-
VERSION = "2.
|
|
83
|
+
VERSION = "2.62.0"
|
|
84
84
|
logger = logging.getLogger("davinci-resolve-mcp")
|
|
85
85
|
logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
|
|
86
86
|
logger.info(f"Detected platform: {get_platform()}")
|