{"id":"a2a1d5dd-5b42-4988-af5c-92a98d7f34b8","slug":"getdynamoi-mcp","kind":"mcp","name":"mcp","summary":"Connect ChatGPT, Claude, Cursor, and other AI agents to Dynamoi for free Spotify Smart Links, music promotion campaigns, analytics, and distribution.","owner":"getDynamoi","repoUrl":"https://github.com/getDynamoi/mcp","license":"MIT","licenseTier":"permissive","trust":"community","stars":3,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-02-10T23:24:07.000Z","addedAt":"2026-10-14T05:37:03.565Z","logoUrl":"https://avatars.githubusercontent.com/u/260553048?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["design-media","cloud-infra","data-analytics"],"tags":["facebook-ads","google-ads","meta-ads","music-promotion","spotify-marketing","youtube-ads","youtube-growth","artist-marketing"],"runtime":"remote","local":false,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-17T15:53:49.989Z","sample":false,"url":"https://conduits.dev/tools/getdynamoi-mcp","language":"TypeScript","transports":["http"],"install":{"remoteUrl":"https://dynamoi.com/mcp"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Dynamoi MCP Server\n\n**Music marketing for AI agents.**\n\n[![npm version](https://img.shields.io/npm/v/@dynamoi/mcp?label=npm)](https://www.npmjs.com/package/@dynamoi/mcp)\n[![license](https://img.shields.io/npm/l/@dynamoi/mcp)](./LICENSE)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.getDynamoi%2Fdynamoi-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.getDynamoi/dynamoi)\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=dynamoi&config=eyJ1cmwiOiJodHRwczovL2R5bmFtb2kuY29tL21jcCJ9)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=dynamoi&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fdynamoi.com%2Fmcp%22%7D)\n\nThe Dynamoi MCP server connects ChatGPT, Claude, Cursor, and other AI agents\nto [Dynamoi](https://dynamoi.com), the music marketing platform for artists,\nlabels, and managers. Agents can create free Spotify Smart Links, run managed\nYouTube and Meta promotion campaigns, read campaign and Smart Link analytics,\ncheck platform status, and apply for music distribution. Use the hosted MCP\nserver, or use this package as a library.\n\n```txt\nhttps://dynamoi.com/mcp\n```\n\nThe hosted server needs no install. Point any MCP client that supports remote\nStreamable HTTP and OAuth at that URL, and the user signs in with their\nDynamoi account.\n\n## About Dynamoi\n\nDynamoi is a music marketing platform founded in 2021 by Trevor Loucks. It\nruns managed Meta and YouTube ad campaigns, music distribution, and royalty\nanalytics for independent artists, labels, managers, and YouTube creators,\nalongside free Smart Links and analytics.\n\n- **Free Smart Links:** release pages and artist hubs built from Spotify\n  URLs, with link analytics, themes, validated pixel IDs, and team seats.\n- **Managed Smart Campaigns:** Meta ads that promote Spotify tracks, albums,\n  and playlists.\n- **YouTube campaigns:** managed Google Ads campaigns for YouTube channel\n  growth.\n- **Music distribution:** opt-in delivery to 100+ stores. Applications are\n  scored against five requirements, and approval is not guaranteed.\n- **YouTube promotion Shop:** one-off YouTube video promotion with no\n  subscription.\n\nCampaigns run on Dynamoi's own managed Meta and Google ad infrastructure. They\nreach real people through official ad networks, never bots, fake streams, or\npaid playlist placement. Results vary and are never guaranteed.\n\nDynamoi is based in Sioux Falls, South Dakota, and is operated by humans,\nassisted by AI. People make the decisions and are accountable for every\ncampaign and support reply. AI helps with ad creative, campaign monitoring,\nreporting, and routine tasks.\n\nSmart Links are free. Starter is $25/month with a $50 launch campaign credit,\nand campaign budgets start at $10/day. See\n[pricing](https://dynamoi.com/pricing).\n\nAgents can read the same overview before sign-in through the `dynamoi_about`\ntool or the `dynamoi://about` resource.\n\n## Connect\n\nEach client opens the Dynamoi sign-in page on first use.\n\n### ChatGPT\n\nOpen the [Dynamoi app in the ChatGPT directory](https://chatgpt.com/plugins/plugin_asdk_app_69ceb0e849788191aa3fd4d416204a9d).\nIn developer mode you can instead add a custom app with the MCP server URL\n`https://dynamoi.com/mcp` and OAuth authentication. ChatGPT gets the\n[directory catalog](#which-tools-a-client-sees).\n\n### Claude (web and desktop)\n\nOpen **Settings → Connectors**, choose **Add custom connector**, and enter\n`https://dynamoi.com/mcp`.\n\n### Claude Code\n\n```bash\nclaude mcp add --transport http dynamoi https://dynamoi.com/mcp\n```\n\nThen run `/mcp` in Claude Code to sign in.\n\nThe Dynamoi plugin from the\n[agent plugins repository](https://github.com/getDynamoi/agent-plugins)\nbundles Dynamoi skills with the directory catalog on\n`https://dynamoi.com/mcp/directory`:\n\n```txt\n/plugin marketplace add getDynamoi/agent-plugins\n/plugin install dynamoi@dynamoi\n```\n\n### Cursor\n\nUse the **Add to Cursor** badge above, or add Dynamoi to `~/.cursor/mcp.json`\n(or `.cursor/mcp.json` in a project):\n\n```json\n{\n  \"mcpServers\": {\n    \"dynamoi\": {\n      \"url\": \"https://dynamoi.com/mcp\"\n    }\n  }\n}\n```\n\n### VS Code\n\nUse the **Install in VS Code** badge above, or add Dynamoi to\n`.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"dynamoi\": {\n      \"type\": \"http\",\n      \"url\": \"https://dynamoi.com/mcp\"\n    }\n  }\n}\n```\n\n### Gemini CLI\n\nInstall the Dynamoi extension from the\n[agent plugins repository](https://github.com/getDynamoi/agent-plugins):\n\n```bash\ngemini extensions install https://github.com/getDynamoi/agent-plugins\n```\n\n### Codex CLI\n\n```bash\ncodex mcp add dynamoi --url https://dynamoi.com/mcp\ncodex mcp login dynamoi\n```\n\nOr add the server to `~/.codex/config.toml` and run `codex mcp login dynamoi`:\n\n```toml\n[mcp_servers.dynamoi]\nurl = \"https://dynamoi.com/mcp\"\n```\n\n### Other MCP clients\n\nUse `https://dynamoi.com/mcp` as a remote Streamable HTTP server. The client\nmust handle an OAuth 401 challenge (MCP authorization). Stdio-only clients\nneed a remote-to-stdio bridge.\n\n## Which tools a client sees\n\nThe server has two tool catalogs. It picks one from the OAuth client that\nsigned in, not from anything the client claims about itself.\n\n| Catalog | Who gets it | What it includes |\n| --- | --- | --- |\n| **Directory** | Every client on `https://dynamoi.com/mcp/directory` (used by agent-directory listings such as the Dynamoi Claude plugin), the published ChatGPT app on `/mcp`, and requests made before sign-in | 24 review-safe advertised tools: reads, Smart Links, distribution, and About. No billing, campaign launch or campaign changes, platform connection starters, or Shop checkout. |\n| **Full** | Every other signed-in client on `https://dynamoi.com/mcp`, such as Claude custom connectors, Claude Code, Cursor, VS Code, Gemini CLI, Codex CLI, and custom agents | All 37 tools, plus the Dynamoi prompts and reference resources |\n\nSigning in does not skip permission checks. Every tool call still needs its\nOAuth scopes, and the user's role must allow access to the artist, campaign,\nor Smart Link.\n\n## Tools\n\n\"Reads\" tools are marked read-only. \"Changes data\" tools write to Dynamoi or\nstart an action with an outside provider.\n\n| Tool | What it does | Access | Catalog |\n| --- | --- | --- | --- |\n| `dynamoi_about` | What Dynamoi is and how to start. Works before sign-in. | Reads | Both |\n| `dynamoi_open_workspace` | Open a read-only workspace for the authorized artist roster; supported hosts can browse campaigns and Smart Links | Reads | Both |\n| `dynamoi_get_account_overview` | Signed-in account, access counts and suggested next steps | Reads | Both |\n| `dynamoi_list_artists` | Artist roster, or one artist's profile and readiness | Reads | Both |\n| `dynamoi_search` | Find artists, campaigns, and Smart Links by name | Reads | Both |\n| `search` / `fetch` | ChatGPT deep research search and fetch | Reads | Both |\n| `dynamoi_list_campaigns` | An artist's campaigns, with type and status filters | Reads | Both |\n| `dynamoi_get_campaign` | One campaign, with optional analytics, delivery status, and countries | Reads | Both |\n| `dynamoi_get_artist_analytics` | Artist-level analytics across campaigns | Reads | Both |\n| `dynamoi_get_growth_audit` | Spotify growth score, recommendations, listener trends, and playlist reach with status and coverage evidence | Reads | Both |\n| `dynamoi_get_playlist_analytics` | Tracked playlist placements, reach, and movement with freshness and snapshot dates | Reads | Both |\n| `dynamoi_get_audience_analytics` | Streaming audience by date range, country, service, and paid/free tier | Reads | Both |\n| `dynamoi_get_youtube_channel_data` | Observed YouTube channel data by dataset, with coverage and campaign dates | Reads | Both |\n| `dynamoi_get_platform_status` | Spotify, Meta, and YouTube connection status and setup blockers | Reads | Both |\n| `dynamoi_get_distribution_application` | The five distribution requirements and application status | Reads | Both |\n| `dynamoi_apply_for_distribution` | Submit a distribution application for manual review | Changes data | Both |\n| `dynamoi_preview_smart_link_themes` | Visual preview of the Smart Link themes | Reads | Both |\n| `dynamoi_create_smart_link_from_spotify` | Create a free Smart Link from a Spotify album or track | Changes data | Both |\n| `dynamoi_create_smart_links_from_spotify_artist` | Import an artist's catalog as free Smart Links and return the artist hub | Changes data | Both |\n| `dynamoi_list_smart_links` | An artist's Smart Links and public URLs | Reads | Both |\n| `dynamoi_get_smart_link` | One Smart Link, with optional analytics and artist settings | Reads | Both |\n| `dynamoi_update_smart_link_description` | Update one Smart Link's public description | Changes data | Directory |\n| `dynamoi_update_smart_link_artist_settings` | Update an artist's Smart Link theme or validated pixel settings | Changes data | Directory |\n| `dynamoi_update_smart_link` | Prior multi-action schema for description or artist settings | Changes data | Full |\n| `dynamoi_update_smart_link_release_settings` | Update one Smart Link's release video or destination visibility | Changes data | Full |\n| `dynamoi_update_smart_link_artist_hub_settings` | Update an artist's hub introduction, official profile links or service order | Changes data | Full |\n| `dynamoi_get_billing` | Billing status, credit balance, and promo limits | Reads | Full |\n| `dynamoi_get_resume_funding` | Campaign resume-funding breakdown, refusal, and consent requirements | Reads | Full |\n| `dynamoi_list_available_countries` | Countries a Smart Campaign or YouTube campaign can target | Reads | Full |\n| `dynamoi_get_campaign_readiness` | Check launch inputs before creating anything | Reads | Full |\n| `dynamoi_list_media_assets` | Uploaded images and videos that a launch can reuse | Reads | Full |\n| `dynamoi_launch_campaign` | Launch a Smart Campaign or YouTube campaign | Changes data | Full |\n| `dynamoi_update_campaign` | Pause, resume, or change a campaign's budget or end date | Changes data | Full |\n| `dynamoi_manage_youtube_draft` | Inspect an interrupted YouTube launch draft, or discard it when the user asks | Changes data | Full |\n| `dynamoi_start_meta_connection` | Start the Facebook Page and Instagram connection in the browser | Changes data | Full |\n| `dynamoi_start_youtube_channel_link` | Start the YouTube channel connection in the browser | Changes data | Full |\n| `dynamoi_shop_get_quote` | Estimate a one-off YouTube promotion | Reads | Full |\n| `dynamoi_shop_create_checkout` | Create an unpaid Stripe Checkout link for that promotion | Changes data | Full |\n\nFull tool descriptions and input schemas come from `tools/list`, or from\n`getDynamoiToolDefinitions()` in this package.\n\nThe full-only Studio tools (`dynamoi_update_smart_link_release_settings` and\n`dynamoi_update_smart_link_artist_hub_settings`) are not part of the approved\ndirectory contract and are never listed in the directory profile.\n\nPreviously approved directory clients may continue calling the exact\n`dynamoi_update_smart_link` name with its approved schema. New directory tool\nlists omit that compatibility handler and advertise the two single-purpose\noperations above. Compatibility calls keep the same Smart Link write scope,\nconfirmation, account, and domain checks.\n\n## Money and safety\n\n- **Smart Links are free.** Creating or updating them never charges anyone.\n- **Launches and budget changes are real.** `dynamoi_launch_campaign` and\n  `dynamoi_update_campaign` go through the same backend checks as the Dynamoi\n  web and mobile apps: permissions, promo limits, and repeat-request\n  protection. Whether a person approves each call is up to the MCP client's\n  tool-approval settings, so keep approval on for tools that change data.\n- **Daily budgets need the user's funding consent.** A `DAILY` budget is\n  funded one 24-hour window at a time. Available credits and campaign funds\n  are used first, then the card the user saved in Dynamoi is charged\n  automatically. The agent must show the user the exact consent text, then send\n  `authorizeAutomaticDailyFunding: true` with the matching\n  `acceptedConsentVersion` and `acceptedConsentCopyHash`. This applies to\n  launches, budget updates, and resumes that need card funding. Without\n  consent the request is refused. The consent values are exported from\n  `@dynamoi/mcp/consent`.\n- **Total budgets use existing credit** and need no funding consent.\n- **Agents never handle payment credentials.** Subscriptions, plans, and\n  billing setup happen only in the [Dynamoi dashboard](https://dynamoi.com/dashboard),\n  where subscriptions start through hosted Stripe Checkout. No tool starts a\n  subscription.\n- **Shop checkout is only a link.** `dynamoi_shop_create_checkout` creates an\n  unpaid Stripe Checkout Session. The user pays on Stripe, and no order exists\n  until the payment is verified.\n- **Distribution applications start a manual review.** Submitting one does not\n  approve distribution, accept an agreement, or deliver music to stores.\n- **The directory catalog** exposes no tools that spend money, start a\n  subscription, or create a checkout.\n\n## Authentication\n\nDynamoi uses OAuth 2.1 through its authorization server at\n`https://dynamoi.com/api/auth`. Clients find it through the server's metadata:\n\n- Protected resource: `https://dynamoi.com/.well-known/oauth-protected-resource/mcp`\n- Authorization server: `https://dynamoi.com/.well-known/oauth-authorization-server`\n\n| Topic | Support |\n| --- | --- |\n| Client registration | Client ID Metadata Documents (preferred) and dynamic client registration |\n| Grants | Authorization code with PKCE (`S256`), refresh token, and the device authorization grant for CLI and headless agents (`https://dynamoi.com/api/auth/device/code`) |\n| Tokens | Bearer tokens in the `Authorization` header. DPoP signing algorithms are advertised. |\n\nWithout a token, a request gets a `401` with a `WWW-Authenticate` challenge.\nThat challenge asks for every scope the client's catalog uses, so one consent\ncovers the whole catalog. A full-catalog client that signed in with fewer\nscopes is asked once for the rest.\n\n| Scope | Allows |\n| --- | --- |\n| `dynamoi:read` | Reading the account, artists, campaigns, analytics, and Smart Links. Every signed-in tool needs it. |\n| `dynamoi:platform.read` | Checking Spotify, Meta, and YouTube connection status |\n| `dynamoi:platform.write` | Starting Meta and YouTube connection flows |\n| `dynamoi:smart_links.write` | Creating and updating free Smart Links |\n| `dynamoi:distribution.read` | Checking distribution requirements and application status |\n| `dynamoi:distribution.apply` | Submitting a distribution application |\n| `dynamoi:billing.read` | Reading billing status, credit balance, and promo limits |\n| `dynamoi:campaign.launch` | Launching new campaigns |\n| `dynamoi:campaign.write` | Pausing, resuming, and changing campaign budgets |\n| `dynamoi:mcp.full` | Using the Shop quote and checkout tools |\n\n## Protocol support\n\n- MCP **2026-07-28**: stateless requests with per-request `_meta`, including\n  `server/discover`.\n- MCP **2025-11-25** and earlier `initialize`-based revisions, for clients\n  that have not moved to 2026-07-28.\n- Streamable HTTP, POST only. Responses are JSON, or SSE for 2025-era\n  clients that accept it. The server keeps no sessions and opens no\n  standalone stream, so `GET` and `DELETE` return `405`.\n\n## Using the package\n\nMost people should connect to the hosted server. Install the package if you\nare building against the Dynamoi MCP contract: tool definitions, Zod schemas,\nresult types, OAuth scope maps, or the stateless HTTP handler.\n\n```bash\nnpm install @dynamoi/mcp\n```\n\nThe package is ESM-only and built on MCP TypeScript SDK v2\n(`@modelcontextprotocol/server`).\n\n| Entry point | Main exports |\n| --- | --- |\n| `@dynamoi/mcp` | `createDynamoiMcpServer`, `handleMcpHttpRequest`, `getDynamoiToolDefinitions`, `DynamoiMcpToolProfile`, `Phase3Adapter`, tool definition arrays and input schemas, Shop schemas, About exports (`getDynamoiAbout`, `DYNAMOI_ABOUT_*`), result and data types, `DYNAMOI_MCP_VERSION` |\n| `@dynamoi/mcp/auth` | `DYNAMOI_BETTER_AUTH_MCP_SCOPES`, `DYNAMOI_MCP_TOOL_SCOPES`, `buildWwwAuthenticateHeader` |\n| `@dynamoi/mcp/consent` | `PROSPECTIVE_BUDGET_FUNDING_CONSENT_VERSION`, `PROSPECTIVE_BUDGET_FUNDING_CONSENT_COPY`, `PROSPECTIVE_BUDGET_FUNDING_CONSENT_COPY_HASH` (current v6), the previous v5, v4, v3 and v2 constants, `isCurrentProspectiveBudgetFundingConsent`, and `isRenewableProspectiveBudgetFundingConsent` |\n\nA host provides a `Phase3Adapter`, which connects each tool to its own\nservices. It also verifies the caller before it serves a request:\n\n```ts\nimport {\n  createDynamoiMcpServer,\n  handleMcpHttpRequest,\n  type DynamoiMcpToolProfile,\n  type Phase3Adapter,\n} from \"@dynamoi/mcp\";\n\nexport async function handleMcp(\n  request: Request,\n  adapter: Phase3Adapter,\n  toolProfile: DynamoiMcpToolProfile,\n): Promise<Response> {\n  // Authenticate the request and check scopes first; this package does not\n  // verify tokens. The profile defaults to \"directory\" if you omit it.\n  const parsedBody = request.method === \"POST\" ? await request.json() : null;\n  return handleMcpHttpRequest({\n    request,\n    parsedBody,\n    createServer: () => createDynamoiMcpServer({ adapter, toolProfile }),\n  });\n}\n```\n\n`createDynamoiMcpServer` also accepts `authorizeToolCall` (answer a call\nbefore it runs, for example with a step-up challenge), `onToolCall` (a\ntelemetry hook), and `oauthScopes`.\n\nEvery request builds a new server. `handleMcpHttpRequest` sends 2026-07-28\nrequests to the SDK's stateless handler and 2025-era requests to a stateless\nper-request transport.\n\n## Links\n\n| Resource | URL |\n| --- | --- |\n| MCP server docs | <https://dynamoi.com/docs/mcp-server> |\n| ChatGPT app | <https://chatgpt.com/plugins/plugin_asdk_app_69ceb0e849788191aa3fd4d416204a9d> |\n| Agent plugins (Claude Code, Gemini CLI) | <https://github.com/getDynamoi/agent-plugins> |\n| MCP Registry | <https://registry.modelcontextprotocol.io/v0/servers?search=io.github.getDynamoi/dynamoi> |\n| Agent overview (`llms.txt`) | <https://dynamoi.com/llms.txt> |\n| Support | <https://dynamoi.com/support> or support@dynamoi.com (replies within 24 hours) |\n| Pricing | <https://dynamoi.com/pricing> |\n| npm | <https://www.npmjs.com/package/@dynamoi/mcp> |\n| Source and issues | <https://github.com/getDynamoi/mcp> |\n| Changelog | [CHANGELOG.md](./CHANGELOG.md) |\n| Capability map | [CAPABILITY_PARITY.md](./CAPABILITY_PARITY.md) |\n\nMIT licensed. See [LICENSE](./LICENSE).\n\n## Artist workspace\n\n`dynamoi_open_workspace({})` returns an authorized artist roster and declares a read-only MCP Apps resource with global and thread entrypoints. On supported hosts, browse campaigns and Smart Links, inspect reported metrics, and deliberately share the selected record and artist references with the next conversation turn. Channel observations retain their own window, provenance and coverage; they are not attributed to the campaign. No pricing, checkout or campaign-write controls appear in this workspace. Unsupported hosts retain the ordinary text and tool result.\n\nThe existing Smart Link theme preview remains separate. Composer mentions, settings, file viewers and events are not advertised. Local App/AppBridge fixtures establish their tested contract only; actual ChatGPT host support and public approval require separate evidence.\n\nThe browser bridge is bundled locally with the compatible MCP Apps v2 SDK; no CDN is needed. `bun scripts/build-workspace.cjs` regenerates the checked-in source bundle and `bun scripts/build-workspace.cjs --check` verifies reproducibility from the package directory. The ordinary package build runs the same owner. Keep the generated script synchronized with its browser/view/data sources.\n"}