davinci-resolve-mcp 2.87.0 → 2.87.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/AGENTS.md CHANGED
@@ -73,7 +73,13 @@ semantics.
73
73
  `docs/reference/api-limitations.md` — when you document a new Resolve API
74
74
  limitation, add a `submit`-tagged entry to `src/utils/api_truth.py` and
75
75
  regenerate with `scripts/gen_api_limitations.py` (a drift guard enforces it)
76
- - Bundled Resolve API text: `docs/reference/resolve_scripting_api.txt`
76
+ - Bundled Resolve API text: `docs/reference/resolve_scripting_api.txt` — refresh
77
+ it by copying the shipped `Developer/Scripting/README.txt` over it wholesale,
78
+ never by hand-adding the lines you already know about. The file's only value
79
+ is that a diff against it is trustworthy; a hand-patch carries a newer
80
+ `Last Updated:` header while still hiding everything you did not know to look
81
+ for. That is exactly how it sat eight weeks stale at 26 May 2026 while ten
82
+ documented 21.0.4 methods went unwired (PR #139)
77
83
 
78
84
  ## Key Paths
79
85
 
package/CHANGELOG.md CHANGED
@@ -2,6 +2,37 @@
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.87.1
6
+
7
+ Follow-up evidence from @legionsound on PR #139, plus the process fix for the
8
+ tooling failure that PR exposed.
9
+
10
+ ### Changed
11
+
12
+ - **`import_user_preferences_preset` now says what the preset ended up called.**
13
+ The no-name path was the one branch in v2.87.0 with nothing behind it — it
14
+ calls the single-argument binding, which would have been a `TypeError` rather
15
+ than a graceful failure if the binding wanted two positionals. Round-tripped
16
+ on Studio 21.0.4.5 (export → delete → import both ways): the single-arg form
17
+ returns `True`, and the imported preset is **named after the file**. The
18
+ answer now carries that, so a caller who passed no name knows to read the
19
+ name back with `list_user_preferences_presets` instead of guessing.
20
+
21
+ ### Documentation
22
+
23
+ - **`api-coverage.md`: the import/export rows carry the round-trip**, not
24
+ `dir()` membership. Still 🔬 and still 23 untested of 361 — the counting
25
+ convention is unchanged, because none of this was executed here. What changed
26
+ is the strength of the contributor's evidence behind two of the rows.
27
+ - **`AGENTS.md` now states how the API snapshot must be refreshed:** copy the
28
+ shipped `Developer/Scripting/README.txt` over it wholesale, never hand-add the
29
+ lines you already know about. A hand-patch carries a newer `Last Updated:`
30
+ header while hiding everything you did not know to look for — which is
31
+ precisely how the file sat eight weeks stale at 26 May 2026 while ten
32
+ documented 21.0.4 methods went unwired. The v2.87.0 snapshot was verified as a
33
+ wholesale replace (md5 `d732b3f6c1da08dc516bc8f80c5acd92`, byte-identical to
34
+ the 21.0.4.5 shipped file per the contributor).
35
+
5
36
  ## What's New in v2.87.0
6
37
 
7
38
  The ten Resolve 21.0.4 scripting surfaces that the 24 Jul 2026 README refresh
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [简体中文](README.zh-CN.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-2.87.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-2.87.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
6
6
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
7
7
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
8
8
  [![Tools](https://img.shields.io/badge/MCP%20Tools-34%20(341%20full)-blue.svg)](#server-modes)
package/README.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 简体中文
4
4
 
5
- [![Version](https://img.shields.io/badge/version-2.87.0-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
5
+ [![Version](https://img.shields.io/badge/version-2.87.1-blue.svg)](https://github.com/samuelgursky/davinci-resolve-mcp/releases)
6
6
  [![npm](https://img.shields.io/npm/v/davinci-resolve-mcp.svg?label=npm&color=CB3837)](https://www.npmjs.com/package/davinci-resolve-mcp)
7
7
  [![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen.svg)](docs/reference/api-coverage.md)
8
8
  [![Tools](https://img.shields.io/badge/MCP%20Tools-34%20(341%20full)-blue.svg)](#服务器模式)
@@ -12,7 +12,7 @@
12
12
  [![Python](https://img.shields.io/badge/python-3.10+-green.svg)](https://www.python.org/downloads/)
13
13
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
14
14
 
15
- > 本翻译对应 v2.87.0 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
15
+ > 本翻译对应 v2.87.1 版 README。如与英文原版有出入,以 [英文原版](README.md) 为准。
16
16
 
17
17
  一个 Model Context Protocol (MCP) 服务器,让 AI 助手通过官方脚本 API 控制 DaVinci Resolve Studio(达芬奇)。它提供完整的 API 覆盖,外加带护栏的工作流助手,涵盖剪辑、媒体池整理、渲染设置、审阅标记、调色、Fusion、Fairlight、项目生命周期任务、扩展开发,以及不碰源媒体的媒体分析。
18
18
 
@@ -157,7 +157,7 @@ checkable rather than asserted.
157
157
  | `Resolve.SaveUserPreferencesPreset` | Requires a Resolve 21.0.4 build; the validation machine runs Studio 19.1.3 and free 21.0.3 | Yes |
158
158
  | `Resolve.LoadUserPreferencesPreset` | Deliberately not executed even by the reporter: swaps the user's global preferences session-wide | No |
159
159
  | `Resolve.DeleteUserPreferencesPreset` | Requires a Resolve 21.0.4 build; the validation machine runs Studio 19.1.3 and free 21.0.3 | Yes |
160
- | `Resolve.ImportUserPreferencesPreset` | Requires a Resolve 21.0.4 build and a preset file to import | Yes |
160
+ | `Resolve.ImportUserPreferencesPreset` | Requires a Resolve 21.0.4 build; round-tripped by the reporter on 21.0.4.5 in both call shapes (PR #139), not here | Yes |
161
161
  | `Resolve.ExportUserPreferencesPreset` | Requires a Resolve 21.0.4 build; the validation machine runs Studio 19.1.3 and free 21.0.3 | Yes |
162
162
  | `PM.GetProjectAttributesInCurrentFolder` | Requires a Resolve 21.0.4 build; the validation machine runs Studio 19.1.3 and free 21.0.3 | Yes |
163
163
 
@@ -218,8 +218,8 @@ Every method in the DaVinci Resolve Scripting API and its test status. Methods a
218
218
  | 28 | `SaveUserPreferencesPreset(presetName)` | 🔬 | Resolve 21.0.4. Not executed here; part of the issue #138 round-trip on 21.0.4.5 |
219
219
  | 29 | `LoadUserPreferencesPreset(presetName)` | 🔬 | Resolve 21.0.4. `dir()`-present on 21.0.4.5; **not executed** even by the reporter — swaps the user's global preferences session-wide (issue #138) |
220
220
  | 30 | `DeleteUserPreferencesPreset(presetName)` | 🔬 | Resolve 21.0.4. Not executed here; part of the issue #138 round-trip on 21.0.4.5 |
221
- | 31 | `ImportUserPreferencesPreset(presetFilePath, presetName)` | 🔬 | Resolve 21.0.4. `dir()`-present on 21.0.4.5 only (issue #138) — no preset file was on hand. Per the README the imported preset is **not** auto-loaded |
222
- | 32 | `ExportUserPreferencesPreset(presetName, exportPath)` | 🔬 | Resolve 21.0.4. `dir()`-present on 21.0.4.5 only (issue #138) |
221
+ | 31 | `ImportUserPreferencesPreset(presetFilePath, presetName)` | 🔬 | Resolve 21.0.4. Not executed here; reporter's export→delete→import round-trip on 21.0.4.5 (PR #139) covers **both** call shapes single-arg returns `True` rather than a `TypeError`, and the imported preset is then named after the file; the two-arg form takes the given name. Per the README the imported preset is **not** auto-loaded, and the round-trip did not load either import |
222
+ | 32 | `ExportUserPreferencesPreset(presetName, exportPath)` | 🔬 | Resolve 21.0.4. Not executed here; reported writing the file at the given path with no extension appended, on 21.0.4.5 (PR #139) |
223
223
 
224
224
  ### ProjectManager
225
225
 
package/install.py CHANGED
@@ -36,7 +36,7 @@ from src.utils.update_check import (
36
36
 
37
37
  # ─── Version ──────────────────────────────────────────────────────────────────
38
38
 
39
- VERSION = "2.87.0"
39
+ VERSION = "2.87.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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "davinci-resolve-mcp",
3
- "version": "2.87.0",
3
+ "version": "2.87.1",
4
4
  "description": "NPM bootstrapper for the DaVinci Resolve MCP Server.",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Gursky <samgursky@gmail.com>",
@@ -85,7 +85,7 @@ if not logging.getLogger().handlers:
85
85
  handlers=[logging.StreamHandler()],
86
86
  )
87
87
 
88
- VERSION = "2.87.0"
88
+ VERSION = "2.87.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()}")
package/src/server.py CHANGED
@@ -11,7 +11,7 @@ Usage:
11
11
  python src/server.py --full # Start the 341-tool granular server instead
12
12
  """
13
13
 
14
- VERSION = "2.87.0"
14
+ VERSION = "2.87.1"
15
15
 
16
16
  import base64
17
17
  import os
@@ -13589,7 +13589,10 @@ def resolve_control(action: str, params: Optional[Dict[str, Any]] = None) -> Dic
13589
13589
  delete_user_preferences_preset(name) -> {success} — Resolve 21.0.4+
13590
13590
  import_user_preferences_preset(path, name?) -> {success} — Resolve 21.0.4+.
13591
13591
  The imported preset is NOT auto-loaded; follow with
13592
- load_user_preferences_preset to activate it.
13592
+ load_user_preferences_preset to activate it. Omitting name is safe
13593
+ (reported on 21.0.4.5: single-arg returns True, not a TypeError) and
13594
+ the preset is then named after the file, so pass name when the preset
13595
+ should be called something the filename does not say.
13593
13596
  export_user_preferences_preset(name, path) -> {success} — Resolve 21.0.4+
13594
13597
  open_control_panel(port?, host?, open_browser?) -> {success, url, pid, port, status}
13595
13598
  — Launches the analysis control panel (src/analysis_dashboard.py) as a background process.
@@ -13862,8 +13865,11 @@ def resolve_control(action: str, params: Optional[Dict[str, Any]] = None) -> Dic
13862
13865
  ok = bool(r.ImportUserPreferencesPreset(p["path"], p["name"]))
13863
13866
  else:
13864
13867
  ok = bool(r.ImportUserPreferencesPreset(p["path"]))
13865
- return {"success": ok,
13866
- "note": "The imported preset is not auto-loaded; use load_user_preferences_preset to activate it."}
13868
+ note = "The imported preset is not auto-loaded; use load_user_preferences_preset to activate it."
13869
+ if not p.get("name"):
13870
+ note += (" No name was given, so the preset takes its name from the file — "
13871
+ "list_user_preferences_presets to read it back.")
13872
+ return {"success": ok, "note": note}
13867
13873
  elif action == "export_user_preferences_preset":
13868
13874
  missing = _requires_method(r, "ExportUserPreferencesPreset", "21.0.4")
13869
13875
  if missing: