MCP Server

tunova

io.github.erliona/tunova
Design & Creative Media & Content Public & reachable MCP 2026-07-28

What this MCP does

Generates Suno AI songs asynchronously and provides job status and completed audio URLs.

check_song
Get the current status of a song job by job_id — a single check with no waiting. Returns the audio URLs if complete, an error if it failed, or 'processing' if still rendering.
Input schema
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'The job_id returned by generate_song.'}}, 'additionalProperties': False}
generate_song
Start generating a song with Suno. Returns immediately with a job_id — a full render takes 1-3 minutes, so this does NOT return audio. After calling this, call wait_for_song with the returned job_id to get the audio URL when ready. Costs 10 tokens, billed only on success.
Input schema
{'type': 'object', 'required': ['prompt'], 'properties': {'tags': {'type': 'string', 'description': "Style/genre, e.g. 'lofi hip hop, mellow, rainy'. Most useful in custom mode."}, 'model': {'enum': ['v5.5'], 'type': 'string', 'description': 'Suno model version (v5.5 — the only model). Optional; defaults to v5.5.'}, 'title': {'type': 'string', 'description': 'Song title (custom mode).'}, 'custom': {'type': 'boolean', 'description': 'false (default): describe the song and Suno writes everything. true: `prompt` is the literal lyrics, and `tags`/`title` are used.'}, 'prompt': {'type': 'string', 'description': 'What the song should be about (simple mode), or the exact lyrics (when custom=true).'}, 'instrumental': {'type': 'boolean', 'description': 'If true, generate without vocals.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Optional logical-request id. Reuse it to recover one submit; use a new value to intentionally generate the same song again or retry after a terminal failed job. When omitted, Tunova derives a stable key from the song arguments for safe automatic retries.'}}, 'additionalProperties': False}
wait_for_song
Wait for a song job to finish and return the audio when ready. Polls server-side for up to ~45 seconds. If the song is ready, returns the clips with audio URLs. If it is still rendering, returns its status so you can call wait_for_song again with the same job_id. Safe to call repeatedly — it only reads status, never starts a new song.
Input schema
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'The job_id returned by generate_song.'}, 'max_wait_seconds': {'type': 'number', 'description': 'How long to wait before returning (default 45, max 55).'}}, 'additionalProperties': False}
Added
check_song
Sept. 17, 2026, 12:41 p.m.
Added
wait_for_song
Sept. 17, 2026, 12:41 p.m.
Added
generate_song
Sept. 17, 2026, 12:41 p.m.