chore: adiciona .gitignore e commit.command
This commit is contained in:
Executable
+613
@@ -0,0 +1,613 @@
|
||||
# FCP MCP Server - Tool Schemas
|
||||
|
||||
Complete MCP tool definitions for all editing capabilities.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Core Editing
|
||||
|
||||
### `add_marker`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "add_marker",
|
||||
"description": "Add a marker to the timeline at a specific timecode. Supports chapter markers (for YouTube), to-do markers, and standard markers with custom colors.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"timecode": {
|
||||
"type": "string",
|
||||
"description": "Timecode in format HH:MM:SS:FF or seconds (e.g., '00:01:30:00' or '90.5')"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Marker name/label"
|
||||
},
|
||||
"marker_type": {
|
||||
"type": "string",
|
||||
"enum": ["standard", "chapter", "todo", "completed"],
|
||||
"default": "standard",
|
||||
"description": "Type of marker to create"
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"enum": ["blue", "cyan", "green", "yellow", "orange", "red", "pink", "purple"],
|
||||
"default": "blue",
|
||||
"description": "Marker color"
|
||||
},
|
||||
"note": {
|
||||
"type": "string",
|
||||
"description": "Optional note/description for the marker"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "timecode", "name"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `trim_clip`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "trim_clip",
|
||||
"description": "Adjust the in-point and/or out-point of a clip in the timeline. Can trim by timecode or by duration delta.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_id": {
|
||||
"type": "string",
|
||||
"description": "Unique identifier of the clip (from list_clips)"
|
||||
},
|
||||
"trim_start": {
|
||||
"type": "string",
|
||||
"description": "New in-point timecode, or delta like '+00:00:01:00' or '-15f' (frames)"
|
||||
},
|
||||
"trim_end": {
|
||||
"type": "string",
|
||||
"description": "New out-point timecode, or delta like '+00:00:02:00' or '-30f'"
|
||||
},
|
||||
"ripple": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "If true, subsequent clips shift to fill/accommodate the change"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_id"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `reorder_clips`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "reorder_clips",
|
||||
"description": "Move one or more clips to a new position in the timeline. Supports moving single clips or batch reordering.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_ids": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of clip IDs to move (maintains relative order)"
|
||||
},
|
||||
"target_position": {
|
||||
"type": "string",
|
||||
"description": "Where to insert: 'start', 'end', timecode, or 'after:clip_id' / 'before:clip_id'"
|
||||
},
|
||||
"ripple": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "If true, other clips shift to accommodate"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_ids", "target_position"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `add_transition`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "add_transition",
|
||||
"description": "Apply a transition between two clips or at clip boundaries.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_id": {
|
||||
"type": "string",
|
||||
"description": "Clip ID to add transition to"
|
||||
},
|
||||
"position": {
|
||||
"type": "string",
|
||||
"enum": ["start", "end", "both"],
|
||||
"default": "end",
|
||||
"description": "Where to apply the transition"
|
||||
},
|
||||
"transition_type": {
|
||||
"type": "string",
|
||||
"enum": ["cross-dissolve", "fade-to-black", "fade-from-black", "dip-to-color", "wipe", "slide"],
|
||||
"default": "cross-dissolve",
|
||||
"description": "Type of transition"
|
||||
},
|
||||
"duration": {
|
||||
"type": "string",
|
||||
"default": "00:00:00:15",
|
||||
"description": "Transition duration in timecode or frames (e.g., '15f')"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_id"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Speed & Precision
|
||||
|
||||
### `change_speed`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "change_speed",
|
||||
"description": "Modify the playback speed of a clip. Supports constant speed changes and speed ramps.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_id": {
|
||||
"type": "string",
|
||||
"description": "Unique identifier of the clip"
|
||||
},
|
||||
"speed": {
|
||||
"type": "number",
|
||||
"description": "Speed multiplier (0.5 = 50% slow-mo, 2.0 = 2x fast)"
|
||||
},
|
||||
"ramp": {
|
||||
"type": "object",
|
||||
"description": "Optional speed ramp configuration",
|
||||
"properties": {
|
||||
"start_speed": {"type": "number"},
|
||||
"end_speed": {"type": "number"},
|
||||
"curve": {
|
||||
"type": "string",
|
||||
"enum": ["linear", "ease-in", "ease-out", "ease-in-out"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"preserve_pitch": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "Maintain audio pitch when changing speed"
|
||||
},
|
||||
"frame_blending": {
|
||||
"type": "string",
|
||||
"enum": ["none", "frame-blending", "optical-flow"],
|
||||
"default": "optical-flow",
|
||||
"description": "Frame interpolation method for slow-motion"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_id", "speed"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `split_clip`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "split_clip",
|
||||
"description": "Split a clip at one or more timecodes, creating separate clips.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_id": {
|
||||
"type": "string",
|
||||
"description": "Unique identifier of the clip to split"
|
||||
},
|
||||
"split_points": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of timecodes within the clip to split at"
|
||||
},
|
||||
"split_type": {
|
||||
"type": "string",
|
||||
"enum": ["blade", "blade-all"],
|
||||
"default": "blade",
|
||||
"description": "'blade' splits only this clip, 'blade-all' splits all tracks at this point"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_id", "split_points"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `delete_clip`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "delete_clip",
|
||||
"description": "Remove a clip from the timeline. Supports ripple delete or leaving a gap.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_ids": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of clip IDs to delete"
|
||||
},
|
||||
"ripple": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "If true, subsequent clips shift to fill the gap"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_ids"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Batch & AI-Powered
|
||||
|
||||
### `select_by_keyword`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "select_by_keyword",
|
||||
"description": "Find and return clips matching specific keywords, ratings, or metadata criteria.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"keywords": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "Keywords to match (OR logic by default)"
|
||||
},
|
||||
"match_mode": {
|
||||
"type": "string",
|
||||
"enum": ["any", "all", "none"],
|
||||
"default": "any",
|
||||
"description": "'any' = OR, 'all' = AND, 'none' = exclude these keywords"
|
||||
},
|
||||
"rating": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"min": {"type": "integer", "minimum": 1, "maximum": 5},
|
||||
"max": {"type": "integer", "minimum": 1, "maximum": 5}
|
||||
},
|
||||
"description": "Filter by star rating range"
|
||||
},
|
||||
"favorites_only": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "Only return favorited clips"
|
||||
},
|
||||
"exclude_rejected": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "Exclude clips marked as rejected"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "keywords"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `batch_trim`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "batch_trim",
|
||||
"description": "Apply trim operations to multiple clips at once based on criteria.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_ids": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "List of clip IDs to trim (or use selection_criteria)"
|
||||
},
|
||||
"selection_criteria": {
|
||||
"type": "object",
|
||||
"description": "Alternative to clip_ids: select clips dynamically",
|
||||
"properties": {
|
||||
"keywords": {"type": "array", "items": {"type": "string"}},
|
||||
"min_duration": {"type": "string"},
|
||||
"max_duration": {"type": "string"}
|
||||
}
|
||||
},
|
||||
"trim_operation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"trim_start_by": {"type": "string", "description": "Amount to trim from start"},
|
||||
"trim_end_by": {"type": "string", "description": "Amount to trim from end"},
|
||||
"set_duration": {"type": "string", "description": "Set all clips to this exact duration"}
|
||||
}
|
||||
},
|
||||
"ripple": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "trim_operation"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `auto_rough_cut`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "auto_rough_cut",
|
||||
"description": "AI-powered rough cut generation. Analyzes source clips by keywords and assembles a timeline based on target duration and pacing preferences.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"source_path": {
|
||||
"type": "string",
|
||||
"description": "Path to FCPXML with source clips (library or event export)"
|
||||
},
|
||||
"output_path": {
|
||||
"type": "string",
|
||||
"description": "Path to write the generated rough cut FCPXML"
|
||||
},
|
||||
"target_duration": {
|
||||
"type": "string",
|
||||
"description": "Desired final duration (e.g., '00:03:30:00' for 3.5 minutes)"
|
||||
},
|
||||
"structure": {
|
||||
"type": "array",
|
||||
"description": "Ordered list of segments with keywords and duration targets",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string", "description": "Segment name (e.g., 'Intro', 'Verse 1')"},
|
||||
"keywords": {"type": "array", "items": {"type": "string"}},
|
||||
"duration": {"type": "string", "description": "Target duration for this segment"},
|
||||
"priority": {"type": "string", "enum": ["favorites", "longest", "shortest", "random"]}
|
||||
}
|
||||
}
|
||||
},
|
||||
"pacing": {
|
||||
"type": "string",
|
||||
"enum": ["slow", "medium", "fast", "dynamic"],
|
||||
"default": "medium",
|
||||
"description": "Overall pacing feel - affects average cut length"
|
||||
},
|
||||
"pacing_config": {
|
||||
"type": "object",
|
||||
"description": "Advanced pacing controls",
|
||||
"properties": {
|
||||
"min_clip_duration": {"type": "string", "default": "00:00:01:00"},
|
||||
"max_clip_duration": {"type": "string", "default": "00:00:08:00"},
|
||||
"avg_clip_duration": {"type": "string"},
|
||||
"vary_pacing": {"type": "boolean", "default": true, "description": "Vary cut lengths for organic feel"}
|
||||
}
|
||||
},
|
||||
"transitions": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"between_segments": {"type": "string", "enum": ["none", "cross-dissolve", "fade-to-black"], "default": "cross-dissolve"},
|
||||
"within_segments": {"type": "string", "enum": ["none", "cut", "cross-dissolve"], "default": "cut"}
|
||||
}
|
||||
},
|
||||
"include_audio": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "Include audio from clips"
|
||||
},
|
||||
"music_track": {
|
||||
"type": "string",
|
||||
"description": "Optional path to music file to lay under the rough cut"
|
||||
}
|
||||
},
|
||||
"required": ["source_path", "output_path", "target_duration"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Utility Tools
|
||||
|
||||
### `batch_add_markers`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "batch_add_markers",
|
||||
"description": "Add multiple markers at once from a list or based on detection criteria.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"markers": {
|
||||
"type": "array",
|
||||
"description": "List of markers to add",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"timecode": {"type": "string"},
|
||||
"name": {"type": "string"},
|
||||
"marker_type": {"type": "string"},
|
||||
"color": {"type": "string"}
|
||||
},
|
||||
"required": ["timecode", "name"]
|
||||
}
|
||||
},
|
||||
"auto_detect": {
|
||||
"type": "object",
|
||||
"description": "Auto-generate markers based on detection",
|
||||
"properties": {
|
||||
"at_cuts": {"type": "boolean", "description": "Add marker at every cut point"},
|
||||
"at_keywords": {"type": "array", "items": {"type": "string"}, "description": "Add marker where keyword appears"},
|
||||
"at_intervals": {"type": "string", "description": "Add markers at regular intervals (e.g., '00:00:30:00')"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["project_path"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `apply_effect`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "apply_effect",
|
||||
"description": "Apply a video or audio effect to one or more clips.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"clip_ids": {
|
||||
"type": "array",
|
||||
"items": {"type": "string"},
|
||||
"description": "Clips to apply effect to"
|
||||
},
|
||||
"effect_type": {
|
||||
"type": "string",
|
||||
"enum": ["color-correction", "lut", "blur", "sharpen", "stabilize", "denoise", "transform"],
|
||||
"description": "Type of effect to apply"
|
||||
},
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"description": "Effect-specific parameters (varies by effect_type)"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "clip_ids", "effect_type"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `generate_proxies_list`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "generate_proxies_list",
|
||||
"description": "Analyze project and generate a list of source files that need proxy generation.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"threshold_resolution": {
|
||||
"type": "string",
|
||||
"default": "1920x1080",
|
||||
"description": "Flag sources above this resolution"
|
||||
},
|
||||
"output_format": {
|
||||
"type": "string",
|
||||
"enum": ["json", "csv", "shell-script"],
|
||||
"default": "json",
|
||||
"description": "Output format for the list"
|
||||
}
|
||||
},
|
||||
"required": ["project_path"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `export_for_color`
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "export_for_color",
|
||||
"description": "Export timeline in formats optimized for color grading roundtrip (DaVinci Resolve, Baselight).",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"project_path": {
|
||||
"type": "string",
|
||||
"description": "Path to the FCPXML file"
|
||||
},
|
||||
"output_path": {
|
||||
"type": "string",
|
||||
"description": "Path for the exported file"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"enum": ["fcpxml", "edl", "aaf", "xml-resolve"],
|
||||
"default": "fcpxml",
|
||||
"description": "Export format"
|
||||
},
|
||||
"include_grades": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "Include existing color adjustments"
|
||||
},
|
||||
"handle_frames": {
|
||||
"type": "integer",
|
||||
"default": 24,
|
||||
"description": "Frames of handles to include for each clip"
|
||||
}
|
||||
},
|
||||
"required": ["project_path", "output_path"]
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user