reelsaw
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_OAUTH | No | Set to true to enable OAuth 2.1 authentication for MCP connectors (claude.ai, Claude Desktop) instead of API keys. | |
| REELSAW_URL | No | The URL of the running Reelsaw instance (default: the app in the same container). | the app in the same container |
| REELSAW_API_KEY | Yes | Your Reelsaw API key, created in Settings → API keys and MCP. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projectsA | Your projects, most recently updated first. Returns { projects: [{ id, title, status, stage, clips: "n/m rendered", url }], total, nextCursor }; pass nextCursor as cursor for the next page. Use get_project for one project's clips, search_clips to find by words. |
| get_projectA | One of your projects: status, settings, effective intro/outro, transcript summary, and every clip (id, title, hook, bounds, score, status, download links); replacedClips lists deleted or replaced clips for restore_clip. Returns the project object. For one clip's full detail use get_clip, for the words get_transcript, for the pipeline history get_project_events. |
| create_projectA | Start clipping a video from a URL (YouTube, Vimeo, a direct link; anything yt-dlp fetches). Returns { id, title, status: "queued", next } at once; the pipeline (download, transcribe, pick, render) runs in the background for minutes, so follow with wait_for_project(id). Intro/outro default to your library defaults unless introAssetId/outroAssetId say otherwise. |
| update_projectA | Rename a project and/or change its saved settings (focus, instructions, clip length, maxClips, caption style, framing, pauses); only the fields you pass change. Does not re-pick clips or re-render: reanalyze_project picks again with the new selection settings, rerender_clips applies style changes. Returns { changed, needsReanalyze, needsRerender, hint }. |
| wait_for_projectA | Block until the project is done or failed, or timeoutSeconds pass. Returns { id, status, stage, stageProgress, error, clips: [{ id, title, status }] }; on timeout the same with hint "Still running": call it again. Use get_project instead for a non-blocking look with full clip details. |
| get_transcriptA | The project's transcript as timed lines "[m:ss] text", optionally only a time range. Returns text; output longer than maxChars is cut with a note saying which fromSec to continue from. Use it to pick your own moments for create_clip. |
| search_clipsA | Find your clips and projects by words in their title, hook or caption (every word must match; case-insensitive, typo-tolerant; best first). Returns { projects (max 8), clips (max limit) with ids, bounds and links, truncated? }. Use list_projects to browse instead. |
| get_project_eventsA | The project's pipeline history, newest first: stage starts and completions, clip renders, retries, failures with reasons. Returns [{ at, type, ...details }]. Use it to find out why something failed or is slow; get_project shows the current state. |
| get_clipA | Everything about one clip: text, bounds, scores, framing, style, emphasis, own and effective intro/outro, render diagnostics, video/thumbnail/editor links. Returns the clip object. get_project lists all clips in brief; poll this after an edit to see the render finish (status done). |
| update_clipA | Edit one clip: only the fields you pass change; style and layoutSections replace the clip's whole value (null = back to the project's). Text-only edits (title, caption, hashtags) apply at once; bounds, hook, framing, style and emphasis are burned into the video and re-render in the background (~1 min) unless rerender is false. Returns the clip summary with its new status; poll get_clip until done. |
| create_clipA | Add a clip from a time range of the source (needs a transcript). mode exact keeps your bounds (3 s-10 min); mode ai lets the model pick the best moment inside them (≥8 s). Returns the new clip { id, status: "preparing" }; it gets a title and renders in the background (about a minute), so poll get_clip until done. To change an existing clip use update_clip instead. |
| delete_clipA | Delete one clip of your project; a render in progress stops. Reversible: restore_clip brings it back for DELETED_RETENTION_DAYS (7 days by default). Returns { changed, restorable }. |
| rerender_clipA | Queue one clip for rendering again (after rerender: false edits, a failure, or an intro/outro change). Async: the new video replaces the old when done (usually under a minute); poll get_clip. Returns { step: render | prepare } (prepare = it never got its AI title, which runs first). For several clips of a project use rerender_clips. |
| rerender_clipsA | Queue several clips of one project for rendering again in one step (after edits or failures). Finished and failed clips are queued, clips still rendering are skipped; each new video replaces the old when done. Returns { requested, rerendered, skipped }; poll get_project or wait_for_project. For a single clip rerender_clip is enough. |
| export_projectA | A download link for a zip of the project's rendered clips with YouTube/TikTok metadata. Returns { url, clips, notRendered }; the link needs the same Authorization header as this server. |
| retry_projectA | Resume a failed or stuck project from its furthest completed stage: re-render unfinished clips if there are clips, else pick clips, refine or transcribe again. Finished clips, the transcript and the source are kept. Returns { queue } (the stage restarted); then wait_for_project. To pick different clips use reanalyze_project instead. |
| reanalyze_projectA | Pick clips again from the existing transcript (needs one), optionally with new settings. Clips you created or edited are kept; untouched AI picks are replaced and restorable with restore_clip for a while. Returns { kept, replaced } at once; the picking runs in the background, so follow with wait_for_project. To only save settings use update_project; to resume a failure use retry_project. |
| list_bumpersA | Your intro/outro library. Returns { assets: [{ id, name, kind, durationSec, isDefaultIntro, isDefaultOutro, usedBy, thumbnailUrl }], removed: [...] } (removed items stay restorable for 30 days). Use the ids with set_project_bumpers, set_clip_bumpers or set_default_bumper. |
| add_bumperA | Add a video (MP4/MOV/WebM, ≤10 s, ≤50 MB) or image (PNG/JPG, ≤20 MB) to your library from a public url or an uploadId. Returns { id, name, kind, durationSec, duplicate, restored } (the same file twice returns the existing item). setDefault makes it your default for NEW projects only; existing ones change with set_project_bumpers. |
| rename_bumperA | Rename one of your library items (removed ones too). Only the label changes; nothing re-renders. Returns { id, name, previousName }. |
| set_default_bumperA | Make a library item your default intro or outro for projects you create from now on (assetId null clears it). Existing projects keep theirs; to change one use set_project_bumpers. Returns { ok }. |
| remove_bumperA | Remove an item from your library and from your defaults. Projects and clips already using it keep rendering with it. Undo with restore_bumper within 30 days; check bumper_usage first. Returns { ok }. |
| restore_bumperA | Bring one of your removed library items back (list_bumpers shows them under removed); restoring an item that is not removed changes nothing. It does not become a default again. Returns { ok }. |
| bumper_usageA | The projects and clips that use a library item. Returns { projects: [{ id, title, slots, clips: [{ id, index, title, slots, via }] }] }, via saying whether through the project or the clip's own choice. Check before removing one. |
| set_project_bumpersA | Set one project's intro and/or outro: "default" (your current default), "none", or a library asset id; a slot left out is untouched, and introSec/outroSec are saved with the project. Clips with their own choice (set_clip_bumpers) keep it. Applies on each clip's next render; rerender: true re-renders finished clips now. Returns { rerendered }. set_default_bumper changes future projects instead. |
| set_clip_bumpersA | Override the intro and/or outro of up to 200 clips of one project: "inherit" (follow the project), "none", or a library asset id; a slot left out is untouched. rerender: true re-renders only these clips. Returns { updated, rerendered }. |
| delete_projectA | Delete one of your projects and all its clips; work in progress stops. Reversible: restore_project brings it back for DELETED_RETENTION_DAYS (7 days by default), then it and its files are removed for good. Returns { changed, restorable, message }. |
| restore_projectA | Bring back a deleted project with its clips and files (find it with list_projects deleted: true); restoring a project that is not deleted changes nothing. A project that was processing comes back failed: retry_project resumes it. Returns { changed, status }. |
| restore_clipA | Bring back a deleted clip or one a re-analyze replaced (get_project lists them as replacedClips); it goes to the end of the project's clips. Returns { changed, status, needsRerender }; needsRerender means it never finished, so call rerender_clip. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Most tools target distinct resources and actions, and descriptions actively disambiguate near-neighbors (rerender_clip vs rerender_clips, get_project vs wait_for_project, retry_project vs reanalyze_project). A few pairs are close — set_project_bumpers vs set_default_bumper, restore_bumper vs add_bumper restoration behavior — but the descriptions explicitly cross-reference the alternatives, preventing most misselection.
Consistent verb_noun pattern throughout: create/list/get/update/delete/restore/rerender/_project/_clip/_bumpers. Plural forms (rerender_clips, set_project_bumpers) correctly denote batch operations. No camelCase mixing or vague standalone verbs.
29 tools is at the heavy end for a clipping service, spanning projects, clips, library assets, and pipeline control. The bumpers library alone accounts for eight tools (usage, list, add, rename, remove, restore, set_default, set_project, set_clip), which inflates the surface for what is essentially intro/outro management. Borderline for the stated scope.
Full lifecycle coverage: projects and clips both have create/read/update/delete/restore, plus re-render, reanalyze, retry, wait, transcript access, search, export, and a complete bumpers sub-lifecycle. No obvious dead ends; restore paths and deleted-item discovery are explicitly provided.