DropCPL runs a public MCP server (Model Context Protocol). Connect your AI assistant once and it can read your DropCPL data (campaigns, Meta ads with their spend, landing pages and their performance) and, if you allow it, act on them through the same tools the in-app AI agent uses. Everything stays scoped to the subaccount you choose when you connect.
Server URL:
https://mcp.dropcpl.com/mcp
There are no API keys or tokens to copy: you connect with your normal DropCPL login (OAuth) and choose read-only or read + write access on the consent screen.
Quick setup
If you have npx (it comes with Node.js), one command configures every installed client that supports MCP:
npx -y add-mcp https://mcp.dropcpl.com/mcp
It detects Claude Code, Cursor, VS Code Copilot and other supported tools, writes their configuration and opens the browser for authorization.
Connect Claude
Claude Code
claude mcp add --transport http dropcpl https://mcp.dropcpl.com/mcp
Then run /mcp inside Claude Code and complete the authorization (a browser opens with your DropCPL login). Prompts to try:
- “List my campaigns and their landing pages.”
- “Which creative and landing page combination has the lowest CPL this week?”
Claude (web and desktop)
- Open Customize → Connectors.
- Click + Add, then Add custom connector.
- Name:
dropcpl· URL:https://mcp.dropcpl.com/mcp - Keep the detected OAuth sign-in and approve the authorization in the browser.
- In a chat, enable the connector from the + button → Connectors.
Custom connectors are available on every Claude plan; the Free plan is limited to one. On Team and Enterprise plans an Owner adds the connector under Organization settings → Connectors, then members click Connect. Source: Anthropic’s custom connector guide.
Connect ChatGPT and Codex
ChatGPT
- Open chatgpt.com/plugins.
- Click +, then Add custom MCP server.
- Name it
dropcpl, choose a public HTTPS endpoint and pastehttps://mcp.dropcpl.com/mcp. - Set authentication to OAuth, read the risk warning and confirm.
- Click Create as a plugin, review the tools ChatGPT discovers, then approve the sign-in in the browser.
Your account or workspace policies decide whether custom MCP servers are allowed. Source: OpenAI’s guide to connecting ChatGPT.
Codex CLI
codex mcp add dropcpl --url https://mcp.dropcpl.com/mcp
codex mcp login dropcpl # opens the browser: approve with your DropCPL login
Codex registers itself as an OAuth client on first login (dynamic client registration), so there is no client ID to request and no key to paste. Codex also reads MCP servers from ~/.codex/config.toml, or from a project-scoped .codex/config.toml in trusted projects:
[mcp_servers.dropcpl]
url = "https://mcp.dropcpl.com/mcp"
The CLI, the IDE extension and the ChatGPT desktop app share this configuration.
Connect any other MCP client
Clients configured with JSON (Cursor, VS Code Copilot, Windsurf)
{
"mcpServers": {
"dropcpl": {
"url": "https://mcp.dropcpl.com/mcp"
}
}
}
Restart the client: the first tool call opens the OAuth flow.
Clients that only support stdio
Use the mcp-remote bridge:
{
"mcpServers": {
"dropcpl": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.dropcpl.com/mcp"]
}
}
}
Clients that resolve OAuth by themselves
Paste these two documents only if the client asks for them:
https://mcp.dropcpl.com/.well-known/oauth-protected-resource/mcp (RFC 9728)
https://app.dropcpl.com/.well-known/oauth-authorization-server (RFC 8414)
The second one advertises the authorization, token and registration endpoints. Registration is dynamic, so the client creates its own credentials when it connects.
What the assistant can do
| Group | Tools | Needs write access? |
|---|---|---|
| Campaigns | list campaigns, stats, setup status | No |
| Landing pages (read) | list landing pages by campaign, status, one landing page with its full HTML, search inside that HTML or read a range of lines, versions, publish state, public URLs, live check | No |
| Domains (read) | the subaccount’s domains and their verification state | No |
| Meta ads (read) | Meta connection (ad account, Page, pixel, token, optional pre-flight check), campaigns on the ad account, a campaign’s ads by ad set with spend and linked creative, live ad sets | No |
| Custom values | list placeholders | No |
| Domains (write) | add a domain, start its verification | Yes |
| Landing pages (write) | create a landing page, replace its HTML, patch it with exact text replacements, save/list/revert versions, validate before publishing, publish, unpublish, archive | Yes |
| Landing pages (destructive) | delete a landing page; flagged as destructive, so the client asks for approval | Yes |
| Meta ads (write) | set the Page and pixel for ads, create a Meta campaign or link an existing one, add a creative from a public URL, create an ad set, launch a creative as an ad (everything is created paused), link an ad to a creative, sync now | Yes |
| Meta ads (delivery) | activate or pause an ad; flagged as destructive, so the client asks for approval (activating spends budget) | Yes |
| Custom values (write) | create or update placeholders | Yes |
The whole landing page lifecycle runs from the assistant, with no repository and no server access: connect a domain → create the landing page → write its HTML → validate → publish → check that the public URL responds. The live check answers with a verdict (not-reachable plus a hint) when DNS or SSL is not ready yet, so a landing page that does not resolve is a result to read, not a failed call.
To change a word, a headline or a price on an existing landing page, ask for the fragment to be patched: the assistant searches the HTML and sends only the exact text and its replacement. Asking it to “rewrite the landing page” regenerates the whole document, which is slow and easy to get wrong on a large landing page. The patch keeps the same validation, saves a version first, and is refused if the searched text is missing or appears more than once.
Budget and targeting edits after creation, and deleting ads, are not available through MCP: they stay in Meta Ads Manager. Campaigns and ad sets created through MCP stay paused until you activate them in Ads Manager; MCP switches individual ads on or off.
Security and access
- Read-only is the default. The assistant sees what you can see in the app, nothing more.
- Write access is opt-in and applies only to the subaccount you select during consent. Deleting a landing page and switching an ad on or off are flagged as destructive tools: MCP clients ask you to approve them, so do not set those tools to “always allow”.
- OAuth 2.1 with PKCE: no long-lived API keys in configuration files. Access tokens expire and the assistant refreshes them silently.
- Every write action is logged in your DropCPL Action Log.
- Revoking: disconnect the server from the client’s MCP settings, or revoke the connection in DropCPL under AI Connections (agency area at
/mcp, subaccount area at/<subaccount>/mcp).
What the assistant can do is always bounded by your own section permissions on that subaccount, whatever scope you approved.
Troubleshooting
| Symptom | Fix |
|---|---|
401 invalid_token | Re-authorize: disconnect and connect the server again in your client. |
forbidden: write scope required | The connection was authorized read-only. Disconnect and re-authorize with write access. |
forbidden: no "…" permission | Your DropCPL role does not allow that section for the selected subaccount: ask your agency owner. |
| Tools do not appear after connecting | Restart the client: most clients load MCP tools at startup. |
| “Connector not approved” (Claude) | On Team and Enterprise plans an Owner must add the connector first; on the Free plan you can have only one custom connector. |
Reference
- Protocol: Model Context Protocol, remote server, Streamable HTTP (spec 2026-07-28, stateless).
- Discovery:
https://mcp.dropcpl.com/.well-known/oauth-protected-resource/mcp - What the AI agent does inside the app: AI agent. How ads are created and synced: Meta Ads.
- Comparing the ways to connect an assistant to Meta ads (Meta’s official server, third-party servers, DropCPL): Meta Ads MCP.