More articles 11 min read

Cursor MCP server: add Apogee to run your Facebook Ads

Cursor MCP setup: put an Apogee API key in ~/.cursor/mcp.json, and Cursor's agent launches, reads and pauses your Meta, TikTok and Snapchat ads.

Mathieu Malige Founder, Apogee Published
Contents
  1. Before you start
  2. Cursor MCP server setup in three steps
  3. Check the connection
  4. What to ask Cursor next: the media buyer’s job
  5. Limits and safety
  6. Common problems
  7. Going further

Cursor MCP in practice: one Apogee API key in ~/.cursor/mcp.json, and Cursor’s agent reads, launches and pauses your Meta, TikTok and Snapchat ads without leaving the editor. Because it works on your computer, it launches the very folder your video editor drops the exports into. You need an Apogee plan that includes the MCP server, from Pro up, and a key limited to the scopes Cursor needs. Nothing goes live without your yes.

Cursor's agent uses Apogee to launch a local folder of creatives on Meta: the files uploaded, the full recap and the yes
A folder on your computer, one recap, one yes: Apogee creates the ads paused.

Before you start

SideWhat you need
CursorThe desktop app. Its MCP page sets no minimum plan; on Enterprise, an admin can restrict the allowed servers (MCP Allowlist)
ApogeeA plan that includes the MCP server: Pro, Growth or Scale, 7-day trial for €1; Starter does not have it
Sign-inAn Apogee API key (apk_…), the path Apogee’s guide gives; Cursor can also sign in with OAuth
Ad accountsYour Meta, TikTok or Snapchat accounts, already connected to Apogee

Grok Bot, xAI’s personal agent run with Cursor, goes through this same MCP client: if that is the one you want to connect, follow the Grok Bot guide with Apogee. To compare Apogee with other servers, Meta’s official MCP included, see the Meta Ads MCP landscape.

Cursor MCP server setup in three steps

Step 1: create an API key in Apogee

  1. In Apogee, open Settings → API and create a key. Under Settings → MCP, with Cursor selected, the Create an API key button leads to the same place.
  2. Fill in Name: a name that says what the key is for, such as “Cursor”.
  3. Under Scopes, tick only what Cursor needs (table below).
  4. Under Expires, pick 30 days, 90 days (the default), 1 year, or a date up to a year away.
  5. Create the key and copy it right away: Apogee shows it only once.
What you ask Cursor forScopes to tick
The morning recap, the weekly reviewRead
Launching ads, sending winners with the BridgeRead and Launch
Pausing ads, changing budgetsRead and Actions

Give the key only the scopes it needs. If you also plug in a reporting script, give it its own read-only key.

Step 2: add Apogee to ~/.cursor/mcp.json

Open ~/.cursor/mcp.json (create it if needed) and add Apogee with your key:

{
  "mcpServers": {
    "apogee": {
      "url": "https://app.apogee.ad/mcp",
      "headers": {
        "Authorization": "Bearer apk_…"
      }
    }
  }
}

Replace apk_… with your key. If the file already lists other servers, add the apogee block next to them, inside mcpServers.

Apogee's MCP settings with Cursor selected: the Create an API key button and the ~/.cursor/mcp.json file to copy
The JSON block copies as is from Apogee: only the apk_… key changes.

Two safety rules:

  • Keep the key in ~/.cursor/mcp.json, which is yours only, never in the .cursor/mcp.json of a project you share: that file often ends up in the Git repository.
  • To keep the key out of plain text, set the value to "Bearer ${env:APOGEE_API_KEY}" and define APOGEE_API_KEY in your environment. Cursor resolves these variables in url and headers.

Step 3: turn Apogee on in Customize

In Cursor, open Customize in the sidebar, find Apogee and switch its toggle on. A disabled server does not load or appear in chat. Then open the agent chat.

Check the connection

Prompt to copy
Using Apogee, tell me which Apogee account you are connected to and with what access, then list my Meta, TikTok and Snapchat ad accounts with their currency. Don’t change anything.

By default, Cursor asks for your approval before it uses an MCP tool. The agent calls whoami, which answers with the Apogee account, the credential type (here an API key) and its scopes, then list_ad_accounts. Two reads, nothing changes. If the agent cannot find Apogee, open the Output panel (Cmd+Shift+U) and pick MCP Logs.

What about signing in with OAuth?

According to Apogee’s guide, Cursor also signs in with OAuth, with no key to copy. The guide does not describe Cursor’s menus for this path: if yours differ, stick with the key. When Cursor opens Apogee’s page, it reads “Cursor wants to access your Apogee account”, shows the account in use with Switch, the Read, Launch and Manage access to tick, then Cancel and Authorize. For the desktop app, the last line says “You will go back to anysphere.cursor-mcp”.

Apogee consent page: "Cursor wants to access your Apogee account", Read, Launch and Manage access, and Authorize
Untick whatever Cursor doesn't need: a tool outside the granted access is never offered to the agent.

After Authorize, Cursor shows up under Settings → MCP, Connected assistants list, with its access, connection date and last use. That list only shows OAuth connections: an API key is managed under Settings → API, API keys list.

Apogee's Connected assistants list: Cursor connected with OAuth, with Read, Launch and Actions access, and Disconnect
An OAuth connection has its row under Connected assistants; an API key does not appear there.

What to ask Cursor next: the media buyer’s job

Cursor has one edge over chat apps: it reads the files on your computer and uploads them to Apogee itself, with no Google Drive or Dropbox in between.

Launch a folder from your computer on Meta Ads

Prompt to copy
Take every creative in [folder] on my computer and launch them in a NEW ad set in my [testing campaign] campaign of [ad account]. Reuse the settings of the latest ad set and the latest ad launched in that campaign. Create everything paused, and show me the full recap before you create anything.
PhaseApogee toolsWhat you see
Account and campaignlist_ad_accounts, get_latest_in_campaignThe account question if you have several, then the settings taken from the latest ad set and ad
Filesget_upload_urls, confirm_uploadsCursor uploads each file to a signed URL, then Apogee checks it arrived and is not empty
Interviewget_launch_questionsThe app’s questions, one topic at a time, each with a recommended answer
Ads and textsget_launch_questionsOne ad per creative (9:16, 4:5 and 1:1 together), one primary text, headline and description per ad
Recap and launchprepare_launch, launch, launch_statusThe full recap, your yes, then tracking until it is done

Cursor sends up to 50 files per call, 500 MB each at most, to URLs that stay valid for one hour. An Apogee account’s daily cap is 2,000 files and 100 GB on Pro, 4,000 files and 200 GB on Growth and Scale. Meta receives nothing before your yes.

The same folder on TikTok Ads and Snapchat Ads

TikTok and Snapchat take videos and images from Apogee’s storage; on TikTok, an image runs as a carousel. Name the platform, and the agent picks up the template you saved in the app (Quick Bulk Edit, then Save as template):

Prompt to copy
Launch the videos in [folder] on TikTok ([TikTok ad account]) in a NEW ad group of my [campaign] campaign, with my saved template [template]. Create everything paused, and show me the full recap before you create anything.
PlatformWhat gets createdWhat the agent asks you
MetaAn ad set and its adsPage and Instagram account, audience, pixel and event, texts
TikTokAn ad group and its adsThe TikTok identity, and whether to use Smart+
SnapchatAn ad squad and its adsThe public profile, the pixel, the countries

The agent reads your templates with list_platform_templates, without ever saving or deleting one. Each platform has its own recap, budget and currency, and waits for its own yes. The details are on the Meta, TikTok and Snapchat page.

Send Meta winners to TikTok and Snapchat

Your Meta winners can run on TikTok and Snapchat too: Apogee’s Bridge makes paused copies of them, and the Meta ads stay as they are:

Prompt to copy
Send my 10 best Meta ads of the last 7 days from [Meta ad account] to TikTok ([TikTok ad account]) and Snapchat ([Snapchat ad account]), in a new ad group and a new ad squad of my testing campaigns. Skip the ones already sent. Create everything paused, and show me the full recap before you create anything.
Cursor's agent sends the top 10 Meta ads to TikTok and Snapchat with Apogee's Bridge, after the recap and the yes
The Meta top 10 heads to TikTok and Snapchat, paused; the original ads stay intact.

The agent ranks your ads with get_top_performers, uses list_bridge_transfers to drop those already sent, then shows the recap from prepare_bridge_transfer; bridge_transfer waits for your yes. On the first transfer, it asks you for the TikTok identity and the call to action, which Meta lacks. Image ads stay on Meta: the Bridge only carries videos.

The morning recap

Prompt to copy
Give me yesterday’s recap on Meta ([Meta ad account]), TikTok ([TikTok ad account]) and Snapchat ([Snapchat ad account]), each platform on its own: spend, CPA, ROAS, and the 3 best and 3 worst ads. Flag any platform whose CPA is more than [threshold]% above its 7-day average. Never add the platforms together and don’t change anything.
The morning recap asked of Cursor's agent with Apogee: Meta, TikTok and Snapchat, each with its own spend, ROAS and winners
Each platform keeps its currency and attribution: Apogee never adds up Meta, TikTok and Snapchat.

The recap only needs a key limited to the Read scope: get_account_overview and get_top_performers on Meta, get_platform_overview and get_platform_top_performers on TikTok and Snapchat, free within your plan’s daily limit (5,000 reads a day on Pro).

Cut the ads that are fatiguing

Prompt to copy
Find the ads in [ad account] that spent more than [multiple] times my target CPA without a purchase over the last [days] days, on Meta and TikTok, and the ones that are fatiguing (frequency going up, CTR going down). Prepare their pause, send me the list (name, platform, spend, why) and wait for my yes before you do it.

After reading the results and get_creative_fatigue_metrics, the agent stores the pauses as prepared actions (pause_ad on Meta, set_platform_status on TikTok); execute_action only runs with your yes and needs the Actions scope. A pause that runs costs 2 credits, only when it succeeds.

Limits and safety

On Cursor’s side. Cursor asks for your approval before it uses an MCP tool. In Auto-review mode, MCP tools on an allowlist run immediately: never put launch, execute_action or bridge_transfer there. On Enterprise, an admin can set an MCP Allowlist: the approved servers, and the tools that run without asking.

On the key’s side. One key per use, with an expiry. An Apogee account keeps 10 active keys at most. Regenerate creates a new key with the same name and scopes, and stops the old one.

On Apogee’s side, whatever Cursor’s settings:

GuardrailValue
Before any launch or changeA full recap and your yes
Status of created adsPaused by default
Prepared planValid 24 hours, runs only once
Daily budgetRefused above the cap, 500 in the account’s currency by default
Launches and Bridge transfers25 per ad account over 24 hours

Apogee’s MCP server creates no catalog and no audience, and never adds up Meta, TikTok and Snapchat. To cut access: Revoke on the key under Settings → API, API keys list (final and immediate), or Disconnect next to Cursor under Settings → MCP for an OAuth connection. Ads already launched stay in place.

Common problems

  • 401: the key is missing, mistyped, unknown, revoked or expired; Apogee answers the same 401 in every case. Check the Bearer apk_… header, or regenerate the key. With ${env:APOGEE_API_KEY}, check the variable is set where Cursor starts.
  • 403 upgrade_required: your Apogee plan does not include the MCP server (Starter). Move to Pro, Growth or Scale.
  • 403 insufficient_scope, or the agent cannot find a tool: the key lacks the matching scope, such as Launch for a launch. Create a key with the right scopes.
  • Apogee does not show up in chat: it is turned off in Customize, or the JSON in ~/.cursor/mcp.json is invalid. Check MCP Logs in the Output panel.
  • Admin policy: on Cursor Enterprise, if your company uses an MCP Allowlist, Apogee has to be on it. Ask your admin to add it.
  • 409 too_many_keys: the account already has 10 active keys. Revoke one first.
  • The key was pushed to a repository: revoke or regenerate it at once, then put the new one in ~/.cursor/mcp.json.
  • 429, too many requests: the MCP server takes 600 calls per 15 minutes on Pro, 1,200 on Growth and Scale. A launch only needs a handful.

Going further

The feature Multi-platform Three ad platforms, one workflow, one creative tracked end to end. See the feature

Frequently asked questions

How do I add an MCP server in Cursor?

Open ~/.cursor/mcp.json (create it if needed) and add the server under mcpServers with its url and, for Apogee, an Authorization header carrying your API key. Then turn it on from Customize in the sidebar: a disabled server does not load or appear in chat.

Where does the Apogee API key go in Cursor?

In ~/.cursor/mcp.json, the MCP file that belongs to you only, in the Authorization header as Bearer apk_…. Never in a shared project's .cursor/mcp.json. You can also write Bearer ${env:APOGEE_API_KEY} and set that environment variable.

Can Cursor connect to Apogee without an API key?

Yes: according to Apogee's guide, Cursor also signs in with OAuth. Apogee's page then reads "Cursor wants to access your Apogee account", you pick the access and click Authorize. The API key remains the path described step by step.

Can Cursor launch Facebook Ads?

Yes, through Apogee, when the key has the Launch scope. Cursor's agent sends the creatives of a folder on your computer to Apogee, asks the launch questions and shows a full recap. The ads are created on Meta, paused, after your yes.

How are Cursor and Grok Bot related for Apogee?

Grok Bot, xAI's personal agent run with Cursor, goes through Cursor's MCP client. Its sign-in page on Apogee therefore shows Cursor, then Apogee recognizes it and lists it as Grok Bot in its settings.

Which plan do I need to use Apogee in Cursor?

On Apogee's side, a plan that includes the MCP server, from Pro up; the 7-day trial for €1 lets you test it. On Cursor's side, its MCP page, read on November 3, 2026, sets no minimum plan; on Enterprise, an admin can restrict which servers are allowed.

Book a demo

Pick the time that suits you.

Open in a new tab

Loading the calendar…

Talk to Founder