Repository navigation
Add Suno by Ace Data Cloud plugin #547
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
acedatacloud-dev
wants to merge
7
commits into
cursor:main
Choose a base branch
from
AceDataCloud:codex/suno-plugin
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+401
−0
Open
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
1d3f5be
feat(third_party): add Suno plugin
acedatacloud-dev 6ea7f8c
fix(suno): declare API token variable
acedatacloud-dev 2bb152d
docs: match Cursor 3.24 plugin navigation
acedatacloud-dev 2e4b0e5
docs: verify token save before first Suno call
acedatacloud-dev 9e67837
docs: tag shared Cursor README activation links
acedatacloud-dev b74f34f
feat: improve service discovery and illustrated Cursor onboarding
acedatacloud-dev 7ae8612
docs: make unpublished Cursor candidate review reproducible
acedatacloud-dev File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| { | ||
| "name": "suno", | ||
| "displayName": "Suno by Ace Data Cloud", | ||
| "version": "1.0.1", | ||
| "minClientVersions": { | ||
| "cursor": "3.13.0" | ||
| }, | ||
| "description": "Generate Suno music and lyrics with Ace Data Cloud; query the original task ID for completed audio.", | ||
| "author": { | ||
| "name": "Ace Data Cloud Dev", | ||
| "email": "[email protected]" | ||
| }, | ||
| "homepage": "https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_manifest_pricing", | ||
| "repository": "https://github.com/AceDataCloud/SunoCursor", | ||
| "license": "MIT", | ||
| "logo": "assets/logo.jpg", | ||
| "keywords": [ | ||
| "suno", | ||
| "music", | ||
| "music generation", | ||
| "lyrics", | ||
| "audio", | ||
| "ace data cloud", | ||
| "acedatacloud", | ||
| "mcp" | ||
| ], | ||
| "category": "integrations", | ||
| "tags": [ | ||
| "suno", | ||
| "music", | ||
| "audio", | ||
| "acedatacloud" | ||
| ], | ||
| "variables": { | ||
| "type": "object", | ||
| "properties": { | ||
| "ACEDATACLOUD_API_TOKEN": { | ||
| "type": "string", | ||
| "title": "Ace Data Cloud API token", | ||
| "description": "Service API key from https://platform.acedata.cloud/console/applications with Suno access." | ||
| } | ||
| }, | ||
| "required": [ | ||
| "ACEDATACLOUD_API_TOKEN" | ||
| ] | ||
| }, | ||
| "mcpServers": "./mcp.json" | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| # Changelog | ||
|
|
||
| ## 1.0.1 | ||
|
|
||
| - Clarify the independent service name and Ace Data Cloud publisher relationship in discovery metadata. | ||
| - Add bilingual install/token/setup guidance and sourced credential/official UI reference images; preserve the hosted MCP and same-task workflow. | ||
|
|
||
| ## 1.0.0 | ||
|
|
||
| - Initial Cursor plugin with the existing Ace Data Cloud Suno hosted MCP and a task-safe music skill. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| MIT License | ||
|
|
||
| Copyright (c) 2026 Ace Data Cloud | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,92 @@ | ||
| # Suno by Ace Data Cloud for Cursor | ||
|
|
||
| This independent **Suno by Ace Data Cloud** integration brings music, lyrics, audio edits and task retrieval into Cursor Agent. It is maintained by Ace Data Cloud, not an official plugin from the model brand or Cursor. The hosted MCP connection avoids running a local server; your service API token is entered once in Configure. | ||
|
|
||
| Generate Suno music in Cursor through the [Ace Data Cloud](https://platform.acedata.cloud?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_platform_en) hosted MCP server. The plugin provides Suno's music, lyrics, audio editing, and task-query tools, plus a short skill for safe async use. The hosted tool schemas determine the available actions and models. | ||
|
|
||
| [简体中文教程](readme/README_zh_Hans.md) · [Copyable first-run prompt](examples/first-song.md) · [Current pricing](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_pricing_en) | ||
|
|
||
| ## 1. Find the independent Suno plugin | ||
|
|
||
| Open the [Cursor Marketplace](https://cursor.com/marketplace) or **Customize** in Cursor. Search **Suno** (suno, music, music generation), then look for **Suno by Ace Data Cloud** and publisher/author **Ace Data Cloud Dev**. Select **Install** and choose the project or user scope. Cursor 3.24 used **Customize → Browse Marketplace → Add**; use the controls in your installed version. Installing this plugin does not require an Ace collection plugin. | ||
|
|
||
| **Publication status:** [the official submission](https://github.com/cursor/plugins/pull/547) is pending review; an available source repository or a passing check does not prove a live Marketplace listing. If the exact listing is absent, do not install a similarly named unrelated plugin. An optional source/local review under `~/.cursor/plugins/local/suno/` is a manual route, not official distribution. This is a tool integration, not an Ace preset in Cursor's chat-model provider list. | ||
|
|
||
| For an unpublished candidate, use the [pinned local-review procedure](docs/local-review.md) rather than guessing a Marketplace URL. It copies the tracked candidate files, checks for an existing installation, and records the exact commit. Local loading needs a reload and allowed local imports; an external-repository symlink is skipped, and a same-name Marketplace install takes precedence. This procedure does not claim official installation. | ||
|
|
||
| ## 2. Register or sign in and get a service API token | ||
|
|
||
| 1. [Open Ace Data Cloud](https://platform.acedata.cloud/?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_register_signin_en) and register or sign in. Then open [Applications](https://platform.acedata.cloud/console/applications?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_api_key_en). If no General application exists, select **Initialize General Application**. | ||
| 2. Open **General application** or an application enabled for **Suno**. Confirm service access, balance and [current pricing](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_pricing_en) before any generation. | ||
| 3. Copy an existing API Key with the copy button marked **1** below, or open **Manage Keys** marked **2**, then **Create** for a dedicated Cursor token. | ||
|
|
||
|  | ||
|
|
||
| 4. Name the optional key, for example **Cursor Suno**. Set expiry and usage/API limits as needed; create it and copy the token. The screenshot's **Dify tutorial** name is a historical example only; use your Cursor-specific name. If Allowed APIs is enabled, allow the actions needed here: `/suno/audios`, `/suno/tasks`. | ||
|
|
||
|  | ||
|
|
||
| These are real Ace Applications screenshots reused from the [Suno Dify tutorial](https://github.com/AceDataCloud/SunoDify/blob/8d3d03570e73324220f111f7fe343da0792a8071/README.md), checked on **2026-10-18**; original capture date is not recorded. Key, application ID and balance are obscured. They show Ace credential management, not a Dify step required for Cursor. | ||
|
|
||
| Copy only the service token string: no `Bearer ` prefix, quotation marks or redacted screenshot characters. This is not a platform management token. Never put a token in prompts, source, screenshots or exported examples. | ||
|
|
||
| ## 3. Paste the token in Cursor Configure | ||
|
|
||
| Open **Customize → Plugins → Suno by Ace Data Cloud → Configure** (older versions may show **Suno**). Paste the token in **Ace Data Cloud API token**, choose **Save**, wait for completion, then reopen Configure to confirm a masked value. Cursor substitutes `ACEDATACLOUD_API_TOKEN`; the plugin adds `Bearer ` and connects to its hosted HTTP MCP. No Python or Node server needs to be started. Reconnect if tools have not loaded. | ||
|
|
||
| The Configure path and variable behavior follow the [official Cursor plugin reference](https://cursor.com/docs/reference/plugins#variables), checked **2026-10-18**. A current Ace-specific Configure screenshot is still pending; the official screenshots below illustrate the subsequent tool approval/result UI, not this token field. | ||
|
|
||
| ```json | ||
| { | ||
| "mcpServers": { | ||
| "suno": { | ||
| "type": "http", | ||
| "url": "https://suno.mcp.acedata.cloud/mcp", | ||
| "headers": {"Authorization": "Bearer ${ACEDATACLOUD_API_TOKEN}"} | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## 4. Make and retrieve the first song | ||
|
|
||
| Open an Agent chat and paste the [first-song prompt](examples/first-song.md). It asks the agent to check available models and price, call `suno_generate_music` **once**, then use `suno_get_task` with the returned `task_id`. `chirp-v6` is an example only if it appears in the live model list; use a model your account can access. | ||
|
|
||
| The generation call can return an accepted task while its audio is still pending. Keep the task ID. If Cursor stops or the task remains pending, start a new chat and say: “Use `suno_get_task` to check task `<task_id>`; do not generate a new song.” A completed response contains playable audio URLs. Open an actual returned URL and check the file plays before treating the run as finished. | ||
|
|
||
| Task queries use the same ID and do not submit a second generation. Check **Ace Data Cloud → Usage/Billing** for the single generation record and its deducted Credits; the plugin itself is free, and API usage follows current service pricing. | ||
|
|
||
| ## 5. Confirm one tool call and inspect the result | ||
|
|
||
| For a free first connection check, open Agent and ask **“List this plugin's tools without generating anything.”** Then use `suno_list_models` to inspect available models. Confirm model access and current price before explicitly approving a new generation. Keep generation retries off; if a request times out, inspect the existing task and usage before deciding whether to pay again. | ||
|
|
||
| The following are **unaltered official Cursor screenshots**, downloaded/checked **2026-10-17**. The original example queries PostgreSQL, not Ace; the official page does not state its client version or capture date. They illustrate where to inspect the tool name/arguments and click **Run tool**, then inspect a returned result. They do not prove this plugin has been installed or run. | ||
|
|
||
|  | ||
|
|
||
|  | ||
|
|
||
| After an approved generation, query `suno_get_task` with **`task_id` set to the original task ID**. For example: “Only call `suno_get_task` with `task_id=<my_task_id>`; do not generate again.” Check completion and open your actual returned media URL. An accepted/pending task, a green tool indicator or an example link is not a finished, playable result. Check the corresponding single generation record in Ace Usage/Billing; Cursor/model auxiliary charges are separate. | ||
|
|
||
|  | ||
|
|
||
| **Official-original edit preview, 2026-10-17; not an actual Ace execution or Marketplace publication.** `EXAMPLE_TASK_ID` is a placeholder. The preview was produced centrally from the official approval screenshot and does not show a returned audio result. | ||
|
|
||
| Screenshot sources, checksums and reuse boundaries: [image provenance](assets/tutorial/SOURCES.json). | ||
|
|
||
| ## Troubleshooting | ||
|
|
||
| | Symptom | Action | | ||
| | --- | --- | | ||
| | Plugin or tools are missing | Confirm the correct Suno listing is installed, configure the key, then reconnect the MCP server. A local copy is separate from the public Marketplace. | | ||
| | 401 or 403 | Check the full key, expiration, Suno access, balance, and allowed generation/retrieval APIs. Do not include `Bearer ` in the configured value. If the same key works through the Ace API but Cursor still reports an invalid token, confirm Save finished and restart Cursor before retrying a read-only task query. | | ||
| | Invalid model or argument | Ask `suno_list_models` and use the live tool schema. Models and limits can change. | | ||
| | Pending task | Query the original task ID again. Do not rerun generation to poll. | | ||
| | 429, timeout, or 5xx | Wait and inspect the original task or usage history before deciding whether another paid submission is needed. | | ||
| | Audio URL will not open | Confirm the task succeeded and use the URL returned by that completed task. | | ||
|
|
||
| The exact Suno MCP server and package source are maintained in [AceDataCloud/MCPs](https://github.com/AceDataCloud/MCPs/tree/main/suno). Report a plugin issue at [SunoCursor issues](https://github.com/AceDataCloud/SunoCursor/issues) with the task ID or trace ID, never your key. The logo reuses the existing Ace Data Cloud Suno integration asset. | ||
|
|
||
| This is a tool plugin. It does not register a Cursor chat-model provider. | ||
|
|
||
| [Register / sign in](https://platform.acedata.cloud/?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_register_signin_en) · [Applications / API token](https://platform.acedata.cloud/console/applications?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_api_key_en) · [Current Suno pricing](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_pricing_en) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| { | ||
| "service": "Suno", | ||
| "sources": [ | ||
| { | ||
| "file": "get-api-key-en.png", | ||
| "type": "real_ace_console_screenshot", | ||
| "source_url": "https://raw.githubusercontent.com/AceDataCloud/SunoDify/8d3d03570e73324220f111f7fe343da0792a8071/_assets/tutorial/get-api-key-en.png", | ||
| "official_page_url": "https://github.com/AceDataCloud/SunoDify/blob/8d3d03570e73324220f111f7fe343da0792a8071/README.md", | ||
| "checked_at": "2026-10-18", | ||
| "original_capture_date": "not recorded", | ||
| "edit_date": null, | ||
| "limits": "Original token/ID/balance obscured; Dify tutorial key name is an example, use Cursor-specific name.", | ||
| "sha256": "b63787f2bd15af82fef9ab61c99e11c454355ac86e91f7f94559386b795069b7" | ||
| }, | ||
| { | ||
| "file": "create-api-key-en.png", | ||
| "type": "real_ace_console_screenshot", | ||
| "source_url": "https://raw.githubusercontent.com/AceDataCloud/SunoDify/8d3d03570e73324220f111f7fe343da0792a8071/_assets/tutorial/create-api-key-en.png", | ||
| "official_page_url": "https://github.com/AceDataCloud/SunoDify/blob/8d3d03570e73324220f111f7fe343da0792a8071/README.md", | ||
| "checked_at": "2026-10-18", | ||
| "original_capture_date": "not recorded", | ||
| "edit_date": null, | ||
| "limits": "Original token/ID/balance obscured; Dify tutorial key name is an example, use Cursor-specific name.", | ||
| "sha256": "5411ffe75d8a8efa6806a78fc68fce6a20735225d8e9818c94bbc238da4f4590" | ||
| }, | ||
| { | ||
| "file": "tool-confirm.png", | ||
| "type": "official_screenshot", | ||
| "source_url": "https://cursor.com/docs-static/images/context/mcp/tool-confirm.png", | ||
| "official_page_url": "https://cursor.com/docs/mcp", | ||
| "checked_at": "2026-10-18", | ||
| "original_capture_date": "not recorded", | ||
| "edit_date": null, | ||
| "limits": "PostgreSQL official reference, not Ace execution.", | ||
| "sha256": "0404c2a6e15a83817cf7dd08b177097c835316345e4af629e411ecc369ec7f09" | ||
| }, | ||
| { | ||
| "file": "tool-call.png", | ||
| "type": "official_screenshot", | ||
| "source_url": "https://cursor.com/docs-static/images/context/mcp/tool-call.png", | ||
| "official_page_url": "https://cursor.com/docs/mcp", | ||
| "checked_at": "2026-10-18", | ||
| "original_capture_date": "not recorded", | ||
| "edit_date": null, | ||
| "limits": "PostgreSQL official reference, not Ace execution.", | ||
| "sha256": "af88bda0de0929b73a955883b0b79ee394ee2f94d96e18329b0fa6db636529e7" | ||
| }, | ||
| { | ||
| "file": "suno-query-preview.png", | ||
| "type": "official_screenshot_edit_preview", | ||
| "source_url": null, | ||
| "official_page_url": "https://cursor.com/docs/mcp", | ||
| "checked_at": "2026-10-18", | ||
| "original_capture_date": "not recorded", | ||
| "edit_date": "2026-10-17", | ||
| "limits": "Centrally produced official-original screenshot edit; placeholder task ID; not actual execution or publication.", | ||
| "sha256": "c89f805e451e47b8bcbb070c2db687402d900527a779237cddbf7336518e27c9" | ||
| } | ||
| ], | ||
| "credential_values_present": false, | ||
| "current_configure_screenshot": "pending native UI capture, not substituted with a fake screenshot" | ||
| } |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.