cancel_job
ChatGPTCancel a queued or running job.
export_timeline
ChatGPTExport a project composition as a timeline file for import into another DAW/NLE (Premiere, DaVinci Resolve, Final Cut Pro, Pro Tools, Logic, Audition, Reaper). Media files are never bundled — only the timeline/XML/EDL file itself. Returns immediately with a job_id. Use the wait_for_job tool with the returned job_id to wait for completion; when the job finishes, its result carries a time-limited download_url (valid until download_url_expires_at). Always display the download_url to the user so they can download the file directly. Large exports can take several minutes, so polling avoids connection timeouts. Formats: edl (Samplitude/Reaper), sesx (Adobe Audition), fcp (Final Cut Pro X .fcpxml), premiere (Premiere Pro XML), davinci_resolve (DaVinci Resolve XML), aaf (Pro Tools/Logic, binary).
export_transcript
ChatGPTExport a project composition as a transcript document. Formats: txt, markdown, html, rtf, srt. Returns the exported content directly in the response.
file_upload_ui
ChatGPTShow an inline drag-and-drop upload widget. The user selects files, the widget uploads them, and the call returns with a job_id once the uploads land. Follow up with wait_for_job to wait for server-side processing. Requires an MCP Apps-capable host — on clients without MCP Apps the widget will not render; fall back to import_media with a URL. Omit project_id and project_name to auto-create a project named after the first file. Returns { status, job_id, project_id, project_url }. For new projects, every file dropped in the same batch goes onto a single auto-created composition (matches import_media's add_compositions default). The whole batch shares one import job — wait_for_job covers all files. Pass project_id to add files to an existing project's library without creating a composition. Do not retry file_upload_ui once a job_id has been returned — the upload may already be processing. Use wait_for_job(job_id) instead.
get_drive_info
ChatGPTReturns the drive (workspace) connected to the current session, including its ID and name. Use this to confirm which drive your requests will operate on.
get_project
ChatGPTGet a detailed project summary including all media files and compositions. Returns the project's id, name, drive_id, created_at, updated_at, folder_path (if in a folder), a map of media files (keyed by display path) with type and duration, and a list of compositions with id, name, duration, and media type. Use this to inspect a project's contents before editing or importing media.
import_drive_media
ChatGPTImport media files into the drive media library (not into a project). Use this when the user wants to add files to their media library without creating or editing a project. Supports URL imports and direct file uploads. DIRECT FILE UPLOAD: Only for local clients that can reach Google Cloud Storage. Hosted model runtimes cannot PUT to upload_urls; pass a url instead. For local clients: provide content_type (MIME type) and file_size (bytes). The response includes upload_urls — a map of media key → { upload_url, asset_id, artifact_id }. PUT each file to its upload_url with header Content-Type: application/octet-stream. Returns immediately with a job_id and drive_id. Please use the wait_for_job tool with the returned job_id to wait for the job to complete.
import_media
ChatGPTImport media into a Descript project via URLs (direct links, Google Drive, Dropbox) or direct file upload. Pass URLs as-is. Pass empty add_media ({}) with project_name to create an empty project. ADDING TO COMPOSITION: When creating a new project, include add_compositions so imported media appears on the timeline — this is the expected default. Only omit add_compositions for new projects when the user explicitly asks to import without adding to the composition. When importing into an existing project, omit add_compositions unless the user requests it, to avoid disrupting existing edits. DIRECT FILE UPLOAD: Instead of a url, provide content_type (MIME type) and file_size (bytes). The response includes upload_urls — a map of media key → { upload_url, asset_id, artifact_id }. PUT each file to its upload_url with header Content-Type: application/octet-stream. The uploaded file size must match the file_size declared in the request. Returns immediately with a job_id. Please use the wait_for_job tool with the returned job_id to wait for the job to complete.
import_media_from_app
ChatGPTCalled by the Descript home panel, not by the model. Same as import_media for a direct file upload: provide content_type and file_size per add_media entry, then PUT each file to its upload_url from the response.
list_folders
ChatGPTList folders in the drive. Returns each folder's full path from the drive root. By default lists root-level folders. Pass parent_path to list child folders of a specific parent. Use this to browse the folder hierarchy before filtering projects by folder_path.
list_jobs
ChatGPTList recent jobs, optionally filtered by project or type. Job states: queued, running, stopped (check result.status), cancelled.
list_projects
ChatGPTList projects accessible to the authenticated user. Returns each project's id, name, created_at, updated_at, and folder_path (if the project is inside a folder). Use this to discover project IDs before editing or importing media. Supports cursor-based pagination — pass the next_cursor from a previous response's pagination field to fetch the next page.
open_descript
ChatGPTOpen a panel that helps the user import media into a Descript project. The user chooses video or audio files from their device or from files shared in the chat; the first upload creates a new project through import_media, and later uploads go into that same project. The panel reports upload progress, the project link, and any clips made in the project as model context. Use it when the user wants to add, upload, or import media into Descript, or asks to open Descript. Returns the drive id and name and a link to the Descript web app. This tool itself does not create, upload, edit, or publish anything. Requires an MCP Apps-capable host; elsewhere, use get_drive_info.
prompt_project_agent
ChatGPTAI agent that queries, creates, and edits Descript projects using natural language. Use project_id for existing projects, project_name to create new ones. Returns immediately with a job_id. Please use the wait_for_job tool with the returned job_id to wait for the job to complete.
publish_project
ChatGPTPublish a Descript project composition as video or audio, producing a shareable URL. Requires a project_id. Optionally specify a composition_id (defaults to the first composition). Publishing the same composition again automatically reuses the previous share URL, overwriting its content; Video and Audio publishes of the same composition get separate share URLs. Returns immediately with a job_id. Please use the wait_for_job tool with the returned job_id to wait for the job to complete.
record_panel_action
ChatGPTRecord a user action taken inside the Descript home panel for analytics. Called by the panel, not by the model. Changes nothing in Descript.
report_upload_status
ChatGPTReport that a specific direct upload failed, was aborted, or was abandoned so the import job stops waiting on just that file (other files keep uploading). Use this after a PUT to an upload_url errors ("failed"), the user cancels an in-flight upload ("aborted"), or a file will never be uploaded ("abandoned", e.g. the upload UI was dismissed). media_id is the key from the import request's add_media / upload_urls map. A failed PUT is recoverable while that job is still running: supply the attachment in "files" in the same call that reports the failure, and Descript fetches the file server-side, so the reported job continues with it in the project it already created and reaches a normal result through wait_for_job. Without it, the job finishes with that file marked failed, and a later report carrying the attachment reaches a file the job has already settled; adding it then needs a new import_media into the same project, once the job has stopped.
report_upload_status_from_app
ChatGPTCalled by the Descript home panel, not by the model. Same as report_upload_status, without an attachment: reports that one file in an import job failed, was aborted, or was abandoned so the job stops waiting on it.
search_drive
ChatGPTSearch the connected drive for projects, folders, layout packs, and media files by name, by what is spoken or written inside them, or (on drives with the Enterprise plan) by what appears in videos and images. The index covers project names, composition text, media transcripts, and media file names, across projects, the drive media library, and Brand Studio. Results are ranked by relevance by default and carry the ids other tools need (project_id, folder_id, asset_id) plus a url that opens the project, folder, or file in Descript. A visual video match also includes moment, the matched time range inside the video (start_time_sec and end_time_sec, in seconds). A file inside a project opens that project with the file highlighted. Thumbnails for the first 12 video and image results are returned as image content blocks, each preceded by a text block naming the asset_id it belongs to. Media file hits use type video, audio, or image. Prefer this over list_projects whenever the user is looking for a project or anything else in the drive, whether by a name fragment, a topic, or a phrase they remember. Use list_projects only to enumerate or page through every project in the drive, and list_folders to browse the folder hierarchy.
wait_for_job
ChatGPTWait for a job to complete. Polls for completion by default (300s) and streams progress updates. Set wait_seconds to 0 to return immediately without waiting. Job states: queued, running, stopped, cancelled. A stopped job has a result object — check result.status for "success" or "error".
cancel_job
Claudeget_job
Claudeimport_media
Claudelist_jobs
Claudeprompt_project_agent
Claude