Suno MCP
Generates music using your Suno account, including checking credits, generating songs with custom lyrics or simple prompts, and downloading MP3s.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Suno MCPGenerate a pop song about summer with male vocals"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Suno 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 boxInstall 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 .envFirst 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 |
| Check your Suno credit balance |
| List recent songs in your library |
| Custom mode — lyrics + style |
| Simple mode — describe the song |
| Poll generation status by song ID |
| Wait until songs are ready |
| Download MP3 to a folder |
How It Works
Auth — Reads JWT from
window.Clerk.session.getToken()in the logged-in browser tab.Reads (credits, feed, recent) — Direct HTTPS to
studio-api.prod.suno.com.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 |
|
| Persistent browser profile |
|
| Must be |
| — | Connect to existing Chrome via CDP |
| — | Set to |
Optional: Use Your Own Chrome
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=~/.suno-mcp/chrome-profileThen in .env:
SUNO_CDP_URL=http://localhost:9222Log 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 toolssuno_check_statusB
Check generation status for one or more song IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v0.1.0- First observed
suno_check_status - First observed
suno_download_song - First observed
suno_generate_from_description - First observed
suno_generate_song - First observed
suno_get_credits - First observed
suno_get_recent - First observed
suno_wait_for_songs
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for Suno AI music generation, lyrics, and covers
MCP server for Producer/Riffusion AI music generation
Generate Suno AI music (v5.5) from any MCP client. Async; billed only on success.
An MCP server that integrates with Discord to provide AI-powered features.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that allows AI models to control YouTube Music playback through Google Chrome by searching and playing songs using song and artist names.22MIT
- AlicenseBqualityDmaintenanceA simple MCP server that allows AI assistants like Cursor or Claude Desktop to search for and play tracks on YouTube Music through natural language commands.237 npm12MIT
- FlicenseAqualityDmaintenanceA Model Context Protocol server that allows AI assistants to generate music through the Suno API, supporting custom lyrics and style inputs or inspiration-based creation.128-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents the ability to listen to and understand music/audio files, enabling semantic analysis, stem separation, lyrics transcription, and signal processing via tool calls.1MIT