More articles 12 min read

Claude Code MCP: add the Apogee server in one command

Claude Code MCP setup for Apogee: one command, OAuth or an API key, a first check, then prompts to run Meta, TikTok and Snapchat ads from your terminal.

Mathieu Malige Founder, Apogee Published
Contents
  1. Before you start
  2. Claude Code MCP server: the two commands to add Apogee
  3. Check the connection
  4. What to ask Claude Code next
  5. Limits and safety
  6. Common problems
  7. Going further

Setting up Claude Code MCP for Apogee takes one command: claude mcp add registers Apogee’s server, then /mcp or an API key signs you in. From there, Claude Code reads your numbers and prepares launches and pauses on Meta, TikTok and Snapchat from the terminal, and Apogee waits for your yes before each action. It is the option for media buyers and growth teams who already work in the terminal, among the MCP servers that run Meta Ads. Two prerequisites: a Claude account that includes Claude Code, and an Apogee plan that includes the MCP, from Pro.

Claude Code launches a local folder of creatives on Meta with Apogee: files uploaded, ads proposed, recap then yes
One folder on your disk, one recap, one yes: the ads are created paused.

Before you start

ItemWhat you need
Claude CodeInstalled and signed in with a Claude Pro, Max, Ultra, Team, Enterprise or Console account; the free claude.ai plan does not include it
Apogee planPro, Growth or Scale, MCP server included; 7-day trial for €1; no MCP on Starter
Ad accountsYour Meta, TikTok or Snapchat accounts already connected to Apogee: Claude Code only sees those
Server URLhttps://app.apogee.ad/mcp

Two ways to sign in:

CriterionBrowser sign-in (OAuth)API key
Where access is setOn Apogee’s consent page, when you connectUnder Settings → API, when you create the key
Lifetime1-hour access token, renewed with a token valid 60 days30 days, 90 days, 1 year, or a set date up to 1 year
Where to cut itSettings → MCP, Connected assistants, DisconnectSettings → API, API keys, Revoke
Best forA workstation with a browserA script, a machine with no browser, access fixed in advance

On a Claude Team or Enterprise organization, an admin can restrict which MCP servers are allowed (managed settings allowedMcpServers and deniedMcpServers): ask them to allow https://app.apogee.ad/mcp. On Apogee’s side, a workspace owner can turn off a member’s API and MCP access.

Claude Code MCP server: the two commands to add Apogee

Both commands come from Apogee’s own guide, under Settings → MCP, Claude Code card.

Option 1: browser sign-in

  1. In Apogee, open Settings → MCP, then Connect an AI assistant and pick Claude Code: the server URL and the command show up, each with a Copy button.
  2. In your terminal, from the folder you work in, add the server:
claude mcp add --transport http apogee https://app.apogee.ad/mcp
  1. Start claude, type /mcp and pick apogee.
  2. Your browser opens Apogee’s consent page. Check the account shown (Switch to change it), keep the access you need and click Authorize.
  3. Back in Claude Code, /mcp shows apogee connected and its tools are available in the conversation.
MCP section of Apogee's settings with Claude Code selected: server URL, claude mcp add command and the /mcp step, each with Copy
In Apogee, Settings → MCP gives you the server URL and the command, ready to copy.

Claude Code comes back to an address on your computer (localhost and a port). Apogee cannot certify who is listening there, so the page says what it knows: “An app on this computer wants to access your Apogee account”, with “Declared name: Claude Code” below. If you did not type /mcp right before, click Cancel.

Apogee consent page for Claude Code: An app on this computer, Read, Launch and Manage access, Cancel and Authorize buttons
The answer goes back to localhost: only authorize if you just started the connection.

Option 2: an API key

  1. In Apogee, open Settings → API, API keys section, and click Create key.
  2. Give it a Name (for example “Claude Code”), tick the Scopes you need among Read, Launch and Actions, and pick the end date under Expires: 30 days, 90 days (default), 1 year, or a set date up to 1 year.
  3. Click Create key and copy the apk_… key: Apogee shows it only once.
  4. Add the server with the key, replacing apk_… with yours:
claude mcp add --transport http apogee https://app.apogee.ad/mcp \
  --header "Authorization: Bearer apk_…"

An Apogee account keeps 10 active keys at most. Give each tool its own key, with only the access it needs.

The access to keep

The consent page calls them Read, Launch and Manage; the key form and the connected assistants list say Read, Launch and Actions.

AccessWhat it opensMCP tools involved
ReadRead accounts, campaigns, ads and numbers on Meta, TikTok and Snapchat, follow imports and launcheslist_ad_accounts, get_account_overview, get_platform_overview, launch_status
LaunchUpload or import creatives, prepare and launch ads, Bridge transfers, a new campaignget_upload_urls, prepare_launch, launch, bridge_transfer
ActionsPauses, activations, budgets, targeting, duplicatespause_ad, scale_budget, set_platform_status, execute_action

A tool outside the access you granted is not even offered to Claude Code. A Claude Code that only writes reports is fine with Read.

This project, you, or your team

ScopeOptionWhere Apogee is availableSaved in
Local (default)none, or --scope localThe current project, for you only~/.claude.json
User--scope userAll your projects~/.claude.json
Project--scope projectThe project, shared with your team.mcp.json at the project root

At project scope, never put a key in .mcp.json: it goes into the repository. Claude Code reads environment variables in that file, so each person keeps their key on their own machine:

{
  "mcpServers": {
    "apogee": {
      "type": "http",
      "url": "https://app.apogee.ad/mcp",
      "headers": { "Authorization": "Bearer ${APOGEE_API_KEY}" }
    }
  }
}

With browser sign-in, .mcp.json only holds the URL: each person types /mcp and signs in with their own Apogee account. Claude Code asks for approval before it uses a server declared in a project’s .mcp.json.

Check the connection

First request, read-only:

Prompt to copy
Using Apogee, tell me which 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.

Claude Code calls whoami, which returns the Apogee account, the kind of connection (an assistant or an API key) and its access, then list_ad_accounts for each platform. If it finds no Apogee tool, the connection is not finished: run /mcp again. In the terminal, claude mcp list lists your configured servers and claude mcp get apogee shows Apogee’s details.

On Apogee’s side, Settings → MCP, Connected assistants section, lists Claude Code under its own name, with its access, connection date and last use. A connection made with an API key does not show there: you follow it under Settings → API.

Apogee's Connected assistants list: Claude Code with its Read, Launch and Actions access, its connection date and the Disconnect button
The consent page's Manage access shows as Actions in this list.

We ran this setup for real on November 3, 2026, with an API key on a test ad account: whoami, the launch interview, a plan checked by Meta before it was saved, then a real launch of one ad set, paused, at €1 a day. The /mcp sign-in was done too, with the consent page shown above.

What to ask Claude Code next

Connected to Apogee, Claude Code takes a media buyer seat in your terminal. It prepares, you approve:

Its taskPlatformWhat you approve
Read the numbers and spot the winnersMeta, TikTok, SnapchatNothing, it only reads
Launch a folder of creatives from your diskMeta, TikTok, SnapchatThe launch recap
Cut an ad or adjust a budgetMeta, TikTok, SnapchatEach change
Send a Meta winner to TikTok or SnapchatBridgeThe transfer recap

Each task is covered prompt by prompt in Claude Code for marketing: launch and track your Meta ads.

Read before you act

Prompt to copy
What are my 5 best Meta ads of the last 7 days by ROAS in [ad account], with their spend? Don’t change anything.
Prompt to copy
Give me yesterday 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 ads. Never add the platforms together. Don’t change anything.

Claude Code relies on get_top_performers for Meta and on get_platform_overview and get_platform_top_performers for TikTok and Snapchat. Each platform stays in its own currency: Apogee never adds them up.

The morning check asked of Claude Code with Apogee: spend, ROAS and best ads on Meta, TikTok and Snapchat, each platform on its own
The check only reads: each platform keeps its own currency and attribution.

On Meta Ads: launch a folder from your disk

Claude Code works on your computer: it uploads the files of a local folder to Apogee itself, where a chat app needs a Drive, Dropbox or Frame.io link.

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.

It goes through get_upload_urls and confirm_uploads for the files, get_launch_questions for the interview, prepare_launch for the recap, then launch after your yes. One creative in 9:16, 4:5 and 1:1 becomes a single ad.

On TikTok Ads and Snapchat Ads

The same flow works with a TikTok or Snapchat account named in the prompt: TikTok creates an ad group (an image runs as a carousel there), Snapchat an ad squad. For a Meta winner already running, Apogee’s Bridge creates a paused copy without touching the original ad:

Prompt to copy
Take my Meta ad [Meta ad] from [Meta ad account] and send it to TikTok: campaign [campaign], ad group [ad group]. Create everything paused, and show me the full recap before you create anything.

Only videos go to TikTok and Snapchat through the Bridge. What each platform accepts is on the Meta, TikTok and Snapchat page.

Cut an ad that burns budget

Prompt to copy
Prepare the pause of the ads in [ad account] that spent more than 2 times my target CPA without a purchase over the last 5 days, on Meta and TikTok. Show me each change and wait for my yes before you make it.

pause_ad (Meta) and set_platform_status (TikTok, Snapchat) prepare the pause without changing anything; execute_action runs it once you said yes.

Limits and safety

Apogee keeps its guardrails whatever Claude Code’s permission settings are:

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

What Apogee’s MCP server does not do: create catalogs or audiences, add platforms together, send an image to TikTok or Snapchat through the Bridge, or touch an ad account that is not connected to Apogee. Reads are free within your plan’s daily limit (5,000 a day on Pro); an ad created costs 15 credits and a change that runs 2 credits, only when they succeed. Uploaded files go 50 per call, 500 MB each at most, within 2,000 files and 100 GB a day on Pro.

To cut access: Settings → MCP, Connected assistants, Disconnect next to Claude Code; for a key, Settings → API, API keys list, Revoke. On the Claude Code side, /mcp offers Clear authentication, and claude mcp remove apogee removes the server.

One Claude MCP server for Claude Code, Claude and Claude Duet

The same Apogee MCP server serves all three Anthropic products, for different jobs. Claude on the web and desktop adds it as a custom connector and reads Drive or Frame.io links; Claude Duet works in the background with recurring tasks; Claude Code reads your local folders and can write its reports to files. Each connection shows separately under Connected assistants.

Common problems

  • 401, “Invalid or missing Apogee credentials”. No valid credential: a sign-in never finished, an expired connection, a key copied wrong, expired or revoked (Apogee answers the same in every case). With OAuth, type /mcp and pick Re-authenticate on apogee. With a key, create a new one or use Regenerate under Settings → API, then run claude mcp remove apogee and add the server again with the new key.
  • 403, the plan does not include the MCP. The Apogee account is on a plan without the MCP: the consent page shows “Your plan does not include the Apogee MCP” and a See plans button. Move to Pro or above.
  • 403, access turned off by an admin. Your Apogee workspace owner turned off your API and MCP access: ask them to restore it. On the Claude side, an organization can also block the server in its managed settings: ask for https://app.apogee.ad/mcp to be allowed.
  • Claude Code says it cannot launch or pause. The Launch or Actions access was not granted, so those tools are not listed. Disconnect Claude Code in Apogee, run /mcp again and keep the access you need.
  • Apogee is missing from another project. The server is at local scope: run the command again with --scope user.
  • 429, too many requests. Each connection gets 600 MCP calls per 15 minutes on Pro, 1,200 on Growth and Scale. A launch only needs a handful.
  • “10 AI assistants connected”. Apogee accepts 10 connected assistants at once: disconnect one under Settings → MCP, then try again.

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 MCP to Claude Code?

With the claude mcp add command. For Apogee, run claude mcp add --transport http apogee https://app.apogee.ad/mcp in your terminal, then type /mcp in Claude Code, pick apogee and sign in to Apogee in your browser. Apogee's tools are then available in the conversation.

Do I need an API key to use Apogee in Claude Code?

No. Signing in through the browser with /mcp (OAuth) is enough. An apk_… API key is useful when you want to set its access and end date yourself, or work without a browser: you create it under Settings → API in Apogee and pass it in the Authorization header of the claude mcp add command.

Why is Apogee missing from another Claude Code project?

Because claude mcp add saves the server at local scope by default: the current project, for you only. Add --scope user to have Apogee in all your projects, or --scope project to share it with your team in the project's .mcp.json file.

Can Claude Code launch ads without my approval?

No. Apogee prepares a plan, Claude Code shows you the full recap, and nothing is created on Meta, TikTok or Snapchat before your yes in the conversation. Ads are created paused by default, and a prepared plan expires after 24 hours and runs only once.

Which plan do I need to use Apogee in Claude Code?

Two subscriptions. A Claude account that includes Claude Code: Pro, Max, Ultra, Team, Enterprise or Console, since the free claude.ai plan does not include it. And an Apogee plan that includes the MCP server, from Pro, with a 7-day trial for €1.

How do I remove Claude Code's access to Apogee?

In Apogee, open Settings → MCP, Connected assistants section, and click Disconnect next to Claude Code: access stops at once and ads already launched are not touched. With an API key, revoke it under Settings → API with Revoke. On the Claude Code side, claude mcp remove apogee removes the server.

Book a demo

Pick the time that suits you.

Open in a new tab

Loading the calendar…

Talk to Founder