Skill instructions
create-video3.71 KB
View saved version →
---
name: create-video
description: Create a new Descript video project from media files or URLs and optionally edit it with Underlord, Descript's AI co-editor.
---
# Create Video
## When to use
- When starting a new video or audio project from scratch
- When importing media files into Descript for the first time
- When combining multiple media sources into a single project
## Instructions
1. Ask the user what media they want to import: remote URLs, files on their device, or an empty project to start.
2. Call `import_media` with `project_name` set to a descriptive name, and `add_compositions` so the imported media lands on the timeline. Choose the source for each entry in `add_media`:
- **URL import** — set `url`. Pass Google Drive and Dropbox share links as-is; do not rewrite them.
- **Direct file upload** — set `content_type` (MIME type) and `file_size` (bytes) instead of `url`. See "Uploading local files" below.
- **Empty project** — pass `add_media: {}` with just `project_name`.
3. `import_media` returns immediately with a `job_id`, `project_id`, and `project_url`. Show the `project_url` to the user. If you requested a direct upload, finish the upload (below) before waiting.
4. Wait for the import: poll `wait_for_job` with the `job_id` and `wait_seconds: 20` until the job is terminal, surfacing `progress.label`/`percent` after each poll. A timeout (`-32001`) or a `still_running` wait status means it is still going — poll the same `job_id` again, never re-import.
5. If the user wants edits (trimming, captions, filler-word removal, and so on), call `prompt_project_agent` with the new `project_id` and a natural-language description, then poll `wait_for_job` the same way.
6. Use `get_project` to confirm the final state and report what was created. If the user wants to publish, use the publish-project skill.
## Uploading local files
Pick the path the connected tools actually support:
- **Direct upload** — for clients that can make outbound HTTPS requests to cloud storage (for example a desktop app or CLI).
- **Upload widget** — if a `file_upload_ui` tool is available and the host renders MCP Apps, it lets the user drop files; it returns a `job_id` to poll with `wait_for_job`. Do not call it again once it has returned a `job_id`.
- **Conversation attachments** — only if the `import_media` schema you were given includes a `files` parameter and the host resolves the attachment into a file object. Descript exposes `files` only to hosts that fill it in; if it is absent, this path does not exist.
Direct upload:
1. Call `import_media` with `content_type` and `file_size` for each file in `add_media`.
2. The response includes `upload_urls` — a map of media key → `{ upload_url, asset_id, artifact_id }`. For each file, `PUT` the raw bytes to its `upload_url` with header `Content-Type: application/octet-stream`. The uploaded size must match the declared `file_size`.
3. If a `PUT` fails, call `report_upload_status` with the `job_id`, the file's `media_id` (its key in `add_media`/`upload_urls`), and `status: "failed"`, then poll `wait_for_job` on that `job_id` until it is stopped. A second import into the project is rejected while that job is still running.
4. Then recover with a supported path: retry the direct upload if the failure looks transient, use `file_upload_ui` if it is available, or ask the user for a URL Descript can fetch. Use `files` only when the `import_media` schema includes it and the tool response tells you to. Never construct file objects or pass local or container paths (such as `/mnt/data/...`) — Descript cannot reach them. If none of these paths is available, tell the user the file cannot be uploaded from this environment and what they can do instead (for example, share a link to it).
Referenced files: 1 — file references are metadata, not package contents.
edit-project1.8 KB
View saved version →
---
name: edit-project
description: Edit an existing Descript project with Underlord, Descript's AI co-editor, using natural language instructions.
---
# Edit Project
## When to use
- When modifying an existing Descript project
- When applying Underlord edits like trimming, captioning, or rearranging
- When the user wants to make changes to a video or audio project they've already created
## Instructions
1. Use `search_drive` to find the project when the user describes it by name or spoken content. Use `list_projects` (filter by name if provided) when you need a paginated project list rather than a search.
2. Use `get_project` with the project ID to inspect its current state — compositions, media files, and structure.
3. Confirm with the user which composition to edit if the project has multiple compositions.
4. Use `prompt_project_agent` to edit with Underlord, Descript's AI co-editor, passing the project ID, composition ID, and a clear natural language prompt describing the desired edits. Follow the user's instructions as given. If the result includes a `conversation_id`, save it and reuse it on follow-up edits anywhere in the same project to continue the same thread, including edits that target a different composition; pass the target `composition_id` alongside it to say which clip to edit. Don't start a second agent job for the same clip while one is still in flight.
5. Wait for the edit by polling `wait_for_job` with `wait_seconds: 20` until the job is terminal, surfacing `progress.label`/`percent` after each poll. A timeout (`-32001`) means the edit is still running — poll the same `job_id` again, don't re-issue the prompt.
6. Confirm the edit landed from the completed job result (and the composition state) — not `get_project.updated_at`. Use `get_project` to report the result back to the user.
Referenced files: 1 — file references are metadata, not package contents.
export-timeline1.37 KB
View saved version →
---
name: export-timeline
description: Export a Descript project's timeline for another editor like Premiere Pro, DaVinci Resolve, Final Cut Pro, or Pro Tools.
---
# Export Timeline
## When to use
- When the user wants to continue editing in another NLE or DAW (Premiere Pro, DaVinci Resolve, Final Cut Pro, Pro Tools, Logic, Audition, Reaper)
- When they ask for a timeline, XML, EDL, AAF, or interchange file
## Instructions
1. Locate the project with `search_drive` (or `list_projects` if filtering/paginating the project list), then use `get_project` to retrieve its composition IDs.
2. If the project has more than one composition, confirm which one and pass its `composition_id` explicitly.
3. Call `export_timeline` with the project ID, composition ID, and a `format` (`edl`, `sesx`, `fcp`, `premiere`, `davinci_resolve`, or `aaf`). Media files are never bundled — only the timeline file itself.
4. `export_timeline` is asynchronous and returns a `job_id`. Wait for it by polling `wait_for_job` with `wait_seconds: 20` until the job is terminal, surfacing `progress.label`/`percent`. A timeout (`-32001`) or a `still_running` wait status means it is still going — poll the same `job_id` again, never re-export.
5. Report the `download_url` from the completed job's `result` back to the user. It is time-limited (valid until `download_url_expires_at`), so tell the user to download promptly.
Referenced files: 1 — file references are metadata, not package contents.
export-transcript1.01 KB
View saved version →
---
name: export-transcript
description: Export a Descript project's transcript as text in txt, markdown, html, rtf, or srt.
---
# Export Transcript
## When to use
- When the user wants the spoken text of a project as a transcript
- When they ask for captions or a written record of a composition
## Instructions
1. Locate the project with `search_drive` (or `list_projects` if filtering/paginating the project list), then use `get_project` to retrieve its composition IDs.
2. If the project has more than one composition, confirm which one and pass its `composition_id` explicitly.
3. Call `export_transcript` with the project ID, composition ID, and a `format` (`txt`, `markdown`, `html`, `rtf`, or `srt`). Use `include_speaker_labels`, `include_markers`, and `timecodes` if the user asks for them.
4. `export_transcript` is synchronous — it returns the transcript content directly in the response. There is no `job_id`; do not call `wait_for_job`.
5. Give the returned transcript content to the user in the requested format.
Referenced files: 1 — file references are metadata, not package contents.
publish-project1.49 KB
View saved version →
---
name: publish-project
description: Publish a Descript project composition to create a shareable link and exported video or audio file.
---
# Publish Project
## When to use
- When the user is ready to share or export a finished project
- When they ask for a shareable link or a downloadable video/audio file
## Instructions
1. Locate the project with `search_drive` (or `list_projects` if filtering/paginating the project list), then use `get_project` to retrieve its composition IDs and any existing publishes.
2. Confirm with the user which composition to publish if there is more than one.
3. Confirm the user actually wants to publish before calling `publish_project`. Publishing is user-visible and republishing the same composition overwrites the previous output at the same share URL — get explicit authorization before publishing or overwriting an existing publish. The host may also surface its own approval prompt.
4. Call `publish_project` with the project ID and composition ID. To retrieve an existing share link without republishing, read it from `get_project` instead of calling `publish_project`.
5. Wait for publishing to finish by polling `wait_for_job` with the returned `job_id` and `wait_seconds: 20` until the job is terminal. A timeout (`-32001`) or a `still_running` wait status means it is still going — poll the same `job_id` again, never re-publish.
6. Report the `share_url` and `download_url` from the completed job back to the user exactly as returned — do not edit or shorten them.
Referenced files: 1 — file references are metadata, not package contents.