Dashboard

Track your ad from Claude

Spark Ads runs an MCP server. Connect it once and Claude can read your hour, your numbers and what is still unsold, and rewrite your card for you. Five tools, four of them read only.

SparkAds MCPMCP

Five tools, scoped to your own account from Claude Desktop.

Connect it

Two minutes, once. One key, generated by you and shown a single time.

Open the dashboard, go to Settings → Claude Desktop access and press Generate a key. Nothing stores the key in readable form, so the box it appears in is the only place it will ever be. Copy it before you close the panel.

Endpoint

https://sparkads.dev/api/mcp

For Claude Code, one line adds it:

Claude Code

claude mcp add --transport http sparkads https://sparkads.dev/api/mcp --header "Authorization: Bearer YOUR_KEY"

The endpoint above is the base. A client that wants the exact transport path uses /api/mcp/mcp for streamable HTTP, or /api/mcp/sse for SSE.

For Claude Desktop, or any client that speaks local stdio, put this in the config file (Settings → Developer → Edit Config) and restart it:

claude_desktop_config.json

{
  "mcpServers": {
    "sparkads": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://sparkads.dev/api/mcp/mcp",
        "--header", "Authorization: Bearer YOUR_KEY"
      ]
    }
  }
}
The key is your account
It resolves to one email, and that email scopes every query, so a key cannot reach anybody else's slot. It can still read all of your own numbers and rewrite your card, so treat it like a password: never paste it into a shared chat, a public repo or a screenshot. Revoke and regenerate from the same panel if it gets out.
No key, no error
A client configured without a key still connects and still lists the five tools; every call just comes back asking for one. That is deliberate, because a transport-level 401 shows up in most clients as "server unavailable", which sends people looking for the wrong problem.

What it looks like

Five tools, five real questions. You never type a tool name; Claude picks.

The numbers below are illustrative and modest on purpose. What is exact is the shape: each answer is read out of the response keys printed under it, and nothing else is available to report.

get_my_statsRead only

Your own impressions and clicks for the last 30 days, three ways.

How did my card do this month?

Over the last 30 days your card took 4,120 impressions and 96 clicks, a click rate of 2.3%. Here is the split by app:

AppImpressionsClicks
sellular1,54038
quickpeek1,18027
tax-ducks89019
spark-ai51012

By source, 3,940 came from carousels inside Spark apps (network) and 180 from Sellular listings (sellular). Your busiest day was 12 August at 210 impressions.

You have one creative on file, Notemill, and its status is approved.

creatives[], byDay[], byApp[], bySource[], windowDays

get_slotRead only

The hour you hold, the card in it, and whether it can actually run.

Is my ad set up to run, and when?

Yes. All three conditions hold, so live comes back true:

  • You hold 19:00 UTC, which is 20:00 on the German clock you targeted.
  • Target country DE, claimed on 2 August.
  • The card, Notemill, is approved, and the subscription is active.

That hour is yours every day until you give it up. Outside it the network runs whoever holds the hour that is on.

holdsSlot, utcHour, localHour, targetCountry, claimedAt, approved, subscriptionActive, live, creative

list_free_slotsRead only

The unsold hours, and which of them land in your audience’s evening.

Which hours are still free? I want US evenings.

Twelve of the 24 hours are unsold. Passing US, the free ones ranked by local evening attention (18:00 to 22:00):

UTC hourUS local
23:0018:00
00:0019:00
01:0020:00
02:0021:00
03:0022:00

01:00 UTC sits at 20:00 Eastern, the middle of that window, and nobody has it. $9 a month. Claiming still happens on the board; this tool only reads.

slotsTotal, slotsTaken, freeUtcHours[], priceMonthly, country, free[], suggested[], note

get_network_pulseRead only

The whole network over 24 hours. Public inventory, not your account.

How much traffic does the network actually carry?

Across the last 24 hours the network served 18,400 impressions and 390 clicks, over 9 apps showing the carousel.

12 of the 24 hourly slots are taken, so 12 are still for sale. These are the public figures, the same ones the landing page prints, not your own numbers.

impressions24h, clicks24h, apps24h, slotsTaken, slotsTotal

update_creativeWrites

Rewrite the card. Costs you the approval you already have.

Change my tagline to say it works offline.

I can set it to “Notes that work offline”, which fits the 60 character cap. One thing first: saving resets the card to pending, so it stops running until a person approves it again. Go ahead?

Saved. changed: ["tagline"]. The card now reads Notemill, “Notes that work offline”, and its status is pending.

The server’s own words: back in the review queue, it stops running until a person approves it, usually the same day.

ok, changed[], creative, note

Editing costs you your approval

The one write tool has a price, and it is not money.

update_creative merges the fields you name over the stored card, validates the whole thing against the same rules a fresh claim is held to, then saves it with its status reset to pending. Your ad stops running until a person reads it again, usually the same day.

It should ask you first
The tool description tells the model to say this out loud and get your agreement before calling it, so a stray "tidy up my copy" should come back as a proposal rather than a card that is suddenly offline. Ask for a rewrite you can read before it saves if you want to be certain.

Field caps are enforced server side: name 40 characters, tagline 60, the one-sentence body 160, the URL must be https, and the domain must be a bare hostname like myapp.com. House style is plain words, no exclamation marks, and a sentence that says what the product does rather than why it is good.

What it cannot do

Short list, and it is short by construction.

It can

  • Read your impressions, clicks and creatives
  • Report the hour you hold and whether it can run
  • List every unsold hour, ranked for a country
  • Read the network's public 24 hour pulse
  • Rewrite your card, back into review

It cannot

  • Claim or release an hour, which stays on the board
  • Approve its own edit
  • Touch billing, or start and stop a subscription
  • See another advertiser's slot, card or numbers
No tool takes an advertiser as an argument
That is the reason the last line above holds. The email comes from the key, never from something the model can pass, so there is nothing to point at somebody else's account.

One hour, every dashboard

Twenty four hours in the day, one advertiser in each. $9 a month while you hold yours.

See which hours are free