suno-mcp
<h1 align="center">RunAPI Suno MCP Server</h1>
<p align="center">
<strong>Suno API access for AI agents: run multimodal generation operations, poll asynchronous results, and check pricing through one focused MCP server.</strong>
</p>
<p align="center">
<sub>Works with Claude Code, Codex, Cursor, Windsurf, VS Code, Roo Code, and any MCP-compatible host.</sub>
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@runapi.ai/suno-mcp"><img src="https://img.shields.io/npm/v/%40runapi.ai/suno-mcp?style=flat-square&color=blue" alt="npm version"></a>
<a href="https://github.com/runapi-ai/suno-mcp"><img src="https://img.shields.io/badge/GitHub-runapi--ai%2Fsuno--mcp-24292f?style=flat-square" alt="GitHub repository"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue?style=flat-square" alt="Apache-2.0 license"></a>
<img src="https://img.shields.io/badge/Type-MCP_Server-blue?style=flat-square" alt="MCP Server">
<img src="https://img.shields.io/badge/Models-9-16a34a?style=flat-square" alt="9 models">
</p>
<p align="center">
<a href="#install">Install</a> |
<a href="#tools">Tools</a> |
<a href="#models">Models</a> |
<a href="#agent-prompts">Agent Prompts</a> |
<a href="#configuration">Configuration</a> |
<a href="#links">Links</a>
</p>
---
## Why This Package?
`@runapi.ai/suno-mcp` is a focused Model Context Protocol server for the **Suno** model line on RunAPI.
It gives MCP-compatible assistants direct access to 18 endpoints and 9 model variants without loading the full RunAPI catalog.
Use this per-model server when an agent should stay scoped to Suno. Use [`@runapi.ai/mcp`](https://github.com/runapi-ai/mcp) when one assistant should discover every RunAPI model line.
---
## Install
Add it to Claude Code:
```bash
claude mcp add suno -s user -- npx -y @runapi.ai/suno-mcp
```
Use project scope when the server should be shared with a repository:
```bash
claude mcp add suno -s project -- npx -y @runapi.ai/suno-mcp
```
Codex, Cursor, Windsurf, VS Code, Roo Code, and other MCP hosts can use the same stdio command:
```json
{
"mcpServers": {
"suno": {
"command": "npx",
"args": ["-y", "@runapi.ai/suno-mcp"]
}
}
}
```
`check_pricing` works before sign-in. For task creation and status polling, ask your assistant to call the `login` tool. It opens a browser login and saves credentials to `~/.config/runapi/config.json`, the same file used by `runapi login`.
Headless and CI hosts can still set `RUNAPI_API_KEY` before starting the MCP host.
Ready-made examples are in [`examples/`](examples/) for Claude, Cursor, Windsurf, VS Code, and Roo Code.
---
## Tools
| Tool | Auth | Purpose |
|---|---|---|
| `convert_audio` | Yes | Create a Suno convert audio task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `blend_lyrics` | Yes | Create a Suno blend lyrics task and optionally wait for a terminal status. Returns the task id, status, and result payload. |
| `cover_audio` | Yes | Create a Suno cover audio task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `create_mashup` | Yes | Create a Suno create mashup task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `extend_music` | Yes | Create a Suno extend music task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `generate_lyrics` | Yes | Create a Suno generate lyrics task and optionally wait for a terminal status. Returns the task id, status, and result payload. |
| `inspire_music` | Yes | Create a Suno inspire music task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `add_samples` | Yes | Create a Suno add samples task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `visualize_music` | Yes | Create a Suno visualize music task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `generate_persona` | Yes | Run a Suno generate persona operation synchronously. Returns the operation result. |
| `remaster_audio` | Yes | Create a Suno remaster audio task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `separate_audio_stems` | Yes | Create a Suno separate audio stems task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `stitch_audio` | Yes | Create a Suno stitch audio task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `boost_style` | Yes | Run a Suno boost style operation synchronously. Returns the operation result. |
| `text_to_music` | Yes | Create a Suno text to music task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `text_to_sound` | Yes | Create a Suno text to sound task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `get_timestamped_lyrics` | Yes | Run a Suno get timestamped lyrics operation synchronously. Returns the operation result. |
| `generate_voice` | Yes | Run a Suno generate voice operation synchronously. Returns the operation result. |
| `get_task` | Yes | Fetch the current status and latest payload for an existing task. |
| `check_pricing` | No | Look up current pricing for a Suno model and endpoint. |
---
## Models
Suno covers 9 model variants across 18 endpoints. Each tool accepts the models listed for it:
| Tool | Models |
|---|---|
| `convert_audio` | _no model parameter_ |
| `blend_lyrics` | _no model parameter_ |
| `cover_audio` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`, `suno-v6`, `suno-v6-mini`, `suno-v6-wild` |
| `create_mashup` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`, `suno-v6`, `suno-v6-mini`, `suno-v6-wild` |
| `extend_music` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`, `suno-v6`, `suno-v6-mini`, `suno-v6-wild` |
| `generate_lyrics` | _no model parameter_ |
| `inspire_music` | `suno-v4`, `suno-v4.5`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
| `add_samples` | `suno-v4`, `suno-v4.5`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
| `visualize_music` | _no model parameter_ |
| `generate_persona` | _no model parameter_ |
| `remaster_audio` | `suno-v4`, `suno-v4.5`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
| `separate_audio_stems` | _no model parameter_ |
| `stitch_audio` | `suno-v4`, `suno-v4.5`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
| `boost_style` | _no model parameter_ |
| `text_to_music` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`, `suno-v6`, `suno-v6-mini`, `suno-v6-wild` |
| `text_to_sound` | `suno-v5`, `suno-v5.5` |
| `get_timestamped_lyrics` | _no model parameter_ |
| `generate_voice` | _no model parameter_ |
Model availability can change between releases. Use `check_pricing` or the [Suno model page](https://runapi.ai/models/suno) for the current catalog view.
---
## Agent Prompts
Ask your assistant in natural language; it can inspect pricing, create the task, and return the task id plus output URLs.
### Create a task
```text
Run a Suno convert audio task with RunAPI.
```
The assistant can call `check_pricing`, then `convert_audio`, and return the task id, status, and output URLs.
### Submit without waiting
```text
Create the task but don't wait for it to finish.
```
The assistant calls the create tool with `wait: false` and returns the task id. Check on it later with `get_task`.
### Check pricing before creating
```text
Check current Suno pricing, then create the task if it matches my request.
```
The assistant calls `check_pricing` and can link to the [Suno model page](https://runapi.ai/models/suno) for the canonical catalog entry.
---
## Configuration
The server resolves auth in this order:
1. `RUNAPI_API_KEY` environment variable, useful for headless and CI hosts
2. `~/.config/runapi/config.json`, created by the MCP `login` tool or `runapi login`
3. No key, which still allows `check_pricing`
The config file is normally managed by login. A pre-provisioned headless config can use:
```json
{
"apiKey": "your_runapi_key"
}
```
Do not commit real API keys.
---
## Links
| Resource | URL |
|---|---|
| Suno model page | [https://runapi.ai/models/suno](https://runapi.ai/models/suno) |
| npm package | [@runapi.ai/suno-mcp](https://www.npmjs.com/package/@runapi.ai/suno-mcp) |
| GitHub repository | [runapi-ai/suno-mcp](https://github.com/runapi-ai/suno-mcp) |
| RunAPI MCP overview | [runapi.ai/mcp](https://runapi.ai/mcp) |
| RunAPI docs | [runapi.ai/docs](https://runapi.ai/docs) |
---
## License
Licensed under the [Apache License, Version 2.0](LICENSE).
TDQS
Scored across 21 tools
Most tools target a distinct Suno operation (extend_music, cover_audio, remaster_audio, separate_audio_stems), so an agent can generally pick the right one. However, several tools (text_to_music vs text_to_sound, generate_lyrics vs blend_lyrics vs get_timestamped_lyrics, generate_voice) have closely related names, and the sync tools' descriptions are generic boilerplate that gives no extra differentiation.
All 21 names are snake_case and follow a verb_noun or verb_to_noun pattern (get_task, create_mashup, text_to_music, separate_audio_stems), with the sole prefix landing on 'get_' for retrieval tools. No mixed conventions or casing deviations.
21 tools sits in the heavy range, but each maps to a genuinely distinct Suno API operation rather than redundant wrappers, so consolidation isn't obviously possible. Slightly over the ideal band, but not bloated with filler.
The surface covers the full creation lifecycle (many generation/transform operations), plus auth (login), status polling (get_task), and pricing (check_pricing). Minor gaps: no task cancellation/delete or list-of-tasks operation, which an agent may want for managing queued jobs.