Skip to content

MCP Server

Pablo exposes your ads data to AI assistants — Claude, ChatGPT, Cursor, and any other MCP-compatible client — through an MCP server. Connect once, and the assistant can answer questions like "What's my CPM trend over the last quarter?" without you copying data into a chat.

What is MCP, briefly?

The Model Context Protocol is a standard that lets AI assistants call external "tools" on your behalf. Pablo's MCP server publishes read-only tools that wrap the Meta Marketing API and the Google Ads API, plus tools for Pablo's own resources (builds, connections, assets). The assistant can list your accounts, drill into campaigns, ad sets, and ads, and pull insights — using the connections you already hold in Pablo.

The Pablo MCP endpoint is:

https://app.pablo.social/mcp/

What the assistant can do

All browsing and insights tools are read-only — the assistant cannot create, pause, update, or delete anything on your ad accounts. The one exception is pablo_feedback_create, which does nothing to your ads: it just files feedback with the Pablo team.

Browsing your Meta account structure

Tool What it does
meta_accounts_list Lists the Meta ad accounts you have access to via Pablo
meta_accounts_get Full details for one account: balance, amount spent, currency, business info, funding source
meta_campaigns_list Lists campaigns under an ad account; can filter by status (ACTIVE, PAUSED, etc.) and by created/updated window
meta_campaigns_get Full details for one campaign: budget, bid strategy, special ad categories
meta_adsets_list Lists ad sets under a campaign or across an ad account; can filter by created/updated window
meta_adsets_get Full details for one ad set: targeting, optimization goal, attribution spec
meta_ads_list Lists ads under an ad set, campaign, or ad account; can filter by status and by created/updated window
meta_ads_get Full details for one ad, including a creative summary (thumbnail, body, video id, CTA)
meta_activities_list The account's change history (Meta Activity Log): who changed what, when

Browsing your Google Ads account structure

The same surface exists for Google Ads. Google's "ad groups" are exposed as adsets for cross-platform consistency.

Tool What it does
googleads_accounts_list Lists the Google Ads accounts you have access to via Pablo
googleads_accounts_get Full details for one account
googleads_campaigns_list / googleads_campaigns_get Campaigns under an account / one campaign in full
googleads_adsets_list / googleads_adsets_get Ad groups under a campaign or account / one ad group in full
googleads_ads_list / googleads_ads_get Ads / one ad in full
googleads_activities_list The account's change history

Insights

Tool What it does
meta_insights_get Performance metrics (spend, impressions, reach, clicks, CPM, CTR, actions, action values) for any Meta object — account, campaign, ad set, or ad
googleads_insights_get The Google Ads equivalent

These are the workhorses. Both support flexible date filtering and granularity (see below); meta_insights_get also supports demographic and placement breakdowns and same-period comparisons.

Pablo

Tool What it does
pablo_connections_list Lists the marketing-platform connections you've linked to Pablo
pablo_assets_list Lists assets exposed by one Pablo connection (ad accounts, pages, pixels, Instagram accounts)
pablo_builds_list Lists ad builds in your Pablo account, with optional filters by ad account, status, or source
pablo_feedback_create Lets the assistant send Pablo's team feedback about missing tools, missing fields, bugs, or suggestions

Connecting an assistant

Claude

  1. Open Claude settings → ConnectorsAdd custom connector
  2. URL: https://app.pablo.social/mcp/
  3. Click Connect. You'll be sent through Pablo's OAuth flow:
    • Sign in to Pablo if you aren't already
    • Approve the consent screen
  4. Start a new conversation and ask Claude to "list my Meta ad accounts" — it should pick up the new tools automatically.

ChatGPT

ChatGPT supports MCP servers through the Connectors feature on Business, Enterprise, and Team plans. In your ChatGPT workspace settings, add a custom connector pointing to https://app.pablo.social/mcp/ and sign in to Pablo when prompted.

ChatGPT's connector UI moves around — refer to OpenAI's own help docs for the current setup steps.

Other MCP-compatible clients

For Cursor, Windsurf, VS Code, Claude Desktop, and other clients, add Pablo to your MCP config file:

{
  "mcpServers": {
    "pablo": {
      "url": "https://app.pablo.social/mcp/"
    }
  }
}

The client will trigger Pablo's OAuth flow on first use.

Date filtering

Insights and list tools take a single period string. It accepts four forms — the assistant picks whichever is most natural:

Form Example Meaning
Named window last_30d, mtd, last_quarter A window relative to today
ISO week 2026-W24 That Monday–Sunday week
Month 2026-06 That calendar month
Explicit range 2026-07-01..2026-07-31 Inclusive start..end

Named windows

Value Meaning
today, yesterday The single day
last_7d, last_14d, last_28d, last_30d, last_90d Rolling windows ending yesterday
wtd, mtd, qtd, ytd Week / month / quarter / year to date — up to and including yesterday (on the first day of the unit there is nothing to report yet, and the call is rejected)
last_week, last_month, last_quarter, last_year The previous full calendar period
all_time From 2010-01-01 through yesterday

Named windows resolve against the ad account's timezone, not the server's. Every windowed response echoes the resolved window back as period: {id, start, end, days, timezone}, so it's always explicit what was measured.

Granularity

Set granularity to bucket insights results:

Value Result
total (default) A single aggregate row across the whole window
day One row per calendar day
week One row per ISO calendar week (Monday–Sunday). If the window starts mid-week, it expands outward to whole weeks
month One row per calendar month
quarter, year Meta reports monthly — these return monthly rows covering the window

So "monthly spend for 2026" is period='2026-01-01..2026-12-31', granularity='month' — twelve rows back.

Comparison

On meta_insights_get, set compare_to='previous_period' (same duration immediately before) or compare_to='previous_year' (same window, one year earlier) to get a paired comparison in a single call. Useful for "this month vs last year". (googleads_insights_get supports granularity but not compare_to.)

granularity and compare_to apply to insights only — list tools don't bucket or compare, they just narrow.

On list tools

The list tools (meta_campaigns_list, meta_adsets_list, meta_ads_list, and the googleads_* equivalents) accept the same period plus one extra parameter:

Parameter Meaning
basis created (default — when the object was made; answers "launched in X") or updated (last edit; answers "edited in X")

So "campaigns launched this month" is meta_campaigns_list(account_id=..., period='mtd'). "Ads edited last week" is meta_ads_list(account_id=..., period='last_week', basis='updated').

meta_activities_list and pablo_builds_list also take period (activity lists filter on event time, so there is no basis there).

Renamed parameters refuse loudly

An earlier version of this surface used relative / start / end / date_field / breakdowns / limit / cursor / ad_account_id. Those spellings are rejected with an error naming the replacement rather than silently ignored — so an assistant using stale names finds out immediately. Current names: period, basis, by, filters, account_id, and page (below).

Pagination

Lists take a single page object — {cursor, limit} — and return a page block:

{
  "data": [...],
  "page": {
    "next_cursor": "abc123",
    "has_more": true
  }
}

If has_more is true, the assistant passes page.next_cursor back as page: {cursor: ...} on the next call. The assistant handles this automatically when it needs to.

If a list tool has more pages and no date filter was supplied, the response's warnings array carries a nudge to set period (e.g. 'last_30d' or 'mtd'). Large accounts can have thousands of objects, and an unbounded paginated read is expensive — narrowing the window when the question allows it keeps calls fast.

Responses also carry a small envelope alongside data — the resolved period, warnings, and source/freshness metadata — so the assistant can always tell what was measured and whether anything was skipped.