Skip to main content
Glama

suno_generate_custom_music

Create a custom AI song by supplying your own lyrics, style, and title, with optional vocal gender and duration controls for a track tailored to your vision.

Instructions

Generate AI music with full control over lyrics, title, and style (Custom Mode).

This gives you complete creative control over the song. You provide the lyrics
with section markers, and Suno generates the melody and arrangement.

Use this when:
- You have specific lyrics you want to use
- You want precise control over the music style
- You need a specific song title
- You want to specify vocal gender (v4.5+ models)
- You want the API to auto-generate lyrics from a prompt (use lyric_prompt)
- You need a specific track length (use duration)

For quick generation without writing lyrics, use suno_generate_music instead.

Returns:
    Task ID and generated audio information including URLs, title, lyrics, and duration.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
lyricNoSong lyrics with section markers. Use [Verse], [Chorus], [Pre-Chorus], [Bridge], [Outro], [Intro] to structure the song. Example: [Verse 1] Walking down the empty street Rain is falling at my feet [Chorus] But I keep moving on Until the break of dawn. Leave empty when using lyric_prompt to auto-generate lyrics.
modelNoSuno model version. 'chirp-v5-5' or 'chirp-v5' recommended for best quality.chirp-v5-5
styleNoMusic style description. Be specific about genre, mood, tempo, and instruments. Examples: 'upbeat pop rock, energetic drums, electric guitar', 'acoustic folk, gentle, fingerpicking', 'dark electronic, synthwave, 80s retro'
titleNoTitle of the song. Keep it concise and memorable.
durationNoTarget length of the generated track in seconds, an integer between 10 and 360. Only takes effect for the 'generate' action in custom mode with model 'chirp-v5-5'; other combinations return a 400 error. The finished track lands near this value but is not guaranteed to match it exactly.
weirdnessNoAdvanced parameter for custom mode. Controls how unusual/experimental the generation is.
callback_urlNoWebhook callback URL for asynchronous notifications. When provided, the API will call this URL when the audio is generated.
instrumentalNoIf true, generate instrumental version (lyrics will be ignored). Default is false.
lyric_promptNoPrompt text for auto-generating lyrics. Only used when custom is true and lyric is empty.
vocal_genderNoPreferred vocal gender. 'f' for female, 'm' for male, empty string for AI to decide. Only works with v4.5+ models.
negative_tagsNoStyles or genres to explicitly exclude from custom generation. Examples: 'heavy metal, screaming', 'autotune, electronic'
style_influenceNoAdvanced parameter for custom mode. Controls how strongly the style prompt influences the generation.
variation_categoryNoVariation intensity for v5+ models. 'high' for maximum variation, 'normal' for balanced, 'subtle' for minimal changes. Only supported in chirp-v5 and above.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.1.18
    • changedInput schema / properties / model / enum
      Previous value: -[
      -  "chirp-v3-0",
      -  "chirp-v3-5",
      -  "chirp-v4",
      -  "chirp-v4-5",
      -  "chirp-v4-5-plus",
      -  "chirp-v5",
      -  "chirp-v5-5"
      -]New value: +[
      +  "chirp-v6",
      +  "chirp-v6-wild",
      +  "chirp-v6-mini",
      +  "chirp-v3-0",
      +  "chirp-v3-5",
      +  "chirp-v4",
      +  "chirp-v4-5",
      +  "chirp-v4-5-plus",
      +  "chirp-v5",
      +  "chirp-v5-5"
      +]
  2. Changed2 schema fields changedv0.1.13
    • changedInput schema / properties / lyric_prompt / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / lyric_prompt / description
      Previous value: -"Prompt for auto-generating lyrics. Only used when custom is true and lyric is empty. Provide a dict with the lyric generation parameters (e.g. {'prompt': 'A song about winter'})."New value: +"Prompt text for auto-generating lyrics. Only used when custom is true and lyric is empty."
  3. Changed3 schema fields changedv0.1.10
    • addedInput schema / properties / duration
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Target length of the generated track in seconds, an integer between 10 and 360. Only takes effect for the 'generate' action in custom mode with model 'chirp-v5-5'; other combinations return a 400 error. The finished track lands near this value but is not guaranteed to match it exactly.",
      +  "title": "Duration"
      +}
    • addedInput schema / properties / negative_tags
      Added value: +{
      +  "default": "",
      +  "description": "Styles or genres to explicitly exclude from custom generation. Examples: 'heavy metal, screaming', 'autotune, electronic'",
      +  "title": "Negative Tags",
      +  "type": "string"
      +}
    • removedInput schema / properties / style_negative
      Removed value: -{
      -  "default": "",
      -  "description": "Styles to explicitly exclude from the generation. Examples: 'heavy metal, screaming', 'autotune, electronic'",
      -  "title": "Style Negative",
      -  "type": "string"
      -}
  4. Addedv0.1.5
  5. Removedv0.1.3
  6. Changed8 schema fields changedv0.1.1
    • addedInput schema / properties / lyric / default
      Added value: +""
    • changedInput schema / properties / lyric / description
      Previous value: -"Song lyrics with section markers. Use [Verse], [Chorus], [Pre-Chorus], [Bridge], [Outro], [Intro] to structure the song. Example:\n[Verse 1]\nWalking down the empty street\nRain is falling at my feet\n\n[Chorus]\nBut I keep moving on\nUntil the break of dawn"New value: +"Song lyrics with section markers. Use [Verse], [Chorus], [Pre-Chorus], [Bridge], [Outro], [Intro] to structure the song. Example:\n[Verse 1]\nWalking down the empty street\nRain is falling at my feet\n\n[Chorus]\nBut I keep moving on\nUntil the break of dawn. Leave empty when using lyric_prompt to auto-generate lyrics."
    • addedInput schema / properties / lyric_prompt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Prompt for auto-generating lyrics. Only used when custom is true and lyric is empty. Provide a dict with the lyric generation parameters (e.g. {'prompt': 'A song about winter'}).",
      +  "title": "Lyric Prompt"
      +}
    • addedInput schema / properties / style_influence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Advanced parameter for custom mode. Controls how strongly the style prompt influences the generation.",
      +  "title": "Style Influence"
      +}
    • addedInput schema / properties / title / default
      Added value: +""
    • addedInput schema / properties / variation_category
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "high",
      +        "normal",
      +        "subtle"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Variation intensity for v5+ models. 'high' for maximum variation, 'normal' for balanced, 'subtle' for minimal changes. Only supported in chirp-v5 and above.",
      +  "title": "Variation Category"
      +}
    • addedInput schema / properties / weirdness
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Advanced parameter for custom mode. Controls how unusual/experimental the generation is.",
      +  "title": "Weirdness"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "lyric",
      -  "title"
      -]
  7. First observedv0.1.0

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, but it only partially disclosures behavior. It explains that the tool 'generates melody and arrangement' and returns 'Task ID and generated audio information including URLs, title, lyrics, and duration', which is useful. However, it does not describe the likely asynchronous nature, rate limits, or any side effects beyond generation, so it feels like a baseline level of disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a direct opening, a concise 'Use this when' bullet list, and an explicit alternative. It is slightly redundant (saying 'full control' twice) and the third paragraph on Returns is brief, but overall it is efficiently presented and drops the most important targeting information first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 13 optional parameters and no annotations, the description covers the essential context: how to use it, when to use it, when to use a sibling, and what to expect as a result. The output schema handles the return details, and the description adequately explains the primary use case, although it does not address asynchronous behavior or the trade-offs of optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The tool description echoes several parameters (lyric, vocal_gender, duration, lyric_prompt) but does not add new meaning beyond the already detailed schema; it only reinforces what is documented there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Generate AI music with full control over lyrics, title, and style (Custom Mode)', which names a specific verb, resource, and mode. It clearly differentiates itself from the simpler suno_generate_music by emphasizing full creative control over lyrics, style, title, and advanced options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit 'Use this when:' list covering specific lyrics, precise style control, desired title, vocal gender, auto-generated lyrics, and track length. It also explicitly names suno_generate_music as the alternative for quick generation without writing lyrics, leaving no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.