davinci-resolve-mcp 2.72.0 → 2.72.1
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 +42 -0
- package/README.md +5 -5
- package/docs/reference/api-coverage.md +55 -10
- package/install.py +1 -1
- package/package.json +1 -1
- package/src/granular/common.py +1 -1
- package/src/server.py +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,48 @@
|
|
|
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.72.1
|
|
6
|
+
|
|
7
|
+
Documentation only. The API coverage page stated its method counts in four
|
|
8
|
+
places and they disagreed; the cause turned out to be structural rather than
|
|
9
|
+
clerical.
|
|
10
|
+
|
|
11
|
+
### The Resolve 21 surface was never counted
|
|
12
|
+
|
|
13
|
+
None of the Resolve 21 methods appeared in the Complete API Reference tables —
|
|
14
|
+
the tables the `API Methods Covered` denominator counts — although the server
|
|
15
|
+
has wrapped, released and live-tested them since v2.28.1. So `337/337 (100%)`
|
|
16
|
+
described a surface that excluded nine methods across four classes, and the
|
|
17
|
+
`336 → 337` bump for `ResetIntellisearchAnalysis` added one to a count whose
|
|
18
|
+
table did not list it.
|
|
19
|
+
|
|
20
|
+
Thirteen rows added, one per method per object class, since a wrapper on
|
|
21
|
+
`Folder` and one on `MediaPoolItem` can fail independently. Signatures taken
|
|
22
|
+
from the bundled 21.0.2 scripting reference. `TranscribeAudio` was already
|
|
23
|
+
listed — its Resolve 21 change is the optional `useSpeakerDetection` argument,
|
|
24
|
+
accepted but producing identical transcripts either way — so those rows are
|
|
25
|
+
annotated rather than duplicated.
|
|
26
|
+
|
|
27
|
+
Every summary figure is now derived from the tables: **349 covered, 338 live
|
|
28
|
+
tested, 11 untested**.
|
|
29
|
+
|
|
30
|
+
### The counting convention is now written down
|
|
31
|
+
|
|
32
|
+
Two of the three disagreements came from it being implicit:
|
|
33
|
+
|
|
34
|
+
- A method that could not be executed is **not** counted as a pass. The old
|
|
35
|
+
"Resolve 21 delta 8/9" counted Extras-blocked methods as passes, contradicting
|
|
36
|
+
the prose directly above it and overstating coverage exactly where the risk is
|
|
37
|
+
highest.
|
|
38
|
+
- The phase table counts **methods, not assertions**, which is why its Total
|
|
39
|
+
equals Methods Live Tested. That ambiguity is what made two figures look
|
|
40
|
+
independently wrong.
|
|
41
|
+
|
|
42
|
+
`tests/test_api_coverage_arithmetic.py` derives all four figures from the
|
|
43
|
+
reference tables and fails if any disagrees, so the tables stay the single
|
|
44
|
+
source. It was checked against both drift shapes: a hand-edited summary figure,
|
|
45
|
+
and a row removed from a table.
|
|
46
|
+
|
|
5
47
|
## What's New in v2.72.0
|
|
6
48
|
|
|
7
49
|
Resolve 21's AI methods report a missing Extras pack as an error *string*, not
|
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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)
|
|
7
7
|
[-18%20tools-blueviolet.svg)](#server-modes)
|
|
8
|
-
[](docs/reference/api-coverage.md#test-results)
|
|
9
9
|
[](https://www.blackmagicdesign.com/products/davinciresolve)
|
|
10
10
|
[](https://www.python.org/downloads/)
|
|
11
11
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -252,9 +252,9 @@ The default server is a local stdio process launched by your MCP client; it does
|
|
|
252
252
|
| MCP Tools | **34** compound / **341** granular (live server) |
|
|
253
253
|
| Advanced (offline) tools | **18** — .drp/.drt/.drx + DB authoring, no Resolve running |
|
|
254
254
|
| Kernel Actions | **136** guarded workflow actions across 9 compound tools |
|
|
255
|
-
| API Methods Covered | **
|
|
256
|
-
| Methods Live Tested | **
|
|
257
|
-
| Live Test Pass Rate | **
|
|
255
|
+
| API Methods Covered | **349/349** (100%) |
|
|
256
|
+
| Methods Live Tested | **338/349** (96.8%) |
|
|
257
|
+
| Live Test Pass Rate | **338/338** (100%) |
|
|
258
258
|
| Tested Against | DaVinci Resolve 19.1.3 Studio + Resolve 20.3.2 Studio + Resolve 21.0.2 Studio |
|
|
259
259
|
|
|
260
260
|
For method-by-method status, see [API Coverage and Test Results](docs/reference/api-coverage.md). For current workflow support, see [Kernel Action Coverage](docs/kernels/README.md).
|
|
@@ -8,12 +8,12 @@ Complete Resolve scripting API coverage, live-test status, and method-by-method
|
|
|
8
8
|
|--------|-------|
|
|
9
9
|
| MCP Tools | **34** compound (default) / **341** granular |
|
|
10
10
|
| Kernel Actions | **136** guarded MCP workflow actions across 9 compound tools |
|
|
11
|
-
| API Methods Covered | **
|
|
12
|
-
| Methods Live Tested | **
|
|
13
|
-
| Live Test Pass Rate | **
|
|
11
|
+
| API Methods Covered | **349/349** (100%) |
|
|
12
|
+
| Methods Live Tested | **338/349** (96.8%) |
|
|
13
|
+
| Live Test Pass Rate | **338/338** (100%) |
|
|
14
14
|
| API Object Classes | 13 |
|
|
15
15
|
| Tested Against | DaVinci Resolve 19.1.3 Studio + Resolve 20.3.2 Studio + Resolve 21.0.2 Studio |
|
|
16
|
-
| Compatibility Note | Resolve 19.1.3 remains the compatibility baseline; Resolve 20.x scripting calls are additive, version-guarded, and live-tested on 20.3.2; Resolve 21.0 additions are version-guarded and live-tested on 21.0.2 (see the Resolve 21 delta row below —
|
|
16
|
+
| Compatibility Note | Resolve 19.1.3 remains the compatibility baseline; Resolve 20.x scripting calls are additive, version-guarded, and live-tested on 20.3.2; Resolve 21.0 additions are version-guarded and live-tested on 21.0.2 (see the Resolve 21 delta row below — five wrappers need AI Extras packs and stay untested without one, and one is deliberately not executed) |
|
|
17
17
|
|
|
18
18
|
## API Coverage
|
|
19
19
|
|
|
@@ -81,7 +81,24 @@ guard, so it never goes stale.
|
|
|
81
81
|
|
|
82
82
|
## Test Results
|
|
83
83
|
|
|
84
|
-
Baseline testing was performed against **DaVinci Resolve 19.1.3 Studio** on macOS with live API calls (no mocks). Resolve 20 additions were revalidated live against **DaVinci Resolve 20.3.2 Studio**.
|
|
84
|
+
Baseline testing was performed against **DaVinci Resolve 19.1.3 Studio** on macOS with live API calls (no mocks). Resolve 20 additions were revalidated live against **DaVinci Resolve 20.3.2 Studio**, Resolve 21 additions against **Studio 21.0.2.4**.
|
|
85
|
+
|
|
86
|
+
**Counting convention.** Every figure on this page is derived from the rows of
|
|
87
|
+
the [Complete API Reference](#complete-api-reference) tables — that table is the
|
|
88
|
+
source, these summaries are downstream of it:
|
|
89
|
+
|
|
90
|
+
- **API Methods Covered** = the number of rows. One row per method per object
|
|
91
|
+
class, so `PerformAudioClassification` on both `Folder` and `MediaPoolItem`
|
|
92
|
+
counts twice, because they are two wrappers that can fail independently.
|
|
93
|
+
- **Methods Live Tested** = rows marked ✅ or ⚠️ — the call was made against a
|
|
94
|
+
live Resolve and the result observed.
|
|
95
|
+
- **Untested** = rows marked ☁️ or 🔬. A method that could not be executed is
|
|
96
|
+
never counted as a pass: a missing Extras pack tells you nothing about the
|
|
97
|
+
wrapper, so counting it as tested would overstate coverage in exactly the
|
|
98
|
+
place the risk is highest.
|
|
99
|
+
- **The phase table below counts methods, not test cases**, which is why its
|
|
100
|
+
Total equals Methods Live Tested rather than the number of assertions run.
|
|
101
|
+
|
|
85
102
|
|
|
86
103
|
| Phase | Tests | Pass Rate | Scope |
|
|
87
104
|
|-------|-------|-----------|-------|
|
|
@@ -91,8 +108,8 @@ Baseline testing was performed against **DaVinci Resolve 19.1.3 Studio** on macO
|
|
|
91
108
|
| Phase 4 | 10/10 | 100% | AI/ML methods, Fusion clips, stereo, gallery stills |
|
|
92
109
|
| Phase 5 | 6/6 | 100% | Scene cuts, subtitles from audio, graph node cache/tools/enable |
|
|
93
110
|
| Resolve 20 delta | 12/12 | 100% | Resolve 20.0-20.2.2 scripting additions live-tested on 20.3.2 |
|
|
94
|
-
| Resolve 21 delta |
|
|
95
|
-
| **Total** | **
|
|
111
|
+
| Resolve 21 delta | 7/7 | 100% | Resolve 21.0 additions that could be executed, live-tested on Studio 21.0.2.4 (`tests/live_resolve21_validation.py`). The other 6 need an AI Extras pack or are unsafe to run — counted as untested, not as passes |
|
|
112
|
+
| **Total** | **338/338** | **100%** | **96.8% of the 349 covered methods tested live** |
|
|
96
113
|
|
|
97
114
|
#### Resolve 21 delta detail
|
|
98
115
|
|
|
@@ -113,7 +130,10 @@ marked 🔬 rather than ⚠️.
|
|
|
113
130
|
| `Project.GenerateSpeech` | 🔬 | Requires AI Speech Generator; returned an error **string**, not a MediaPoolItem |
|
|
114
131
|
| `Resolve.DisableBackgroundTasksForCurrentResolveSession` | 🔬 | Present in `dir()`; **not executed** — session-wide, returns None, and has no `Enable...` counterpart, so there is no undo short of restarting Resolve |
|
|
115
132
|
|
|
116
|
-
### Untested Methods (
|
|
133
|
+
### Untested Methods (11 of 349)
|
|
134
|
+
|
|
135
|
+
Every ☁️ and 🔬 row from the reference tables, listed here so the count is
|
|
136
|
+
checkable rather than asserted.
|
|
117
137
|
|
|
118
138
|
| Method | Reason | Help Wanted |
|
|
119
139
|
|--------|--------|-------------|
|
|
@@ -122,6 +142,18 @@ marked 🔬 rather than ⚠️.
|
|
|
122
142
|
| `PM.ImportCloudProject` | Requires DaVinci Resolve cloud infrastructure | Yes |
|
|
123
143
|
| `PM.RestoreCloudProject` | Requires DaVinci Resolve cloud infrastructure | Yes |
|
|
124
144
|
| `TL.AnalyzeDolbyVision` | Requires HDR/Dolby Vision content | Yes |
|
|
145
|
+
| `Folder.AnalyzeForIntellisearch` | Requires the AI IntelliSearch Extra | Yes |
|
|
146
|
+
| `MPI.AnalyzeForIntellisearch` | Requires the AI IntelliSearch Extra | Yes |
|
|
147
|
+
| `Folder.AnalyzeForSlate` | Requires the AI Slate ID Extra | Yes |
|
|
148
|
+
| `MPI.AnalyzeForSlate` | Requires the AI Slate ID Extra | Yes |
|
|
149
|
+
| `Project.GenerateSpeech` | Requires the AI Speech Generator Extra | Yes |
|
|
150
|
+
| `Resolve.DisableBackgroundTasksForCurrentResolveSession` | Deliberately not executed: session-wide, returns `None`, and has no `Enable...` counterpart, so there is no undo short of restarting Resolve | No |
|
|
151
|
+
|
|
152
|
+
The five AI Extras rows are untested for want of a downloadable pack, not because
|
|
153
|
+
the wrappers are suspect — a report from anyone who has the packs installed would
|
|
154
|
+
close them. The last one is a decision rather than a gap: it is reachable, and
|
|
155
|
+
running it during a validation sweep would disable background tasks for every
|
|
156
|
+
project open in that Resolve instance.
|
|
125
157
|
|
|
126
158
|
---
|
|
127
159
|
|
|
@@ -161,6 +193,7 @@ Every method in the DaVinci Resolve Scripting API and its test status. Methods a
|
|
|
161
193
|
| 20 | `GetKeyframeMode()` | ✅ | Returns keyframe mode |
|
|
162
194
|
| 21 | `SetKeyframeMode(keyframeMode)` | ⚠️ | API accepts; mode must match valid enum |
|
|
163
195
|
| 22 | `GetFairlightPresets()` | ✅ | Resolve 20.3.2 live test returns preset map |
|
|
196
|
+
| 23 | `DisableBackgroundTasksForCurrentResolveSession()` | 🔬 | Resolve 21.0. Present in `dir()`; **not executed** — session-wide, returns `None`, no `Enable...` counterpart, so no undo short of restarting Resolve |
|
|
164
197
|
|
|
165
198
|
### ProjectManager
|
|
166
199
|
|
|
@@ -239,6 +272,8 @@ Every method in the DaVinci Resolve Scripting API and its test status. Methods a
|
|
|
239
272
|
| 41 | `AddColorGroup(groupName)` | ✅ | Returns ColorGroup object |
|
|
240
273
|
| 42 | `DeleteColorGroup(colorGroup)` | ✅ | Deletes color group |
|
|
241
274
|
| 43 | `ApplyFairlightPresetToCurrentTimeline(presetName)` | ⚠️ | Resolve 20.3.2 live test accepts call; returns `False` without a named preset |
|
|
275
|
+
| 44 | `GenerateSpeech({speechGenerationSettings}, timecode)` | 🔬 | Resolve 21.0. Requires the AI Speech Generator Extra; without it returns an error **string**, not a MediaPoolItem |
|
|
276
|
+
| 45 | `ResetIntellisearchAnalysis()` | ✅ | Resolve 21.0.2 live test returns `True` |
|
|
242
277
|
|
|
243
278
|
### MediaStorage
|
|
244
279
|
|
|
@@ -294,8 +329,13 @@ Every method in the DaVinci Resolve Scripting API and its test status. Methods a
|
|
|
294
329
|
| 4 | `GetIsFolderStale()` | ✅ | Returns `False` |
|
|
295
330
|
| 5 | `GetUniqueId()` | ✅ | Returns UUID string |
|
|
296
331
|
| 6 | `Export(filePath)` | ✅ | Exports DRB file |
|
|
297
|
-
| 7 | `TranscribeAudio()` | ✅ | Starts audio transcription |
|
|
332
|
+
| 7 | `TranscribeAudio({useSpeakerDetection})` | ✅ | Starts audio transcription. Resolve 21.0 added the optional `useSpeakerDetection` argument: it is accepted, but `True` and `False` produced identical transcripts on a deliberately two-voice clip (21.0.2.4) — the method passes, the parameter has no observable effect |
|
|
298
333
|
| 8 | `ClearTranscription()` | ✅ | Clears transcription |
|
|
334
|
+
| 9 | `PerformAudioClassification()` | ✅ | Resolve 21.0.2 live test returns `True`; `Category` clip property goes `""` → `Dialogue` |
|
|
335
|
+
| 10 | `ClearAudioClassification()` | ✅ | Resolve 21.0.2 live test returns `True`; `Category` resets to `Uncategorized`, not `""` |
|
|
336
|
+
| 11 | `AnalyzeForIntellisearch(identifyFaces, isBetterMode)` | 🔬 | Resolve 21.0. Requires the AI IntelliSearch Extra; without it returns an error **string**, not `False` |
|
|
337
|
+
| 12 | `AnalyzeForSlate(markerColor)` | 🔬 | Resolve 21.0. Requires the AI Slate ID Extra. Documented `resolve.MARKER_*` constants do not exist on the handle |
|
|
338
|
+
| 13 | `RemoveMotionBlur({deblurOption})` | ✅ | Resolve 21.0.2 live test returns original→new pairs; source media unchanged. Requires the AI Motion Deblur Extra |
|
|
299
339
|
|
|
300
340
|
### MediaPoolItem
|
|
301
341
|
|
|
@@ -327,7 +367,7 @@ Every method in the DaVinci Resolve Scripting API and its test status. Methods a
|
|
|
327
367
|
| 24 | `UnlinkProxyMedia()` | ✅ | Unlinks proxy media |
|
|
328
368
|
| 25 | `ReplaceClip(filePath)` | ✅ | Replaces clip source |
|
|
329
369
|
| 26 | `GetUniqueId()` | ✅ | Returns UUID string |
|
|
330
|
-
| 27 | `TranscribeAudio()` | ✅ | Starts audio transcription |
|
|
370
|
+
| 27 | `TranscribeAudio({useSpeakerDetection})` | ✅ | Starts audio transcription. Resolve 21.0 added the optional `useSpeakerDetection` argument: it is accepted, but `True` and `False` produced identical transcripts on a deliberately two-voice clip (21.0.2.4) — the method passes, the parameter has no observable effect |
|
|
331
371
|
| 28 | `ClearTranscription()` | ✅ | Clears transcription |
|
|
332
372
|
| 29 | `GetAudioMapping()` | ✅ | Returns JSON audio mapping |
|
|
333
373
|
| 30 | `GetMarkInOut()` | ✅ | Returns mark in/out dict |
|
|
@@ -337,6 +377,11 @@ Every method in the DaVinci Resolve Scripting API and its test status. Methods a
|
|
|
337
377
|
| 34 | `LinkFullResolutionMedia(filePath)` | ⚠️ | Resolve 20.3.2 live test accepts call; full-res relink returns `False` without a matching proxy/full-res fixture |
|
|
338
378
|
| 35 | `ReplaceClipPreserveSubClip(filePath)` | ✅ | Resolve 20.3.2 live test replaces clip while preserving subclip metadata |
|
|
339
379
|
| 36 | `MonitorGrowingFile()` | ✅ | Resolve 20.3.2 live test enables growing-file monitoring |
|
|
380
|
+
| 37 | `PerformAudioClassification()` | ✅ | Resolve 21.0.2 live test returns `True`; `Category` clip property goes `""` → `Dialogue` |
|
|
381
|
+
| 38 | `ClearAudioClassification()` | ✅ | Resolve 21.0.2 live test returns `True`; `Category` resets to `Uncategorized`, not `""` |
|
|
382
|
+
| 39 | `AnalyzeForIntellisearch(identifyFaces, isBetterMode)` | 🔬 | Resolve 21.0. Requires the AI IntelliSearch Extra; without it returns an error **string**, not `False` |
|
|
383
|
+
| 40 | `AnalyzeForSlate(markerColor)` | 🔬 | Resolve 21.0. Requires the AI Slate ID Extra. Documented `resolve.MARKER_*` constants do not exist on the handle |
|
|
384
|
+
| 41 | `RemoveMotionBlur({deblurOption})` | ✅ | Resolve 21.0.2 live test returns the new MediaPoolItem; source media path unchanged. Requires the AI Motion Deblur Extra |
|
|
340
385
|
|
|
341
386
|
### Timeline
|
|
342
387
|
|
package/install.py
CHANGED
|
@@ -36,7 +36,7 @@ from src.utils.update_check import (
|
|
|
36
36
|
|
|
37
37
|
# ─── Version ──────────────────────────────────────────────────────────────────
|
|
38
38
|
|
|
39
|
-
VERSION = "2.72.
|
|
39
|
+
VERSION = "2.72.1"
|
|
40
40
|
# Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound —
|
|
41
41
|
# Resolve's scripting bridge loads into newer interpreters on recent builds
|
|
42
42
|
# (Python 3.14 verified against Resolve Studio 20.3.2). Older Resolve builds
|
package/package.json
CHANGED
package/src/granular/common.py
CHANGED
|
@@ -85,7 +85,7 @@ if not logging.getLogger().handlers:
|
|
|
85
85
|
handlers=[logging.StreamHandler()],
|
|
86
86
|
)
|
|
87
87
|
|
|
88
|
-
VERSION = "2.72.
|
|
88
|
+
VERSION = "2.72.1"
|
|
89
89
|
logger = logging.getLogger("davinci-resolve-mcp")
|
|
90
90
|
logger.info(f"Starting DaVinci Resolve MCP Server v{VERSION}")
|
|
91
91
|
logger.info(f"Detected platform: {get_platform()}")
|