diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index f0c3bd371..b3b514992 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -543,6 +543,11 @@ "source": "third_party/square", "description": "Work with payments, orders, catalog, customers, and invoices." }, + { + "name": "suno", + "source": "third_party/suno", + "description": "Generate Suno music and lyrics with Ace Data Cloud; query the original task ID for completed audio." + }, { "name": "tailscale", "source": "third_party/tailscale", diff --git a/README.md b/README.md index 886849908..e6c2d7f02 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `zoho-desk` | [Zoho Desk](third_party/zoho-desk/) | Cursor | Integrations | Work with tickets, contacts, tasks, and knowledge base articles in Zoho Desk. | | `zoho-books` | [Zoho Books](third_party/zoho-books/) | Cursor | Integrations | Work with contacts, invoices, estimates, and items in Zoho Books. | | `square` | [Square](third_party/square/) | Cursor | Integrations | Work with payments, orders, catalog, customers, and invoices. | +| `suno` | [Suno by Ace Data Cloud](third_party/suno/) | Ace Data Cloud Dev | Integrations | Generate Suno music and lyrics with Ace Data Cloud; query the original task ID for completed audio. | | `tailscale` | [Tailscale](third_party/tailscale/) | Cursor | Integrations | Let Grok Bot reach MCP servers on your private Tailscale network. On your own tailnet it joins as one tag:grokbot device; on your team's company tailnet, turned on by a team admin, it uses each member's own device. | | `highlevel` | [HighLevel](third_party/highlevel/) | Cursor | Integrations | Work with contacts, conversations, opportunities, calendars, and payments. | | `finary` | [Finary](third_party/finary/) | Cursor | Integrations | Read your net worth, accounts, holdings, spending, and budgets. | diff --git a/third_party/suno/.cursor-plugin/plugin.json b/third_party/suno/.cursor-plugin/plugin.json new file mode 100644 index 000000000..9d9acef39 --- /dev/null +++ b/third_party/suno/.cursor-plugin/plugin.json @@ -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": "dev@acedata.cloud" + }, + "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" +} diff --git a/third_party/suno/CHANGELOG.md b/third_party/suno/CHANGELOG.md new file mode 100644 index 000000000..0f60ce838 --- /dev/null +++ b/third_party/suno/CHANGELOG.md @@ -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. diff --git a/third_party/suno/LICENSE b/third_party/suno/LICENSE new file mode 100644 index 000000000..64bb5cfce --- /dev/null +++ b/third_party/suno/LICENSE @@ -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. diff --git a/third_party/suno/README.md b/third_party/suno/README.md new file mode 100644 index 000000000..552bd4c92 --- /dev/null +++ b/third_party/suno/README.md @@ -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. + +![Copy an existing service API token or open Manage Keys](assets/tutorial/get-api-key-en.png) + +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`. + +![Optional dedicated API token creation](assets/tutorial/create-api-key-en.png) + +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 ``; 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. + +![Official Cursor tool approval screenshot; PostgreSQL reference, not an Ace run](assets/tutorial/tool-confirm.png) + +![Official Cursor tool result screenshot; PostgreSQL reference, not an Ace run](assets/tutorial/tool-call.png) + +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=`; 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 Cursor screenshot edited to preview Suno task retrieval; not an actual run](assets/tutorial/suno-query-preview.png) + +**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) diff --git a/third_party/suno/assets/logo.jpg b/third_party/suno/assets/logo.jpg new file mode 100644 index 000000000..91f594aaa Binary files /dev/null and b/third_party/suno/assets/logo.jpg differ diff --git a/third_party/suno/assets/tutorial/SOURCES.json b/third_party/suno/assets/tutorial/SOURCES.json new file mode 100644 index 000000000..e2ba2ff1e --- /dev/null +++ b/third_party/suno/assets/tutorial/SOURCES.json @@ -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" +} diff --git a/third_party/suno/assets/tutorial/create-api-key-en.png b/third_party/suno/assets/tutorial/create-api-key-en.png new file mode 100644 index 000000000..dce66e2ef Binary files /dev/null and b/third_party/suno/assets/tutorial/create-api-key-en.png differ diff --git a/third_party/suno/assets/tutorial/get-api-key-en.png b/third_party/suno/assets/tutorial/get-api-key-en.png new file mode 100644 index 000000000..0cbf4175a Binary files /dev/null and b/third_party/suno/assets/tutorial/get-api-key-en.png differ diff --git a/third_party/suno/assets/tutorial/suno-query-preview.png b/third_party/suno/assets/tutorial/suno-query-preview.png new file mode 100644 index 000000000..0b87f4f62 Binary files /dev/null and b/third_party/suno/assets/tutorial/suno-query-preview.png differ diff --git a/third_party/suno/assets/tutorial/tool-call.png b/third_party/suno/assets/tutorial/tool-call.png new file mode 100644 index 000000000..1a9a1b9d5 Binary files /dev/null and b/third_party/suno/assets/tutorial/tool-call.png differ diff --git a/third_party/suno/assets/tutorial/tool-confirm.png b/third_party/suno/assets/tutorial/tool-confirm.png new file mode 100644 index 000000000..c5426eee8 Binary files /dev/null and b/third_party/suno/assets/tutorial/tool-confirm.png differ diff --git a/third_party/suno/docs/local-review.md b/third_party/suno/docs/local-review.md new file mode 100644 index 000000000..e0cf95987 --- /dev/null +++ b/third_party/suno/docs/local-review.md @@ -0,0 +1,55 @@ +# Suno: pinned local candidate review / 固定候选本地审查 + +2026-10-19. This procedure prepares and loads an **unpublished source candidate**. It is not a Marketplace install, publisher approval, or proof of a completed service call. The public route remains [the existing official submission](https://github.com/cursor/plugins/pull/547). + +## Preconditions and exact source + +- Read the current **OPEN** source PR (https://github.com/AceDataCloud/SunoCursor/pull/2) and record its current commit SHA. Use that exact commit in your dedicated source checkout; do not assume `main` contains candidate README/manifest changes. Record `git rev-parse HEAD`, client version and source origin in the review receipt. +- In Cursor **Customize**, first check whether a Marketplace plugin with the same name `suno` is already installed. Cursor gives it precedence over the local copy. Do not remove or change the user's installed plugin silently; use an already authorized isolated profile/project or report the collision. +- On Teams/Enterprise, **Allow Local Plugin Imports** is an administrator policy under Dashboard → Settings → Security & Identity → Marketplace and Plugins (off by default on Enterprise). If disabled, stop and report it; do not bypass policy or expand access. +- Do not point `~/.cursor/plugins/local/suno` at this external Git checkout with a symlink: Cursor skips such symlinks. Use the physical tracked-file copy below. Never put a token in the candidate files. + +## Copy the tracked candidate without overwriting existing state + +Run inside the isolated source checkout at the verified commit. The shell stops on an existing destination, including a broken symlink. The command deliberately copies only Git-tracked files; local `.env`, user settings, caches and untracked credentials are excluded. + +```sh +set -eu +candidate_commit=$(git rev-parse HEAD) +candidate_stage=$(mktemp -d "${TMPDIR:-/tmp}/suno-cursor-review.XXXXXX") +git archive --format=tar "$candidate_commit" | tar -xf - -C "$candidate_stage" +test -f "$candidate_stage/.cursor-plugin/plugin.json" +test -f "$candidate_stage/mcp.json" +printf 'Candidate commit: %s\nStaged files: %s\n' "$candidate_commit" "$candidate_stage" +local_plugin_dir="$HOME/.cursor/plugins/local/suno" +if [ -e "$local_plugin_dir" ] || [ -L "$local_plugin_dir" ]; then + printf 'Stop: destination already exists: %s\n' "$local_plugin_dir" >&2 + exit 1 +fi +mkdir -p "$HOME/.cursor/plugins/local" +cp -R "$candidate_stage" "$local_plugin_dir" +``` + +If staging completed but copying stopped, retain the temporary path and receipt; do not force-delete or overwrite an existing installation. Reviewers may inspect the staged directory without launching Cursor. This plugin is Git-distributed and has no build step or local Python/Node worker to run. + +## Load, Configure, and verify a free boundary + +1. Restart Cursor or run **Developer: Reload Window**. Open **Customize** and confirm `Suno by Ace Data Cloud`, manifest version **1.0.1**, one HTTP MCP and the expected Skill. Verify the installed files match your pinned commit, not the old `main` or a same-name Marketplace item. +2. Open the plugin **Configure**. With no key, only record the credential field/required-value behavior; do not claim authenticated access. Do not submit a billable tool just to test a missing token. +3. If an existing authorized service token is already available, paste only its value into **Ace Data Cloud API token**, click **Save**, wait, reopen, and confirm masking. Never place the token in chat, a JSON file, an exported profile or a screenshot. If policy disallows storage/import, stop. +4. For authorized free validation, enable only the existing-task retrieval or free metadata tool from the read-only prompt in the coordinator receipt. Use a task belonging to the existing credential, query the original successful ID, and do not generate, search, transform, or retry a paid action. Current service access, API restrictions and balance still apply. +5. Capture the actual source/client version, installation origin, masked Configure field, tool name/arguments, cancellation/error behavior and returned terminal fields. A tool-cancel before approval proves only cancellation, not a service result. Token rejection/403/429/timeout must remain distinguishable; after an ambiguous generation timeout, query the original ID/history rather than resubmit. + +The copied files contain **configuration variable names only**, not secret values. `mcp.json` keeps the Authorization header template; Configure supplies the value. The UI rendering and persistence of that value require actual Cursor verification; a valid manifest or reference screenshot does not establish them. + +## 中文操作摘要 + +1. 从原源码PR读取当前commit,在隔离源码目录固定该SHA;不要用尚未合并增强的main充当候选。 +2. 先查同名市场插件和本地目录,企业本地导入策略关闭时停止;不卸载用户插件、不擅改管理员策略。外部仓库软链接会被跳过。 +3. 上方命令把Git已跟踪文件放入临时目录,再在目标不存在时物理复制到`~/.cursor/plugins/local/suno`。不复制`.env`、缓存或未跟踪凭据;有目标或软链接就停止,不能覆盖。 +4. Reload Window/重启后,在Customize核插件名称/1.0.1、HTTP MCP、Skill以及文件commit。真实Configure只填已有合法服务Token并核遮蔽保存;无Key只能核空值行为。 +5. 仅在既有授权范围查询原成功任务或免费元数据;生成、搜索、图像/人像变换和自动重试都保持关闭。记录真实确认、取消、错误及返回值。准备包/静态通过不能替代Cursor原生安装/调用,当前Configure实拍仍待补。 + +## Official basis / 官方依据 + +[Cursor Plugins — Test plugins locally](https://cursor.com/docs/plugins#test-plugins-locally), read **2026-10-19**: physical plugin folder, manifest, reload, allowed local imports, installed-plugin precedence and in-folder-only symlink rule. [Variables](https://cursor.com/docs/reference/plugins#variables): manifest declares variable names, not secret values; users supply them in Configure. Follow the labels in the actual recorded client version. diff --git a/third_party/suno/examples/first-song.md b/third_party/suno/examples/first-song.md new file mode 100644 index 000000000..8f02d6b6c --- /dev/null +++ b/third_party/suno/examples/first-song.md @@ -0,0 +1,5 @@ +# First Suno song + +Copy this into Cursor Agent after installing and configuring the Suno plugin. It contains no key. + +> Use the Suno MCP tools to make one short instrumental piano piece for a sunrise. Check the current available models and price first. Use `chirp-v6` if it is available to this account. Submit generation once, keep the returned task ID, and query that same task until it succeeds or fails. Open the completed audio URL and report the task ID and result. If it is still pending, tell me the ID so we can resume without generating again. diff --git a/third_party/suno/mcp.json b/third_party/suno/mcp.json new file mode 100644 index 000000000..9eeabde53 --- /dev/null +++ b/third_party/suno/mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "suno": { + "type": "http", + "url": "https://suno.mcp.acedata.cloud/mcp", + "headers": { + "Authorization": "Bearer ${ACEDATACLOUD_API_TOKEN}" + } + } + } +} diff --git a/third_party/suno/readme/README_zh_Hans.md b/third_party/suno/readme/README_zh_Hans.md new file mode 100644 index 000000000..a8b236c19 --- /dev/null +++ b/third_party/suno/readme/README_zh_Hans.md @@ -0,0 +1,76 @@ +# Suno by Ace Data Cloud:Cursor 接入教程 + +这是由 **Ace Data Cloud** 维护的独立 **Suno** 工具插件,提供音乐、歌词、音频编辑与任务查询;不冒充服务品牌或 Cursor 官方插件。通过托管 MCP 连接,在 Configure 中保存自己的服务 API Token 后,可在 Cursor Agent 里使用,无需启动本地服务。 + +通过 [Ace Data Cloud](https://platform.acedata.cloud?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_platform_zh_hans) 托管 MCP 在 Cursor 中生成 Suno 音乐。插件提供音乐、歌词、音频编辑和任务查询工具,并附带异步任务使用说明。实际工具参数和可用模型以在线 MCP 为准。 + +[English guide](../README.md) · [可复制的首跑提示词](../examples/first-song.md) · [当前价格](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_pricing_zh_hans) + +## 1. 搜索并安装独立 Suno 插件 + +打开 [Cursor 官方插件市场](https://cursor.com/marketplace)或 Cursor 的 **Customize**,搜索 **Suno**(亦可搜 suno, music, music generation),核对显示名 **Suno by Ace Data Cloud**、作者 **Ace Data Cloud Dev**,选择 **Install** 以及项目/用户范围。Cursor 3.24 曾使用 **Customize → Browse Marketplace → Add**,以所装版本为准。安装本插件不依赖 Ace 合集。 + +**发布状态:**[官方收录申请](https://github.com/cursor/plugins/pull/547)仍待审核;源码公开或检查成功不等于市场已上架。准确条目不存在时,不要安装同名无关插件。可选的`~/.cursor/plugins/local/suno/`源码本地审查属于手动路径,不能计作官方分发。本插件提供工具,不会在 Cursor 聊天模型服务商列表新增 Ace 预设。 + +准确官方条目尚未发布时,按[固定候选本地审查步骤](../docs/local-review.md)复制已跟踪文件并记录commit,不猜市场地址。加载前核已有安装、允许本地导入,再Reload;指向外部源码目录的软链接会被跳过,同名市场安装优先。本地加载不计官方安装成功。 + +## 2. 注册/登录并取得服务 API Token + +1. 打开 [Ace Data Cloud](https://platform.acedata.cloud/?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_register_signin_zh_hans)注册或登录,再进入 [Applications 应用管理](https://platform.acedata.cloud/console/applications?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_api_key_zh_hans);若尚无通用应用,先点 **Initialize General Application**。 +2. 打开 **General application**,或已开通 **Suno** 的专用应用;生成前确认权限、余额及[当前价格](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_pricing_zh_hans)。 +3. 使用下图标记 **1** 的复制按钮取已有 API Key;需要独立 Cursor 凭据时,点标记 **2** 的 **Manage Keys → Create**。 + +![复制已有服务Token或进入Manage Keys](../assets/tutorial/get-api-key-en.png) + +4. 可选新Key命名为 **Cursor Suno**,按需设置有效期、用量/API限制,创建后复制。截图里的 **Dify tutorial** 是历史示例名称,实际请填自己的Cursor名称。启用 Allowed APIs 时允许所需接口:`/suno/audios`, `/suno/tasks`。 + +![可选的独立API Token创建窗口](../assets/tutorial/create-api-key-en.png) + +以上是复用[原Suno Dify教程](https://github.com/AceDataCloud/SunoDify/blob/8d3d03570e73324220f111f7fe343da0792a8071/README.md)的真实Ace应用管理截图,**2026-10-18核验**,原拍摄日期未记录;Key、应用ID和余额均已遮蔽。它展示Ace凭据管理,不要求为Cursor使用Dify。 + +只复制Token原文,不加`Bearer `、引号或图中遮蔽字符;不要使用平台管理token。不要把Key写进提示词、源码、截图或导出样例。 + +## 3. 粘贴到 Cursor Configure + +打开 **Customize → Plugins → Suno by Ace Data Cloud → Configure**(旧版本可能只显示 **Suno**),将Token填到 **Ace Data Cloud API token**,点 **Save**,等保存完成后重开确认遮蔽值。Cursor替换`ACEDATACLOUD_API_TOKEN`,插件自行添加`Bearer `并连接托管HTTP MCP,无需启动本地Python/Node服务。工具未加载时重新连接。 + +路径和变量行为依据 **2026-10-18**读取的[Cursor官方插件说明](https://cursor.com/docs/reference/plugins#variables)。本插件当前版本的Configure真实截图仍待补;下方官方图只演示后续工具确认和结果区域,不是此Token输入框。 + +## 4. 生成并取回第一首歌 + +在 Agent 聊天中复制[首跑提示词](../examples/first-song.md)。它会先检查可用模型和价格,再调用一次 `suno_generate_music`,随后用返回的 `task_id` 调用 `suno_get_task`。只有在线模型列表包含 `chirp-v6` 且账户有权限时才选它。 + +生成接口可能先返回已受理的任务 ID;此时音乐仍在处理中。若聊天中断或任务仍是 pending,新开聊天说:“用 `suno_get_task` 查询任务 ``,不要重新生成。”成功后打开返回的音频地址,确认文件能播放。到 **Ace Data Cloud → Usage/Billing** 核对这一次生成对应的 Credits 扣费;插件免费,API 调用按当前服务价格计费。 + +## 5. 确认一次工具调用并检查结果 + +首次免费连接检查可在Agent说:“仅列出本插件工具,不要生成任何内容。”随后用`suno_list_models`查看可用模型。新生成前核权限、现价并明确同意一次提交;关闭生成自动重试,超时先查原任务和用量,不自动另付一笔。 + +以下为**未经改动的Cursor官方真实截图**,于**2026-10-17**下载核验;原示例查询PostgreSQL,并非Ace,官方未注明截图版本/拍摄日期。它说明检查工具名/参数、点 **Run tool** 及查看返回值的位置,不证明本插件已安装或实测。 + +![Cursor官方工具确认图:PostgreSQL参考,非Ace运行](../assets/tutorial/tool-confirm.png) + +![Cursor官方工具结果图:PostgreSQL参考,非Ace运行](../assets/tutorial/tool-call.png) + +一次已批准生成后,仅用`suno_get_task`的 **`task_id`参数传原任务ID**。例如:“只调用`suno_get_task`,`task_id=<我的任务ID>`,不要再次生成。”确认成功终态,再打开自己实际返回的媒体URL。任务受理/pending、绿色工具标记或示例链接均不等于最终可播放结果。到Ace Usage/Billing核同一次生成的账单;Cursor和辅助模型费用另计。 + +![Cursor官方原图改编的Suno查询预览:非实际运行](../assets/tutorial/suno-query-preview.png) + +**2026-10-17官方原图改编预览,不是Ace实测、正式发布或营收证明。** `EXAMPLE_TASK_ID`是占位编号;由协调者以官方确认窗口原图制作,未展示实际音频结果。 + +[截图来源、校验值及复用边界](../assets/tutorial/SOURCES.json)。 + +## 排障 + +| 现象 | 处理 | +| --- | --- | +| 找不到插件或工具 | 核对 Suno 条目、配置 Key 并重新连接 MCP。本地安装与官方市场是两回事。 | +| 401 或 403 | 检查 Key、有效期、Suno 权限、余额和允许的生成/查询 API;配置值不要带 `Bearer `。若同一 Key 直连 Ace API 成功而 Cursor 仍报 token invalid,确认 Save 已完成,重启 Cursor 后先重试旧任务只读查询。 | +| 模型或参数错误 | 调用 `suno_list_models`,以在线工具 schema 为准。 | +| 任务 pending | 沿原 task ID 继续查询,不要为轮询再次生成。 | +| 429、超时或 5xx | 先检查原任务和用量记录,再决定是否需要另一笔付费请求。 | +| 音频无法打开 | 确认任务已成功,使用该任务最终返回的地址。 | + +[Suno MCP 源码](https://github.com/AceDataCloud/MCPs/tree/main/suno) · [插件问题反馈](https://github.com/AceDataCloud/SunoCursor/issues)。反馈时提供 task ID 或 trace ID,不要提供 Key。图标复用 Ace Data Cloud 现有 Suno 集成资源。本插件提供工具,不注册 Cursor 聊天模型 Provider。 + +[注册/登录](https://platform.acedata.cloud/?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_register_signin_zh_hans) · [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_zh_hans) · [当前Suno价格](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=suno_cursor_shared_readme_pricing_zh_hans) diff --git a/third_party/suno/skills/suno-music/SKILL.md b/third_party/suno/skills/suno-music/SKILL.md new file mode 100644 index 000000000..9fbecc462 --- /dev/null +++ b/third_party/suno/skills/suno-music/SKILL.md @@ -0,0 +1,15 @@ +--- +name: suno-music +description: Generate music, lyrics, covers, or audio variations with the Suno MCP server through Ace Data Cloud. Use when the user asks for a Suno song or wants to check an existing Suno task. +--- + +# Suno music in Cursor + +Use the `suno` MCP tools supplied by this plugin. The hosted server is the source of truth for available actions, models, and argument schemas. + +1. Check current [pricing and balance](https://platform.acedata.cloud/models) and use `suno_list_models` when the requested model is unclear. +2. For a first instrumental song, call `suno_generate_music` once with a short prompt, `instrumental: true`, and a currently available model. The response may contain only a `task_id`. +3. Call `suno_get_task` with that same `task_id` until the task is terminal. `pending` and `processing` are not finished songs. If the chat is interrupted, ask for the original task ID and continue querying it. +4. On success, return the audio links and open the completed file when possible. On failure, report the task error and ID. Never submit a second paid generation just to check progress. + +Configure `ACEDATACLOUD_API_TOKEN` in **Customize → Plugins → Suno → Configure**; do not put it in chat, source files, or example prompts. For the exact first-run prompt and access steps, see the [README](../../README.md).