Turn a song and its lyrics into a word-synced lyric video, with three styles to choose from.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Widget only: reserve a free 720p export to render in the browser.
projectId returned by create_lyric_video
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Widget only: reserve a free 720p export to render in the browser.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Applies one of the three proposed style options (1, 2 or 3) to the lyric video. Replaces any edits made to the current style.
| Argument | Type | Description |
|---|---|---|
| option* | integer | |
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"option"
],
"properties": {
"option": {
"type": "integer",
"maximum": 3,
"minimum": 1
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Turns a song the user attached (MP3/WAV) into a word-synced lyric video and proposes three visual styles. Pass the lyrics if the user gave them; otherwise they are transcribed from the audio. Takes about 10–40 seconds. Creates a new project each call.
| Argument | Type | Description |
|---|---|---|
| audio* | object | The song file the user attached |
| title | string | Song title, if known |
| lyrics | string | Full song lyrics, one line per sung line, if provided by the user |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"audio"
],
"properties": {
"audio": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string"
}
},
"description": "The song file the user attached"
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Song title, if known"
},
"lyrics": {
"type": "string",
"maxLength": 20000,
"description": "Full song lyrics, one line per sung line, if provided by the user"
}
}
}Replaces the text of one lyric line (numbered from 1, as listed by get_lyric_video), keeping its timing. Use it to fix misheard or misspelled words.
| Argument | Type | Description |
|---|---|---|
| line* | integer | |
| text* | string | |
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"line",
"text"
],
"properties": {
"line": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"text": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Renders the lyric video in 1080p without a watermark, as 16:9 (landscape) or 9:16 (vertical). Requires the user's LyricVideoGenerator account: it uses 1 credit from their plan (or is free if this song was already unlocked on the website). Credits are refunded if the render fails. Returns an exportId; the widget shows progress and the download link.
| Argument | Type | Description |
|---|---|---|
| aspect | string | 16:9 for YouTube, 9:16 for TikTok / Reels / Shorts |
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"aspect": {
"enum": [
"16:9",
"9:16"
],
"type": "string",
"default": "16:9",
"description": "16:9 for YouTube, 9:16 for TikTok / Reels / Shorts"
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Free export: a 720p, 16:9 MP4 with a small watermark and a 2.5-second end card. It renders on the user's own computer inside the widget (about as long as the song), so this tool shows the widget and starts the export there; the user downloads the MP4 from the widget when it finishes. If their ChatGPT app can't render video, the widget offers to open the project in their browser instead.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Widget only: complete a browser-rendered export after its upload, or fail it with an error.
| Argument | Type | Description |
|---|---|---|
| error | string | |
| assetId | string | |
| exportId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"exportId"
],
"properties": {
"error": {
"type": "string",
"maxLength": 2000
},
"assetId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"exportId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}Returns the status of a video export and, when finished, its MP4 download URL.
| Argument | Type | Description |
|---|---|---|
| exportId* | string | exportId of the export |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"exportId"
],
"properties": {
"exportId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "exportId of the export"
}
}
}Returns a lyric video project's processing status, its three style options, the style now applied, and its numbered lyric lines.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Widget only: a short-lived link that opens this project in the user's browser, where it can be exported.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Changes the look of the current lyric video style: layout, word animation, colors, font, text size, background, and chorus emphasis. Send only the fields to change. Colors are #RRGGBB. Unreadable color combinations and unknown fonts are corrected or rejected with a reason.
| Argument | Type | Description |
|---|---|---|
| changes* | object | |
| projectId* | string | projectId returned by create_lyric_video |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"changes"
],
"properties": {
"changes": {
"type": "object",
"properties": {
"font": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Any Google Fonts family name, e.g. \"Bebas Neue\""
},
"name": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Rename the style"
},
"align": {
"enum": [
"left",
"center"
],
"type": "string"
},
"chorus": {
"type": "object",
"properties": {
"scale": {
"type": "number",
"maximum": 2.5,
"minimum": 0.5
},
"accent": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"animation": {
"enum": [
"word-highlight",
"karaoke",
"line-fade",
"word-pop",
"typewriter",
"word-kinetic",
"line-stack"
],
"type": "string"
}
},
"description": "Overrides applied only during choruses"
},
"palette": {
"type": "object",
"properties": {
"bg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Background color"
},
"fg": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Lyric text color"
},
"muted": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Inactive lines color"
},
"accent": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Current word / emphasis color"
}
}
},
"template": {
"enum": [
"focus",
"scroll",
"caption",
"poster"
],
"type": "string",
"description": "Layout: focus = one big centered line; scroll = lyrics scroll with the current line highlighted; caption = subtitle-style lower-left; poster = giant left-aligned words filling the frame"
},
"animation": {
"enum": [
"word-highlight",
"karaoke",
"line-fade",
"word-pop",
"typewriter",
"word-kinetic",
"line-stack"
],
"type": "string",
"description": "Word motion: word-highlight, karaoke (left-to-right fill), line-fade, word-pop, typewriter, word-kinetic (each word pops in on its beat), line-stack (lines push up)"
},
"fontScale": {
"type": "number",
"maximum": 2.5,
"minimum": 0.5,
"description": "Text size multiplier, 1 = template default"
},
"uppercase": {
"type": "boolean"
},
"background": {
"type": "object",
"required": [
"kind"
],
"properties": {
"to": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"from": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"kind": {
"enum": [
"solid",
"gradient",
"cover-blur"
],
"type": "string"
},
"angle": {
"type": "number",
"maximum": 360,
"minimum": 0
}
},
"description": "solid = palette.bg; gradient = from→to; cover-blur = blurred song cover (only when the song has a cover)"
},
"fontWeight": {
"anyOf": [
{
"type": "number",
"const": 400
},
{
"type": "number",
"const": 500
},
{
"type": "number",
"const": 600
},
{
"type": "number",
"const": 700
},
{
"type": "number",
"const": 800
},
{
"type": "number",
"const": 900
}
]
},
"showCoverBadge": {
"type": "boolean"
}
},
"additionalProperties": false
},
"projectId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "projectId returned by create_lyric_video"
}
}
}Widget only: storage upload target for a browser-rendered MP4.
| Argument | Type | Description |
|---|---|---|
| bytes* | integer | |
| exportId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"exportId",
"bytes"
],
"properties": {
"bytes": {
"type": "integer",
"maximum": 524288000,
"exclusiveMinimum": 0
},
"exportId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}