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
| Tool | Public API | Scope |
|---|---|---|
ping | GET /v1/ping | any valid credential |
get_campaigns | GET /v1/campaigns | campaigns:read |
get_campaign | GET /v1/campaigns/{campaignId} | campaigns:read |
get_campaign_tiers | GET /v1/campaigns/{campaignId}/tiers | campaigns:read |
get_campaign_activity | GET /v1/campaigns/{campaignId}/activity | campaigns:read |
get_campaign_metrics_overview | GET /v1/campaigns/{campaignId}/metrics/overview | metrics:read |
get_campaign_metrics_creatives | GET /v1/campaigns/{campaignId}/metrics/creatives | metrics:read |
get_campaign_metrics_creative_daily | GET /v1/campaigns/{campaignId}/metrics/creative-daily | metrics:read |
get_campaign_metrics_breakdown | GET /v1/campaigns/{campaignId}/metrics/breakdown | metrics:read |
get_campaign_metrics_engagement | GET /v1/campaigns/{campaignId}/metrics/engagement | metrics:read |
get_campaign_metrics_breakdown_export | GET /v1/campaigns/{campaignId}/metrics/breakdown/export | metrics:read |
get_campaign_metrics_engagement_export | GET /v1/campaigns/{campaignId}/metrics/engagement/export | metrics:read |
get_soundlinks | GET /v1/soundlinks | soundlinks:read |
get_soundlink | GET /v1/soundlinks/{soundlinkId} | soundlinks:read |
get_soundlink_metrics_overview | GET /v1/soundlinks/{soundlinkId}/metrics/overview | soundlinks:read |
get_soundlink_metrics_breakdown | GET /v1/soundlinks/{soundlinkId}/metrics/breakdown | soundlinks:read |
get_soundlink_metrics_engagement | GET /v1/soundlinks/{soundlinkId}/metrics/engagement | soundlinks:read |
get_soundlink_metrics_breakdown_export | GET /v1/soundlinks/{soundlinkId}/metrics/breakdown/export | soundlinks:read |
get_soundlink_metrics_engagement_export | GET /v1/soundlinks/{soundlinkId}/metrics/engagement/export | soundlinks:read |
get_strategies | GET /v1/strategies | campaigns:read |
get_wallet | GET /v1/wallet | wallet:read |
get_pixels | GET /v1/pixels | pixels: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.