Skip to main content
Tella’s MCP server provides a standardized interface that allows any compatible AI assistant to access your Tella workspace. List videos, manage playlists, edit clips, upload new clips and B-roll videos, apply layouts, and more — all through natural language.

Endpoint

https://api.tella.com/mcp

Setup

Run this command in your terminal:
claude mcp add --transport http --scope user tella https://api.tella.com/mcp
Or for one-click install: Add Tella MCP ServerYou’ll be prompted to authenticate with your Tella account.

Authentication

The MCP server uses OAuth 2.1 for authentication. When you first connect, you’ll be redirected to Tella to authorize access. The connection uses your Tella account permissions — you can only access videos and playlists in workspaces you belong to.

Managing videos

Organize and share your workspace: list and update videos, manage playlists, control access, and export finished videos.

Videos

List all videos in your workspace with pagination support.Parameters:
  • cursor (optional): Pagination cursor from previous response
  • limit (optional): Items per page (1-100, default: 20)
  • playlistId (optional): Filter videos by playlist
Get video information. Returns summary fields by default. Use include flags for additional data.Parameters:
  • id (required): Video ID
  • includeTranscript (optional): Include transcript text
  • includeChapters (optional): Include chapter markers
  • includeThumbnails (optional): Include thumbnail URLs
  • includeExports (optional): Include export status
Update video metadata and settings.Parameters:
  • id (required): Video ID
  • name (optional): Video title
  • description (optional): Video description
  • playbackRate (optional): Default playback speed (0.5-2.0)
  • captionsEnabled (optional): Show captions by default
  • transcriptEnabled (optional): Show transcript tab
  • commentsEnabled (optional): Allow comments
  • downloadsEnabled (optional): Allow downloads
  • linkScope (optional): Access level — public, private, password, or embedonly
  • password (optional): Password for protected videos
  • searchEngineIndexingEnabled (optional): Allow search engine indexing
  • studioSound (optional): Studio Sound (AI audio enhancement) master switch. Enabling it also starts generating the enhanced audio tracks in the background; playback and exports fall back to raw audio until they are ready. Individual clips can opt out via update_clip’s studioSound.
  • dimensions (optional): Canvas size in pixels as { width, height } (each 16–4096). Changing it remaps every clip and section layout to a ratio-appropriate equivalent — the same transform as switching size in the editor’s Setup → Size. Editor presets: 1920x1080 (16:9), 1920x1200 (16:10), 1440x1080 (4:3), 1080x1080 (1:1), 1080x1350 (4:5), 1080x1920 (9:16). No-op when the video already has the requested size.
Delete a video (moves to trash).Parameters:
  • id (required): Video ID
Create a copy of a video. Supports trimming to extract a time range or specific chapter.Parameters:
  • id (required): Video ID to duplicate
  • name (optional): Name for the duplicate
  • startTime (optional): Trim start time in seconds (use with endTime)
  • endTime (optional): Trim end time in seconds (use with startTime)
  • chapterIndex (optional): Extract a specific chapter by 0-based index (cannot be combined with startTime/endTime)
Start a video export. Returns the export status with workflow ID and download URL when complete.Parameters:
  • id (required): Video ID
  • granularity (optional): video (full video, default), clips (one file per clip), or raw (raw recordings)
  • resolution (optional): 4k for 4K; omit for default
  • fps (optional): Frames per second — 30 or 60
  • subtitles (optional): Burn in subtitles
  • speed (optional): Playback speed — 0.5, 0.75, 1, 1.25, 1.5, 1.75, or 2
Add a collaborator to a video. The user must be a member of your workspace.Parameters:
  • id (required): Video ID
  • email (required): Email address of the user to add
  • role (required): Role to grant — editor or viewer
Change a collaborator’s role on a video.Parameters:
  • id (required): Video ID
  • userId (required): User ID of the collaborator
  • role (required): New role — editor or viewer
Remove a collaborator from a video.Parameters:
  • id (required): Video ID
  • userId (required): User ID of the collaborator to remove

Playlists

List all playlists in your workspace.Parameters:
  • visibility (optional): Filter by personal or org
  • cursor (optional): Pagination cursor
  • limit (optional): Items per page (1-100, default: 20)
Create a new playlist.Parameters:
  • name (required): Playlist name
  • description (optional): Playlist description
  • emoji (optional): Emoji icon
  • visibility (optional): personal or org
  • linkScope (optional): Access level — public, private, or password
  • password (optional): Password for protected playlists
Get detailed information about a playlist.Parameters:
  • id (required): Playlist ID
Update playlist metadata and settings.Parameters:
  • id (required): Playlist ID
  • name (optional): Playlist name
  • description (optional): Playlist description
  • emoji (optional): Emoji icon
  • linkScope (optional): Access level
  • password (optional): Password for protected playlists
  • searchEngineIndexingEnabled (optional): Allow search engine indexing
Delete a playlist.Parameters:
  • id (required): Playlist ID
Add a video to a playlist.Parameters:
  • playlistId (required): Playlist ID
  • videoId (required): Video ID to add
Remove a video from a playlist.Parameters:
  • playlistId (required): Playlist ID
  • videoId (required): Video ID to remove
List sidebar playlist groups.Personal groups are only visible to the authenticated user. Org groups are shared with the whole workspace.Parameters:
  • visibility (optional): Filter by personal or org
Create a sidebar group to organize playlists into.Parameters:
  • name (required): Group name
  • emoji (optional): Emoji icon
  • visibility (optional): personal or org. Defaults to personal
Rename a playlist group, change its icon, or move it within its sidebar section.Parameters:
  • id (required): Playlist group ID
  • name (optional): New group name
  • emoji (optional): Emoji icon
  • position (optional): 0-based position in the sidebar section
Delete a playlist group.Playlists inside the group are not deleted. They become ungrouped.Parameters:
  • id (required): Playlist group ID
Move a playlist into a group, or remove it from its group.The group’s visibility must match the playlist’s visibility. Org playlists can only move into org groups, and personal playlists can only move into personal groups.Parameters:
  • playlistId (required): Playlist ID
  • groupId (optional): Target playlist group ID. Omit it to remove the playlist from its group
  • position (optional): 0-based position in the target group, or in the ungrouped sidebar section when groupId is omitted

Editing videos

Build and refine the video itself: upload sources, add and cut clips, apply layouts, and add zooms, blurs, highlights, overlays, and sound effects.

Sources

A source is an uploaded video file that can be turned into a new clip or used as B-roll media inside a layout. Create a source, upload the bytes to the returned pre-signed URL, then reference the sourceId from upload_clip or add_layout / update_layout.
Create a new video source upload. Returns a sourceId and a pre-signed uploadUrlPUT the video bytes to uploadUrl (the URL expires after 1 hour). Once uploaded, the sourceId can be used by upload_clip (to add a new clip) or by add_layout / update_layout (as B-roll media of type: "video").Parameters:
  • kind (optional): Source kind. Only video is supported.
  • width (required): Width in pixels
  • height (required): Height in pixels
  • duration (required): Duration in seconds

Clips

A clip is a section of a video — Tella videos are made up of one or more clips. Each clip has its own cuts, layouts, transcript, and editing tools.
Add a new clip to a video from an uploaded source. Call create_source first, PUT the bytes to the returned uploadUrl, then pass the sourceId here.Parameters:
  • videoId (required): Video ID
  • sourceId (required): Source ID returned by create_source
  • name (optional): Clip name. Defaults to the next Clip N.
List clips in a video, ordered by their position.Parameters:
  • videoId (required): Video ID
Get a single clip’s details.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Update a clip’s name, ordering, cuts, background, or Studio Sound opt-out.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • name (optional): New clip name
  • order (optional): New position within the video
  • cuts (optional): Replaces the clip’s cuts. Each cut is {startTimeMs, durationMs}. Total cut duration must be less than the clip’s duration.
  • background (optional): Background {type, color?, imageUrl?, videoUrl?, videoDurationSeconds?, gradientColor1?, gradientColor2?, gradientAngle?}. type is one of solid, image, video, gradient.
  • studioSound (optional): Per-clip Studio Sound opt-out. false disables enhanced audio for this clip while the video-level switch (update_video’s studioSound) stays on; true re-enables it.
Remove a clip from its video.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Duplicate a clip. The copy is inserted right after the original by default.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID to duplicate
  • name (optional): Name for the new clip
  • order (optional): Position for the new clip
Move a clip to a new position; other clips shift to stay contiguous.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • order (required): New 0-based position
Cut one or more time ranges from a clip in a single call. Overlapping or adjacent ranges are merged into the clip’s existing cuts. To clear all cuts, call update_clip with cuts: [].Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • cuts (required): Array of {fromMs, toMs} ranges to cut, in ms from the clip’s start. Send all ranges in one call instead of issuing many cut_clip calls.
Cut one or more ranges from a clip by referencing word indices in the uncut transcript. The server resolves each word’s exact start/end ms — no padding is applied. Use get_uncut_transcript to look up word indices.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • wordRanges (required): Array of {fromWordIndex, toWordIndex} ranges. Both indices are inclusive and come from the clip’s uncut transcript.
Detect silent ranges in the clip’s audio.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • minDurationMs (optional): Minimum silence length to report, in ms. Defaults to 200.
Auto-detect and cut filler words (“um”, “uh”, etc.) from the clip’s transcript.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
List the underlying recordings (camera, screen, mic) the clip was cut from.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Get a thumbnail of the clip — the rendered composite at the given clip-relative time, including the clip’s layouts, b-roll media, zooms, and masks. Static formats (jpg/png/webp/gif) return inline image content the model can see, plus a signed URL. mp4 returns a URL only.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • format (optional): jpg (default), png, webp, gif, or mp4
  • inpointMs (optional): Frame offset from the clip’s start (default 0)
  • durationMs (optional): Duration of the animated preview. Only valid when format is gif or mp4.
  • width (optional): Output width in pixels (default 320). The thumbnail keeps the video’s aspect ratio.
  • height (optional): Output height in pixels. Derived from the video’s aspect ratio when omitted.
  • download (optional): Suggest a download disposition on the signed URL
While the video is still uploading or converting, the tool returns a result with code: "thumbnail_not_ready" and status: "processing" instead of an image — retry once the video finishes processing. Other upstream failures return code: "thumbnail_fetch_failed" with a signed URL to fetch manually.
Get a thumbnail of an entire video. Same format/sizing options as get_clip_thumbnail. It also returns the same thumbnail_not_ready processing result while the video is still being processed.Parameters:
  • id (required): Video ID
  • format (optional): jpg, png, webp, gif, or mp4
  • inpointMs (optional): Frame offset from the start of the video
  • durationMs (optional): Duration of the animated preview (gif/mp4 only)
  • width / height (optional): Output dimensions
Get a thumbnail of a specific source recording.Parameters:
  • videoId (required): Video ID
  • clipId (required): Clip ID
  • sourceId (required): Source recording ID
  • format (optional): jpg, png, webp, gif, or mp4
  • inpointMs (optional): Frame offset from the source’s start
  • durationMs (optional): Duration of the animated preview (gif/mp4 only)
  • width / height (optional): Output dimensions
Get the waveform data for a source recording’s audio track.Parameters:
  • videoId (required): Video ID
  • clipId (required): Clip ID
  • sourceId (required): Source recording ID
Transcript for the clip after cuts are applied (what the viewer hears).Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Transcript for the clip’s full source, ignoring cuts. Useful when you want to find content that’s been cut out.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID

Layouts

A layout decides how a clip’s camera and screen layers are composed at a given time. Apply a layout to the whole clip (no startTimeMs/durationMs) or to a specific time range. Read the clip first to see its layoutSceneType — that determines which kind values are valid. The layout field is a structured object discriminated by kind:
kindValid scene typesVariant fields
fullscreencameraSubject, basicSubjectstyle: regular | stretch (camera-subject) or screenFit: cover | letterbox (basic-subject)
middlecameraSubject, basicSubjectshape (camera-subject)
side-by-sidecombi (landscape)position: left | right, style: regular | even | overlap, size (when style=overlap)
tv-presentercombi (landscape)position: left | right, style: regular | full | overlap
camera-bubblecombi (all ratios)position (9-way), shape: circle | square | landscape | portrait, size: S | M | L, optional style: regular | full, optional screenFit (when style=full)
camera-onlycombi (all ratios)style: fullscreen | middle, punchIn (when style=fullscreen), shape (when style=middle)
screen-onlycombi (all ratios)style: fullscreen | middle, screenFit (when style=fullscreen)
List the layouts on a clip, including the synthetic base layout (the layout that spans the whole clip).Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Add a layout to a clip. Pass startTimeMs + durationMs for a time range, or omit both for a clip-spanning layout. To add b-roll, give a time range and set media — you can omit layout and the server applies a full-frame b-roll layout suited to the clip automatically (screen-only for combi clips, fullscreen for basic/camera-subject clips). To use a specific layout instead, pass layout with a kind valid for the clip’s scene type (see the table above).Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • layout (optional): Structured layout object (see table above). Omit it to apply the default full-frame b-roll layout for the clip’s scene type.
  • startTimeMs (optional): Start time in ms
  • durationMs (optional): Duration in ms
  • transitionStyle (optional): Transition into the layout — spring (default smooth) or hardCut. Only valid on time-ranged layouts.
  • media (optional): B-roll content displayed during the layout. Only valid on time-ranged layouts. Either:
    • {type: "image", imageUrl, width, height} for an image, or
    • {type: "video", sourceId} for a video — sourceId comes from create_source after you upload the bytes.
    Add an optional slot to choose which slot the media fills: screen (the main subject frame — the default) or camera (the bubble/presentation slot, a media bubble shown over the recording behind it). Each slot needs a layout that renders it: the screen slot (default) requires a layout that shows the screen frame — not camera-only or any *-camera-only-* variant — and the camera slot requires a layout that renders the camera (e.g. camera-bubble, side-by-side, tv-presenter). Pointing media at a slot the layout doesn’t show is rejected. One call fills one slot; a section can hold media in both slots by adding to one slot here and the other with update_layout.
Example:
{
  "videoId": "vid_…",
  "id": "cl_…",
  "layout": {"kind": "side-by-side", "position": "left", "style": "regular"},
  "startTimeMs": 5000,
  "durationMs": 4000
}
Update a layout on a clip. Only provided fields change.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • layoutId (required): Layout ID (use base for the clip-spanning layout)
  • layout (optional): New structured layout
  • startTimeMs (optional): New start time
  • durationMs (optional): New duration
  • transitionStyle (optional): spring or hardCut. Rejected on the base layout.
  • media (optional): Set the layout’s B-roll content for one slot. Rejected on the base layout. Same shape as add_layout’s media, including the optional slot field. Additive per slot: media in the other slot is preserved, and media already in the targeted slot is replaced.
Remove a non-base layout from a clip. Use update_layout to change the base layout.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • layoutId (required): Layout ID
Let AI watch the clip and lay it out — the same as the editor’s “Auto layouts”. The AI picks an editing style (or follows style), sets the clip’s base layout, and adds time-ranged layout changes. Generation watches the actual video, so this can take on the order of a minute for longer clips.
This replaces the clip’s existing layouts with the generated ones.
Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • style (optional): Editing style guiding the AI’s layout choices — one of product-demo-portrait, product-demo-round, product-demo-square, product-demo-wide, presentation-tv-show, presentation-portrait, tutorial-round, tutorial-square, intro, outro, intro-and-outro. Omit to let the AI pick one based on the clip’s content.
  • instructions (optional): Free-form guidance for the AI, e.g. “keep the camera visible the whole time” or “punch in whenever a menu is opened”.

Zooms

Zoom into a specific point on the clip’s screen layer for a time range (the camera is unaffected). Use manualZoom for a fixed focus point or trackingZoom to follow the cursor in the screen recording.
List zooms on a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Add a zoom to a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • type (required): manualZoom or trackingZoom
  • startTimeMs (required): Start time in ms
  • durationMs (required): Duration in ms
  • focusPoint: Required for manualZoom (rejected if missing); ignored for trackingZoom. Percentages — {xPct, yPct} (0-100).
  • scale (required): Magnification factor (1 = no zoom, 3.5 = max). A zoom without a scale cannot be rendered.
Update an existing zoom. Only provided fields change.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • zoomId (required): Zoom ID
  • type (optional): manualZoom or trackingZoom
  • startTimeMs (optional): New start time
  • durationMs (optional): New duration
  • focusPoint (optional): New focus point
  • scale (optional): New magnification
Remove a zoom from a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • zoomId (required): Zoom ID
Automatically generate tracking zooms from the mouse clicks in the clip’s screen recording — the same as the editor’s “Generate zooms”. Every click opens a zoom window; nearby windows are merged. Requires the clip to contain a screen recording; returns an empty list when it has no usable mouse clicks.
By default this removes the clip’s existing tracking zooms first, so repeated calls regenerate instead of stacking. Pass replaceExisting: false to keep them. Manual zooms are never touched.
Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • intensity (optional): How aggressively to zoom — slow, medium (default), or fast. slow opens fewer, longer windows; fast opens shorter, tighter ones at a higher scale.
  • scale (optional): Override the magnification factor (1 = no zoom, 3.5 = max). Defaults to the intensity preset’s scale (1.5 for slow/medium, 2 for fast).
  • replaceExisting (optional): Defaults to true — existing tracking zooms are removed first. Pass false to keep them.

Blurs and highlights

Mask a rectangular region of the clip’s screen layer to either blur it (hide sensitive info) or highlight it (draw attention). Both share the same shape: a rectangle defined by a top-left point and dimensions, both in percentages.
List blur or highlight masks on a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Add a blur or highlight mask to a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • startTimeMs (required): Start time in ms
  • durationMs (required): Duration in ms
  • point (required): Top-left corner — {xPct, yPct} (0-100)
  • dimensions (required): Rectangle size — {widthPct, heightPct} (0-100)
Update an existing blur or highlight.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • maskId (required): Mask ID
  • startTimeMs (optional): New start time
  • durationMs (optional): New duration
  • point (optional): New top-left
  • dimensions (optional): New size
Remove a blur or highlight from a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • maskId (required): Mask ID

Overlays

Place an image or video on top of a clip for a time range. A video overlay references a sourceId from create_source (upload the bytes first); an image overlay uses an imageUrl plus its pixel dimensions. Position uses a percentage point (so it survives ratio changes) and a pixel dimensions box (so the shape never distorts).
List the image and video overlays on a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Add an image or video overlay on top of a clip. Provide sourceId for a video overlay (call create_source first) or imageUrl with width/height for an image overlay. When point/dimensions are omitted, a centered box is computed from the source.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • startTimeMs (required): Start time in ms (clip-relative)
  • durationMs (required): Duration in ms
  • sourceId (optional): Source ID for a video overlay (from create_source). Provide this or imageUrl.
  • imageUrl (optional): Image URL for an image overlay. Provide this or sourceId.
  • width (optional): Source pixel width. Required for image overlays.
  • height (optional): Source pixel height. Required for image overlays.
  • name (optional): Overlay name
  • point (optional): Top-left corner — {xPct, yPct} (0-100), as a percentage of the story canvas
  • dimensions (optional): Overlay size in artboard pixels — {width, height}
Update an existing overlay. Only provided fields change.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • overlayId (required): Overlay ID
  • startTimeMs (optional): New start time in ms
  • durationMs (optional): New duration in ms
  • name (optional): Overlay name
  • point (optional): New top-left — {xPct, yPct} (0-100)
  • dimensions (optional): New size in artboard pixels — {width, height}
Remove an overlay from a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • overlayId (required): Overlay ID

Sound effects

Add an audio clip to play over a clip for a time range. Upload the audio with create_source first, then reference the returned sourceId.
List the sound effects on a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
Add a sound effect to a clip from an uploaded audio source. Call create_source first, PUT the bytes to the returned uploadUrl, then pass the sourceId here.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • sourceId (required): Source ID for the audio (from create_source)
  • startTimeMs (required): Start time in ms (clip-relative)
  • durationMs (required): Duration in ms
  • name (optional): Sound effect name
  • volume (optional): Playback volume (1 = original, must be > 0). Defaults to 1.
Update an existing sound effect. Only provided fields change.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • soundEffectId (required): Sound effect ID
  • startTimeMs (optional): New start time in ms
  • durationMs (optional): New duration in ms
  • name (optional): Sound effect name
  • volume (optional): Playback volume (1 = original, must be > 0)
Remove a sound effect from a clip.Parameters:
  • videoId (required): Video ID
  • id (required): Clip ID
  • soundEffectId (required): Sound effect ID

Example prompts

Once connected, you can ask your AI assistant things like:
  • “List all my Tella videos”
  • “Get the transcript for video xyz”
  • “Create a playlist called ‘Product Updates’ and add my latest 3 videos”
  • “Make my onboarding video public and enable downloads”
  • “Trim the first 5 seconds off the intro clip”
  • “Add a side-by-side layout to the demo clip from 10s to 20s with the camera on the left”
  • “Add a B-roll image of our product logo at 30s for 4 seconds”
  • “Upload this video file as a new clip at the end of my onboarding video”
  • “Add this product demo clip as B-roll between 12s and 20s of the intro”
  • “Find the silent gaps in my latest clip longer than 1.5 seconds”
  • “Remove all the filler words from the keynote clip”
  • “Blur the email address in the bottom-left of the screen between 12s and 18s”
  • “Zoom into the top-right of the screen at 25s for 3 seconds”
  • “Generate zooms for my demo clip wherever I clicked”
  • “Auto-layout my tutorial clip and keep the camera visible the whole time”
  • “Turn on Studio Sound for my latest video”
  • “Add my logo as an overlay in the top-right corner from 5s to 10s”
  • “Play this whoosh sound effect at 8s when the transition happens”

Troubleshooting

Authentication issues

If you’re having trouble authenticating, try clearing your MCP auth cache:
rm -rf ~/.mcp-auth
Then reconnect to trigger a fresh OAuth flow.

Connection issues

Ensure you’re using a compatible MCP client. The server uses HTTP transport.