MCP integration
Connect Claude Code, Codex, Cursor or any MCP host and let it edit your timeline with real tools.
The Model Context Protocol (MCP) is an open standard that lets AI assistants call tools in other apps. Swamp Dragon includes an MCP server, so the assistant you already use β Claude Code, Codex, Cursor or any other MCP host β can read your timeline and edit it with real editing tools: cut clips, add zooms, animate titles, place motion graphics, apply skills and more.
Optional, and bring-your-own AI
Swamp Dragon includes no AI model and never needs an API key. MCP is off by default. Usage is billed by the assistant you connect, never by Swamp Dragon.
#How it works
Your assistant starts Swamp Dragon's MCP server
A small program bundled with the app. It contains no editing logic and no AI β it forwards each tool call to the running app.
The app checks access and applies the edit
Only projects you've shared are visible. Edits go through the same edit operations as the editor, so they follow the same rules and limits.
You see it live
If the project is open in the editor, the edit appears immediately, a note in the inspector says which assistant did what, and βZ undoes it. If it isn't open, the project file is updated directly.
Everything stays on your computer. The server reaches the app through a local connection on your computer using a private token that's regenerated every time the integration starts.
#Requirements
| Plan | MCP access |
|---|---|
| Free | Not included |
| Starter and Pro | Basic integration β read timelines and edit cuts, clips, zooms, text, graphics, keyframes, effects, transitions, frame, look and webcam. |
| Unlimited | Full integration β everything in Basic plus skills, privacy blur, audio mix and undo. |
You also need an MCP-capable assistant installed on the same computer, and Swamp Dragon must be open while the assistant works.
#Set up from the editor
Install your assistantβs connector once
Get the Claude Desktop / Claude Code bundle, Gemini Desktop / CLI package or ChatGPT Desktop / Codex plugin from the connector downloads. Other local MCP hosts can use the configuration in the editor.
Open a project and click Connect AI
Choose your assistant and click Connect this project. The app enables MCP and creates a private alphanumeric code for this project.
Copy the connection message into your assistant
The assistant calls
connect_projectwith your code. It can list, read and edit only that project, even if other projects are shared in Integrations. The editor shows when the assistant uses the connection.Disconnect or regenerate in place
Use the same editor dialog to revoke the code or create a replacement. Codes expire after 12 hours or an app restart. Install the connector only once; pair again when switching projects.
In ChatGPT Desktop, you can either upload swamp-dragon-chatgpt.zip under Customize β Plugins β Add β New Plugin (and add the local MCP command under Add custom MCP server), or extract the ZIP and run Install-ChatGPT.command (Install-ChatGPT.cmd on Windows) to install both the local plugin and the MCP server automatically. In Gemini Desktop, open Connectors β + Custom β Set up a custom connected app β Local MCP, enter Swamp Dragon as the server name, and paste node "/Users/you/.local/share/swamp-dragon/launcher.cjs" as the command (running Install-Gemini.command installs the launcher and copies this command to your clipboard).
#Manual host configuration
Copy your machineβs exact command, arguments and environment from the editorβs Local MCP configuration. Integrations also retains the general host setup snippets. A project code is always required before tools can read or edit.
Paste the copied command into your terminal. It has this shape:
claude mcp add swamp-dragon \
-e ELECTRON_RUN_AS_NODE=1 \
-e SWAMP_DRAGON_ENDPOINT="/Users/you/Library/Application Support/Swamp Dragon/mcp-endpoint.json" \
-- "/Applications/Swamp Dragon.app/Contents/MacOS/Swamp Dragon" "/Applications/Swamp Dragon.app/Contents/Resources/app.asar/out/main/mcp.js"
Check it's connected with claude mcp list, or type /mcp inside Claude Code.
Add the copied JSON to ~/.cursor/mcp.json (create it if it doesn't exist), then reload Cursor. It looks like:
{
"mcpServers": {
"swamp-dragon": {
"command": "/Applications/Swamp Dragon.app/Contents/MacOS/Swamp Dragon",
"args": ["/Applications/Swamp Dragon.app/Contents/Resources/app.asar/out/main/mcp.js"],
"env": {
"ELECTRON_RUN_AS_NODE": "1",
"SWAMP_DRAGON_ENDPOINT": "/Users/you/Library/Application Support/Swamp Dragon/mcp-endpoint.json"
}
}
}
}
The same JSON works for other hosts that use the mcpServers format, such as Claude Desktop (claude_desktop_config.json) and Windsurf.
Add the copied block to ~/.codex/config.toml:
[mcp_servers.swamp-dragon]
command = "/Applications/Swamp Dragon.app/Contents/MacOS/Swamp Dragon"
args = ["/Applications/Swamp Dragon.app/Contents/Resources/app.asar/out/main/mcp.js"]
env = { ELECTRON_RUN_AS_NODE = "1", SWAMP_DRAGON_ENDPOINT = "/Users/you/Library/Application Support/Swamp Dragon/mcp-endpoint.json" }
Any host that supports stdio MCP servers works. Configure:
- Command: the Swamp Dragon app executable (it doubles as a Node runtime).
- Arguments: the path to
mcp.jsinside the app. - Environment:
ELECTRON_RUN_AS_NODE=1andSWAMP_DRAGON_ENDPOINTpointing atmcp-endpoint.jsonin the app's data folder.
All three values are shown in Integrations β Cursor / JSON.
The examples show macOS paths. On Windows the snippet uses your install folder (for example C:\Users\you\AppData\Local\Programs\Swamp Dragon\Swamp Dragon.exe) and %APPDATA%\Swamp Dragon\mcp-endpoint.json.
#Your first edit
Open a project in the editor (so you can watch), then ask your assistant something like:
Use the connection code I copied from Swamp Dragon to call connect_project.
Read the paired projectβs timeline, then:
1. remove the first 4 seconds,
2. add a "Step 1 β Create your workspace" title that comes in word by word,
3. zoom 1.8Γ on the Invite button around 0:42 with an overshoot ease,
4. put a spotlight and an arrow on it while the zoom holds,
5. move the webcam to a bottom-right circle with a white border.
After pairing with connect_project, the assistant calls list_projects and get_timeline to understand the video, then trim_clip, add_text, add_zoom, add_graphic and set_webcam_layout. Each change shows up on the timeline, and the Activity list in Integrations logs every call.
#Prompts that work well
- "Add chapter markers where I change topics and turn them into chapter cards."
- "Make the intro kinetic: big centered title, bounce in, float loop, then a zoom-in transition into the demo."
- "Blur the email address visible from 1:10 to 1:25." Unlimited
- "Speed up the part where the page loads to 3Γ and add a freeze frame on the final result."
- "Give the whole video a crisp look, a gradient frame with 6% padding and no shadow."
- "Trim silences longer than one second, then add zooms to every click." Unlimited
#Privacy and safety
- You choose what's visible. Each code grants access to one project only. Project ids for other projects are refused, even if they are shared.
- Edits, not files. Tools change the edit (the timeline), never your original recordings, and never read or write arbitrary files.
- Local only. The bridge accepts connections only from your computer, using a random port and a private token stored in
mcp-endpoint.json, which is deleted when you turn MCP off. Other computers can't reach it. - What the assistant sees. Timeline data (times, text, settings) is returned to your assistant, which may send it to its provider under that provider's terms. Video and audio frames are never sent.
- Undo. With the project open, every assistant edit is one undo step labelled with the tool that made it.
- Turn it off any time. Switch off MCP integration; the bridge stops immediately.
#Tool reference
Times are in timeline seconds (after cuts). Positions are fractions of the frame from 0 to 1, with 0,0 at the top left. Tools that add something return its new id as created_id; every editing tool returns the updated timeline.
#Reading
| Tool | Parameters | Returns |
|---|---|---|
list_projects | β | Shared projects with id, name, duration, last update and whether it's open in the editor. |
get_timeline | project_id | Duration, clips (cuts, speed, reverse, freeze, transitions), layers, texts, graphics, images, effects, zooms, blurs, markers, frame style, look, webcam, audio, export settings and applied skills. |
list_skills | β | Built-in and custom skills with ids and default parameters. |
#Cuts and clips
| Tool | Parameters | Notes |
|---|---|---|
trim_clip | start, end | Removes the range from every track; later items shift left. |
split_clip | at | Creates a cut. |
set_clip | at, speed (0.25β4), reverse | Changes the clip containing at; later items ripple. |
freeze_frame | at, duration (0.1β60, default 2) | Inserts a still frame. |
set_transition | at or all_cuts, transition, duration (0.1β3) | Transitions: none, fade-black, fade-white, flash, blur, zoom-in, zoom-out, slide-left, slide-right, slide-up, slide-down, circle, spin, glitch. at is a time inside the clip the transition leads into. |
add_marker | at, label | Markers become chapter cards with the Chapter card skill. |
#Zoom and webcam
| Tool | Parameters | Notes |
|---|---|---|
add_zoom | start, end or duration (default 2.5), scale (1β4, default 1.8), x, y, ease | Ease: linear, ease-in, ease-out, ease-in-out. |
remove_zoom | zoom_id | |
set_webcam_layout | shape, corner, size (10β40), visible, border (0β16), border_color, mirror, background (none, blur, image), background_blur (4β40) | Image backgrounds use a picture the user already chose. |
#Text and motion graphics
| Tool | Parameters | Notes |
|---|---|---|
add_text | start, end, text, style, color, background, size (0.4β3), font, align, layer_id, animation fields | Styles: title, chapter, lower-third, caption, callout, shortcut, outro. |
set_text_style | text_id + any of the styling and animation fields | Restyle or re-animate existing text. |
remove_text | text_id | |
add_graphic | start, end, shape, x, y, w, h, fill, stroke, stroke_width, radius, layer_id, animation fields | Shapes: rect, ellipse, arrow, line, highlight, spotlight, progress, ripple, underline, bracket. Arrows and lines run from (x, y) to (x+w, y+h). |
set_keyframes | kind (text, image, graphic, camera), item_id, keyframes[] | Each keyframe: t, dx, dy, scale, rotate, opacity, ease (adds back-out, bounce, elastic). Replaces existing keyframes; an empty list clears them. |
update_item | kind, item_id, patch | Change any field returned by get_timeline, e.g. {"start": 2, "end": 5}. |
remove_item | kind, item_id | Kinds: text, image, graphic, zoom, blur, effect, marker. |
Animation fields (text and graphics): animation_in (none, fade, slide-up, slide-down, slide-left, slide-right, pop, bounce, zoom, spin, blur, typewriter, words, wipe, draw), animation_out (none, fade, slide-*, pop, zoom, spin, blur, wipe, draw), animation_duration (0.05β3 s), loop (none, pulse, breathe, float, wiggle, spin, blink, shake), loop_speed (0.1β5 per second).
#Look and effects
| Tool | Parameters | Notes |
|---|---|---|
add_effect | start, end, effect, amount (0β1), fade (0β5), look | Effects: shake, zoom-punch, flash, glitch, rgb-split, blur, mono, invert, pixelate, vignette, film, adjust. |
set_frame_style | padding, background_color, background_type, gradient_from, gradient_to, gradient_angle, background_blur, corner_radius, shadow (0 = off), shadow_blur, shadow_offset, border_width, border_color | |
set_look | preset and/or brightness, contrast, saturation, hue, temperature, sharpen, vignette, grain, grayscale, sepia, blur | Presets: none, vivid, crisp, warm, cool, mono, noir, vintage, faded, dramatic. |
#Full integration only Unlimited
| Tool | Parameters | Notes |
|---|---|---|
apply_skill | skill_id, params | Runs a skill (see Skills); re-running replaces its earlier result. |
remove_skill | skill_id | Switches a skill off and reverses what it did. |
add_blur | start, end, x, y, w, h | Privacy blur over a rectangle. |
set_audio | mic_gain, system_gain (0β2), mic_muted, system_muted | |
undo | project_id | Requires the project to be open in the editor. |
#Activity log
Integrations β Activity lists the latest tool calls: which assistant called which tool, with what arguments, whether it worked, and the error if not. In the editor, the inspector shows the last assistant action with a reminder of how to undo it.
#Troubleshooting
"Swamp Dragon is not running, or MCP integration is turned off"
Open Swamp Dragon and switch on Integrations β MCP integration. The assistant can only reach the app while it's open.
The assistant says there are no projects, or that a project isn't shared
Open Integrations β What it can see and choose All projects, or switch on the project. In the editor you can click MCP Β· Allow this project.
"β¦ is part of full MCP integration (Unlimited plan)"
That tool (skills, blur, audio or undo) needs Unlimited. Everything else works on Starter and Pro.
"MCP integration needs the Starter plan or higher"
MCP isn't included in Free. See Pricing.
The tools don't appear in my assistant
- Re-copy the snippet from Integrations β paths change if you move or reinstall the app.
- Restart the assistant after editing its config.
- In Claude Code, run
claude mcp list; in Cursor, check Settings β MCP for errors.
"Could not reach Swamp Dragon. Make sure the app is open."
The app was closed or restarted after the assistant started. Keep Swamp Dragon open and retry; if needed, turn MCP off and on again.
"Undo is available while the project is open in the editor"
Open the project in Swamp Dragon's editor, then ask again.