The Descript MCP connector routes your AI agent's tool calls to Descript's own MCP server through Scalekit. Each user signs in to Descript once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 14 tools.
- Tools
- 14
- What they doRead · write · destructive
- 8 · 4 · 28 read4 write2 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Descript MCP connection
In AgentKit > Connections, create a Descript MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Descript MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'descriptmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Descript MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'descriptmcp_get_drive_info',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "descriptmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Descript MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="descriptmcp_get_drive_info",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_tooldescriptmcp_export_timelineExport a project composition as a timeline file (AAF, SESX, EDL, FCPXML, Premiere XML, or DaVinci Resolve XML) for import into another DAW/NLE.Read-onlyExport Timeline
Export a project composition as a timeline file (AAF, SESX, EDL, FCPXML, Premiere XML, or DaVinci Resolve XML) for import into another DAW/NLE.
Inputs
formatstringrequired- Timeline file format.one of
aafsesxedlfcppremieredavinci_resolve project_idstringrequired- UUID of the project to export from.
callback_urlstring- Webhook URL for job completion.
composition_idstring- UUID of a specific composition. Omit to use the first composition.
create_track_per_fileboolean- Generate one EDL/XML track per source media file rather than per script. Defaults to false. Not supported for fcp (FCPXML); rejected when true.
include_markersboolean- Include markers in formats that support them (EDL, SESX). Defaults to the format-specific default (true for EDL/SESX/FCP/Premiere/DaVinci, false for AAF).
snap_frame_ratesboolean- Premiere / DaVinci Resolve only. When true, snaps to standard broadcast frame rates (24, 25, 30, 50, 60 + NTSC variants). When false, uses the source frame rate. Defaults to true. Rejected when false for other formats.
strip_spacesboolean- AAF only. Strip spaces from media filenames for Logic Pro compatibility. Defaults to false. Rejected when true for other formats.
descriptmcp_export_transcriptExport a project composition as a transcript document in txt, markdown, HTML, RTF, or SRT format.Read-onlyExport Transcript
Export a project composition as a transcript document in txt, markdown, HTML, RTF, or SRT format.
Inputs
formatstringrequired- Transcript format.one of
txtmarkdownhtmlrtfsrt project_idstringrequired- UUID of the project to export from.
composition_idstring- UUID of a specific composition. Omit to use the first composition.
include_markersboolean- Include markers in transcript.
include_speaker_labelsstring- Speaker label mode. off=none, changes=on speaker change, every_paragraph=every paragraph. Defaults to changes.one of
offchangesevery_paragraph timecodesobject- Timecode options. When provided, timecodes are included in the output.
descriptmcp_get_drive_infoReturn the Descript drive (workspace) connected to the current session, including its ID and name.Read-onlyGet Drive Info
Return the Descript drive (workspace) connected to the current session, including its ID and name.
Inputs
This tool takes no inputs.
descriptmcp_get_projectRetrieve detailed information about a Descript project, including its media files and compositions.Read-onlyGet Project
Retrieve detailed information about a Descript project, including its media files and compositions.
Inputs
project_idstringrequired- UUID of the project.
descriptmcp_list_foldersList folders in the Descript drive, optionally scoped to a parent folder.Read-onlyList Folders
List folders in the Descript drive, optionally scoped to a parent folder.
Inputs
parent_pathstring- Parent folder path (e.g. "Clients/Acme"). Returns child folders of this folder. Omit to list root-level folders.
descriptmcp_list_jobsList recent Descript jobs with optional filtering by project or job type.Read-onlyList Jobs
List recent Descript jobs with optional filtering by project or job type.
Inputs
project_idstring- Filter by project UUID.
typestring- Filter by job type.one of
import/project_mediaagentpublishexport/timeline
descriptmcp_list_projectsList Descript projects accessible to the authenticated user, with optional filtering and sorting.Read-onlyList Projects
List Descript projects accessible to the authenticated user, with optional filtering and sorting.
Inputs
created_afterstring- Filter projects created after this ISO 8601 timestamp.
created_beforestring- Filter projects created before this ISO 8601 timestamp.
created_bystring- Filter projects created by this user UUID. Pass `me` to filter by the authenticated user.
cursorstring- Pagination cursor from a previous response's next_cursor.
directionstring- Sort direction (default: desc).one of
ascdesc folder_pathstring- Filter projects by folder path (e.g. "Clients/Acme/Videos"). Use "/" to separate nested folders. Returns only projects directly inside the deepest folder.
limitnumber- Number of projects per page (1-100, default 20).
namestring- Filter projects whose name contains this string (case-insensitive).
sortstring- Sort field (default: created_at).one of
namecreated_atupdated_atlast_viewed_at updated_afterstring- Filter projects updated after this ISO 8601 timestamp.
updated_beforestring- Filter projects updated before this ISO 8601 timestamp.
descriptmcp_wait_for_jobPoll a Descript job until it completes, streaming progress updates, with an optional timeout.Read-onlyWait For Job
Poll a Descript job until it completes, streaming progress updates, with an optional timeout.
Inputs
job_idstringrequired- The job_id returned by import_media, prompt_project_agent, publish_project, or export_timeline.
wait_secondsnumber- Seconds to poll for completion (default 300, max 300). Set 0 to return immediately.
descriptmcp_import_drive_mediaImport media files into the Descript drive media library (not a project) via URLs or direct file upload.WriteImport Drive Media
Import media files into the Descript drive media library (not a project) via URLs or direct file upload.
Inputs
add_mediaobjectrequired- Map of display name → media entry. Keys can include folder paths (e.g. "Recordings/intro.mp4"). Each entry is either a URL import (provide "url") or a direct upload (provide "content_type" and "file_size"). URL imports and direct uploads accept an optional "language" for transcription.
callback_urlstring- Webhook URL to receive job completion notification.
folder_idstring- Target folder ID in the drive media library.
descriptmcp_import_mediaImport media into a Descript project from URLs (Google Drive, Dropbox, direct links) or direct file upload.WriteImport Media
Import media into a Descript project from URLs (Google Drive, Dropbox, direct links) or direct file upload.
Inputs
add_mediaobjectrequired- Map of display name → media entry. Keys can include folder paths (e.g. "Recordings/intro.mp4") to organize media into folders in the project. Each entry is one of: a URL import (provide "url"), a direct upload (provide "content_type" and "file_size"), or a multitrack sequence (provide "tracks" array). Use exactly one variant per entry. URL imports and direct uploads accept an optional "language" for transcription.
add_compositionsarray- Compositions (timelines) to create from the imported media. Include this when creating a new project so media appears on the timeline. Omit when importing into an existing project unless the user asks to add to the timeline.
callback_urlstring- Webhook URL for job completion.
folder_namestring- Folder path to place the new project in (e.g. "Clients/Acme/Videos"). Use "/" to separate nested folders. Only valid when creating a new project (no project_id). Existing folders along the path are reused; missing segments are created automatically. Requires team_access to be set to "edit", "comment", or "view" — projects in folders must be accessible to drive members.
project_idstring- UUID of an existing project. Mutually exclusive with project_name.
project_namestring- Name for a new project. Mutually exclusive with project_id.
team_accessstring- Team access for new projects.one of
editcommentviewnone update_compositionsarray- Append clips to existing compositions in the target project. Requires project_id.
workspace_namestring- Workspace to create the new project in, matched by name (case-insensitive). Only valid when creating a new project (no project_id). Reserved names: "Personal" (private space, requires team_access "none" or omitted) and "General" (shared drive workspace). "General" and custom workspaces require a shared team_access ("edit", "comment", or "view"); defaults to "view" when omitted. Custom workspaces require the caller to be a workspace member.
descriptmcp_publish_projectPublish a Descript project composition as video or audio and return a shareable URL.WritePublish Project
Publish a Descript project composition as video or audio and return a shareable URL.
Inputs
project_idstringrequired- UUID of the project to publish.
access_levelstring- Desired access level for the published share page. Defaults to the drive default. Fails with 403 if the requested level is not permitted by the drive publish settings.one of
publicunlisteddriveprivate callback_urlstring- Webhook URL for job completion.
composition_idstring- Composition to publish. Accepts a full UUID, a 5-character short ID from the project's Descript URL, or the project's full Descript URL (e.g. https://web.descript.com/{project_id}/{short_id}). Use get_project to find available composition IDs for this project. Defaults to the first composition if omitted.
media_typestring- Media type of the published output (default "Video").one of
VideoAudio resolutionstring- Resolution for the published output (default determined by project).one of
480p720p1080p1440p4K
descriptmcp_report_upload_statusReport that a direct upload failed, was aborted, or was abandoned so the import job stops waiting on that file.WriteReport Upload Status
Report that a direct upload failed, was aborted, or was abandoned so the import job stops waiting on that file.
- Idempotent
Inputs
job_idstringrequired- ID of the import job that owns the upload.
media_idstringrequired- Media key (from the import request's add_media / upload_urls) to report.
statusstringrequired- failed = the PUT errored; aborted = cancelled in flight; abandoned = never attempted.one of
failedabortedabandoned detailstring- Optional free-text context (e.g. "HTTP 403 from storage").
descriptmcp_cancel_jobCancel a queued or running Descript job by its ID.DestructiveCancel Job
Cancel a queued or running Descript job by its ID.
- Idempotent
Inputs
job_idstringrequired- UUID of the job to cancel.
descriptmcp_prompt_project_agentUse Descript's AI agent to query, create, or edit a project using a natural language prompt.DestructivePrompt Project Agent
Use Descript's AI agent to query, create, or edit a project using a natural language prompt.
Inputs
promptstringrequired- Natural language instructions for the agent.
callback_urlstring- Webhook URL for job completion.
composition_idstring- Composition to target. Accepts a full UUID, a 5-character short ID from the project's Descript URL, or the project's full Descript URL (e.g. https://web.descript.com/{project_id}/{short_id}). Use get_project to find available composition IDs for this project. Omit to target the whole project.
modelstring- AI model override. Omit for default.
project_idstring- UUID of an existing project to edit. Provide either project_id or project_name, not both.
project_namestring- Name for a new project to create. Provide either project_id or project_name, not both.
No tools match.