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:
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¶
- Open Claude settings → Connectors → Add custom connector
- URL:
https://app.pablo.social/mcp/ - Click Connect. You'll be sent through Pablo's OAuth flow:
- Sign in to Pablo if you aren't already
- Approve the consent screen
- 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:
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):
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:
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.