DaVinci Resolve MCP

by samuelgursky
Verified
#!/usr/bin/env python3 """ DaVinci Resolve Project Operations """ import logging from typing import List, Dict, Any logger = logging.getLogger("davinci-resolve-mcp.project") def list_projects(resolve) -> List[str]: """List all available projects in the current database.""" if resolve is None: return ["Error: Not connected to DaVinci Resolve"] project_manager = resolve.GetProjectManager() if not project_manager: return ["Error: Failed to get Project Manager"] projects = project_manager.GetProjectListInCurrentFolder() # Filter out any empty strings that might be in the list return [p for p in projects if p] def get_current_project_name(resolve) -> str: """Get the name of the currently open project.""" if resolve is None: return "Error: Not connected to DaVinci Resolve" project_manager = resolve.GetProjectManager() if not project_manager: return "Error: Failed to get Project Manager" current_project = project_manager.GetCurrentProject() if not current_project: return "No project currently open" return current_project.GetName() def open_project(resolve, name: str) -> str: """Open a project by name.""" if resolve is None: return "Error: Not connected to DaVinci Resolve" if not name: return "Error: Project name cannot be empty" project_manager = resolve.GetProjectManager() if not project_manager: return "Error: Failed to get Project Manager" # Check if project exists projects = project_manager.GetProjectListInCurrentFolder() if name not in projects: return f"Error: Project '{name}' not found. Available projects: {', '.join(projects)}" result = project_manager.LoadProject(name) if result: return f"Successfully opened project '{name}'" else: return f"Failed to open project '{name}'" def create_project(resolve, name: str) -> str: """Create a new project with the given name.""" if resolve is None: return "Error: Not connected to DaVinci Resolve" if not name: return "Error: Project name cannot be empty" project_manager = resolve.GetProjectManager() if not project_manager: return "Error: Failed to get Project Manager" # Check if project already exists projects = project_manager.GetProjectListInCurrentFolder() if name in projects: return f"Error: Project '{name}' already exists" result = project_manager.CreateProject(name) if result: return f"Successfully created project '{name}'" else: return f"Failed to create project '{name}'" def save_project(resolve) -> str: """Save the current project.""" if resolve is None: return "Error: Not connected to DaVinci Resolve" project_manager = resolve.GetProjectManager() if not project_manager: return "Error: Failed to get Project Manager" current_project = project_manager.GetCurrentProject() if not current_project: return "Error: No project currently open" # DaVinci Resolve auto-saves projects, but we can perform an operation # that forces a save, like creating a temp timeline and then removing it project_name = current_project.GetName() try: # Get media pool to trigger a save indirectly media_pool = current_project.GetMediaPool() if not media_pool: return "Project is likely already saved (auto-save enabled)" # Another approach: DaVinci Resolve auto-saves, so we can just confirm the project exists return f"Project '{project_name}' is saved (auto-save enabled in DaVinci Resolve)" except Exception as e: return f"Error checking project: {str(e)}"