Generate Suno AI music (v5.5) from any MCP client. Async; billed only on success.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your Tunova API key (sk_live_…). Get one free at https://tunova.ai
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.
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.
The job_id returned by generate_song.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | The job_id returned by generate_song. |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "The job_id returned by generate_song."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| tags | string | Style/genre, e.g. 'lofi hip hop, mellow, rainy'. Most useful in custom mode. |
| model | string | Suno model: v6, or v5.5 as a compatibility alias for v6. Optional; the account default is unchanged. |
| title | string | Song title (custom mode). |
| custom | boolean | false (default): describe the song and Suno writes everything. true: `prompt` is the literal lyrics, and `tags`/`title` are used. |
| prompt* | string | What the song should be about (simple mode), or the exact lyrics (when custom=true). |
| instrumental | boolean | If true, generate without vocals. |
| idempotency_key | string | 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. |
{
"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": [
"v6",
"v5.5"
],
"type": "string",
"description": "Suno model: v6, or v5.5 as a compatibility alias for v6. Optional; the account default is unchanged."
},
"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 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.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | The job_id returned by generate_song. |
| max_wait_seconds | number | How long to wait before returning (default 45, max 55). |
{
"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
}