Skip to main content
Glama
jonathanposovatz

meta-ads-mcp-server

Meta Ads MCP Server

MCP Server for the Meta Marketing API. Gives Claude Desktop direct access to your ad account data — campaign performance, creative analysis, audience breakdowns, and budget pacing.

Tools

Tool

Description

get_campaigns

List campaigns with status, objective, and budget info

get_campaign_performance

Core KPIs: spend, impressions, CTR, CPC, CPM, CPA, ROAS

get_creative_performance

Creative-level metrics including video hook rate and thruplay rate

get_ad_creatives

Inline-render ad creative images (full-resolution by default, image_size: "thumbnail" for 64×64 previews)

get_audience_breakdown

Performance broken down by age and/or gender

get_budget_status

Budget pacing and daily spend status for active campaigns

get_ad_accounts

List all ad accounts the token has access to

get_adsets / get_ads

List ad sets / ads with optional filtering

debug_*

Diagnostic helpers for troubleshooting field/breakdown issues

Related MCP server: meta-ads-mcp

Setup

1. Install & Build

git clone https://github.com/YOUR_USERNAME/meta-ads-mcp-server.git
cd meta-ads-mcp-server
npm install
npm run build

2. Configure Environment

cp .env.example .env

Edit .env with your credentials:

META_ACCESS_TOKEN=your_meta_api_token
META_AD_ACCOUNT_ID=act_123456789

Getting your credentials:

  • Ad Account ID: Found in Meta Ads Manager URL or account dropdown. Prefix with act_.

  • Access Token: Generate at Meta Graph API Explorer with ads_read permission. Short-lived tokens (~2h) can be exchanged for 60-day long-lived tokens via GET /oauth/access_token?grant_type=fb_exchange_token&client_id={APP_ID}&client_secret={APP_SECRET}&fb_exchange_token={SHORT_TOKEN}.

The .env file takes precedence over environment variables passed by Claude Desktop. If Claude Desktop's claude_desktop_config.json contains a stale META_ACCESS_TOKEN, the value in .env wins. Update .env to rotate the token without touching Claude Desktop config.

3. Add to Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "meta-ads": {
      "command": "node",
      "args": ["/absolute/path/to/meta-ads-mcp-server/dist/index.js"]
    }
  }
}

On macOS with Homebrew Node, use /opt/homebrew/bin/node as the command.

Restart Claude Desktop. The tools will be available automatically.

Usage Examples

Ask Claude things like:

  • "Show me my active campaigns"

  • "How did campaign 120210001 perform last 7 days?"

  • "Compare creative performance for my Summer Sale campaign"

  • "Break down my campaign audience by age and gender"

  • "Are any campaigns overspending today?"

Architecture

src/
├── index.ts             → MCP server setup, tool registration
├── types.ts             → Shared interfaces (MetaInsight, MetaAction, etc.)
├── fields.ts            → Reusable Meta API field selections
├── formatters.ts        → KPI calculations, number formatting
├── meta-client.ts       → Meta API client (loads .env with override:true)
└── tools/
    ├── campaigns.ts     → get_campaigns
    ├── performance.ts   → get_campaign_performance
    ├── creatives.ts     → get_creative_performance
    ├── ad-creatives.ts  → get_ad_creatives (inline image rendering)
    ├── audience.ts      → get_audience_breakdown
    ├── budget.ts        → get_budget_status
    ├── accounts.ts      → get_ad_accounts
    ├── adsets.ts        → get_adsets
    ├── ads.ts           → get_ads
    └── debug.ts         → debug helpers

Meta API Notes

  • Budgets are in cents. daily_budget: "5000" = €50.00

  • Actions are arrays. Always parsed with extractAction(), never accessed directly

  • Breakdowns multiply rows. age,gender gives ~14 rows per campaign (7 age groups × 2 genders)

  • Video fields may be missing. Non-video ads won't have video_thruplay_watched_actions

  • date_preset vs time_range: Never send both — Meta throws an error

License

MIT

Available Tools

10 tools
get_ad_accountsA

List all ad accounts accessible with the current token. Use this first to find the right account ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of accounts to return

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It reveals that the tool uses the current token and that it returns all accessible accounts, which is useful behavioral context. However, it does not disclose potential pagination, rate limits, or whether results are ordered, which would add transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no wasted words. The primary function is stated first, followed by the usage guidance. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple list tool with one optional parameter. The description covers what it does, why to use it, and the token dependency. No output schema exists, but the tool's simple purpose makes the return value obvious (a list of accounts).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (the only parameter 'limit' has a description and constraints). The description adds no new parameter details, but the schema already fully documents the parameter, so the baseline of 3 applies. The description's note about finding the right account ID gives practical context, earning a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all ad accounts accessible with the current token, identifying both the verb ('List') and the resource ('ad accounts'). It also distinguishes its purpose — finding the right account ID — which differentiates it from sibling tools like get_campaigns or get_creative_performance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use this tool first to find the correct account ID, establishing a clear usage sequence. While it doesn't name an alternative, it conveys when to use it in the workflow, which is sufficient guidance given that siblings operate on different resources.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ad_creativesA

Fetch ad creative images and display them inline. Shows the actual ad thumbnails/images alongside ad metadata (name, status, creative ID). Defaults to full-resolution images; set image_size='thumbnail' for the small 64x64 preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of ad images to return (default 5, max 20)
ad_idsNoOptional: filter by specific ad IDs. When set, only these ads are returned.
adset_idsNoOptional: filter by specific ad set IDs
image_sizeNo'full' returns the original creative image (image_url or thumbnail_url with the stp size-cap stripped). 'thumbnail' returns the 64x64 preview.full
campaign_idsYesCampaign IDs to fetch ad creatives for
ad_account_idYesAd account ID (e.g. act_123456789)
status_filterNoFilter ads by effective statusALL

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden and does a reasonable job: it states that the tool fetches and inline-displays images, shows metadata, and explains the default full-resolution behavior plus the thumbnail option. It does not cover auth or error behavior, but for a read-oriented fetch tool the core behavior is disclosed without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, no filler. Every sentence contributes either the main purpose, output content, or the one important configuration nuanance. This is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema covers all parameters and the description covers the output nature (actual images plus metadata), so the tool is callable. However, with no output schema and 7 parameters, it would benefit from mentioning what happens when no creatives exist, whether IDs must be from the same ad account, or how results are ordered/paginated. The description is adequate but not fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 because the schema already documents every parameter. The description adds no essential new parameter meaning; it merely echoes the image_size default and thumbnail option already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch ad creative images and display them inline.' It clarifies what the returned data contains (thumbnails/images plus ad metadata such as name, status, and creative ID), making the tool's purpose unmistakable and distinguishing it from sibling tools that focus on metrics or campaign lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool over siblings such as get_ads or get_creative_performance, nor does it provide when-not-to-use guidance. It implies image display is the point, but leaves alternative selection entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_adsA

List ads with their actual delivery status (ACTIVE, PAUSED, etc.), name, and creative info. Unlike insights-based tools, this shows ALL ads regardless of spend.

ParametersJSON Schema
NameRequiredDescriptionDefault
adset_idsNoOptional: filter by specific ad set IDs
campaign_idsYesCampaign IDs to list ads for
ad_account_idYesAd account ID (e.g. act_123456789)
status_filterNoFilter ads by effective statusALL

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose an important behavior: results include ALL ads regardless of spend, and it reports 'actual delivery status' rather than inferred performance. However, it does not mention pagination, response shape beyond a few fields, or any operational caveats, leaving some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The first sentence states what the tool returns, and the second sentence clarifies its scope relative to insights tools. The key differentiator is front-loaded and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with four parameters and no output schema, the description gives enough information about result composition (delivery status, name, creative info) and scope. The schema covers required and optional parameters. It lacks an explicitly named alternative sibling, but the overall context is sufficient for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all four parameters, including the status_filter enum and default. The description adds no parameter-specific detail beyond the general listing context, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List ads' with their delivery status, name, and creative info. It also distinguishes itself from insights-based tools, making it clear this is a structural ad-listing tool rather than a metrics tool. This clearly separates it from siblings like get_debug_insights and get_ad_creatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Unlike insights-based tools, this shows ALL ads regardless of spend' gives a clear use case: choose this when you need the full ad list, not spend-filtered or metrics-focused data. It does not name a specific sibling tool as the alternative, but it identifies the relevant category of alternatives well enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_adsetsA

List ad sets for a campaign with ID, name, status, budget, and optimization goal. Use this to find specific ad set IDs and see what each ad set optimizes for.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idsYesCampaign IDs to list ad sets for
ad_account_idYesAd account ID (e.g. act_123456789)
status_filterNoFilter ad sets by statusALL

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. The verb 'List' implies a non-destructive read operation, which is inferred but not confirmed. The description discloses what data is returned but omits behavioral traits such as pagination behavior, result limits, ordering, or data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero redundancy. The primary action and returned fields are front-loaded, and the intended use case follows immediately. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description's enumeration of returned fields is valuable and mostly sufficient for a simple listing tool. It covers what the tool returns and why to use it, but it omits pagination and limit behavior, which are relevant for any list-style tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters including the status_filter enum and ad_account_id format example. The description adds minimal parameter-level value beyond linking campaign_ids to the purpose of finding specific ad set IDs, which matches the baseline-3 expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource ('ad sets for a campaign') and enumerates the returned fields (ID, name, status, budget, optimization goal). It clearly distinguishes from sibling tools like get_ads and get_campaigns by resource, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives a concrete use case: 'Use this to find specific ad set IDs and see what each ad set optimizes for.' This tells the agent when to invoke the tool, but it provides no exclusions or pointers to alternative sibling tools for related tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_audience_breakdownB

Get performance broken down by demographics, platform, placement, device, or geography. Results match the Ads Manager optimization event.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_rangeNoCustom date range (YYYY-MM-DD). Overrides date_preset.
date_presetNoDate preset for the reportlast_7d
campaign_idsYesCampaign IDs to analyze
ad_account_idYesAd account ID (e.g. act_123456789)
breakdown_typeYesHow to break down: demographics (age, gender, age_and_gender), geography (country, region, dma), platform (platform, placement, device, platform_and_device)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the behavioral disclosure burden. The phrase 'Results match the Ads Manager optimization event' adds useful consistency information, and the 'get' verb implies a read operation, but the description does not address pagination, data availability limits, or any other behavioral caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core capability is front-loaded, and the second sentence adds a meaningful behavioral guarantee. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema covers parameter syntax well, but there is no output schema and no annotations. The description does not define what 'performance' returns or how results are structured, so an agent lacks some context about the response despite having adequate parameter documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by semantically grouping the breakdown_type enum values into demographics, geography, and platform categories, which helps an agent choose the correct breakdown without needing to infer from raw enum names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: getting performance broken down by demographics, platform, placement, device, or geography. This separates it from sibling tools like get_campaign_performance or get_creative_performance, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus the sibling performance or insights tools. The description explains what the tool does but not the context in which it should be selected, and it does not mention any exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_budget_statusB

Get budget pacing and spend status for active campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idsNoSpecific campaign IDs to check. If empty, checks all active campaigns.
ad_account_idYesAd account ID (e.g. act_123456789)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only conveys a read operation scoped to active campaigns and does not detail response format, pacing semantics, error behavior, or account-level defaults beyond what the schema already indicates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. The verb and resource are front-loaded, and every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with full schema coverage, this is mostly adequate. However, with no output schema and no annotations, the agent is left guessing how 'budget pacing and spend status' is represented in the response (e.g., percentages, currency, remaining budget).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters including the default behavior of campaign_ids and the ad account ID format. The description adds no new parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('budget pacing and spend status') with a clear scope ('active campaigns'). It is enough to distinguish the tool from performance or creative metrics siblings, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus get_campaign_performance, get_campaigns, or other siblings. There are no exclusions, conditions, or suggested alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_campaign_performanceB

Get performance KPIs for campaigns. Results match the Ads Manager — only the optimization event of each ad set counts as a 'Result'.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoAggregation levelcampaign
adset_idsNoOptional: filter by specific ad set IDs
time_rangeNoCustom date range (YYYY-MM-DD). Overrides date_preset.
date_presetNoDate preset for the reportlast_7d
campaign_idsYesArray of campaign IDs to get performance for
ad_account_idYesAd account ID (e.g. act_123456789)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure, and it does disclose one non-obvious trait: only the optimization event of each ad set counts as a 'Result'. However, it does not cover other behavioral aspects like data freshness, permissions, pagination, or response details, leaving the disclosure partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler, placing the core purpose first and a valuable caveat second. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and the description does not enumerate the KPI fields returned, so an agent cannot tell whether the tool provides metrics like spend, clicks, or conversions beyond 'Result'. The missing usage guidance and absent response details make the definition incomplete for a reporting tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds no specific parameter clarification beyond the Result metric definition, but it does not need to compensate for missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'Get' plus 'performance KPIs for campaigns' identifies a clear resource and action, and the note about Ads Manager optimization events adds useful KPI definition. It does not explicitly contrast with siblings like get_creative_performance or get_campaigns, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to choose this tool over alternatives such as get_creative_performance or get_budget_status. The description focuses on behavior and result definition rather than use cases, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_campaignsA

List all campaigns for an ad account with status, objective, and budget info.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesAd account ID (e.g. act_123456789)
status_filterNoFilter campaigns by statusALL

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden. It signals a read-only operation via 'List' and discloses the returned information fields. However, it does not mention pagination, response shape, or that status_filter defaults to ALL, which is beyond the schema and would add useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that conveys the core purpose without wasted words. It is appropriately concise for a simple list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter list tool with full schema coverage, the description covers the core purpose and the relevant response fields. It lacks any mention of pagination or output format, but the tool's simplicity and clear scope make the description reasonably complete despite the absence of annotations and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already fully documented. The description adds no parameter-specific detail beyond echoing 'ad account' and the return fields; it does not elaborate on status_filter, but the schema already does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource ('campaigns for an ad account') and names the returned fields (status, objective, budget). This distinguishes it from performance-focused siblings like get_campaign_performance without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when you need a listing of campaigns for an ad account with status/objective/budget. It does not name alternatives or explicit exclusions, but the stated fields are enough to differentiate it from nearby siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_creative_performanceA

Get creative-level performance including video metrics (hook rate, thruplay rate). Results match the Ads Manager optimization event.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of creatives to return (default 50)
sort_byNoSort creatives by this metricspend
time_rangeNoCustom date range (YYYY-MM-DD). Overrides date_preset.
campaign_idYesCampaign ID to analyze creatives for
date_presetNoDate preset for the reportlast_7d
ad_account_idYesAd account ID (e.g. act_123456789)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Get' connotes a safe read operation, and 'Results match the Ads Manager optimization event' is a genuinely useful behavioral disclosure indicating metric alignment with Ads Manager rather than raw stats. But rate limits, data latency, and estimation/provisional-data caveats are not discussed, leaving only partial coverage for an annotation-less tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with zero filler. The first sentence front-loads the core purpose, and the second adds a distinct behavioral guarantee. Nothing is wasted or redundant with the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with no annotations and no output schema, the description conveys only a general sense of the result shape ('creative-level performance', video metrics) and does not specify what fields are returned or how pagination behaves via limit. Required parameters and enums are fully documented by the schema, but the absent output contract and lack of any exclusion guidance leaves a moderate gap for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — every parameter (ad_account_id, campaign_id, date_preset, time_range, sort_by, limit) already carries a meaningful description, so the baseline is 3. The tool description's mention of 'hook rate' loosely ties into the sort_by enum value hook_rate, but it adds no substantive meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource — 'Get creative-level performance' — and reinforces it with concrete example metrics ('hook rate, thruplay rate'), making the delivery clear. It distinguishes itself from siblings like get_ad_creatives (which presumably returns creative objects, not metrics) and get_campaign_performance (campaign-level rollup), though it does not explicitly name a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the right tool when an agent needs per-creative performance data, especially video metrics, and that reported values align with the Ads Manager optimization event. However, there is no explicit when-to-use vs when-not-to-use guidance, no named alternatives, and no mention of prerequisites like obtaining campaign_id from sibling tools — the usage context is implied, not prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_debug_insightsA

Debug tool: returns raw action types from the API response. Use this to see exactly what conversion/action types Meta returns for a campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoAggregation levelcampaign
time_rangeNoCustom date range (YYYY-MM-DD). Overrides date_preset.
date_presetNoDate presetlast_7d
campaign_idsYesCampaign IDs to inspect
ad_account_idYesAd account ID (e.g. act_123456789)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses that the output is raw and exact/passthrough from Meta, which sets appropriate expectations for a debug tool. However, it does not describe the response format, pagination, error behavior, or any other operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no waste. The purpose is front-loaded via 'Debug tool:' and the intended-use sentence reinforces the value without repeating schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only debug tool with full schema coverage, the description is largely complete: it states what is returned, names the target resource, and gives an invocation purpose. It would benefit from a bit more detail about the raw response shape, but that is a minor gap given the tool's simple intent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies. The description adds no parameter-level meaning beyond 'for a campaign,' but the schema already documents every parameter including defaults, enums, and the nested time_range object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific function: returning raw action types from the API response and identifying itself as a debug tool. It signals differentiation from reporting sibling tools through the 'Debug tool' label, though it does not explicitly name or contrast any sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit use case: 'Use this to see exactly what conversion/action types Meta returns for a campaign.' This gives clear context for when the tool is appropriate, but it does not mention when not to use it or name alternatives like get_campaign_performance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.3.0
    • First observedget_ad_accounts
    • First observedget_ad_creatives
    • First observedget_ads
    • First observedget_adsets
    • First observedget_audience_breakdown
    • First observedget_budget_status
    • First observedget_campaign_performance
    • First observedget_campaigns
    • First observedget_creative_performance
    • First observedget_debug_insights

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct data view: account listing, campaign list, campaign performance, creative performance, audience breakdown, budget, ad sets, ads, creatives, and debug insights. The parallel performance tools are clearly separated by level or dimension.

Naming Consistency5/5

All tools follow a consistent get_ prefix with a readable resource or metric descriptor. Plural nouns are used for list endpoints and entity_metric patterns for analytics endpoints, with only get_debug_insights as a mild outlier.

Tool Count5/5

Ten tools is well within the ideal range and each one serves a clear purpose in a read-only Meta Ads workflow. There is no obvious redundancy or unnecessary bloat.

Completeness4/5

The read-only surface covers the full account → campaign → ad set → ad → creative hierarchy plus performance, budget, audience breakdown, and debug insights. Minor gaps exist such as no ad-set-level or ad-level performance endpoint and no write/management operations, but the tool set appears intentionally observational.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for managing and analyzing Meta Ads (Facebook/Instagram) with over 80 natural-language tools for AI agents like Claude Desktop.
    -
  • A
    license
    A
    quality
    D
    maintenance
    MCP server to manage Meta Ads (Facebook/Instagram) campaigns, ad sets, insights, and audiences from Claude Code using natural language.
    9
    4 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Meta Ads providing 30 tools for account discovery, campaign management, targeting research, and insights. Designed with LLM-friendly outputs and productivity features like cloning and bulk operations.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A clean-room Meta Ads MCP server that lets you build, launch, and read Meta ad campaigns via Claude Code using a single system-user token.
    17
    MIT