From f489c3b5c99df4ed016ff3f4ef274f739353343b Mon Sep 17 00:00:00 2001 From: Ace Data Cloud Dev Date: Sun, 11 Oct 2026 22:54:33 +0800 Subject: [PATCH 1/4] feat(third_party): add Veo plugin --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + third_party/veo/.cursor-plugin/plugin.json | 31 ++++++++++++ third_party/veo/CHANGELOG.md | 5 ++ third_party/veo/LICENSE | 21 ++++++++ third_party/veo/README.md | 56 +++++++++++++++++++++ third_party/veo/assets/logo.jpg | Bin 0 -> 34816 bytes third_party/veo/examples/first-run.md | 5 ++ third_party/veo/mcp.json | 11 ++++ third_party/veo/readme/README_zh_Hans.md | 42 ++++++++++++++++ third_party/veo/skills/veo/SKILL.md | 14 ++++++ 11 files changed, 191 insertions(+) create mode 100644 third_party/veo/.cursor-plugin/plugin.json create mode 100644 third_party/veo/CHANGELOG.md create mode 100644 third_party/veo/LICENSE create mode 100644 third_party/veo/README.md create mode 100644 third_party/veo/assets/logo.jpg create mode 100644 third_party/veo/examples/first-run.md create mode 100644 third_party/veo/mcp.json create mode 100644 third_party/veo/readme/README_zh_Hans.md create mode 100644 third_party/veo/skills/veo/SKILL.md diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index f0c3bd371..5372b1688 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": "veo", + "source": "third_party/veo", + "description": "Generate Veo videos and retrieve the finished clip." + }, { "name": "tailscale", "source": "third_party/tailscale", diff --git a/README.md b/README.md index 886849908..ceb605b77 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. | +| `veo` | [Veo](third_party/veo/) | Ace Data Cloud Dev | Integrations | Generate Veo videos and retrieve the finished clip. | | `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/veo/.cursor-plugin/plugin.json b/third_party/veo/.cursor-plugin/plugin.json new file mode 100644 index 000000000..acaf090bf --- /dev/null +++ b/third_party/veo/.cursor-plugin/plugin.json @@ -0,0 +1,31 @@ +{ + "name": "veo", + "displayName": "Veo", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Generate Veo videos and retrieve the finished clip.", + "author": { + "name": "Ace Data Cloud Dev", + "email": "dev@acedata.cloud" + }, + "homepage": "https://platform.acedata.cloud/models", + "repository": "https://github.com/AceDataCloud/VeoCursor", + "license": "MIT", + "logo": "assets/logo.jpg", + "keywords": [ + "veo", + "veo", + "video", + "acedatacloud", + "mcp" + ], + "category": "integrations", + "tags": [ + "veo", + "video", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/veo/CHANGELOG.md b/third_party/veo/CHANGELOG.md new file mode 100644 index 000000000..2e8010d55 --- /dev/null +++ b/third_party/veo/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 1.0.0 + +- Initial Veo Cursor plugin using the existing Ace Data Cloud hosted MCP. diff --git a/third_party/veo/LICENSE b/third_party/veo/LICENSE new file mode 100644 index 000000000..64bb5cfce --- /dev/null +++ b/third_party/veo/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/veo/README.md b/third_party/veo/README.md new file mode 100644 index 000000000..6bf8c13d4 --- /dev/null +++ b/third_party/veo/README.md @@ -0,0 +1,56 @@ +# Veo for Cursor + +Generate Veo videos and retrieve the finished clip. This standalone plugin reuses the [Ace Data Cloud veo MCP](https://github.com/AceDataCloud/MCPs/tree/main/veo) and includes a focused Agent skill. Available tools and limits come from the live MCP schema. + +[简体中文教程](readme/README_zh_Hans.md) · [Copyable first-run prompt](examples/first-run.md) · [Current pricing](https://platform.acedata.cloud/models) + +## 1. Search and install + +In Cursor 3.13 or later, open **Cursor Settings → Plugins**, search for **Veo**, confirm **Ace Data Cloud Dev** and the service logo, then click **Install**. You can also use `/add-plugin veo` in chat. If the official listing is not live, review this source under `~/.cursor/plugins/local/veo/`; local installation does not prove Marketplace publication. + +## 2. Get a service API key + +1. Sign in at [Ace Data Cloud Applications](https://platform.acedata.cloud/console/applications). +2. Open **General application** or a service-specific application. Copy an existing API key, or use **Manage Keys → Create** for a separate Cursor key. +3. Confirm Veo access, [current price](https://platform.acedata.cloud/models), and balance. If **Allowed APIs** restrictions are enabled, include /veo/videos, /veo/tasks. + +Use a service API key, not a platform management token. Do not put it in chat or source files. + +## 3. Configure the plugin + +Under **Dashboard → Plugins → Configure**, select **Veo** and set `ACEDATACLOUD_API_TOKEN` to the key string. Paste only the key; the plugin adds `Bearer `. Reconnect the MCP server if tools are missing. The hosted endpoint needs no local Python installation. + +```json +{ + "mcpServers": { + "veo": { + "type": "http", + "url": "https://veo.mcp.acedata.cloud/mcp", + "headers": { + "Authorization": "Bearer ${ACEDATACLOUD_API_TOKEN}" + } + } + } +} +``` + +## 4. Run the first example + +Open Cursor Agent and paste the [first-run prompt](examples/first-run.md). It asks for `veo_text_to_video`, model `veo31-fast` and aspect_ratio 16:9. The sample prompt is `A teal cube on a cream table, gentle camera orbit, studio lighting, no text.`. Verify live model access and price before running. + +Submit with `veo_text_to_video` once. Save the returned `task_id` and use `veo_get_task` with that same ID until terminal. Pending is not a completed video; open the returned result URL on success. Never regenerate merely to poll. + +Open the returned video and inspect it. In **Ace Data Cloud → Usage/Billing**, match this call to its deducted Credits record. The plugin is free; API calls follow current service pricing. + +## Troubleshooting + +| Symptom | Action | +| --- | --- | +| Plugin or tools are missing | Check the Veo listing, configure the key, and reconnect MCP. | +| 401 or 403 | Check key validity, service access, balance, and Allowed APIs; do not include `Bearer ` in the configured value. | +| Invalid model or argument | Use the live tool schema and a model this account can access. | +| Pending task | Query the original task ID; do not regenerate to poll. | +| 429, timeout, or 5xx | Inspect the original task and usage history before another paid submission. | +| Result URL will not open | Confirm a terminal success and use the URL returned by that call. | + +[Source](https://github.com/AceDataCloud/VeoCursor) · [Report a problem](https://github.com/AceDataCloud/VeoCursor/issues) · dev@acedata.cloud. The logo reuses an existing Ace Data Cloud integration asset. This tool plugin does not register a Cursor chat-model provider. diff --git a/third_party/veo/assets/logo.jpg b/third_party/veo/assets/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..481c0183ab68ee26fe2f418758b10549c40c9ef6 GIT binary patch literal 34816 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 Z|Ce_49~|GH?@R>#6W`?Tv Use the veo MCP tool veo_text_to_video for one video request. I checked the current Ace Data Cloud price and balance. Use model veo31-fast if this account offers it. Set aspect_ratio 16:9. Set prompt to A teal cube on a cream table, gentle camera orbit, studio lighting, no text.. Submit at most once, keep the task ID, query it using veo_get_task until terminal, and open the completed result. If pending, report the ID so I can resume without a second generation. diff --git a/third_party/veo/mcp.json b/third_party/veo/mcp.json new file mode 100644 index 000000000..d107f3f00 --- /dev/null +++ b/third_party/veo/mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "veo": { + "type": "http", + "url": "https://veo.mcp.acedata.cloud/mcp", + "headers": { + "Authorization": "Bearer ${ACEDATACLOUD_API_TOKEN}" + } + } + } +} diff --git a/third_party/veo/readme/README_zh_Hans.md b/third_party/veo/readme/README_zh_Hans.md new file mode 100644 index 000000000..dc02088f9 --- /dev/null +++ b/third_party/veo/readme/README_zh_Hans.md @@ -0,0 +1,42 @@ +# Cursor Veo 插件 + +Generate Veo videos and retrieve the finished clip. 插件复用 [Ace Data Cloud veo MCP](https://github.com/AceDataCloud/MCPs/tree/main/veo),并提供专用 Agent skill。实际工具参数和限制以在线 MCP schema 为准。 + +[English guide](../README.md) · [可复制的首跑提示词](../examples/first-run.md) · [当前价格](https://platform.acedata.cloud/models) + +## 1. 搜索安装 + +在 Cursor 3.13 或更新版本打开 **Cursor Settings → Plugins**,搜索 **Veo**,确认作者 **Ace Data Cloud Dev** 和服务图标后点击 **Install**。也可在聊天中输入 `/add-plugin veo`。若官方条目尚未出现,可在 `~/.cursor/plugins/local/veo/` 本地审查;本地安装不代表 Marketplace 已上架。 + +## 2. 获取服务 API Key + +1. 登录 [Ace Data Cloud 应用管理](https://platform.acedata.cloud/console/applications)。 +2. 打开 **General application** 或服务专用应用,复制已有 Key;也可通过 **Manage Keys → Create** 新建 Cursor 专用 Key。 +3. 确认 Veo 权限、[当前价格](https://platform.acedata.cloud/models)和余额。若启用了 **Allowed APIs**,允许 /veo/videos, /veo/tasks。 + +使用服务 API Key,不要用平台管理 token,也不要放在聊天或仓库文件中。 + +## 3. 配置插件 + +在 **Dashboard → Plugins → Configure** 选择 **Veo**,将 Key 原文填入 `ACEDATACLOUD_API_TOKEN`。插件会自行添加 `Bearer `,连接 `https://veo.mcp.acedata.cloud/mcp`;无需安装本地 Python 服务。工具未出现时重新连接 MCP。 + +## 4. 首次调用 + +在 Cursor Agent 中复制[首跑提示词](../examples/first-run.md)。它使用 `veo_text_to_video`,模型 `veo31-fast`,参数为 aspect_ratio 16:9,prompt 为 `A teal cube on a cream table, gentle camera orbit, studio lighting, no text.`。执行前核对当前模型权限和价格;字段变化时以在线工具 schema 为准。 + +只用 `veo_text_to_video` 提交一次,保存返回的 `task_id`,随后用同一 ID 调用 `veo_get_task` 直到终态。pending 不代表已完成;成功后打开结果地址。不要为轮询重新生成。 + +打开返回的video结果并检查。在 **Ace Data Cloud → Usage/Billing** 核对本次调用对应的 Credits 扣费;插件免费,API 按当前服务价格计费。 + +## 排障 + +| 现象 | 处理 | +| --- | --- | +| 找不到插件或工具 | 核对 Veo 条目、配置 Key 并重连 MCP。 | +| 401 或 403 | 检查 Key、服务权限、余额和 Allowed APIs;配置值不要带 `Bearer `。 | +| 模型或参数错误 | 以在线 MCP schema 和账户可用模型为准。 | +| 任务 pending | 沿原 task ID 查询,不要为轮询重新生成。 | +| 429、超时或 5xx | 先检查原任务和用量记录,再决定是否再次付费提交。 | +| 结果无法打开 | 确认终态成功,打开该次调用返回的地址。 | + +[源码](https://github.com/AceDataCloud/VeoCursor) · [问题反馈](https://github.com/AceDataCloud/VeoCursor/issues) · dev@acedata.cloud。图标复用 Ace Data Cloud 现有集成资源。本插件提供工具,不注册 Cursor 聊天模型 Provider。 diff --git a/third_party/veo/skills/veo/SKILL.md b/third_party/veo/skills/veo/SKILL.md new file mode 100644 index 000000000..26a691c21 --- /dev/null +++ b/third_party/veo/skills/veo/SKILL.md @@ -0,0 +1,14 @@ +--- +name: veo +description: Use Veo through the Ace Data Cloud MCP server in Cursor. Use for Veo video work or an existing task query. +--- + +# Veo in Cursor + +This skill adapts the [existing Ace Data Cloud skill](https://github.com/AceDataCloud/Skills/tree/main/skills/veo-video). The live MCP schema is the source of truth for arguments and models. + +1. Check [current price, balance, and service access](https://platform.acedata.cloud/models) before a paid call. +2. Submit with `veo_text_to_video` once. Save the returned `task_id` and use `veo_get_task` with that same ID until terminal. Pending is not a completed video; open the returned result URL on success. Never regenerate merely to poll. +3. Return the result, task ID if present, and any service error. Keep the API token out of chat and files. + +Configure `ACEDATACLOUD_API_TOKEN` under **Dashboard → Plugins → Configure**. See the [first-run guide](../../README.md). From b2175546ff64bb163e522682d7b45b72b7fc32f2 Mon Sep 17 00:00:00 2001 From: Ace Data Cloud Dev Date: Sun, 11 Oct 2026 23:24:22 +0800 Subject: [PATCH 2/4] fix(veo): declare API token variable --- third_party/veo/.cursor-plugin/plugin.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/third_party/veo/.cursor-plugin/plugin.json b/third_party/veo/.cursor-plugin/plugin.json index acaf090bf..c3d843102 100644 --- a/third_party/veo/.cursor-plugin/plugin.json +++ b/third_party/veo/.cursor-plugin/plugin.json @@ -27,5 +27,18 @@ "video", "mcp" ], + "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 Veo access." + } + }, + "required": [ + "ACEDATACLOUD_API_TOKEN" + ] + }, "mcpServers": "./mcp.json" } From 0c9cc92a1173ad7cfd966edc7300aacf80611f5e Mon Sep 17 00:00:00 2001 From: Ace Data Cloud Dev Date: Mon, 12 Oct 2026 01:07:24 +0800 Subject: [PATCH 3/4] docs: match Cursor 3.24 plugin navigation --- third_party/veo/README.md | 4 ++-- third_party/veo/readme/README_zh_Hans.md | 4 ++-- third_party/veo/skills/veo/SKILL.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/third_party/veo/README.md b/third_party/veo/README.md index 6bf8c13d4..040ce2341 100644 --- a/third_party/veo/README.md +++ b/third_party/veo/README.md @@ -6,7 +6,7 @@ Generate Veo videos and retrieve the finished clip. This standalone plugin reuse ## 1. Search and install -In Cursor 3.13 or later, open **Cursor Settings → Plugins**, search for **Veo**, confirm **Ace Data Cloud Dev** and the service logo, then click **Install**. You can also use `/add-plugin veo` in chat. If the official listing is not live, review this source under `~/.cursor/plugins/local/veo/`; local installation does not prove Marketplace publication. +In Cursor 3.24, open **Customize → Browse Marketplace**, search for **Veo**, confirm **Ace Data Cloud Dev** and the service logo, then click **Add**. Older releases may put Plugins under Settings. You can also use `/add-plugin veo` in chat. If the official listing is not live, review this source under `~/.cursor/plugins/local/veo/`; local installation does not prove Marketplace publication. ## 2. Get a service API key @@ -18,7 +18,7 @@ Use a service API key, not a platform management token. Do not put it in chat or ## 3. Configure the plugin -Under **Dashboard → Plugins → Configure**, select **Veo** and set `ACEDATACLOUD_API_TOKEN` to the key string. Paste only the key; the plugin adds `Bearer `. Reconnect the MCP server if tools are missing. The hosted endpoint needs no local Python installation. +Open **Customize → Plugins → Veo → Configure**, paste the key string into **Ace Data Cloud API token**, and click **Save**. Cursor uses it as `ACEDATACLOUD_API_TOKEN`; the plugin adds `Bearer `. Reconnect the MCP server if tools are missing. The hosted endpoint needs no local Python installation. ```json { diff --git a/third_party/veo/readme/README_zh_Hans.md b/third_party/veo/readme/README_zh_Hans.md index dc02088f9..cf126dbcf 100644 --- a/third_party/veo/readme/README_zh_Hans.md +++ b/third_party/veo/readme/README_zh_Hans.md @@ -6,7 +6,7 @@ Generate Veo videos and retrieve the finished clip. 插件复用 [Ace Data Cloud ## 1. 搜索安装 -在 Cursor 3.13 或更新版本打开 **Cursor Settings → Plugins**,搜索 **Veo**,确认作者 **Ace Data Cloud Dev** 和服务图标后点击 **Install**。也可在聊天中输入 `/add-plugin veo`。若官方条目尚未出现,可在 `~/.cursor/plugins/local/veo/` 本地审查;本地安装不代表 Marketplace 已上架。 +在 Cursor 3.24 打开 **Customize → Browse Marketplace**,搜索 **Veo**,确认作者 **Ace Data Cloud Dev** 和服务图标后点击 **Add**。较早版本可能在 Settings 中提供 Plugins 入口。也可在聊天中输入 `/add-plugin veo`。若官方条目尚未出现,可在 `~/.cursor/plugins/local/veo/` 本地审查;本地安装不代表 Marketplace 已上架。 ## 2. 获取服务 API Key @@ -18,7 +18,7 @@ Generate Veo videos and retrieve the finished clip. 插件复用 [Ace Data Cloud ## 3. 配置插件 -在 **Dashboard → Plugins → Configure** 选择 **Veo**,将 Key 原文填入 `ACEDATACLOUD_API_TOKEN`。插件会自行添加 `Bearer `,连接 `https://veo.mcp.acedata.cloud/mcp`;无需安装本地 Python 服务。工具未出现时重新连接 MCP。 +打开 **Customize → Plugins → Veo → Configure**,将 Key 原文填入 **Ace Data Cloud API token** 并点击 **Save**。Cursor 将其用于 `ACEDATACLOUD_API_TOKEN`;插件会自行添加 `Bearer `,连接 `https://veo.mcp.acedata.cloud/mcp`;无需安装本地 Python 服务。工具未出现时重新连接 MCP。 ## 4. 首次调用 diff --git a/third_party/veo/skills/veo/SKILL.md b/third_party/veo/skills/veo/SKILL.md index 26a691c21..e226f948f 100644 --- a/third_party/veo/skills/veo/SKILL.md +++ b/third_party/veo/skills/veo/SKILL.md @@ -11,4 +11,4 @@ This skill adapts the [existing Ace Data Cloud skill](https://github.com/AceData 2. Submit with `veo_text_to_video` once. Save the returned `task_id` and use `veo_get_task` with that same ID until terminal. Pending is not a completed video; open the returned result URL on success. Never regenerate merely to poll. 3. Return the result, task ID if present, and any service error. Keep the API token out of chat and files. -Configure `ACEDATACLOUD_API_TOKEN` under **Dashboard → Plugins → Configure**. See the [first-run guide](../../README.md). +Configure `ACEDATACLOUD_API_TOKEN` in **Customize → Plugins → Veo → Configure**. See the [first-run guide](../../README.md). From 3c5f82171528332b94b581583be19639816675e5 Mon Sep 17 00:00:00 2001 From: Ace Data Cloud Dev Date: Mon, 12 Oct 2026 05:28:58 +0000 Subject: [PATCH 4/4] docs: tag shared Cursor README activation links --- third_party/veo/README.md | 6 +++--- third_party/veo/readme/README_zh_Hans.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/third_party/veo/README.md b/third_party/veo/README.md index 040ce2341..12d8fedd5 100644 --- a/third_party/veo/README.md +++ b/third_party/veo/README.md @@ -2,7 +2,7 @@ Generate Veo videos and retrieve the finished clip. This standalone plugin reuses the [Ace Data Cloud veo MCP](https://github.com/AceDataCloud/MCPs/tree/main/veo) and includes a focused Agent skill. Available tools and limits come from the live MCP schema. -[简体中文教程](readme/README_zh_Hans.md) · [Copyable first-run prompt](examples/first-run.md) · [Current pricing](https://platform.acedata.cloud/models) +[简体中文教程](readme/README_zh_Hans.md) · [Copyable first-run prompt](examples/first-run.md) · [Current pricing](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=veo_cursor_shared_readme_pricing_en) ## 1. Search and install @@ -10,9 +10,9 @@ In Cursor 3.24, open **Customize → Browse Marketplace**, search for **Veo**, c ## 2. Get a service API key -1. Sign in at [Ace Data Cloud Applications](https://platform.acedata.cloud/console/applications). +1. Sign in at [Ace Data Cloud Applications](https://platform.acedata.cloud/console/applications?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=veo_cursor_shared_readme_api_key_en). 2. Open **General application** or a service-specific application. Copy an existing API key, or use **Manage Keys → Create** for a separate Cursor key. -3. Confirm Veo access, [current price](https://platform.acedata.cloud/models), and balance. If **Allowed APIs** restrictions are enabled, include /veo/videos, /veo/tasks. +3. Confirm Veo access, [current price](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=veo_cursor_shared_readme_pricing_en), and balance. If **Allowed APIs** restrictions are enabled, include /veo/videos, /veo/tasks. Use a service API key, not a platform management token. Do not put it in chat or source files. diff --git a/third_party/veo/readme/README_zh_Hans.md b/third_party/veo/readme/README_zh_Hans.md index cf126dbcf..06b7be3b7 100644 --- a/third_party/veo/readme/README_zh_Hans.md +++ b/third_party/veo/readme/README_zh_Hans.md @@ -2,7 +2,7 @@ Generate Veo videos and retrieve the finished clip. 插件复用 [Ace Data Cloud veo MCP](https://github.com/AceDataCloud/MCPs/tree/main/veo),并提供专用 Agent skill。实际工具参数和限制以在线 MCP schema 为准。 -[English guide](../README.md) · [可复制的首跑提示词](../examples/first-run.md) · [当前价格](https://platform.acedata.cloud/models) +[English guide](../README.md) · [可复制的首跑提示词](../examples/first-run.md) · [当前价格](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=veo_cursor_shared_readme_pricing_zh_hans) ## 1. 搜索安装 @@ -10,9 +10,9 @@ Generate Veo videos and retrieve the finished clip. 插件复用 [Ace Data Cloud ## 2. 获取服务 API Key -1. 登录 [Ace Data Cloud 应用管理](https://platform.acedata.cloud/console/applications)。 +1. 登录 [Ace Data Cloud 应用管理](https://platform.acedata.cloud/console/applications?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=veo_cursor_shared_readme_api_key_zh_hans)。 2. 打开 **General application** 或服务专用应用,复制已有 Key;也可通过 **Manage Keys → Create** 新建 Cursor 专用 Key。 -3. 确认 Veo 权限、[当前价格](https://platform.acedata.cloud/models)和余额。若启用了 **Allowed APIs**,允许 /veo/videos, /veo/tasks。 +3. 确认 Veo 权限、[当前价格](https://platform.acedata.cloud/models?utm_source=opensource&utm_medium=referral&utm_campaign=evergreen&utm_content=veo_cursor_shared_readme_pricing_zh_hans)和余额。若启用了 **Allowed APIs**,允许 /veo/videos, /veo/tasks。 使用服务 API Key,不要用平台管理 token,也不要放在聊天或仓库文件中。