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.Documentation Index
Fetch the complete documentation index at: https://tella.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Endpoint
Setup
- Claude Code
- Claude Desktop
- Cursor
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.Available tools
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 indexing
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
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.
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)height(optional): Output height in pixels (default 180)download(optional): Suggest a download disposition on the signed URL
get_video_thumbnail
get_video_thumbnail
get_clip_thumbnail.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.Parameters:videoId(required): Video IDid(required): Clip IDlayout(required): Structured layout object (see table above)startTimeMs(optional): Start time in msdurationMs(optional): Duration in mstransitionStyle(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 whosekinddisplays the screen slot (i.e. notcamera-onlyor any*-camera-only-*variant). Either:{type: "image", imageUrl, width, height}for an image, or{type: "video", sourceId}for a video —sourceIdcomes fromcreate_sourceafter you upload the bytes.
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): Replace the layout’s B-roll content. Rejected on the base layout. Same shape asadd_layout’smedia—{type: "image", imageUrl, width, height}or{type: "video", sourceId}.
remove_layout
remove_layout
update_layout to change the base layout.Parameters:videoId(required): Video IDid(required): Clip IDlayoutId(required): Layout ID
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(optional): Required formanualZoom; ignored fortrackingZoom. Percentages —{xPct, yPct}(0-100).scale(optional): Magnification factor (1 = no zoom, 3.5 = max)
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
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
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”