SkyCut
Local-first MCP server that turns raw drone footage into a polished marketing cut through conversational interaction with Claude.
README
SkyCut
Local-first MCP server (stdio, TypeScript) that turns a folder of raw drone footage into a polished marketing cut, driven conversationally from Claude Code or Claude Desktop:
scan → analyze (vision) → footage graph → propose cut → human approve → render
Point it at a USB drive of raw drone video and produce a 60–90 second marketing edit with crossfades and an optional music bed. The source drive is treated as read-only; all derived artifacts (proxies, frames, timelines, renders) live in ~/SkyCut/projects/<slug>/ on the internal disk.
Requirements
- Node 20+
- ffmpeg + ffprobe —
brew install ffmpeg(Apple Silicon videotoolbox hardware encoders used for all renders) ANTHROPIC_API_KEY— for vision analysis and cut proposal
Install
npm install
npm run build
Claude Code
claude mcp add skycut --env ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY -- node /absolute/path/to/skycut/dist/index.js
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"skycut": {
"command": "node",
"args": ["/absolute/path/to/skycut/dist/index.js"],
"env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
}
}
}
Verify with MCP Inspector
npm run inspector
Workflow
A typical session, in plain conversation with Claude:
skycut_list_volumes()— find the USB driveskycut_init_project("/Volumes/DJI/lodge-trip")— create the workspaceskycut_scan_footage()— index clips, build 720p proxies (idempotent; unplug the drive afterwards if you like)skycut_analyze_footage()— Claude vision scores every 4s keyframe into a searchable footage graph (cached; asks before runs over 500 frames)skycut_propose_cut("Cinematic 90-second marketing cut, slow build, reveal the lodge at golden hour", 90)— AI director assembles timeline v1skycut_render_preview()— fast 720p render from proxies; watch itskycut_apply_timeline_edit({ edits: [...] })— revise; every edit is a new immutable versionskycut_render_final(2)— full-quality HEVC render from the originals (drive must be mounted)
Explore in between with skycut_search_moments({ subject: "lodge", min_aesthetic: 7 }) and skycut_project_status().
Tools
| Tool | Purpose |
|---|---|
skycut_health() |
Dependency status (ffmpeg, encoders, API key) |
skycut_list_volumes() |
Mounted volumes with free space |
skycut_init_project(source_path, name?) |
Create/reopen a project; source is read-only |
skycut_scan_footage() |
ffprobe metadata + manifest + SQLite + 720p proxies |
skycut_analyze_footage(force?, confirm?) |
Vision analysis → scored segments (footage graph) |
skycut_search_moments(filters) |
Query segments by subject/movement/quality/score/text |
skycut_propose_cut(brief, duration_s, style?, music_path?) |
AI director → validated timeline version |
skycut_get_timeline(version?) |
Timeline JSON + shot list |
skycut_apply_timeline_edit(edits | timeline) |
Structured diff → new immutable version |
skycut_render_preview(version?) |
720p from proxies |
skycut_render_final(version) |
Up-to-4K HEVC from originals; explicit version required |
skycut_project_status() |
Pipeline state + drive mount check |
Guardrails
- The USB source is never written to; unplugging it mid-session degrades gracefully (proxies keep previews working)
- Timeline versions are immutable — edits always create
v<N+1> - Nothing is ever auto-finalized:
skycut_render_finalrequires an explicit version - Every ffmpeg command is logged to the project's
logs/ffmpeg.log - Vision runs needing more than 500 frames report an estimated cost and wait for confirmation
Development
npm run build # tsc
npm test # vitest — vision/director mocked; ffmpeg integration uses generated testsrc clips
npm run inspector # poke the server interactively
Documentation
- docs/README.md — architecture, design decisions, workspace layout, troubleshooting, extending
- docs/TOOLS.md — complete tool API reference, timeline schema, edit operations, error conventions
- CHANGELOG.md — version history
prompt_plan.md(original spec) andprogress.md(per-phase build history)
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.