Soundlink

Connect Meta ads to Spotify listening: compare attributed listeners, cost per listener, campaign and creative performance, and repeat listening with read-only Soundlink analytics.

Hosted MCP Server

npx add-mcp 'https://api.getsoundlink.com/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

MCP server

Connect Cursor or Claude to your Soundlink organization. Read-only, nothing to install.

Soundlink hosts an MCP server. An AI client calls it over Streamable HTTP and gets read-only access to your organization. It does not create campaigns, change budgets, or import videos.

https://api.getsoundlink.com/mcp

1. Create a credential

  • API key — when the client can send Authorization: Bearer sk_... (recommended for Cursor).
  • OAuth app — when the client asks for a client id and secret.
  • Claude and Codex — paste the MCP URL and complete the browser login. Those hosts use CIMD; you do not create an OAuth app.

Soundlink does not support RFC 7591 dynamic client registration. Clients that try to register at runtime still need an API key or an OAuth app.

[card] API keys

Settings → Developer → API keys. Sign in first. Soundlink opens the keys page for your current organization.

[card] OAuth apps

Settings → Developer → OAuth apps. Same shortcut. Use this when the client asks for a client id and secret.

Owners and admins can create keys and OAuth apps. For the scopes each tool needs, see the table below. A key or app that should read everything the server exposes needs campaigns:read, metrics:read, soundlinks:read, and wallet:read.

API key

1. Open API keys

Go to Settings → Developer → API keys.

2. Create a key

Click Create key. Set a name, an expiration, and the scopes above. Details and screenshots are in Authentication.

3. Copy the secret

Soundlink shows the full sk_ key once. Store it where the MCP client can read it. You cannot reveal it again.

OAuth app

1. Open OAuth apps

Go to Settings → Developer → OAuth apps.

2. Create the app

Set a name. Enable the Authorization code grant. Paste the redirect URI your MCP client shows you — it must match exactly, including http vs https and localhost vs 127.0.0.1. Select the scopes above.

3. Copy the client id and secret

Paste both into the MCP client. The secret is shown once. Access tokens last one hour. The client refreshes them, so you stay connected without signing in again. See OAuth.

One connection is one organization. To use another org, disconnect and approve that org on the next consent screen.

2. Add the server

Cursor

Open Cursor Settings → MCP → Add new global MCP server.

With an API key:

{
  "mcpServers": {
    "soundlink": {
      "url": "https://api.getsoundlink.com/mcp",
      "headers": {
        "Authorization": "Bearer sk_your_key"
      }
    }
  }
}

With OAuth, omit headers. Cursor starts the login. Enter the client id and secret from the OAuth app.

{
  "mcpServers": {
    "soundlink": {
      "url": "https://api.getsoundlink.com/mcp"
    }
  }
}

Claude

In Claude, open Settings → Connectors → Add custom connector and paste:

https://api.getsoundlink.com/mcp

Complete the OAuth login in the browser. No OAuth app needed — Claude uses CIMD.

Other clients

Any client that speaks Streamable HTTP can use the same URL. If it cannot open a browser, send the API key as Authorization: Bearer sk_your_key.

3. Check the connection

Ask the client to call ping. A working credential returns {"status":"ok"}. ping does not require a specific scope.

Then ask for a campaign list. If a tool fails with an authorization error, the key or app is missing the scope in the table below. Create a new key, or edit the OAuth app, and reconnect.

Tools

ToolPublic APIScope
pingGET /v1/pingany valid credential
get_campaignsGET /v1/campaignscampaigns:read
get_campaignGET /v1/campaigns/{campaignId}campaigns:read
get_campaign_tiersGET /v1/campaigns/{campaignId}/tierscampaigns:read
get_campaign_activityGET /v1/campaigns/{campaignId}/activitycampaigns:read
get_campaign_metrics_overviewGET /v1/campaigns/{campaignId}/metrics/overviewmetrics:read
get_campaign_metrics_creativesGET /v1/campaigns/{campaignId}/metrics/creativesmetrics:read
get_campaign_metrics_creative_dailyGET /v1/campaigns/{campaignId}/metrics/creative-dailymetrics:read
get_campaign_metrics_breakdownGET /v1/campaigns/{campaignId}/metrics/breakdownmetrics:read
get_campaign_metrics_engagementGET /v1/campaigns/{campaignId}/metrics/engagementmetrics:read
get_campaign_metrics_breakdown_exportGET /v1/campaigns/{campaignId}/metrics/breakdown/exportmetrics:read
get_campaign_metrics_engagement_exportGET /v1/campaigns/{campaignId}/metrics/engagement/exportmetrics:read
get_soundlinksGET /v1/soundlinkssoundlinks:read
get_soundlinkGET /v1/soundlinks/{soundlinkId}soundlinks:read
get_soundlink_metrics_overviewGET /v1/soundlinks/{soundlinkId}/metrics/overviewsoundlinks:read
get_soundlink_metrics_breakdownGET /v1/soundlinks/{soundlinkId}/metrics/breakdownsoundlinks:read
get_soundlink_metrics_engagementGET /v1/soundlinks/{soundlinkId}/metrics/engagementsoundlinks:read
get_soundlink_metrics_breakdown_exportGET /v1/soundlinks/{soundlinkId}/metrics/breakdown/exportsoundlinks:read
get_soundlink_metrics_engagement_exportGET /v1/soundlinks/{soundlinkId}/metrics/engagement/exportsoundlinks:read
get_strategiesGET /v1/strategiescampaigns:read
get_walletGET /v1/walletwallet:read
get_pixelsGET /v1/pixelspixels:read

get_campaign_tiers only succeeds for a wallet campaign. Each tier includes learningStatus (LEARNING, FAIL, SUCCESS, or null). get_campaign_activity is a page of creative adds, budget changes, and other campaign events. Omit startDate to page the full history. get_campaign_metrics_creative_daily is one row per day and Meta ad creative, not the lifetime groups from get_campaign_metrics_creatives. Engagement tools take an optional engagementContext of catalog or playlist. Exports default to the last 90 days and return JSONL, not the JSON envelope. get_soundlinks does not include soundlinks created for a campaign.

Field definitions: Campaign metrics, Soundlink metrics, JSONL exports.

Next

SDK overview · Authentication · OAuth

This documentation is built and hosted on Mintlify, a developer documentation platform.