Skip to main content
Glama

suno_generate_custom_music

Generate custom AI music with your own lyrics, title, style, vocal gender, and duration. Use it when you need precise control over song structure, melody, and arrangement.

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.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "suno_generate_custom_music"
  }
}

Input 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.
varietyNoResult diversity: off, normal, high, extra, or max.
durationNoTarget length in whole seconds (10-360). Only generate uses duration; the model may ignore this target. Actual length comes from the result.
max_modeNoEnable enhanced generation with a higher API price. Omitted/false keeps normal pricing.
weirdnessNoAdvanced parameter for custom mode. Controls how unusual/experimental the generation is.
audio_weightNoAudio influence; 0 is a valid explicit value.
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 exclude in custom mode (custom=true). The API currently sets no fixed character limit, but overly long content may still fail; keep it concise. 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

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.1.25
    • addedInput schema / properties / audio_weight
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Audio influence; 0 is a valid explicit value.",
      +  "title": "Audio Weight"
      +}
    • changedInput schema / properties / duration / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 360,
      +    "minimum": 10,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / duration / description
      Previous value: -"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."New value: +"Target length in whole seconds (10-360). Only generate uses duration; the model may ignore this target. Actual length comes from the result."
    • addedInput schema / properties / max_mode
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Enable enhanced generation with a higher API price. Omitted/false keeps normal pricing.",
      +  "title": "Max Mode"
      +}
    • addedInput schema / properties / variety
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "off",
      +        "normal",
      +        "high",
      +        "extra",
      +        "max"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Result diversity: off, normal, high, extra, or max.",
      +  "title": "Variety"
      +}
  2. Changed1 schema field changedv0.1.22
    • changedInput schema / properties / negative_tags / description
      Previous value: -"Styles or genres to explicitly exclude from custom generation. Examples: 'heavy metal, screaming', 'autotune, electronic'"New value: +"Styles or genres to exclude in custom mode (custom=true). The API currently sets no fixed character limit, but overly long content may still fail; keep it concise. Examples: 'heavy metal, screaming', 'autotune, electronic'"
  3. 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"
      +]
  4. 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."
  5. 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"
      -}
  6. Addedv0.1.5
  7. Removedv0.1.3
  8. 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"
      -]
  9. First observedv0.1.0

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. It reveals that the call returns a Task ID (implying asynchronous job flow) and lists what comes back, but it says nothing about cost/pricing tiers (only the schema mentions max_mode pricing), polling, or the fact that the tool produces a new artifact with no destructive side effects.

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?

Front-loaded purpose sentence, a tight bulleted usage list, the sibling redirect, and a return summary. Well sized for 16 parameters; the bullet list mildly duplicates the schema's own descriptions but never buries the key routing information.

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

Completeness3/5

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

The output schema and full param coverage mean the description needn't explain fields, and it correctly covers purpose and routing. However, for a 16-param async generation tool with no annotations, it omits how to follow up on the Task ID and the lyric-vs-lyric_prompt vs instrumental precedence, which an agent needs to call it correctly.

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 schema already documents every one of the 16 parameters thoroughly. The description only restates the lyric/duration/vocal_gender behaviors that the schema spells out in more detail, adding no new semantics such as how lyric_prompt interacts with instrumental mode.

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?

States a specific verb and resource ('Generate AI music') and names the distinguishing mode: full control over lyrics, title, and style (Custom Mode). The contrast with the plain generation sibling is made explicit, so an agent can route without opening the schema.

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?

An explicit 'Use this when' list enumerates the selecting conditions (own lyrics, precise style control, title, vocal gender, lyric_prompt, duration) and closes with the direct alternative: use suno_generate_music for quick generation without lyrics. When-to-use and when-not-to-use are both present.

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