MCP server
MCP server
advertiser-mcp is a remote MCP server over Streamable HTTP. Tool calls go through the Advertiser API, so scopes, the rate limit, organization isolation, moderation, and first-campaign validation are the same rules.
https://tyfrhxfejrawgdlhryfu.supabase.co/functions/v1/advertiser-mcp
Send the advertiser key on every request:
Authorization: Bearer idl_adv_xxx
x-api-key: idl_adv_xxx is also accepted. Do not send a Supabase JWT.
The server name is idlen-advertiser, version 1.0.0. Read tools need read. Write tools need write. write does not include read. The limit is 120 requests per minute per key. The client sends Accept: application/json, text/event-stream.
Missing or unknown keys return 401 with { "error": { "code": "unauthorized", "message": "..." } }. Over the rate limit returns 429 with rate_limited, Retry-After, and the X-RateLimit-* headers.
Tools
| Tool | What it does |
|---|---|
list_campaigns | List campaigns for this organization, newest first. Archived campaigns are omitted unless include_archived is true. |
get_campaign | Get one campaign in this organization. Another organization's campaign is not found. |
get_campaign_stats | Daily impressions, clicks, spend in euro cents, and conversions. from and to are UTC YYYY-MM-DD. Default is the last 30 days. The range cannot exceed 366 days. |
create_campaign | Create a campaign and its ad set. Status defaults to draft. Amounts are euro cents. |
update_campaign | Update a campaign. Omitted fields stay unchanged. Setting status to active follows the same rules as resume_campaign. |
pause_campaign | Pause a campaign and its ad sets. |
resume_campaign | Turn a campaign on. The first API campaign is refused. A zero balance returns insufficient_balance. No approved ad returns ads_pending_moderation or ad_required. |
list_ads | List ads, newest first. Optional campaign_id. is_approved null or false means the ad is not delivering. |
create_ad | Create an ad on a campaign. Headline 1–60 characters, body at most 150, link must start with https://. |
create_ad_from_url | Read a landing page and create an ad from it. Shares the limit of 10 requests per organization per hour. |
update_ad | Update an ad. Omitted fields stay unchanged. |
get_wallet | Wallet balance in euro cents, and the currency code (EUR). |
list_transactions | Wallet transactions, newest first. Deposits are positive euro cents. Spends are negative. Payment processor references are not included. |
create_deposit_checkout_link | Open a Stripe Checkout URL for a wallet deposit. This does not charge a card by itself. |
Write tools take an optional idempotency_key. It is sent as Idempotency-Key. The same key and body replay for 24 hours.
A new ad stays pending until a person moderates it, and it does not deliver before that. Changing the headline, body, button text, link, or image sends the ad back to pending. The first campaign this organization creates through the API cannot be turned on from the API or from MCP. That result is first_campaign_requires_dashboard_validation and includes a dashboard link. Open the link and turn the campaign on in Ads Manager. A later campaign can be resumed when the wallet has funds and at least one ad is approved.
Field limits match Write.
Claude Desktop and Claude Code
Claude Desktop reads this from its config file. Claude Code uses the same mcpServers entry.
{
"mcpServers": {
"idlen-advertiser": {
"type": "http",
"url": "https://tyfrhxfejrawgdlhryfu.supabase.co/functions/v1/advertiser-mcp",
"headers": {
"Authorization": "Bearer idl_adv_xxx"
}
}
}
}
Cursor
Put this in .cursor/mcp.json or in Cursor Settings → MCP.
{
"mcpServers": {
"idlen-advertiser": {
"url": "https://tyfrhxfejrawgdlhryfu.supabase.co/functions/v1/advertiser-mcp",
"headers": {
"Authorization": "Bearer idl_adv_xxx"
}
}
}
}
ChatGPT and other remote MCP clients
Use the URL and the Authorization header. The client sends Accept: application/json, text/event-stream.
URL
https://tyfrhxfejrawgdlhryfu.supabase.co/functions/v1/advertiser-mcp
Header
Authorization: Bearer idl_adv_xxx
Create the key in Ads Manager under Settings → API keys, with Read and Write. The route list is also in the OpenAPI document.