Skip to main content
Glama

Suno MCP

PyPI version License: MIT Python 3.10+ MCP

MCP server for generating music with your suno.com account — no third-party API keys, no 2Captcha, no extra paid services.

Use it from Cursor, Claude Desktop, or any MCP-compatible client to check credits, generate songs, and download MP3s.

Features

  • Your Suno account — uses your existing subscription/credits

  • No API middlemen — authenticates via Clerk in a real browser session

  • Generation tools — custom lyrics/style or simple prompt mode

  • Library access — credits, recent songs, status polling, MP3 download

Related MCP server: YouTube Music MCP

Requirements

  • Python 3.10+

  • A free or paid Suno account at suno.com

  • Chromium (installed via Playwright)

Quick Start

Install from PyPI

pip install suno-mcp
playwright install chromium
cp .env.example .env  # optional — defaults work out of the box

Install from source

git clone https://github.com/David-J-Shibley/suno-mcp.git
cd suno-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
playwright install chromium
cp .env.example .env

First run: A browser window opens. Log into Suno if prompted. Your session is saved to ~/.suno-mcp/browser-profile.

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "suno": {
      "command": "/absolute/path/to/suno-mcp/.venv/bin/python",
      "args": ["-m", "suno_mcp"],
      "env": {
        "SUNO_HEADLESS": "false"
      }
    }
  }
}

Set SUNO_HEADLESS to false — the Create button must be visible for generation to work.

Restart the MCP server after config or code changes (Cursor → Settings → MCP).

macOS Homebrew Python note

If pip fails with a pyexpat / libexpat error on macOS Tahoe, add to your MCP env:

"DYLD_LIBRARY_PATH": "/opt/homebrew/opt/expat/lib"

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "suno": {
      "command": "/absolute/path/to/suno-mcp/.venv/bin/python",
      "args": ["-m", "suno_mcp"],
      "env": {
        "SUNO_HEADLESS": "false"
      }
    }
  }
}

Tools

Tool

Description

suno_get_credits

Check your Suno credit balance

suno_get_recent

List recent songs in your library

suno_generate_song

Custom mode — lyrics + style

suno_generate_from_description

Simple mode — describe the song

suno_check_status

Poll generation status by song ID

suno_wait_for_songs

Wait until songs are ready

suno_download_song

Download MP3 to a folder

How It Works

  1. Auth — Reads JWT from window.Clerk.session.getToken() in the logged-in browser tab.

  2. Reads (credits, feed, recent) — Direct HTTPS to studio-api.prod.suno.com.

  3. Generation — Fills lyrics/style via React state, then dispatches a trusted CDP mouse click on the Create button (required by hCaptcha).

Generation approach adapted from unforced/suno-mcp.

Configuration

Variable

Default

Description

SUNO_BROWSER_PROFILE_DIR

~/.suno-mcp/browser-profile

Persistent browser profile

SUNO_HEADLESS

false

Must be false for generation

SUNO_CDP_URL

Connect to existing Chrome via CDP

SUNO_DEBUG

Set to 1 for debug logging

Optional: Use Your Own Chrome

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --remote-debugging-port=9222 \
  --user-data-dir=~/.suno-mcp/chrome-profile

Then in .env:

SUNO_CDP_URL=http://localhost:9222

Log into Suno in that Chrome window.

Troubleshooting

Not signed in — Log into suno.com/create in the browser window the MCP server opens.

Profile already in use — Restart the Suno MCP server in Cursor (only one browser instance per profile).

Empty song IDs after generate — Keep SUNO_HEADLESS=false, ensure the browser window stays visible, and restart the MCP server after updates.

Cookie dialog — Click "Allow All" once if Suno shows a privacy/cookie banner.

Limitations

  • Unofficial — Uses Suno's internal endpoints; may break when Suno updates.

  • Browser required — Generation needs a visible browser window.

  • Uses your Suno credits — Same quota as the website.

  • MVP scope — No covers, extends, or stems yet.

Disclaimer

This is an unofficial project and is not affiliated with Suno. Use at your own risk and in accordance with Suno's terms of service.

Contributing

Issues and pull requests are welcome on GitHub.

See PUBLISHING.md for PyPI release instructions.

License

MIT — see LICENSE.

Available Tools

7 tools
suno_check_statusB

Check generation status for one or more song IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. It only says 'check generation status' without disclosing whether it's read-only, error handling, rate limits, or polling behavior. Minimal behavioral insight.

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?

Description is a single, front-loaded sentence with zero waste. Every word adds value.

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 simple status-check tool with one parameter and an output schema (likely explaining return values), the description is largely sufficient. Lacks edge cases but adequate given low complexity.

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 0% meaning the tool description adds no parameter info, but the schema itself includes a description for 'song_ids'. Baseline score of 3 is appropriate since schema covers the parameter meaning.

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?

Description states verb 'check', resource 'generation status', and scope 'one or more song IDs'. It clearly differentiates from sibling tools like suno_wait_for_songs (blocking) and suno_get_recent (listing).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives such as suno_wait_for_songs. The description lacks any 'when to use' or 'when not to use' context.

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

suno_download_songA

Download a completed song as MP3 to a local folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the burden. It mentions 'completed song' implying incompleteness fails, but does not disclose file overwrite behavior, size limits, or auth requirements. Transparency is minimal.

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?

The description is a single sentence with no filler. Every word contributes meaning, making it concise and front-loaded.

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 tool is simple but lacks details about return values (output schema exists but not discussed) and edge cases like file overwriting. Given no annotations, it is adequate but not thorough.

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?

The input schema provides descriptions for all three parameters (song_id, folder, filename), so the description adds no extra meaning. With full schema coverage, baseline is 3.

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 clearly states the tool downloads a completed song as MP3 to a local folder. It uses specific verbs and resource, distinguishing it from sibling tools like song generation or status checks.

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?

The description implies usage when a completed song ID is available, but it does not explicitly state when to use this tool over alternatives or when not to use it. No mention of prerequisites or companion tools.

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

suno_generate_from_descriptionA

Generate a song from a text description (Simple/Inspiration Mode). Suno writes the lyrics automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral traits. It discloses that Suno writes lyrics automatically, which is a key behavior. However, it omits other traits such as rate limits, cost, or constraints on description length, limiting transparency.

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?

The description is two concise sentences with zero wasted words. It front-loads the core purpose and adds a critical behavioral note efficiently.

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?

Despite having an output schema (not shown), the description does not mention return values or expected output. For a simple generation tool with one parameter, the description covers input but omits output expectations, leaving some incompleteness.

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?

The description adds minimal meaning beyond the input schema. The schema's parameter description is nearly identical ('Describe the song; Suno writes lyrics automatically'). Although schema coverage is 0% by context, the schema itself provides adequate semantics, so the tool description's redundancy earns a baseline score of 3.

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 clearly states the tool generates a song from a text description, explicitly naming it as 'Simple/Inspiration Mode' and noting that Suno writes lyrics automatically. This distinguishes it from sibling suno_generate_song, which likely offers more control.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like suno_generate_song. It does not mention prerequisites, exclusions, or typical use cases, leaving the agent to infer usage from the name alone.

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

suno_generate_songA

Generate a song with custom lyrics and style (Custom Mode).

Opens/uses a browser with your Suno login. Generation runs through suno.com so no third-party API is needed. Returns clip IDs — use suno_wait_for_songs to poll.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description discloses important behavioral traits: it opens/uses a browser, requires a Suno login, and runs directly on suno.com without third-party APIs. It also states that it returns clip IDs. However, it does not mention potential side effects, rate limits, or the asynchronous nature (implicitly handled by polling suggestion).

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?

The description is three short sentences, with the main purpose in the first sentence. Each sentence adds essential information: what the tool does, how it operates, and what to do with the output. No unnecessary words.

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?

Despite lacking annotations, the description covers the core functionality, operational context (browser login, direct suno.com), and return value (clip IDs). It also suggests the next step. It could mention limitations like song length or language, but is sufficient for selection and invocation.

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?

The input schema already provides detailed descriptions for both parameters ('lyrics' and 'style'), including examples. The description only adds that it uses 'custom lyrics and style (Custom Mode)', which does not add new semantic meaning beyond what the schema provides. Given high schema coverage, a score of 3 is appropriate.

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 clearly states the tool's action ('Generate a song') and resource ('with custom lyrics and style'), explicitly naming 'Custom Mode'. This distinguishes it from the sibling tool 'suno_generate_from_description' which generates from a description rather than explicit lyrics and style.

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

Usage Guidelines4/5

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

The description provides clear context: it uses a browser with Suno login and runs through suno.com. It also tells the agent what to do next ('use suno_wait_for_songs to poll'). It does not explicitly state when not to use this tool, but the 'Custom Mode' label implies an alternative (probably description mode).

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

suno_get_creditsA

Check your Suno account credit balance (uses your logged-in suno.com session).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description discloses the authentication dependency ('uses your logged-in suno.com session') but omits other behavioral traits like rate limits, caching, or error handling. More context would be beneficial.

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?

A single, front-loaded sentence that efficiently conveys purpose and auth context. No wasted words.

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?

Given low complexity, zero parameters, and an output schema, the description is nearly complete. It could briefly mention what the balance is used for, but current version suffices.

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

Parameters4/5

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

No parameters exist; schema coverage is 100%. The description adds no parameter info, which is acceptable. Baseline for zero parameters is 4.

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 clearly states the tool checks the Suno account credit balance, using the logged-in session. It uses specific verb 'check' and resource 'credit balance', distinguishing it from siblings like suno_generate_song.

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

Usage Guidelines4/5

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

The description implies use for checking credits, but does not explicitly state when not to use or provide alternatives. However, the purpose is so clear that exclusions are unnecessary.

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

suno_get_recentB

List your recent Suno songs from your account library.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It only states the basic function (listing songs) but does not indicate whether the operation is read-only, what authentication is needed, or any rate limits or 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.

Conciseness5/5

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

The description is a single, concise sentence that immediately conveys the tool's purpose. Every word is essential, and there is no redundant or extraneous 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?

Given the tool's simplicity (one parameter, output schema present), the description is minimally viable but lacks context on usage and behavior. It does not explain pagination or ordering, which are important for a listing tool. The output schema may cover return values, but the description still feels incomplete.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the tool description does not mention any parameters. The only parameter (page) is described in the schema, but the description adds no additional meaning, failing to compensate for the lack of coverage.

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 clearly states the action (list), the resource (recent Suno songs), and the scope (from your account library). It effectively distinguishes this tool from sibling tools like suno_generate_song or suno_download_song, which have different purposes.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as suno_check_status or suno_wait_for_songs. There is no mention of prerequisites, when to call it, or when not to use it.

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

suno_wait_for_songsA

Wait until songs finish generating (up to 3 minutes), then return audio URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses the polling behavior, timeout, and return type. It could mention behavior on timeout expiration, but the core behavior is well communicated.

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?

A single, front-loaded sentence contains all essential information: wait, timeout, and return value. No waste or redundancy.

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?

Given the presence of an output schema and the tool's simplicity, the description is adequately complete. It could mention timeout behavior but is not necessary for basic use.

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?

The tool description does not mention the parameter; the schema provides a description for 'song_ids'. Since schema description coverage is high (100%), baseline is 3. No additional meaning is added beyond the schema.

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 clearly states the action (wait), the resource (songs), the condition (finish generating), a timeout (3 minutes), and the output (audio URLs). It is specific and distinguishes from siblings like suno_check_status (which likely does not wait) and generation tools.

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

Usage Guidelines4/5

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

The description implicitly guides when to use (after initiating generation) and includes the timeout constraint. However, it does not explicitly state when not to use or list alternatives, but the purpose and context are clear enough for an agent to infer.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedsuno_check_status
    • First observedsuno_download_song
    • First observedsuno_generate_from_description
    • First observedsuno_generate_song
    • First observedsuno_get_credits
    • First observedsuno_get_recent
    • First observedsuno_wait_for_songs

TDQS

A3.8/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: checking status, downloading, generating from description or custom mode, checking credits, listing recent songs, and waiting for generation. The two generate tools are well-differentiated by simple vs. custom mode with auto vs. user-provided lyrics and style.

Naming Consistency5/5

All tools follow a consistent 'suno_verb_noun' pattern with lowercase and underscores (e.g., suno_check_status, suno_generate_song). The naming is predictable and clearly indicates each tool's action and target.

Tool Count5/5

With 7 tools, the server is well-scoped for managing Suno song generation. Each tool serves a necessary function without redundancy or bloat, covering generation, status, download, credits, and listing.

Completeness4/5

The tool set covers the core song creation lifecycle: generating (two modes), monitoring status, downloading, checking credits, and listing recent songs. Missing features like canceling generation or deleting songs are minor gaps that don't severely hinder typical workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers