Skip to content

MCP Server

Pablo exposes your Meta 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 a small set of read-only tools that wrap the Meta Marketing API. The assistant can list your accounts, drill into campaigns, ad sets, and ads, and pull insights — using your existing Pablo Meta connection.

The Pablo MCP endpoint is:

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

What the assistant can do

All tools are read-only. The assistant cannot create, pause, update, or delete anything on your Meta account.

Browsing your 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 date
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 date
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 date
meta_ads_get Full details for one ad, including a creative summary (thumbnail, body, video id, CTA)

The list tools also accept a date filter, so questions like "ads launched this month" resolve in a single call instead of paginating the whole account.

Insights

Tool What it does
meta_insights_get Fetches performance metrics (spend, impressions, reach, clicks, CPM, CTR, actions, action values) for any object — account, campaign, ad set, or ad

meta_insights_get is the workhorse. It supports flexible date filtering, granularity (daily, weekly, monthly, quarterly, yearly), 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

Both insights and list queries take a date filter. There are two ways to specify the window — the assistant picks whichever is most natural.

Named windows (relative)

The assistant can ask for any of these by setting relative:

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
last_week, last_month, last_quarter, last_year The previous full calendar period
all_time Everything Meta has on record

Explicit dates

Or set start and end (both inclusive, YYYY-MM-DD):

start=2024-01-01, end=2024-03-31  # Q1 2024

Granularity

Set granularity to bucket the 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)
month One row per calendar month
quarter One row per calendar quarter
year One row per calendar year

So "monthly spend for 2024" is start=2024-01-01, end=2024-12-31, granularity=month. The assistant gets twelve rows back.

Buckets are calendar-aligned, not rolling. If you ask for granularity=week with a window that starts mid-week, Pablo expands the window outward to the surrounding Monday-Sunday boundaries so each bucket is a whole week. Same for month, quarter, and year — bucketing always lines up with calendar boundaries.

Comparison

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".

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

On list tools

meta_campaigns_list, meta_adsets_list, and meta_ads_list accept the same relative / start / end surface plus one extra parameter:

Parameter Meaning
date_field 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(ad_account_id=..., relative='mtd'). "Ads edited last week" is meta_ads_list(ad_account_id=..., relative='last_week', date_field='updated').

Pagination

Lists return up to limit results plus a pagination block:

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

If has_more is true, the assistant can pass pagination.next_cursor back as cursor on the next call to fetch the next page. The assistant handles this automatically when it needs to.

If a list tool returns more pages and no date filter was supplied, the response also carries a soft warning suggesting relative='mtd' or 'last_30d'. Large accounts can have thousands of objects, and an unbounded paginated read is expensive — the warning nudges the assistant to narrow the window when the question allows it.