Skip to main content
Glama

suno_generate_with_custom_model

Generate music from a ready custom model with lyrics, style, or instrumental options; returns a task ID to poll for completion.

Instructions

Generate with a ready custom model, including instrumental or automatic lyrics.

Submission returns a task ID. Poll suno_get_task until finished_at is set and
inspect response.success. This operation never falls back to another model.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

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

Input Schema

NameRequiredDescriptionDefault
idYesReady custom music model ID to generate with.
lyricNoLyrics; required unless instrumental or lyric_prompt is supplied.
styleNoOptional music style.
titleNoOptional song title.
durationNoRequested duration in seconds; availability depends on the custom model.
weirdnessNo
callback_urlNoHTTPS webhook for the completed task.
instrumentalNoGenerate without vocals. Default false.
lyric_promptNoGenerate lyrics from this description.
vocal_genderNoVocal preference: f or m.
negative_tagsNoStyles to exclude.
style_influenceNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changedv0.1.25
    • addedInput schema / properties / callback_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "HTTPS webhook for the completed task.",
      +  "title": "Callback Url"
      +}
    • addedInput schema / properties / duration
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Requested duration in seconds; availability depends on the custom model.",
      +  "title": "Duration"
      +}
    • addedInput schema / properties / instrumental
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Generate without vocals. Default false.",
      +  "title": "Instrumental"
      +}
    • addedInput schema / properties / lyric / default
      Added value: +""
    • changedInput schema / properties / lyric / description
      Previous value: -"Lyrics for the generated song."New value: +"Lyrics; required unless instrumental or lyric_prompt is supplied."
    • addedInput schema / properties / lyric_prompt
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Generate lyrics from this description.",
      +  "title": "Lyric Prompt"
      +}
    • addedInput schema / properties / negative_tags
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Styles to exclude.",
      +  "title": "Negative Tags"
      +}
    • addedInput schema / properties / style / default
      Added value: +""
    • changedInput schema / properties / style / description
      Previous value: -"Music style for the generated song."New value: +"Optional music style."
    • addedInput schema / properties / style_influence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Style Influence"
      +}
    • addedInput schema / properties / title / default
      Added value: +""
    • changedInput schema / properties / title / description
      Previous value: -"Title for the generated song."New value: +"Optional song title."
    • addedInput schema / properties / vocal_gender
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "",
      +        "f",
      +        "m"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Vocal preference: f or m.",
      +  "title": "Vocal Gender"
      +}
    • addedInput schema / properties / weirdness
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Weirdness"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "id",
      -  "title",
      -  "lyric",
      -  "style"
      -]New value: +[
      +  "id"
      +]
  2. Addedv0.1.15

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description genuinely carries the load: it discloses that the call is asynchronous and returns a task ID, that completion must be polled via suno_get_task, that success must be checked via response.success, and that there is no fallback to another model. It omits cost/credit or permission implications of a generation call, which keeps it short of a 5.

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

Conciseness5/5

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

Three compact sentences, each front-loaded with an actionable fact: what it does, how to confirm the async result, and the no-fallback constraint. No filler and nothing buried.

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 12-parameter generation tool with an output schema and high schema coverage, the description supplies what structured fields cannot: the async task lifecycle and the no-fallback trait. It stops short only on prerequisites for obtaining a 'ready' model ID and any cost implication.

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 coverage is high (83%), so the schema already documents id, lyric, instrumental, callback_url, lyric_prompt and others, making a baseline of 3 appropriate. The description's only added meaning is the instrumental/automatic-lyrics dichotomy; the undocumented params (weirdness, style_influence) are left unexplained in both places.

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

Purpose4/5

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

The description states a specific verb and resource: generate audio using a ready custom model, with instrumental or automatic lyrics. This is clear but does not explicitly distinguish itself from the similarly named siblings suno_generate_custom_music and suno_generate_music, so the reader must infer that 'custom model' means a model object rather than custom music.

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

Usage Guidelines3/5

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

It gives a concrete post-call workflow (poll suno_get_task until finished_at is set, inspect response.success) and a useful non-behavior ('never falls back to another model'). However, it never states when to prefer this over suno_generate_music or suno_generate_custom_music, or what prerequisite produces a 'ready' model ID.

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