mcpField
R
ResolveMCP-ext

ResolveMCP-ext

ローカル
github.comメディア・デザイン03 日前に更新

ResolveMCP-ext について

ResolveMCP-extは、DaVinci Resolve Studio向けの拡張MCPサーバーです。クリップエフェクト、フレーム書き出し、自動カラー、メディアプールのフォルダー検索など、一般的なResolve MCPサーバーが扱わない操作を追加し、実機のResolveで動作を検証します。

主な機能

  1. 01クリップエフェクトの適用・管理・並べ替え
  2. 02クリップ属性のコピー
  3. 03フレームとサムネイルグリッドの書き出し
  4. 04自動カラーとASC CDLの読み書き
  5. 05メディアプールのフォルダー階層検索
  6. 06フォトアルバムの管理

活用シーン

  1. 01複数クリップへのグレーディング属性のコピー
  2. 02確認用の静止画やサムネイルグリッドの書き出し
  3. 03クリップエフェクトとASC CDL値の調整
  4. 04フォトアルバムとメディアプールの整理

MCP 対応

ResolveMCP-extは、DaVinci Resolve StudioのスクリプティングAPI操作をMCPクライアントに公開するMCPサーバーです。他のResolve MCPサーバーにないツールを提供し、置き換えではなく併用を想定しています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"captrauti-resolve-ext": {
"command": "uvx",
"args": [
"resolve-ext"
],
"env": {
"RESOLVE_SCRIPT_API": "<RESOLVE_SCRIPT_API>",
"RESOLVE_SCRIPT_LIB": "<RESOLVE_SCRIPT_LIB>"
}
}
}
}
起動コマンドuvx resolve-ext
設定が必要な環境変数
RESOLVE_SCRIPT_APIPath to the DaVinci Resolve scripting API folder. Optional: the server locates it automatically on Windows, macOS and Linux, and only uses this when set to an existing path.
RESOLVE_SCRIPT_LIBPath to fusionscript.dll / fusionscript.so. Optional for the same reason.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiresolve-ext1.0.5

ツール

10

掲載時のツール一覧 · 2 日前に更新

パラメーター型必須説明
actionstringはい
paramsanyいいえ

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

resolve-ext

MCP サーバーで、一般的な Resolve MCP サーバーではカバーされていない DaVinci Resolve 21.1.2 のスクリプティング機能(クリップエフェクト、エフェクトプロパティ、属性の貼り付け、フレームの書き出し、メディアプールのフォルダー検索)を追加します。

これは意図的に置き換えではなく拡張として設計されています。他の 2 つの Resolve MCP サーバーと併せて登録すれば、重複のない、より広い機能範囲を利用できます。セットアップの全手順をご覧ください。公開する機能はすべて稼働中の Resolve で検証しており、動作しないことが判明した呼び出しは、成功したように見せかけず、動作しないものとして報告します。

effects              apply/list/remove/toggle/reorder clip effects
clip_attrs           copy attributes between clips (Paste Attributes)
export_frame         stills from a clip or media-pool item
folder_ops           which bin does this clip/folder live in
photo_albums         albums, photos, ratings, flags, versions, stills
node_graph           node labels, colours, enable state, LUTs, cache
project_extras       render presets, audio render formats, transcription
camera_comparison    2x2 / split layouts, camera labels, markers
clip_position        read placement + handle offsets; flags broken APIs
resolve_ext_status   health check

Resolve MCP の完全なセットアップ — 3 つのサーバーをすべて使用

Resolve をカバーする MCP サーバーは 1 つではありません。**それぞれ異なる役割を担う独立したサーバーが 3 つあり、すべてをカバーするには 3 つすべてを実行する必要があります。**このプロジェクトは 3 つ目のサーバーです。他の 2 つは任意の追加機能ではありません。

サーバー提供元ツール用途
Blackmagic 純正
ResolveMCP.exe
DaVinci Resolve 21 に同梱 — ダウンロード不要14メタサーバーです。Resolve のスクリプティング API スタブと Python サンドボックス(run_script、search_scripting_api、get_whats_new)、および LUT/DCTL 管理機能を提供します。Resolve に対する操作自体は実行しません。
コミュニティ製
samuelgursky/davinci-resolve-mcp
npx または git37
(--full を指定すると 390)
主力サーバーです。編集、メディアプール、レンダー、マーカー、カラーグレーディング、Fusion をカバーし、タスクごとに細分化されたツールを 1 つずつ提供します。ソースを安全に扱うメディア分析用に、2 つ目の davinci-resolve-advanced サーバー(Node ツール 18 個)も同梱されています。
このプロジェクト
resolve-ext
pip10他の 2 つに不足している機能を補います。下の表をご覧ください。

3 つのサーバーはすべて、同じ単一クライアントのスクリプティング API を通じて同じ Resolve と通信します。機能の重複なく共存します。1 つだけ登録して、機能が足りない理由に悩むのはよくある落胆です。

# 1. Blackmagic's — already on disk, just register it:
#    %ProgramFiles%\Blackmagic Design\DaVinci Resolve\ResolveMCP.exe   (Windows)
#    /Applications/DaVinci Resolve/DaVinci Resolve.app/Contents/Applications/ResolveMCP
#    /opt/resolve/bin/ResolveMCP                                       (Linux)

# 2. the community server (use --clients manual when driving it non-interactively):
npx davinci-resolve-mcp setup

# 3. this project:
pip install https://github.com/CaptRauti/ResolveMCP-ext/releases/download/v1.0.0/resolve_ext-1.0.0-py3-none-any.whl
resolve-ext doctor

プラットフォームごとのパス、Windows で「Resolve が別のドライブにある」場合、および各サーバーの障害事例を含む手順の全容は、AGENTS.md をご覧ください。AI エージェントが 3 つすべてを無人でインストールできるように書かれています。

このプロジェクトの目的

DaVinci Resolve 21.1.2(2026 年 10 月 22 日)では、複数のスクリプティング API が追加されました。一般的な MCP サーバーには実装されていません。各シンボルをソースコード内で検索し、さらに稼働中の Resolve オブジェクトを hasattr で調べて、2 通りの方法で確認しています(型スタブには API が記載されていますが、実際のオブジェクトを調べなければ、お使いのビルドにその API があることは確認できません)。

Resolve 21.1.2 のシンボル一般的な MCP サーバーでの実装状況
Resolve.GetEffectsListなし
TimelineItem.AddEffect / GetEffects / DeleteEffectsなし
Effect.GetInfo / Get/SetIsEnabled / Get/SetIndexなし
TimelineItem.CopyAttributesなし
TimelineItem.ExportFrame / MediaPoolItem.ExportFrameなし
MediaPoolItem.GetParentFolder / Folder.GetParentFolderなし
TimelineItem.Get/SetLeftOffset / GetPositionなし
Timeline.MoveItems / DeleteGaps / Get/SetIsEnabledなし
フォトアルバム API(PhotoAlbum、PhotoAlbumItem、53 メソッド)なし
Graph.SetNodeLabel / Get/SetNodeColor / SetNodeEnabledなし
Project.GetAudioRenderFormats / GetAudioRenderCodecsなし
Project.UpdateRenderPreset / SetQuickExportEnabledForRenderPresetなし
MediaPoolItem.SetTranscriptionなし

TimelineItem だけでも、21.1.2 では 113 個のメソッドが公開されています。その多くは、このサーバーが登場するまで MCP 経由では利用できませんでした。

インストール

AI エージェントを使ってインストールしますか? AGENTS.md を参照するよう指示してください。失敗する場合も含め、エージェント向けの手順が順を追って記載されています。このセクションは人間向けの説明です。

Python 3.10 以降とDaVinci Resolve Studioが必要です(外部スクリプティングは Studio の機能であり、無償版では利用できません)。

リリースから(推奨)

リリースページから wheel をダウンロードしてインストールします。

pip install resolve_ext-1.0.0-py3-none-any.whl

wheel は純粋な Python で記述されており、プラットフォームに依存しません。同じファイルを Windows、macOS、Linux で使用できます。

git チェックアウトから
pip install git+https://github.com/CaptRauti/ResolveMCP-ext

または、ローカルのクローンから:

git clone https://github.com/CaptRauti/ResolveMCP-ext
cd ResolveMCP-ext
pip install .

mcp 2.x は FastMCP を破壊するため、依存関係は <2 に固定されています。この固定は パッケージのメタデータに含まれているため、自分で追加する必要はありません。

インストールを確認する
resolve-ext doctor
resolve-ext 1.0.0

--- Python ---
  3.12.4 at /usr/bin/python3
  ok (3.10+)

--- DaVinci Resolve scripting API ---
platform      linux
api_path      /opt/resolve/Developer/Scripting  (found)
lib_path      /opt/resolve/libs/fusionscript.so  (found)

--- Import test ---
  ok: DaVinciResolveScript imports

--- Live connection ---
  ok: connected to Resolve; project = My Project

--- Result ---
  All checks passed.

doctor はすべて正常に動作すると 0、それ以外の場合は 1 で終了するため、セットアップ スクリプトで使用できます。問題がある場合は、不足している正確なパスと、有効にする必要がある 項目を示します。

MCP クライアントに登録する

サーバーは Resolve のスクリプティング API を自動で検出するため、デフォルトの インストールでは設定は不要です:

{
  "mcpServers": {
    "resolve-ext": { "command": "resolve-ext" }
  }
}

Resolve が標準以外の場所にある場合、または明示的な形式を確認する場合は、次を実行します:

resolve-ext env

実行したマシンに合わせた設定を、汎用 JSON と hermes mcp add コマンドの形式で出力します。 設定には、正確な RESOLVE_SCRIPT_API、RESOLVE_SCRIPT_LIB、PYTHONPATH の値が 含まれます。

既存のクライアント設定に統合する場合、サーバーエントリーはクライアント自身の mcpServers キーの直下に置きます。mcpServers を二重にネストしないでください。 そうすると、ツールの検出が気付かれないまま無効になります。

Resolve の設定

Resolve は、Preferences → System → General → External scripting using → Local の設定で実行する必要があります。

ツール

effects
list_available(media_type?)          video (default) | photo | audio
list_applied(item_id?|name?, category?)
apply(item_id?|name?, category, id)
remove(item_id?|name?, category, indices?)
set_enabled(item_id?|name?, index, enabled, category?)
reorder(item_id?|name?, index, new_index, category?)

タイムライン項目は item_id(GetUniqueId)で指定するか、name とその項目が配置されている トラック(track_type のデフォルトは video、track_index のデフォルトは 1)で指定します。

必ず最初に list_available を呼び出してください。apply には、返された category と id が 必要です。標準の 21.1.2 Studio では、video 向けに 36 個の Fusion エフェクトと 98 個の OFX エフェクト、さらに audio 向けの Fairlight エフェクト一式が用意されています。 Fusion の ID は Fusion/Effects/<category>/<name> の形式です。

clip_attrs
options()                                    the full option vocabulary
copy(source_id?|source_name?, target_ids?|target_names?, options, ...)
read(item_id?|name?)

Edit ページの Paste Attributes の背後にある API です。カメラごとのルックを繰り返し 適用できるようにする機能です。1 つのクリップでグレーディングし、同じ属性をそのカメラのほかの すべてのクリップに適用します。

6 つのグループ(clip、video、zoom_crop_flip、retime、 grade_fusion、audio)に、36 個のオプションがあります。省略形は copy_all_video、copy_all_audio です。

{"colorCorrection": true, "allZoomAttributes": true,
 "allCropAttributes": true, "videoPlugins": true}
export_frame
item(item_id?|name?, frame_offset, output_type?, file_path?, format?, max_dimension?)
media(clip_id, frame_offset, output_type?, file_path?, format?, max_dimension?)
timeline(frame_offset, ...)     # broken on 21.1.2 — see below

item と media の動作は確認済みです。オフセットは 0 始まりで、項目のデュレーションより 小さくなければなりません。output_type は file(file_path が必要)または encodedString(デフォルト)です。後者の場合、base64 はデコードされ、サーバーと同じ階層の out/ に書き込まれ、インラインでは短いプレフィックスのみが返されます。

folder_ops
parent_of_clip(clip_id)              which bin holds this clip
parent_of_folder(path?|folder_id?)   a folder's parent (root has none)
path(clip_id?|folder_id?)            "Master/Sub/Bin"
find_clip(clip_id)                   locate a clip anywhere in the tree
photo_albums
list() / current() / set_current(album_id?|name?)
create(name) / create_from_photos(name, clip_ids) / delete(album_ids?) / rename(...)
quick_export_presets() / render_settings(settings?)
photos(album_id?|name?) / add_photos(clip_ids) / remove_photos(photo_ids) / current_item()
stills(album_id?|name?, all_photos?)
photo(photo_id) / rate(photo_id, stars) / flag(photo_id, color?|clear?)
clip_color(photo_id, color?|clear?) / versions(photo_id)
add_version / load_version / delete_version
copy_grade / effects_list / effect_apply / effect_remove / fusion_comps / fusion_add

21.1.2.10 で動作を確認済みです:PhotoAlbum メソッド 9/9、PhotoAlbumItem メソッド 20/20、CreatePhotoAlbumFromPhotos、永続的なレーティング/フラグ/バージョン、写真への AddFusionComp。

add_photos は上流で動作しません(AddToPhotoAlbum を呼び出しても何も追加されません)。 このアクションはアルバムを読み戻して検証し、その結果を知らせます。動作確認済みの方法である create_from_photos を使用してください。

メソッドの分担に注意してください。アルバムの一覧表示メソッドは Project に、 作成/追加メソッドは MediaPool にありますが、Resolve はこれらのどれにも応答しません。 Resolve のプロキシでは、hasattr がすべてのオブジェクトであらゆるメソッドを報告するため、 ツールは呼び出しごとに適切なオブジェクトを解決します。

node_graph
info(item_id?|name?|photo_id?)        node list with labels and colours
label(node_index, label)              "" clears the label
color(node_index, color)              "" clears the colour
enable(node_index, enabled)
tools(node_index)                     which Fusion/OFX tools sit in the node
lut(node_index, lut_path?)            read, or set
cache(node_index, mode?)              read, or set
reset_colors()                        photo graphs only
reset_grades(confirm=true)            destructive — clears the whole grade

有効なノードカラー:Orange、Apricot、Yellow、Lime、Olive、Green、Teal、Navy、 Blue、Purple、Violet、Pink、Tan、Beige、Brown、Chocolate。

タイムラインのクリップは item_id/name で、写真は photo_id で指定します。 ラベルとカラーが呼び出しをまたいで保持されることを確認済みです。

project_extras
capabilities()                             what this build answers at all
render_presets()                           GetRenderPresetList
update_render_preset(preset_name)          GUI-dependent, see the broken table
quick_export_enable(preset_name, enabled)  GUI-dependent
audio_formats()                            {display name -> extension}
audio_codecs(format_extension)             {description -> codec name}
transcription(clip_id, use_nested?)        a clip's transcript
set_transcription(clip_id, transcription)  verified by reading back

audio_formats/audio_codecs は検証済みです:実在する 7 つのフォーマット (FLAC, MP3, MP4, MXF OP-Atom, MXF OP1A (IMF), QuickTime, Wave)と、それらの コーデックです。render_presets も検証済みで、実在するプリセットが 37 個あります。

camera_comparison
detect()                 which camera each clip is (from its name)
grid_2x2()               four cameras in quadrants, scale 0.5
split_h() / split_v()    two-up, side by side or stacked
layout(assignments)      explicit {clip_id: {x, y, scale}} — fractions of raster
fullframe(clip_ids)      back to 1.0 zoom, centred
markers()                timeline markers naming each camera
sort_to_bins()           file clips into per-camera bins by name
build_timeline()         one video track per camera, scenes synced
read()                   current transform of every clip

カメラの検出順序(最長のプレフィックスを優先):

prefixcameramarker
ace*Insta360 AceProオレンジ
go*Insta360 Go Ultra緑
luna*Insta360 Luna Ultraシアン
x*Insta360 X5青
vid_*Handy(Android ファイル)グレー

このツールが存在する理由: このツールが置き換える以前の簡易スクリプトでは、 SetProperty("PositionX", …) / "PositionY" を使ってクリップを配置していました。21.1.2.10 で 実測したところ、これらのキーは False を返して無視されます。GetProperty も False を返します。ズームは機能しましたが、配置はまったく機能しませんでした。正しいキーは ピクセル単位の Pan(x、+は右)と Tilt(y、+は上)です。ここでの書き込みはすべて読み戻して確認し、 変換が反映されない場合は失敗として報告します。

検証済み:3840x2160 のタイムラインで grid_2x2 を使うと、AcePro は Pan -960, Tilt 540(左上)、Go Ultra は Pan 960, Tilt 540(右上)に配置され、値を読み戻せます。

clip_position
get(item_id?|name?)      position + left/right handle offsets   (safe, read-only)
enabled()                timeline enabled state

set / move / set_offset / delete_gaps はコードに存在しますが、 無効化されており、その理由も明確に示されます — Resolve の呼び出しをラップしていますが、 21.1.2 では正常に動作しないか、破壊的な処理を行うためです。次のセクションを参照してください。

Resolve 21.1.2.10 で実測した動作

以下はすべて、ドキュメントではなく稼働中の Studio ビルドで実測したものです。 tests/ ですべてを再現できます — 4 つのスイートで 132 件のアサーションを実行し、失敗は 0 件でした。

動作するもの

呼び出し結果
Resolve.GetEffectsListFusion 36 件 + OFX 98 件(ビデオ)、Fairlight(オーディオ)
TimelineItem.AddEffect / GetEffects / DeleteEffectsエンドツーエンドで検証済み
Effect.GetInfo / GetIsEnabled / SetIsEnabled / GetIndex検証済み
TimelineItem.CopyAttributes変更後のソース値で検証済み
TimelineItem.ExportFrameオフセット 0..duration-1 は成功し、範囲外は拒否されます
MediaPoolItem.ExportFrame検証済み、ファイルに書き込み済み
MediaPoolItem / Folder.GetParentFolder検証済み
Timeline.GetIsEnabled / SetIsEnabled検証済み

動作しない、または破壊的なもの — 使用しないでください

呼び出し実測された動作
TimelineItem.SetPositionすべての入力に対して False を返します。実際の動画クリップと静止画、整数と浮動小数点数の startFrame、現在のフレームと同じ値を指定する変更なしの呼び出し、moveLinkedItems の両方の値で同じです。Timeline.MoveItems も同様に動作しますが、同じセッションで SetCurrentTimecode は成功します。
Timeline.ExportFrame動作します — frameOffset はタイムラインの開始位置からの相対値で、有効範囲は 0..duration-1 です。480 フレームのタイムラインで検証したところ、0..479 は成功し、480 は拒否されました。絶対フレームは常に拒否されるため、失敗のように見えます。以前のリリースではこれが不具合として記載されていましたが、内容と矛盾するメタデータを持つタイムラインで測定したことが原因でした。
Timeline.DeleteGaps動作します — [86400, 86600, 86800] → [86400, 86520, 86640] を検証済みで、ギャップは詰められます。クリップがあるのにタイムラインが StartFrame == EndFrame と報告する場合は何も行いません。下記の AppendToTimeline の項目を参照してください。
TimelineItem.SetLeftOffset破壊的な動作です。 フレーム 400 にある、長さ 120 のクリップで SetLeftOffset(5) を実行すると、位置が -85995 に移動し、長さが 86515 フレームに増加しました。これはソースメディアからクリップを延長するものであり、編集点を少し移動するものではありません。オフセットを 0 に戻しても元の位置には復元されず(クリップは -86000 に留まりました)、API レベルでの取り消し機能もありません。
MediaPool.AddToPhotoAlbum何も追加せず、空のリストを返します。4 通りの方法でテストしました。CreateEmptyPhotoAlbum の直後、2 秒待機後、GetCurrentPhotoAlbum で確認済みの明示的な SetCurrentPhotoAlbum の後、毎回新しいアルバムを使った場合のいずれでも、毎回写真は 0 枚でした。MediaPool.CreatePhotoAlbumFromPhotos は動作することを検証済みで(写真が追加され、読み戻せます)、こちらを使ってください。
Graph.ResetAllNodeColors写真アルバム項目のグラフにはありますが、タイムラインクリップのグラフにはありません(NoneType is not callable)。SetNodeColor(i, "") で色をクリアすれば、どちらでも動作します。
MediaPoolItem.GetNodeGraph21.1.2.10 では呼び出せません(TimelineItem.GetNodeGraph と PhotoAlbumItem.GetNodeGraph はどちらも動作します)。クリップをタイムラインに配置し、item_id で指定してください。
Project.UpdateRenderPresetGetRenderPresetList が報告する 37 個すべての組み込みプリセット('H.264 Master' を含む)に対して False を返します。API に Project.SaveRenderPreset が存在しないため、スクリプトからユーザープリセットを作成してテストすることもできません。少なくとも GUI が必要です。
Project.SetQuickExportEnabledForRenderPreset同様の動作です。組み込みプリセットに対して False を返します。
MediaPoolItem.SetTranscriptionPNG 静止画と、文字起こしのない実際の動画クリップのどちらに対しても、開始タイムコードが '01:00:00:00' と '00:00:00:00' のどちらの場合でも False を返します。既存の文字起こしを置き換える処理のため、文字起こしがない状態から新規作成できないようです。
MediaPoolItem.SetClipColor(写真項目)色の一覧がドキュメントに記載されているにもかかわらず、写真アルバム項目に対する 'Sky' の指定で False を返しました。ClearClipColor は動作します。この操作は、成功したと仮定せず、拒否されたことを報告します。
Folder.AddSubFolder / Folder.MoveClips存在しません。どちらも MediaPool にあります(mp.AddSubFolder(parent, name)、mp.MoveClips(clips, folder))。MoveClips が実際にクリップを移動し、誤って成功を返すのではなく True を返すことも検証済みです。写真アルバム API と同じオブジェクト分割です。
TimelineItem.SetProperty("PositionX"/"PositionY")何も変更されず、エラーも返されません — セッターとゲッターの両方が False を返します。Pan / Tilt(ピクセル単位、+x は右、+y は上)を使ってください。プロジェクト独自のグリッドスクリプトが壊れた原因はこれでした。ズームは適用されましたが、位置は一度も反映されませんでした。
タイムライン位置 0 にあるクリップに対する TimelineItem.AddMarker(0)True を返しますが、何も書き込みません。tl.GetMarkers() を見ると件数に変化がなく、その名前のマーカーもありません。Timeline.AddMarker(0) は動作します。 したがって、マーカーは項目ではなく、必ずタイムラインを通して配置します。以前のリリースでは Timeline.AddMarker が原因とされていましたが、これも上記と同じ不適切な設定によるものでした。
recordFrame が StartFrame より小さい AppendToTimelineエラーにならずに受け付けられます。 StartFrame が 86400 のタイムラインで 0/200/400 を渡すと、クリップは 0/200/400 に配置されます。これはタイムライン自身の範囲外ですが、タイムラインのメタデータは整合されず、クリップが 3 つあるのに StartFrame == EndFrame(長さ 0)と報告されます。これは SetProperty の実行や、閉じて再度開いた後も変わりません。このようなタイムラインでは DeleteGaps と SetLeftOffset は何もせず、Timeline.ExportFrame はすべてのオフセットを拒否するため、3 つの API が壊れているように見えます。recordFrame >= GetStartFrame() をアサートしてください。
startFrame == endFrame の AppendToTimelineNone を返し、何も配置しません。1 フレームのメディア(GetClipProperty("Frames") == "1")では、自然な endFrame は 0 であるため、「正しい」0..0 の範囲を指定すると、エラーにならずに失敗します。endFrame を省略すると、Resolve がクリップ全体を使うため、正常に動作します。
注意点
  • TimelineItem.GetProperty("Position") は 21.1.2 ではブール値を返し、座標は返しません。位置は Pan / Tilt(ピクセル単位の x/y)にあります。RotationAngle は度数、Opacity は 0~100、クロップ値は 0~1、ZoomX/Y は倍率です。すべて書き込み可能です。読み戻して確認してください。
  • タイムラインで SetIsEnabled(False) を設定すると、GetCurrentTimeline() は None を返します。そのため、GUI で再度有効にするまで、以降の呼び出しはすべて「現在のタイムラインがありません」と報告します。
  • MediaPoolItem.GetParentFolder は、メディアプールを再帰的に走査する場合にのみ役立ちます。ImportMedia はクリップを現在選択されているビンに追加するため、ルートのみを検索すると、クリップが1階層下に存在するにもかかわらず「見つかりません」と報告されます。

テスト

DaVinci Resolve は CI で実行できないため、2つのレイヤーでテストします。

オフライン — Resolve 不要。CI で実行するテスト
python tests/test_offline.py

Resolve がない状態でも server.py をインポートできること(そのため、pip install の後に resolve-ext --help を実行しても失敗しません)、10個すべてのツールが登録されること、CLI が正しい終了コードを返すこと、プラットフォームのパス解決で実行中の OS に適したパスが生成されることを確認します。Windows、macOS、Linux で実行されます。.github/workflows/test.yml を参照してください。

ライブ — 起動中の Resolve Studio が必要
python tests/test_e2e.py        # core tools
python tests/test_phase1.py     # photo albums + node graph
python tests/test_extras.py     # render presets, audio formats, transcription
python tests/test_camera.py     # camera layouts, labels, markers, sorting

# point at your own media if ~/Pictures has fewer than 3 PNGs
RESOLVE_EXT_TEST_MEDIA="D:/stills/*.png" python tests/test_camera.py

Resolve Studio 21.1.2.10 に対する162件のアサーション、失敗0件(オフライン30件+ライブ132件)。

各テストスイートは独自の一時プロジェクトを作成してツールをテストし、最後に削除します。ほかのプロジェクトには一切触れません。意図的に取り入れている習慣が2つあります。

  • アサーションでは、単にエラーが返らなかったかではなく、値が変更され、読み戻せたことを確認します。何も変わっていないのに合格する書き込みテストには、証明するものがありません。まさにこの方法で、DeleteGaps と AddToPhotoAlbum が何もしていないのに成功を報告する問題を検出しました。
  • 既知の不具合がある呼び出しは、正直に失敗することをアサーションで確認します。将来の Resolve ビルドで AddToPhotoAlbum が修正されれば、そのテストは失敗し始めます。それはテストの不具合ではなく、再測定してこの README を更新すべきという合図です。

設計上の注意

  • フォークではなく拡張機能です。 ここでは主流のサーバーの機能を重複して提供していないため、モデルが選択する必要なく、両方を並行して実行できます。
  • 不具合のある API は隠さず報告します。 Resolve 自体の呼び出しが誤った結果を返す場合(DeleteGaps が True を返す場合など)、呼び出し元が信頼できない成功を出力するのではなく、測定結果を添えてツールがその旨を伝えます。
  • 破壊的な API は公開しません。 SetLeftOffset は API 経由で元に戻せないため、機能として公開せず、get は読み取り専用のままにしています。

要件

  • DaVinci Resolve Studio 21.1.2+(それ以前のビルドにはこれらのシンボルがありません)
  • Resolve スクリプティング API を利用できる Windows/macOS/Linux
  • Python 3.10+ および mcp[cli]>=1.30,<2

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。