Endpoint
Setup
- Claude Code
- Claude Desktop
- Cursor
- Codex
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_videos
list_videos
cursor(optional): Pagination cursor from previous responselimit(optional): Items per page (1-100, default: 20)playlistId(optional): Filter videos by playlist
get_video
get_video
id(required): Video IDincludeTranscript(optional): Include transcript textincludeChapters(optional): Include chapter markersincludeThumbnails(optional): Include thumbnail URLsincludeExports(optional): Include export status
update_video
update_video
id(required): Video IDname(optional): Video titledescription(optional): Video descriptionplaybackRate(optional): Default playback speed (0.5-2.0)captionsEnabled(optional): Show captions by defaulttranscriptEnabled(optional): Show transcript tabcommentsEnabled(optional): Allow commentsdownloadsEnabled(optional): Allow downloadslinkScope(optional): Access level —public,private,password, orembedonlypassword(optional): Password for protected videossearchEngineIndexingEnabled(optional): Allow search engine indexingstudioSound(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 viaupdate_clip’sstudioSound.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_video
delete_video
id(required): Video ID
duplicate_video
duplicate_video
id(required): Video ID to duplicatename(optional): Name for the duplicatestartTime(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)
export_video
export_video
id(required): Video IDgranularity(optional):video(full video, default),clips(one file per clip), orraw(raw recordings)resolution(optional):4kfor 4K; omit for defaultfps(optional): Frames per second —30or60subtitles(optional): Burn in subtitlesspeed(optional): Playback speed —0.5,0.75,1,1.25,1.5,1.75, or2
add_collaborator_to_video
add_collaborator_to_video
id(required): Video IDemail(required): Email address of the user to addrole(required): Role to grant —editororviewer
update_collaborator_on_video
update_collaborator_on_video
id(required): Video IDuserId(required): User ID of the collaboratorrole(required): New role —editororviewer
remove_collaborator_from_video
remove_collaborator_from_video
id(required): Video IDuserId(required): User ID of the collaborator to remove
Playlists
list_playlists
list_playlists
visibility(optional): Filter bypersonalororgcursor(optional): Pagination cursorlimit(optional): Items per page (1-100, default: 20)
create_playlist
create_playlist
name(required): Playlist namedescription(optional): Playlist descriptionemoji(optional): Emoji iconvisibility(optional):personalororglinkScope(optional): Access level —public,private, orpasswordpassword(optional): Password for protected playlists
get_playlist
get_playlist
id(required): Playlist ID
update_playlist
update_playlist
id(required): Playlist IDname(optional): Playlist namedescription(optional): Playlist descriptionemoji(optional): Emoji iconlinkScope(optional): Access levelpassword(optional): Password for protected playlistssearchEngineIndexingEnabled(optional): Allow search engine indexing
delete_playlist
delete_playlist
id(required): Playlist ID
add_video_to_playlist
add_video_to_playlist
playlistId(required): Playlist IDvideoId(required): Video ID to add
remove_video_from_playlist
remove_video_from_playlist
playlistId(required): Playlist IDvideoId(required): Video ID to remove
list_playlist_groups
list_playlist_groups
visibility(optional): Filter bypersonalororg
create_playlist_group
create_playlist_group
name(required): Group nameemoji(optional): Emoji iconvisibility(optional):personalororg. Defaults topersonal
update_playlist_group
update_playlist_group
id(required): Playlist group IDname(optional): New group nameemoji(optional): Emoji iconposition(optional): 0-based position in the sidebar section
delete_playlist_group
delete_playlist_group
id(required): Playlist group ID
move_playlist_to_group
move_playlist_to_group
playlistId(required): Playlist IDgroupId(optional): Target playlist group ID. Omit it to remove the playlist from its groupposition(optional): 0-based position in the target group, or in the ungrouped sidebar section whengroupIdis 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 thesourceId from upload_clip or add_layout / update_layout.
create_source
create_source
sourceId and a pre-signed uploadUrl — PUT 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. Onlyvideois supported.width(required): Width in pixelsheight(required): Height in pixelsduration(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.upload_clip
upload_clip
create_source first, PUT the bytes to the returned uploadUrl, then pass the sourceId here.Parameters:videoId(required): Video IDsourceId(required): Source ID returned bycreate_sourcename(optional): Clip name. Defaults to the nextClip N.
list_clips
list_clips
videoId(required): Video ID
get_clip
get_clip
videoId(required): Video IDid(required): Clip ID
update_clip
update_clip
videoId(required): Video IDid(required): Clip IDname(optional): New clip nameorder(optional): New position within the videocuts(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?}.typeis one ofsolid,image,video,gradient.studioSound(optional): Per-clip Studio Sound opt-out.falsedisables enhanced audio for this clip while the video-level switch (update_video’sstudioSound) stays on;truere-enables it.
delete_clip
delete_clip
videoId(required): Video IDid(required): Clip ID
duplicate_clip
duplicate_clip
videoId(required): Video IDid(required): Clip ID to duplicatename(optional): Name for the new cliporder(optional): Position for the new clip
reorder_clip
reorder_clip
videoId(required): Video IDid(required): Clip IDorder(required): New 0-based position
cut_clip
cut_clip
update_clip with cuts: [].Parameters:videoId(required): Video IDid(required): Clip IDcuts(required): Array of{fromMs, toMs}ranges to cut, in ms from the clip’s start. Send all ranges in one call instead of issuing manycut_clipcalls.
cut_clip_by_transcript
cut_clip_by_transcript
get_uncut_transcript to look up word indices.Parameters:videoId(required): Video IDid(required): Clip IDwordRanges(required): Array of{fromWordIndex, toWordIndex}ranges. Both indices are inclusive and come from the clip’s uncut transcript.
get_silences
get_silences
videoId(required): Video IDid(required): Clip IDminDurationMs(optional): Minimum silence length to report, in ms. Defaults to 200.
remove_fillers
remove_fillers
videoId(required): Video IDid(required): Clip ID
list_sources
list_sources
videoId(required): Video IDid(required): Clip ID
get_clip_thumbnail
get_clip_thumbnail
mp4 returns a URL only.Parameters:videoId(required): Video IDid(required): Clip IDformat(optional):jpg(default),png,webp,gif, ormp4inpointMs(optional): Frame offset from the clip’s start (default 0)durationMs(optional): Duration of the animated preview. Only valid whenformatisgiformp4.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
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_video_thumbnail
get_video_thumbnail
get_clip_thumbnail. It also returns the same thumbnail_not_ready processing result while the video is still being processed.Parameters:id(required): Video IDformat(optional):jpg,png,webp,gif, ormp4inpointMs(optional): Frame offset from the start of the videodurationMs(optional): Duration of the animated preview (gif/mp4 only)width/height(optional): Output dimensions
get_source_thumbnail
get_source_thumbnail
videoId(required): Video IDclipId(required): Clip IDsourceId(required): Source recording IDformat(optional):jpg,png,webp,gif, ormp4inpointMs(optional): Frame offset from the source’s startdurationMs(optional): Duration of the animated preview (gif/mp4 only)width/height(optional): Output dimensions
get_source_waveform
get_source_waveform
videoId(required): Video IDclipId(required): Clip IDsourceId(required): Source recording ID
get_cut_transcript
get_cut_transcript
videoId(required): Video IDid(required): Clip ID
get_uncut_transcript
get_uncut_transcript
videoId(required): Video IDid(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 (nostartTimeMs/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:
kind | Valid scene types | Variant fields |
|---|---|---|
fullscreen | cameraSubject, basicSubject | style: regular | stretch (camera-subject) or screenFit: cover | letterbox (basic-subject) |
middle | cameraSubject, basicSubject | shape (camera-subject) |
side-by-side | combi (landscape) | position: left | right, style: regular | even | overlap, size (when style=overlap) |
tv-presenter | combi (landscape) | position: left | right, style: regular | full | overlap |
camera-bubble | combi (all ratios) | position (9-way), shape: circle | square | landscape | portrait, size: S | M | L, optional style: regular | full, optional screenFit (when style=full) |
camera-only | combi (all ratios) | style: fullscreen | middle, punchIn (when style=fullscreen), shape (when style=middle) |
screen-only | combi (all ratios) | style: fullscreen | middle, screenFit (when style=fullscreen) |
list_layouts
list_layouts
videoId(required): Video IDid(required): Clip ID
add_layout
add_layout
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) orhardCut. 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 —sourceIdcomes fromcreate_sourceafter you upload the bytes.
slotto choose which slot the media fills:screen(the main subject frame — the default) orcamera(the bubble/presentation slot, a media bubble shown over the recording behind it). Each slot needs a layout that renders it: thescreenslot (default) requires a layout that shows the screen frame — notcamera-onlyor any*-camera-only-*variant — and thecameraslot 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 withupdate_layout.
update_layout
update_layout
videoId(required): Video IDid(required): Clip IDlayoutId(required): Layout ID (usebasefor the clip-spanning layout)layout(optional): New structured layoutstartTimeMs(optional): New start timedurationMs(optional): New durationtransitionStyle(optional):springorhardCut. Rejected on the base layout.media(optional): Set the layout’s B-roll content for one slot. Rejected on the base layout. Same shape asadd_layout’smedia, including the optionalslotfield. Additive per slot: media in the other slot is preserved, and media already in the targeted slot is replaced.
remove_layout
remove_layout
update_layout to change the base layout.Parameters:videoId(required): Video IDid(required): Clip IDlayoutId(required): Layout ID
generate_auto_layouts
generate_auto_layouts
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.Parameters:videoId(required): Video IDid(required): Clip IDstyle(optional): Editing style guiding the AI’s layout choices — one ofproduct-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). UsemanualZoom for a fixed focus point or trackingZoom to follow the cursor in the screen recording.
list_zooms
list_zooms
videoId(required): Video IDid(required): Clip ID
add_zoom
add_zoom
videoId(required): Video IDid(required): Clip IDtype(required):manualZoomortrackingZoomstartTimeMs(required): Start time in msdurationMs(required): Duration in msfocusPoint: Required formanualZoom(rejected if missing); ignored fortrackingZoom. Percentages —{xPct, yPct}(0-100).scale(required): Magnification factor (1 = no zoom, 3.5 = max). A zoom without a scale cannot be rendered.
update_zoom
update_zoom
videoId(required): Video IDid(required): Clip IDzoomId(required): Zoom IDtype(optional):manualZoomortrackingZoomstartTimeMs(optional): New start timedurationMs(optional): New durationfocusPoint(optional): New focus pointscale(optional): New magnification
remove_zoom
remove_zoom
videoId(required): Video IDid(required): Clip IDzoomId(required): Zoom ID
generate_auto_zooms
generate_auto_zooms
videoId(required): Video IDid(required): Clip IDintensity(optional): How aggressively to zoom —slow,medium(default), orfast.slowopens fewer, longer windows;fastopens 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 totrue— existing tracking zooms are removed first. Passfalseto 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-leftpoint and dimensions, both in percentages.
list_blurs / list_highlights
list_blurs / list_highlights
videoId(required): Video IDid(required): Clip ID
add_blur / add_highlight
add_blur / add_highlight
videoId(required): Video IDid(required): Clip IDstartTimeMs(required): Start time in msdurationMs(required): Duration in mspoint(required): Top-left corner —{xPct, yPct}(0-100)dimensions(required): Rectangle size —{widthPct, heightPct}(0-100)
update_blur / update_highlight
update_blur / update_highlight
videoId(required): Video IDid(required): Clip IDmaskId(required): Mask IDstartTimeMs(optional): New start timedurationMs(optional): New durationpoint(optional): New top-leftdimensions(optional): New size
remove_blur / remove_highlight
remove_blur / remove_highlight
videoId(required): Video IDid(required): Clip IDmaskId(required): Mask ID
Overlays
Place an image or video on top of a clip for a time range. A video overlay references asourceId 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_overlays
list_overlays
videoId(required): Video IDid(required): Clip ID
add_overlay
add_overlay
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 IDid(required): Clip IDstartTimeMs(required): Start time in ms (clip-relative)durationMs(required): Duration in mssourceId(optional): Source ID for a video overlay (fromcreate_source). Provide this orimageUrl.imageUrl(optional): Image URL for an image overlay. Provide this orsourceId.width(optional): Source pixel width. Required for image overlays.height(optional): Source pixel height. Required for image overlays.name(optional): Overlay namepoint(optional): Top-left corner —{xPct, yPct}(0-100), as a percentage of the story canvasdimensions(optional): Overlay size in artboard pixels —{width, height}
update_overlay
update_overlay
videoId(required): Video IDid(required): Clip IDoverlayId(required): Overlay IDstartTimeMs(optional): New start time in msdurationMs(optional): New duration in msname(optional): Overlay namepoint(optional): New top-left —{xPct, yPct}(0-100)dimensions(optional): New size in artboard pixels —{width, height}
remove_overlay
remove_overlay
videoId(required): Video IDid(required): Clip IDoverlayId(required): Overlay ID
Sound effects
Add an audio clip to play over a clip for a time range. Upload the audio withcreate_source first, then reference the returned sourceId.
list_sound_effects
list_sound_effects
videoId(required): Video IDid(required): Clip ID
add_sound_effect
add_sound_effect
create_source first, PUT the bytes to the returned uploadUrl, then pass the sourceId here.Parameters:videoId(required): Video IDid(required): Clip IDsourceId(required): Source ID for the audio (fromcreate_source)startTimeMs(required): Start time in ms (clip-relative)durationMs(required): Duration in msname(optional): Sound effect namevolume(optional): Playback volume (1 = original, must be > 0). Defaults to 1.
update_sound_effect
update_sound_effect
videoId(required): Video IDid(required): Clip IDsoundEffectId(required): Sound effect IDstartTimeMs(optional): New start time in msdurationMs(optional): New duration in msname(optional): Sound effect namevolume(optional): Playback volume (1 = original, must be > 0)
remove_sound_effect
remove_sound_effect
videoId(required): Video IDid(required): Clip IDsoundEffectId(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”