Developer documentation

MCP Server

Connect Claude, or any MCP-compatible client, to Converted via the Model Context Protocol. Read the same campaign health and agent activity your Command Center shows, talk with your named agent team, and, once this connection has campaign-editing access, build and publish campaign changes, always with a confirm step before anything reaches an ad account.

https://mcp.converted.io/mcp
8 tools, a 9th once campaign editing is grantedOAuth 2.1 with PKCENo API keys neededNothing reaches an ad account without a confirm step

Overview

Converted is an always-on team of AI marketing agents that watch your campaigns, propose the next move, and act inside guardrails you set. The MCP server is how an assistant like Claude talks to that same team from outside the Converted app: it can read the campaign data and pending proposals your Command Center already shows you, hold a conversation with one agent or the whole team, and, with the right access, turn that conversation into real changes on your campaign.

Who is this for? Anyone who wants to check on a campaign or work with their agent team from Claude, or another MCP client, instead of opening the app.

How it works. The server exposes 8 tools to every connection, plus a ninth, publish_funnel_changes, that only shows up in your client's tool list once this connection has been granted campaign-editing access. If you don't see it, that's the signal that this connection wasn't granted that access, not a bug, see Authentication below.

Authentication happens over OAuth. No API keys to manage, you sign in with your Converted account.

Quick Connect

Claude.ai

  1. Open Claude.ai and go to Settings
  2. Navigate to Connectors and click Add custom connector
  3. Enter the URL:https://mcp.converted.io/mcp
  4. Click Add, then sign in with your Converted account

ChatGPT

Requires a paid ChatGPT plan (Plus, Pro, Business, Enterprise, or Edu), and must be set up at chatgpt.com in a web browser — developer mode is not available in the ChatGPT desktop or mobile apps. On Business, Enterprise, and Edu, a workspace admin has to turn developer mode on before members can see it.

  1. In ChatGPT on the web, open Settings Security and login and turn on Developer mode
  2. Go to Settings Plugins and click Add→ create a custom MCP
  3. Name it "converted", set the type to Streamable HTTP, and enter the URL:https://mcp.converted.io/mcp
  4. Save, then click Authenticate and sign in with your Converted account
  5. In a new chat, open the + menu, choose Developer mode, and enable converted

ChatGPT has renamed this area more than once — it was Connectors, then Apps, and is now Plugins. If your build still shows the old layout, developer mode lives under Settings → Apps → Advanced settings instead.

Claude Code

Run this command in your terminal:

bash
claude mcp add converted --transport http https://mcp.converted.io/mcp

You will be prompted to sign in with your Converted account on first use.

Claude Desktop

Add this to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "converted": {
      "url": "https://mcp.converted.io/mcp"
    }
  }
}

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

Tools Reference

Nine tools, grouped by what they do. Every tool that targets a workspace takes an optional organizationId, omit it and the tool uses your default workspace. Click any category to expand, then click a tool to see its parameters and an example prompt.

The agent team

Nine named agents. Pass a key as talk_to_funnel_agent's agent parameter to talk to one directly, or omit it to let the most relevant one answer.

KeyNameTitleFocus
optimizationOttoStrategy AgentCampaign strategy & experiments
pagesPiperPage AgentBuilds pages & variants
campaignsCashAds AgentBudgets, campaigns & destinations
audienceIrisAudience AgentIdentity, ICPs & retargeting
launchRayLaunch AgentPublishes what you approve
creativeMiloCreative AgentGenerates ad creative
copyPennCopy AgentHeadlines, CTAs & email flows
analyticsVeraAnalytics AgentReads the numbers, flags the story
funnelCamFunnel AgentKeeps the funnel wired & healthy

Campaign editing over MCP

Three independent things have to be true before an assistant can build or rewire a campaign for you over this server, not just talk about one.

1. Scope. This connection has to hold the campaigns:write scope, see Scopes below. A connection that never asked for it doesn't have it.

2. Role.Your role in the workspace has to be able to make changes. A viewer can look at everything on this server but can't change a campaign, the same as everywhere else in Converted.

3. Rollout. Converted is rolling this capability out gradually. If it isn't on yet for your workspace, the conversation still works exactly the same, the agent just won't apply anything.

If any of the three isn't true, your assistant still gives you a full answer, structural changes just aren't applied, and the reply points you at the campaign's canvas to make them by hand instead. Depending on which of the three is missing, you'll see one of these:

"Canvas edits aren't available in this conversation, because this connection wasn't granted campaign-editing access. Make structural changes at /edit/funnel/<id>."

"Your role in this workspace can't change campaigns. Ask an admin, or view it at /edit/funnel/<id>."

"Canvas edits aren't available in this conversation. Make structural changes at /edit/funnel/<id>."

Reaching a live ad account

Two different tools can ultimately reach a live ad account, and both use the same shape: the first call is a dry run that shows you exactly what would happen and hands back a one-time token, nothing happens until a second call repeats that token.

  • decide_agent_proposal approves a single proposal the agent team already raised, a budget change, an audience sync, a split test.
  • publish_funnel_changes sends everything currently staged on the canvas out to your ad platforms at once, the campaigns the team planned, budgets queued, destinations repointed. This is the one that needs the campaigns:write scope above.

The publish_funnel_changes handshake

  1. Call it with no confirmToken. You get back the itemized list of exactly what would go out, and a confirmToken. Nothing is sent yet.
  2. Show that list to whoever needs to approve it.
  3. Call it again with the same funnelId and that confirmToken. Now it actually publishes.

Built-in protections

  • Campaigns always launch paused, with the daily budget clamped between $1 and $500, so nothing can start spending money the moment it goes live.
  • Each token is single-use and tied to the exact plan you were shown. If something changes between the two calls, someone edits a budget in the app, another chat turn queues something new, the token is refused and you get the updated list back with a fresh token instead of silently publishing the old plan.
  • Tokens expire after 10 minutes.
  • Some queued items can't be sent through this channel at all (certain Meta budget changes, launching a live retargeting audience). Those come back listed as queued with the reason, and are left for the app's own Publish dialog.

What this channel doesn't do

Converted's MCP server exposes only the nine tools above. It does not carry any tools for building or editing pages, sites, or blogs directly, and none for generating ad creative. With campaign-editing access, talk_to_funnel_agent can still add and wire pages onto a campaign as part of building it (the reply's applied list shows that), but there is no standalone tool here to create, edit, or fetch a page on its own.

A recorded decision (record_decision) never steers an agent by itself. It sits as pending until a person confirms it inside the Command Center, only a confirmed decision changes what the agents propose next.

Workspace governance can override an approval: if an admin has locked a campaign or a specific change, no agent can execute against it even after you approve it, and an approval can be refused if a team decision recorded after the proposal changed the picture.

A viewer's role can read everything on this server, list campaigns, read proposals, and talk with the agent team, but can't approve or dismiss a proposal, and can't edit or publish a campaign. Recording a decision doesn't require a mutating role, since it changes nothing on its own until a person confirms it in the app.

Authentication

The server authenticates over OAuth 2.1 with PKCE (S256) and supports dynamic client registration, so a new MCP client can register itself and start the sign-in flow without anyone hand-configuring credentials. There are no API keys.

First-party clients are approved automatically once you sign in, there is no separate consent screen to click through. Your session stays active across conversations, if it expires, you'll be prompted to re-authorize.

EndpointURL
Authorizationhttps://converted.io/api/mcp/oauth/authorize
Tokenhttps://mcp.converted.io/api/mcp/oauth/token
Dynamic client registrationhttps://mcp.converted.io/api/mcp/oauth/register
Protected resource metadatahttps://mcp.converted.io/.well-known/oauth-protected-resource/mcp
Authorization server metadatahttps://mcp.converted.io/.well-known/oauth-authorization-server

Dynamic client registration is rate-limited per IP. Most MCP clients never call it directly, that part happens automatically the first time you connect.

Scopes

A connection that asks for no specific scope gets the first three below automatically. campaigns:write is deliberately left out of that default, it's the one scope that lets a conversation reshape your campaign and eventually push changes to a live ad account, so a client has to ask for it by name. Whether your MCP client exposes a way to request it during setup depends on the client, check its documentation.

ScopeGrantsDefault
funnels:readRead campaign lists, full campaign detail, the agent roster, and the pending proposal queueYes
agents:chatTalk to the agent team or a single named agent, and record a team decisionYes
agents:approveApprove or dismiss a pending agent proposalYes
campaigns:writeLet the agent team build and rewire your campaign in conversation, and publish those staged changes to your ad accountsNo, must be requested

Example Prompts

Once connected, talk to your AI assistant in plain English. Here are some things you can ask:

"Show me my campaigns and flag anything that needs attention"

Lists your campaigns with a health summary, then reads the ones worth a closer look in full.

"What's my agent team waiting on me to decide?"

Lists the pending proposals from the Command Center's queue: budget rebalances, audience syncs, split tests.

"Ask Cash why spend shifted toward retargeting this week"

Talks one on one with the Ads Agent instead of the whole team.

"We agreed to raise the retargeting budget to $500/day through August 1, log that"

Records the decision as pending. It changes nothing until a person confirms it in the Command Center.

"Set up a Google Search campaign at $50/day pointing at my pricing page, then show me what's queued before you publish"

requires campaign-editing access

Builds the campaign on the canvas, then calls publish_funnel_changes with no confirmToken to show the itemized plan. Nothing goes out until you confirm it.

Rate Limits & Credits

Limits apply per connection. Confirm tokens (for decide_agent_proposal and publish_funnel_changes) expire after 10 minutes and can only be used once.

BucketApplies toLimit
OverallEvery campaign-agent tool call combined60 / minute
Chattalk_to_funnel_agent10 / minute
Decidedecide_agent_proposal, record_decision6 / minute
Publishpublish_funnel_changes3 / minute

Credits

talk_to_funnel_agent spends workspace AI credits per turn. record_decision spends none, it only writes a pending note.