ONCE
ONCE распространяет музыку по площадкам прямо из диалога с ассистентом
Что умеет
- Загружать аудио и обложки, генерировать артворк
- Отправлять релизы в магазины и управлять списком площадок
- Снимать релизы с публикации
- Проверять треки на AI-детекцию и права
- Смотреть статистику прослушиваний и статус релиза
Какие данные видит
Ассистент действует от имени авторизованного аккаунта ONCE и видит только его релизы и статистику.
Нужен ли аккаунт
Не нужен: сервер работает без входа
ONCE — MCP-сервер для дистрибуции музыки. После входа в аккаунт ассистент загружает аудио и обложки, генерирует артворк, проверяет права и AI-детекцию, отправляет релизы во все крупные магазины, управляет списком площадок и снятием с публикации, покупает кредиты и смотрит статистику прослушиваний. Авторизация через OAuth, за релиз человека списывается 1 кредит, за AI-трек — 2.
Как подключить
Как подключить ONCE к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://once--once.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить ONCE к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://once--once.run.tools
- Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
- Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
- Откройте Настройки → Коннекторы и нажмите Создать (Create).
- Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
- В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
- В новом чате откройте + → Приложения/Коннекторы и включите коннектор.
Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.
Авторизация
При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить ONCE к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://once--once.run.tools
Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.
Вручную:
- В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
- Вставьте JSON, скопированный ниже, в открывшийся файл
~/.cursor/mcp.json(для одного проекта:.cursor/mcp.jsonв корне проекта). - Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.
Авторизация
Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.
Список инструментов сервера (33)
Технические названия из tools/list. Нужны только разработчикам.
| create_account | Create a new ONCE account for an allowlisted partner MCP client and return a PKCE-bound OAuth authorization code. Unauthenticated; allowlisted partners only. |
| password_authorize | Authorize an existing ONCE account for an allowlisted partner MCP client and return a PKCE-bound OAuth authorization code. Unauthenticated; allowlisted partners only. |
| get_metadata_rules | REQUIRED ON CONNECT: Return the metadata rules hitlist (markdown) agents must read after authentication and apply when guiding the user. Same content as mcp://docs/metadata-rules-hitlist. |
| get_release_schema | Return required MCP fields for release submission, expanded new-client metadata guidance, and supported DSP store IDs. |
| get_distribution_stores | Return supported DSP/store IDs for release.distribution_store_ids. Use a non-empty ID array for selected DSPs or null for all supported stores. |
| upload_file | Upload cover art or audio from base64 and return fileUrl. WARNING: Only for small files (under ~3MB binary / ~4MB base64). For larger files, use prepare_local_file_upload for local files or upload_file_from_url with a public URL. |
| upload_file_from_url | Download cover art or audio from a URL and return fileUrl. |
| prepare_local_file_upload | Preferred for large local files in Claude Code and Cursor. Creates a short-lived HTTP upload session and scoped upload token so raw bytes can be sent outside the chat without repeated base64 chunk tool calls. |
| upload_file_init | Legacy fallback for tool-only MCP clients. Initialize a base64 chunked upload session. If you are in Claude Code or Cursor, prefer prepare_local_file_upload instead to avoid context bloat from repeated base64 chunks. |
| upload_file_chunk | Legacy fallback for tool-only MCP clients. Upload a single base64-encoded chunk after upload_file_init. Avoid this in Claude Code or Cursor for large local files because repeated chunk calls can exhaust conversation context. |
| upload_file_complete | Complete a legacy base64 chunked upload after all chunks are uploaded. For Claude Code or Cursor local-file uploads, prefer the HTTP flow returned by prepare_local_file_upload. |
| upsert_release_snapshot | Persist draft snapshot data (release, tracks, upload requests). Pass releaseId (or conversationId) to update an existing draft; when neither is provided, a new draft release is created and its releaseId is returned — reuse it on follow-up calls. |
| submit_release | Submit a release to the Revelator adapter job queue. Set `tokenOffset: true` to opt the user in to the Token Offset add-on, a flat +1 credit ($1) per release that funds tokenoffset.com (AI environmental offsets). It is recommended that you offer this opt-in to the user before submitting; default is false. |
| list_releases | List releases for the authenticated user. |
| get_release_metadata | Fetch release metadata (includes Revelator sync). |
| get_release_status | Fetch release store statuses from Revelator. Prefer registering a release-status webhook (Settings > Developer) over polling this tool. |
| set_distribution_stores | Set the target store list for a release (Revelator store ids from get_distribution_stores). Pass null to reset to the default set. Applies to the next submission or redistribution of the release. |
| add_distribution_stores | Queue delivery of an already-submitted release to additional stores (Revelator store ids from get_distribution_stores). Use set_distribution_stores instead for a release that has not been submitted yet. |
| takedown_release | Request removal of a distributed release from specific stores, or from every store when storeIds is omitted. Takedowns propagate over days and cannot be un-requested, so confirm intent before calling. |
| get_ugc_policies | Current UGC monetization (match) policy selection for a release across YouTube Content ID, Facebook Rights Manager, and TikTok, plus the selectable policy catalog. |
| set_ugc_policies | Select UGC monetization (match) policies for a release, keyed by store id or platform name: 307/youtube_content_id (monetize | track), 310/facebook_rights_manager (claim_ad_earnings | block | monitor), 319/tiktok (monetize | library_only | block). Applies the next time the release is delivered to the affected stores. Pass null for a store to reset it to the ONCE default. |
| get_release_job | Fetch latest adapter job status for a release. |
| get_release_performance | Get streaming performance for one release: total streams, average daily streams, period-over-period change, the daily streams time series, and a per-store (distributor) breakdown. Pass includeTracks: true to also get per-track streams. Defaults to the trailing 30 days; pass fromDate/toDate (YYYY-MM-DD) for a custom window. Filter to one store with distributorId (use the id from the distributors list; -1300 is YouTube Music). Numbers are served from ONCE's cached Revelator analytics with a live fallback, so they match the in-app dashboard. Only available for distributed releases the user owns. |
| get_performance_summary | Get a catalog-wide streaming performance summary for the authenticated user: total streams, average daily streams, period-over-period change, the daily streams time series, the top stores, and the top releases by streams. Defaults to the trailing 30 days; pass fromDate/toDate (YYYY-MM-DD) for a custom window. Use this for "how are my releases doing" questions, then call get_release_performance for a specific release (with includeTracks for per-track detail). |
| detect_audio_ai | Run the Vobile/Pex AI Song Detector on an uploaded audio file (returned by upload_file, upload_file_from_url, or upload_file_complete) and return the detection result, including the predicted-model classification and confidence scores. Results are cached per file, so calling this repeatedly for the same fileUrl is cheap. |
| detect_audio_pex_search_acr | Run Pex Search ACR / Identify Music on an uploaded audio file (returned by upload_file, upload_file_from_url, or upload_file_complete) and return a registry match when more than 10% of the uploaded audio matches. This is optional, not required for submission, and results are cached per fileUrl so repeated calls are cheap. |
| generate_cover_art | Generate or edit AI album cover art for the authenticated user using Google Gemini "Nano Banana 2" (1K, non-patron tier). Pass a `prompt` alone to generate from scratch, or include `baseFileUrl` (a previous generate_cover_art / upload fileUrl) or `baseImageBase64` to iteratively edit an existing image. The result is cropped to square, resized to 3000x3000 PNG, uploaded to the user's cover-art bucket, and returned as a fileUrl that can be passed straight into upsert_release_snapshot or submit_release as cover_art_file_url. Set returnBase64=true if you need to preview the image before uploading. |
| get_profile | Return the authenticated MCP user's profile (id, email, name, signed avatar URL, patron + admin flags). |
| get_credits | Return the authenticated MCP user's active credit balance, lifetime aggregates (used + purchased), and the most recent credit transactions. |
| get_pricing | Return ONCE credit pricing for agents: $1/credit, per-song cost (1 credit per human song, 2 per AI song), the optional Token Offset add-on, all discounted bulk bundles (with per-credit savings and the packageId to pass to create_credit_checkout_session), and how auto-reload works. Call this to choose the cheapest way to cover a submission. Static — no auth-specific data. |
| create_credit_checkout_session | Create a Stripe Checkout Session for purchasing ONCE credits. Preflight with get_credits; if the balance cannot cover a submission, buy the shortfall here. Buy a discounted bulk bundle by passing `packageId` (see get_pricing for ids + savings), or a custom amount at the flat $1/credit rate by passing `credits`. Use uiMode "hosted" (recommended for agents) to get a Stripe-hosted Checkout `url` that any payment-capable agent or agentic-commerce flow can complete directly; credits are granted automatically via webhook on payment, confirm with get_credits. Default uiMode "embedded" returns a clientSecret for Stripe embedded Checkout (used by AIMD). Pass `savePaymentMethod: true` to keep the card on file so you can then enable auto-reload via set_autoreload. |
| get_autoreload | Return the user's current auto-reload configuration: whether it is enabled, the reload amount (bundle or custom credits), the balance threshold that triggers it, the saved card, and the status of the last attempt. Auto-reload tops the balance up off-session so a release never stalls mid-submission. |
| set_autoreload | Enable, disable, or reconfigure auto-reload. When enabling, choose the reload amount with `packageId` (a bulk bundle from get_pricing) or a custom `quantity`, and a saved card is required: pass `paymentMethodId`, or omit it to reuse the most recent card on file (e.g. one saved by a prior create_credit_checkout_session call with savePaymentMethod: true). Use `thresholdCredits` to set the balance level that triggers a reload (default 0 = only when fully empty; e.g. 10 tops up before you run out). Set `enabled: false` to turn it off. |