Ssemble AI Clipping
Create AI-powered short-form video clips from YouTube videos. Supports webhook callbacks.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"@ssemble/mcp-server"
]
}
}
}Runnable packages
1.1.14stdioRemote endpoints
https://mcp.ssemble.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟡create_short(url, fileUrl, start, end, preferredLength, ...)
Create AI-generated short-form video clips from a YouTube video or uploaded file. Returns a request ID instantly. Processing takes 5-30 minutes. Costs 1 credit.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "YouTube video URL"
},
"fileUrl": {
"type": "string",
"format": "uri",
"description": "Public video file URL (alternative to url)"
},
"start": {
"type": "number",
"minimum": 0,
"description": "Start time in seconds (>= 0)"
},
"end": {
"type": "number",
"minimum": 1,
"description": "End time in seconds (> start, max 1200s window)"
},
"preferredLength": {
"type": "string",
"enum": [
"under30sec",
"under60sec",
"under90sec",
"under3min",
"under5min",
"under10min"
],
"default": "under60sec",
"description": "Target clip duration"
},
"maxShorts": {
"type": "integer",
"minimum": 1,
"maximum": 12,
"description": "Maximum number of shorts to create (1-12). Keeps the highest-scoring clips and never pads, so short videos may return fewer. Omit to get up to 12."
},
"language": {
"type": "string",
"enum": [
"en",
"es",
"fr",
"de",
"it",
"pt",
"ru",
"ja",
"ko",
"zh",
"ar",
"hi",
"tr",
"pl",
"nl",
"sv",
"no",
"da",
"fi",
"cs",
"vi",
"id",
"fa",
"uk",
"af",
"ca",
"et",
"fo",
"gl",
"is",
"ms",
"sq",
"sw",
"tl",
"ro",
"sk",
"hr",
"sl",
"hu",
"lv",
"lt",
"bs",
"az",
"bg",
"mk",
"sr",
"mt",
"el",
"ne",
"mr",
"ka",
"hy",
"ur",
"he"
],
"default": "en",
"description": "Spoken language (ISO 639-1)"
},
"captionLanguage": {
"type": "string",
"enum": [
"en",
"es",
"fr",
"de",
"it",
"pt",
"ru",
"ja",
"ko",
"zh",
"ar",
"hi",
"tr",
"pl",
"nl",
"sv",
"no",
"da",
"fi",
"cs",
"vi",
"id",
"fa",
"uk",
"af",
"ca",
"et",
"fo",
"gl",
"is",
"ms",
"sq",
"sw",
"tl",
"ro",
"sk",
"hr",
"sl",
"hu",
"lv",
"lt",
"bs",
"az",
"bg",
"mk",
"sr",
"mt",
"el",
"ne",
"mr",
"ka",
"hy",
"ur",
"he"
],
"description": "Caption language if different from spoken"
},
"templateId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Caption template ID from list_templates (24-char hex)"
},
"noClipping": {
"type": "boolean",
"default": false,
"description": "Skip AI clipping, process entire range as one clip"
},
"hookTitle": {
"type": "boolean",
"default": false,
"description": "Add animated hook title at start"
},
"memeHook": {
"type": "boolean",
"default": false,
"description": "Prepend a meme hook clip (2-5s attention grabber)"
},
"memeHookName": {
"type": "string",
"description": "Exact meme hook name from list_meme_hooks (case-sensitive)"
},
"gameVideo": {
"type": "boolean",
"default": false,
"description": "Add split-screen gameplay overlay"
},
"gameVideoName": {
"type": "string",
"description": "Exact game video name from list_game_videos (case-sensitive)"
},
"ctaEnabled": {
"type": "boolean",
"default": false,
"description": "Show call-to-action text overlay"
},
"ctaText": {
"type": "string",
"maxLength": 200,
"description": "CTA text (max 200 chars, required when ctaEnabled=true)"
},
"music": {
"type": "boolean",
"default": false,
"description": "Add background music"
},
"musicName": {
"type": "string",
"description": "Exact track name from list_music (case-sensitive)"
},
"musicNames": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 20,
"description": "Several exact track names from list_music (case-sensitive); each short uses one of them at random. Use instead of musicName. Requires music=true."
},
"musicVolume": {
"type": "number",
"minimum": 0,
"maximum": 100,
"default": 10,
"description": "Music volume 0-100"
},
"layout": {
"type": "string",
"enum": [
"auto",
"fill",
"fit",
"square"
],
"default": "auto",
"description": "Video framing layout"
},
"captionsEnabled": {
"type": "boolean",
"default": true,
"description": "Burn captions into the clips (default true). Set false for sources that already have captions."
},
"outroEnabled": {
"type": "boolean",
"default": false,
"description": "Append an end-screen outro card (bell animation + \"Please subscribe\" text) after each clip. Default false."
},
"outroText": {
"type": "string",
"maxLength": 80,
"description": "Custom outro text (max 80 chars). Omit for the localized default (\"Please subscribe\"). Requires outroEnabled=true."
},
"outroImageUrl": {
"type": "string",
"format": "uri",
"description": "Public image URL for a custom outro card instead of the stock bell card. Requires outroEnabled=true."
},
"outroSeconds": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"default": 2,
"description": "Outro duration in seconds (1-3, default 2). Requires outroEnabled=true."
},
"outroSting": {
"type": "boolean",
"default": true,
"description": "Play the short bell sound on the outro (default true). Requires outroEnabled=true."
},
"outroHandle": {
"type": "string",
"maxLength": 40,
"description": "Channel handle shown on the outro card, e.g. \"@mychannel\" (max 40 chars). Requires outroEnabled=true."
},
"blurBackground": {
"type": "boolean",
"description": "Background behind the clip when the source does not fill the 9:16 canvas (mainly layout=fit): true = blurred copy of the video, false = solid color (backgroundColor, else the account's saved color, else the template color). Omit to use the account's saved editor preference (default: blurred)."
},
"backgroundColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Solid background color as hex, e.g. \"#000000\". Only with blurBackground=false. Omit to use the account's saved background color, else the template color."
},
"includeSourceLink": {
"type": "boolean",
"description": "When these clips are later scheduled from the Ssemble web app (Share / Calendar), end each caption with \"Source: <link>\": customSourceLink if set, else the original YouTube video. Omit to use the account's last scheduler choice. Does not change the clips."
},
"customSourceLink": {
"type": "string",
"maxLength": 300,
"description": "Own link for the Source line, e.g. \"mysite.com/videos\" (https:// added if missing, max 300 chars). Requires includeSourceLink=true."
},
"webhookUrl": {
"type": "string",
"format": "uri",
"description": "Optional webhook URL for completion/failure notifications. Receives a POST with results when processing finishes."
}
},
"required": [
"start",
"end"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_status(requestId)
Check processing status of a short creation request. Provide a request ID, or omit it to see your recent requests and pick one.
Input Schema
{
"type": "object",
"properties": {
"requestId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "The request ID from create_short (24-char hex). Omit to see your recent requests."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_shorts(requestId)
Retrieve all generated short clips for a completed request. Provide a request ID, or omit it to see your recent requests and pick one.
Input Schema
{
"type": "object",
"properties": {
"requestId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "The request ID from create_short (24-char hex). Omit to see your recent requests."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_requests(page, limit, status, sortBy, sortOrder)
List all short creation requests with optional status filtering, pagination, and sorting.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"minimum": 1,
"default": 1,
"description": "Page number"
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Items per page (1-100)"
},
"status": {
"type": "string",
"enum": [
"queued",
"processing",
"completed",
"failed",
"cancelled"
],
"description": "Filter by status"
},
"sortBy": {
"type": "string",
"enum": [
"createdAt",
"updatedAt"
],
"default": "createdAt",
"description": "Sort field"
},
"sortOrder": {
"type": "string",
"enum": [
"asc",
"desc"
],
"default": "desc",
"description": "Sort direction"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_request(requestId)
Permanently delete a short creation request and all generated videos. Credits are NOT refunded. This action is irreversible.
Input Schema
{
"type": "object",
"properties": {
"requestId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "The request ID to delete (24-char hex). This action is irreversible and credits are NOT refunded."
}
},
"required": [
"requestId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_templates
List all available caption style templates with preview thumbnails, names, and IDs. Use the templateId when creating shorts.
Input Schema
{
"type": "object",
"properties": {}
}🟢list_music(page, limit)
List available background music tracks with names and durations. Use the exact musicName when creating shorts.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"minimum": 1,
"default": 1,
"description": "Page number"
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Items per page (1-100)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_game_videos(page, limit)
List available gameplay videos for split-screen overlays (content top, game bottom). Use the exact gameVideoName when creating shorts.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"minimum": 1,
"default": 1,
"description": "Page number"
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Items per page (1-100)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_meme_hooks(page, limit)
List available meme hook clips (2-5 second attention grabbers prepended to shorts). Use the exact memeHookName when creating shorts.
Input Schema
{
"type": "object",
"properties": {
"page": {
"type": "number",
"minimum": 1,
"default": 1,
"description": "Page number"
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Items per page (1-100)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡list_posts(status, platform, source, requestId, shortId, ...)
List your scheduled and published social posts (YouTube, Instagram, TikTok) with status, public URL and publish time. Filter by status, platform, request, clip or time window; use date=published with since to find posts that went live after a given moment.
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"scheduled",
"processing",
"published",
"failed",
"canceled"
],
"description": "Filter by post status: scheduled (queued), processing (uploading or waiting for the platform), published (live, has url), failed (has error), canceled"
},
"platform": {
"type": "string",
"enum": [
"youtube",
"instagram",
"tiktok"
],
"description": "Filter by platform"
},
"source": {
"type": "string",
"enum": [
"manual",
"automation"
],
"description": "manual = scheduled by hand from the shorts list; automation = posted by channel automation"
},
"requestId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Only posts made from this request (24-char hex request ID)"
},
"shortId": {
"type": "string",
"format": "uuid",
"description": "Only posts made from this clip (short ID)"
},
"since": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 lower bound. Applies to scheduledAt, or to publishedAt when date=published"
},
"until": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 upper bound (same field as since)"
},
"date": {
"type": "string",
"enum": [
"scheduled",
"published"
],
"description": "Which timestamp since/until filter and sort by. Use \"published\" with since to poll for newly live posts."
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Items per page (1-100)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence