Skip to main content
Glama
meta-ads-manager-mcp

meta-ads-manager-mcp

meta-ads-manager-mcp

MCP server for creating and managing Meta (Facebook/Instagram) ad campaigns directly from Claude. Tell Claude what you want. It deploys.

Built by Attainment Labs.


Status in the Meta Ads ecosystem

This is an early independent open source Meta Ads MCP server, first published in February 2026 before Meta later introduced its official Ads AI Connectors and hosted Ads MCP endpoint.

Use Meta's official connector if you want Meta-hosted OAuth and first-party support. Use this project if you want a lightweight, self-managed MCP server that you can inspect, fork, and run with your own Meta app credentials.

Related:


Related MCP server: Meta Ads MCP

What it does

Add this server to your Claude config. You get campaign creation, reporting, bulk operations, budget control, and safety tools:

Tool

What it does

create_meta_campaign

Create a full campaign: campaign, ad set, creatives, and ads

get_ad_account_summary

Confirm connected ad account, currency, timezone, spend, balance, and status

list_campaigns

List recent campaigns in the configured ad account

list_ad_sets

List recent ad sets in the configured ad account

list_ads

List recent ads in the configured ad account

get_campaign_status

Check status of a campaign, its ad sets, and ads

get_meta_insights

Pull account, campaign, ad set, or ad performance insights

upload_ad_image

Upload an image and return the image hash for creatives

update_daily_budget

Update campaign or ad set daily budget

bulk_update_campaign_status

Bulk pause, activate, or delete campaigns

pause_campaign

Pause a live campaign

activate_campaign

Activate a paused campaign

delete_campaign

Permanently delete a campaign

All campaigns are created as PAUSED by default. You review before spending.

Safety controls:

  • dry_run=True by default on campaign creation, media upload, budget updates, and bulk status changes.

  • confirm=True is required for live campaign creation, uploads, budget updates, activation, deletion, and bulk status changes.

  • META_ADS_MAX_DAILY_BUDGET_CENTS can cap campaign and ad set daily budgets.

  • META_ADS_AUDIT_LOG_PATH can set a JSONL audit log path. Default is ~/.meta-ads-mcp/audit.jsonl.


Install

Option 1: Let Claude set it up for you (easiest)

If you use Claude Code, paste this prompt:

"Set up meta-ads-mcp for me: https://github.com/attainmentlabs/meta-ads-mcp"

Claude will check your environment, walk you through getting your Meta credentials step by step, edit your ~/.mcp.json, and confirm when it's done. No docs to read.


# No setup required. uvx runs it directly

Add to ~/.mcp.json:

{
  "mcpServers": {
    "meta-ads": {
      "command": "uvx",
      "args": ["meta-ads-manager-mcp"],
      "env": {
        "META_ACCESS_TOKEN": "your-token-here",
        "META_AD_ACCOUNT_ID": "your-account-id",
        "META_PAGE_ID": "your-page-id",
        "META_ADS_MAX_DAILY_BUDGET_CENTS": "5000"
      }
    }
  }
}

Option 2: pip install

pip install meta-ads-manager-mcp

Then in ~/.mcp.json:

{
  "mcpServers": {
    "meta-ads": {
      "command": "meta-ads-manager-mcp",
      "env": {
        "META_ACCESS_TOKEN": "your-token-here",
        "META_AD_ACCOUNT_ID": "your-account-id",
        "META_PAGE_ID": "your-page-id",
        "META_ADS_MAX_DAILY_BUDGET_CENTS": "5000"
      }
    }
  }
}

Credentials

You need three values from Meta. Full step-by-step walkthrough: SETUP.md

Variable

Where to find it

META_ACCESS_TOKEN

Graph API Explorer. Long-lived token with ads_management permission

META_AD_ACCOUNT_ID

Business Manager: Ad Accounts. Numbers only, no act_ prefix

META_PAGE_ID

Facebook Page: About → Page transparency → Page ID

META_ADS_MAX_DAILY_BUDGET_CENTS

Optional daily budget guardrail

META_ADS_AUDIT_LOG_PATH

Optional JSONL audit log path

The access token expires after 60 days. See SETUP.md for the exchange flow.


Usage examples

Once the server is connected, just describe what you want:

Create a campaign:

"Create a Meta campaign targeting US fitness enthusiasts aged 25-40. Daily budget $30. Use the image at /Users/me/ads/hero.jpg. Copy: 'Track every rep. Hit every goal.' Headline: 'FitCommit AI'. CTA: Learn More. Link to fitcommit.ai."

Check status:

"What's the status of campaign 120243616427570285?"

List campaigns:

"List my recent Meta campaigns."

Pull insights:

"Show Meta ad account insights for the last 7 days by campaign."

Update budget safely:

"Dry run a budget update to set ad set 120243616427570285 to $30 per day."

Bulk pause:

"Dry run pausing these three campaigns: 111, 222, 333."

Pause:

"Pause campaign 120243616427570285."

Activate:

"Go live with campaign 120243616427570285."

Delete:

"Delete campaign 120243616427570285."


dry_run mode

create_meta_campaign, upload_ad_image, update_daily_budget, and bulk_update_campaign_status default to dry_run=True. This simulates API calls and returns fake IDs or planned changes without making requests or spending money.

For live changes, set dry_run=False and confirm=True.

activate_campaign and delete_campaign also require confirm=True.


YAML workflow

Prefer writing campaigns as config files? Use meta-ads-cli, the companion CLI tool.


Requirements

  • Python 3.10+

  • uv for the uvx install path

  • A Meta Business Manager account with an ad account and Facebook Page


License

MIT

Available Tools

13 tools
activate_campaignA

Activate (unpause) a Meta campaign. This will resume ad spending.

The campaign must have a valid payment method and approved creatives. Set confirm=True after reviewing the campaign in Ads Manager.

NameRequiredDescriptionDefault
confirmNo
campaign_idYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the key behavioral fact that this resumes ad spending (a real financial side effect) plus the gating prerequisites. It still omits permission/scope requirements, idempotency, and what happens on failure or if the campaign is already active.

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 tight sentences, front-loaded with the action, then the precondition, then the confirm workflow. No filler and no repetition of name or title.

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 mutation tool with no annotations and no output schema, the description covers the critical items: the spending side effect, prerequisites, and the confirm gate. It is still silent on return value, error conditions, and interaction with the bulk status sibling, so it is not fully self-sufficient.

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 0%, so the description must compensate. It does explain the non-obvious parameter, confirming exactly when and why to set confirm=True (after reviewing in Ads Manager), which the schema's bare boolean/default=false leaves unsaid; campaign_id is self-evident from its name but never described.

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?

States a specific verb+resource ("Activate (unpause) a Meta campaign") and disambiguates the terminology with the "unpause" synonym, which is genuinely useful. It does not distinguish itself from the sibling bulk_update_campaign_status, which can also change campaign status, so the sibling differentiation is incomplete.

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?

Gives concrete preconditions (valid payment method, approved creatives) and a workflow instruction (review in Ads Manager then set confirm=True). It does not say when to prefer this over bulk_update_campaign_status or what to do if the campaign is already active.

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

bulk_update_campaign_statusA

Bulk pause, activate, or delete campaigns.

status must be PAUSED, ACTIVE, or DELETED. dry_run defaults to True. Set dry_run=False and confirm=True after reviewing the campaign IDs.

NameRequiredDescriptionDefault
statusYes
confirmNo
dry_runNo
campaign_idsYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the operation is destructive-capable (delete), that dry_run defaults to True, and that a second explicit confirm=True flag is required to actually apply changes. It stops short of stating irreversibility of deletion or how many IDs are allowed per call.

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?

Four short lines, front-loaded with the action, then the enum constraint, then the safety workflow in the order an agent needs it. No filler sentences.

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 four-parameter mutation tool with no annotations and no output schema, the description covers the risky parts (status values, dry-run default, confirmation gate). The remaining gaps are the campaign_ids format/limits and what a dry run returns.

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 0%, so the description must compensate, and it documents three of four parameters meaningfully: the status enum values (PAUSED/ACTIVE/DELETED), dry_run's default of True, and confirm's role as the second gate. Only campaign_ids lacks format/limit detail.

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?

States a specific verb set (pause, activate, delete) plus resource (campaigns) and the defining scope qualifier 'Bulk', which separates it from the single-campaign siblings pause_campaign/activate_campaign/delete_campaign. An agent can route bulk vs. single operations without opening a schema.

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 gives an explicit operating procedure: review the campaign IDs, then set dry_run=False and confirm=True. What is missing is a direct statement of when to prefer this over the single-campaign siblings, but the bulk scope plus the confirmation workflow gives clear context.

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

create_meta_campaignA

Create a complete Meta ad campaign: campaign, ad set, creatives, and ads.

Each item in ads is a dict with:

  • name (str): ad name

  • image_path (str): absolute path to image file on disk

  • primary_text (str): ad body copy

  • headline (str): ad headline

  • link (str): destination URL

  • cta (str, optional): call-to-action button, default "LEARN_MORE"

  • description (str, optional): ad description text

daily_budget_cents: budget in cents. 1000 = $10/day, 3000 = $30/day.

dry_run: when True (default), simulates all API calls without spending money. Set dry_run=False to actually deploy. All campaigns start as PAUSED regardless. confirm: required when dry_run=False. This is the approval gate.

Valid objectives: OUTCOME_TRAFFIC, OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_APP_PROMOTION

Valid CTAs: LEARN_MORE, SIGN_UP, DOWNLOAD, SHOP_NOW, BOOK_NOW, GET_OFFER, SUBSCRIBE, CONTACT_US, APPLY_NOW, WATCH_MORE, INSTALL_MOBILE_APP

NameRequiredDescriptionDefault
adsNo
age_maxNo
age_minNo
confirmNo
dry_runNo
countriesNo
objectiveNoOUTCOME_TRAFFIC
ad_set_nameYes
campaign_nameYes
optimization_goalNoLINK_CLICKS
daily_budget_centsNo

TDQS

A4.2/5.0
Behavior4/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, and it does disclose meaningful behavior: dry_run=True simulates without spending money, dry_run=False actually deploys, confirm is the approval gate, and all campaigns start PAUSED. This is strong safety-relevant disclosure. It stops short of covering permissions/auth, rate limits, partial-failure or rollback behavior on multi-object creation, and what identifiers are returned.

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 purpose is front-loaded in the first line, followed by a tight bulleted parameter reference and enum lists; there is no filler or redundant restatement. Every block earns its place by documenting information the schema leaves blank.

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 an 11-parameter, money-spending mutation tool with no annotations and no output schema, the description covers the critical unknowns: dry_run/confirm semantics, pause-on-create default, and enum vocabularies. It omits what the call returns (campaign/ad IDs), failure semantics, and a few parameters, but the essentials for safe invocation are present.

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 0%, so the description must compensate, and it does substantially: it fully documents the nested ads dict fields (name, image_path, primary_text, headline, link, cta, description), explains daily_budget_cents with concrete examples (1000 = $10/day), and enumerates valid objective and CTA values. Gaps remain for optimization_goal, countries, age_min/age_max, and the two name params, which explain why this is not a 5.

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 first sentence gives a specific verb ('Create') and a compound resource ('a complete Meta ad campaign: campaign, ad set, creatives, and ads'), which precisely scopes it against the sibling list/update/pause/delete tools. An agent can immediately tell this is the only tool that provisions a whole campaign tree rather than reading or mutating an existing one.

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 when to use the tool (creating a campaign) and gives workflow context: dry_run defaults to True and confirm is required to deploy. However, it never names alternatives or states explicit exclusions — e.g., whether image upload must precede this call given it accepts image_path, or how this relates to upload_ad_image. Usage is inferable but not spelled out.

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

delete_campaignA

Permanently delete a Meta campaign. This cannot be undone.

Set confirm=True after reviewing the campaign ID.

NameRequiredDescriptionDefault
confirmNo
campaign_idYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does disclose the most important trait: deletion is permanent and cannot be undone. It also specifies the confirm requirement, though it omits side effects such as what happens to associated ad sets/ads and any permission or rate-limit considerations.

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 short sentences, front-loads the irreversible nature of the operation, and contains no wasted wording.

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 destructive two-parameter tool with no annotations and no output schema, the core warning and confirm requirement are present. Completeness is limited by missing cascade/side-effect details and authentication or permission notes.

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 0%, so the description must compensate. It adds meaningful semantics for confirm by saying to set it True after reviewing the campaign ID, but it gives no format or validation detail for campaign_id beyond naming it.

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 and resource: "Permanently delete a Meta campaign." The word "permanently" implicitly distinguishes it from soft status changes like pause_campaign or activate_campaign, but it does not explicitly name any sibling alternative.

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?

It provides a concrete usage instruction: set confirm=True after reviewing the campaign ID. However, it does not say when to choose permanent deletion versus pausing, deactivating, or bulk status updates, so usage context is only partially implied.

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

get_ad_account_summaryA

Get the configured Meta ad account summary.

Read-only. Use this before campaign work to confirm the connected account, currency, timezone, spend, balance, and account status.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and explicitly states 'Read-only,' which tells the agent this is a safe, non-mutating operation. It also lists the account attributes returned, though it does not discuss permissions, errors, or response structure.

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 short sentences with no wasted text, and the core action is front-loaded. The read-only note and usage guidance follow efficiently.

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?

For a simple, zero-parameter read-only summary tool with no output schema, the description is complete enough: it states the action, safety profile, intended timing, and the specific fields being confirmed. Nothing essential for invoking this tool correctly is missing.

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?

The tool has zero parameters, so parameter semantics are not a meaningful gap. The baseline for a parameterless tool is 4, and the description appropriately adds no unnecessary parameter guidance.

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 and resource: 'Get the configured Meta ad account summary,' and enumerates the account-level fields it returns. It is clearly distinguishable from the campaign/ad-set/ad tools by its account-summary scope, though it does not explicitly name sibling alternatives.

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 gives a clear usage context: 'Use this before campaign work to confirm the connected account, currency, timezone, spend, balance, and account status.' It does not specify when not to use it or name alternative tools, but the intended pre-campaign verification use is explicit.

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

get_campaign_statusB

Get the status of a Meta campaign including its ad sets and ads.

Returns campaign name, status, objective, and lists of ad sets and ads with their statuses and budgets.

NameRequiredDescriptionDefault
campaign_idYes

TDQS

B3.2/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. It usefully discloses the returned payload (name, status, objective, ad sets and ads with statuses and budgets) and implies a read-only lookup via 'Get', but says nothing about permissions, rate limits, pagination, or error behavior for an invalid campaign_id.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by the return contents. Slight overlap between the 'status' in the first sentence and the return enumeration, but no filler.

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?

With no output schema, the description's enumeration of return fields is genuinely useful and covers the main gap. However, with no annotations and a bare 1-parameter schema, a complete definition would also address when to choose it over the sibling read tools and how to supply a valid campaign_id.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the single campaign_id parameter and it largely does not. It only loosely contextualizes the value as belonging to 'a Meta campaign'; no accepted ID format or example is given.

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?

States a specific verb and resource (get the status of a Meta campaign) and clarifies that the result is an aggregate containing ad sets and ads, which separates it in spirit from list_campaigns/list_ad_sets/list_ads. It stops short of naming those siblings, so an agent must still infer the boundary.

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 required campaign_id implies you call this for one specific campaign rather than enumerating them, which weakly distinguishes it from list_campaigns. There is no explicit when-to-use, no exclusions, and no mention of alternatives such as get_ad_account_summary or the granular list_* tools.

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

get_meta_insightsB

Get Meta Ads performance insights.

Read-only. object_id can be an ad account, campaign, ad set, or ad ID. Leave object_id blank to use the configured ad account. Use level for account breakdowns such as campaign, adset, or ad.

NameRequiredDescriptionDefault
levelNo
limitNo
object_idNo
date_presetNolast_7d

TDQS

B3.1/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 burden, and it does add meaningful behavioral context by declaring 'Read-only' and explaining the object_id fallback behavior. It stops short of disclosing pagination, rate limits, date-range defaults, or what metrics are actually returned, which is a notable gap for a reporting tool with zero annotation coverage.

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

Conciseness4/5

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

Three short sentences with no filler, and the key scoping rule (object_id behavior) is front-loaded right after the purpose statement. Efficient, though the level sentence is vague enough to be of limited value.

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?

For a 4-parameter reporting tool with no annotations, no output schema, and 0% schema coverage, the description is thin: date_preset and limit semantics are unexplained, and the shape of the returned insights is not described at all. An agent would have to guess at date filtering and page size behavior.

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

Parameters2/5

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

Schema description coverage is 0% and there are 4 parameters, so the description must compensate. It explains object_id's accepted entity types and partially clarifies level, but says nothing about limit (default 25) or date_preset (default last_7d), leaving half the parameters undocumented anywhere.

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 states a specific verb and resource ('Get Meta Ads performance insights'), which is clearly distinguishable from sibling list/get tools like list_campaigns and get_ad_account_summary. It does not explicitly name which sibling to use instead, but the purpose itself is unambiguous.

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?

It gives two concrete usage rules: leave object_id blank to fall back to the configured ad account, and use level for account breakdowns. However, it never states when to prefer this tool over get_ad_account_summary or the list_* siblings, so routing between alternatives is left to inference.

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

list_adsA

List recent ads in the configured Meta ad account.

Read-only. Use this to find ad IDs and inspect delivery status.

NameRequiredDescriptionDefault
limitNo

TDQS

A3.5/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; it does disclose 'Read-only', which is the key safety signal. It does not cover pagination, ordering/recency semantics, or what fields come back, leaving meaningful behavioral gaps for an unannotated 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 short sentences, purpose front-loaded followed by usage and safety, with no filler.

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 simple one-parameter list tool this covers purpose, safety, and intended use adequately. But with no output schema and an undocumented `limit`, an agent still lacks guidance on result volume and pagination behavior.

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

Parameters2/5

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

Schema coverage is 0% and the single `limit` parameter (default 25) is never mentioned. 'Recent ads' hints at ordering but the description does not explain what the limit controls or the default result size, so it fails to compensate for the schema gap.

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?

States a clear verb+resource ('List recent ads') scoped to the configured Meta ad account, which distinguishes it from list_campaigns/list_ad_sets by hierarchy level. It does not explicitly say how it differs from those sibling list tools, keeping it just short of a 5.

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?

'Use this to find ad IDs and inspect delivery status' gives a concrete task-oriented context for selecting the tool. No when-not-to-use guidance or explicit alternative is named, so it stays at 4 rather than 5.

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

list_ad_setsA

List recent ad sets in the configured Meta ad account.

Read-only. Use this to find ad set IDs before budget or status changes.

NameRequiredDescriptionDefault
limitNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries full burden; it does declare read-only safety and the "recent" scoping plus configured-account constraint, which is valuable. However, it omits pagination behavior, ordering, and what the response contains.

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, safety qualifier and usage hint front-loaded, zero waste.

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?

A simple single-param read tool is adequately framed for purpose and usage, but with no output schema the description should hint at returned fields/pagination, and it leaves the lone parameter undocumented.

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

Parameters2/5

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

One parameter (limit) exists at 0% schema description coverage, and the description never mentions it. The tool has params, so the zero-param baseline of 4 doesn't apply; the agent gets no guidance on default or meaning of limit.

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?

States a specific verb and resource ("List recent ad sets") scoped to the configured Meta ad account. It's clearly distinct from list_campaigns and list_ads by resource, though it doesn't explicitly contrast with siblings.

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?

"Use this to find ad set IDs before budget or status changes" gives explicit context for when to call it. No exclusions or named alternatives, but the usage scenario is clear.

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

list_campaignsA

List recent campaigns in the configured Meta ad account.

Read-only. Use this to find campaign IDs before status, insights, budget, pause, activate, or bulk operations.

NameRequiredDescriptionDefault
limitNo

TDQS

A4.1/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 declares 'Read-only', which is the key safety fact, but omits pagination behavior, ordering, or what 'recent' concretely means, so the disclosure is 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 short sentences, front-loaded with the operation and then the routing guidance. No filler; every clause 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 simple list tool with no output schema and no annotations, it covers purpose, read-only nature, and workflow position. It is only missing detail on result limits and pagination, a minor gap rather than a blocking one.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions the single 'limit' parameter, its default of 25, or any cap on results. With low coverage the description should compensate but does not, leaving the sole parameter undocumented everywhere.

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?

States a specific verb (List) plus resource (recent campaigns) scoped to the configured Meta ad account. An agent can immediately distinguish this from create_meta_campaign, get_campaign_status, or get_meta_insights without opening any schema.

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?

Explicitly routes the agent: use this to obtain campaign IDs before status, insights, budget, pause, activate, or bulk operations. This maps directly to the sibling tools and tells the agent exactly where this fits in a workflow.

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

pause_campaignB

Pause a live Meta campaign. Safe to call on already-paused campaigns.

NameRequiredDescriptionDefault
campaign_idYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden. It usefully discloses idempotency ('safe to call on already-paused campaigns'), but omits auth requirements, side effects (e.g., whether ad delivery/spend stops), reversibility, and response behavior.

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, front-loaded sentences with zero waste. The action is stated first, followed by the key safety note.

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 simple one-parameter mutation with no output schema, the description covers purpose and idempotency. It remains sparse on prerequisites and side effects, but the low complexity and lack of required return-value explanation keep this from being a major gap.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions campaign_id, its format, or what it identifies. With one required parameter present, the description should compensate but adds no meaning beyond the schema.

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?

States a specific verb 'pause' and resource 'Meta campaign'. Implicitly distinguishes from sibling activate_campaign (opposite action) and delete_campaign (destructive), but does not explicitly differentiate from bulk_update_campaign_status or address the odd 'live' vs 'already-paused' phrasing.

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?

Provides one explicit usage note: safe to call on already-paused campaigns. However, it offers no guidance on when to choose this tool over activate_campaign or bulk_update_campaign_status, nor any prerequisites.

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

update_daily_budgetA

Update daily budget for a campaign or ad set.

dry_run defaults to True. Set dry_run=False and confirm=True after review. If META_ADS_MAX_DAILY_BUDGET_CENTS is set, the budget cannot exceed it.

NameRequiredDescriptionDefault
confirmNo
dry_runNo
object_idYes
daily_budget_centsYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full safety burden and does well: it discloses that dry_run defaults to True, that a confirm flag is required to apply a change, and that META_ADS_MAX_DAILY_BUDGET_CENTS caps the value. It does not say what the tool returns or how failures surface, but the mutation safety profile is clearly communicated.

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

Conciseness4/5

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

Three short, front-loaded lines with no filler; the safe-default behavior comes first and the confirming step second. Efficient, though the env-var constraint could be folded into the invocation sentence.

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 mutation tool with no annotations, no output schema, and 0% parameter documentation, the description covers the critical dry-run/confirm workflow and the budget ceiling. Gaps remain around return behavior, error handling, and which object IDs are valid, which matter for a write operation.

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 0%, so the description must compensate. It explains dry_run and confirm semantics and ties the env-var cap to daily_budget_cents, but object_id is left unexplained (which ID type, campaign vs ad set nuance) and the unit/format expectations for daily_budget_cents are only implied by the name.

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?

States a specific verb and resource ('Update daily budget') and the two object types it applies to (campaign or ad set). It does not differentiate itself from siblings like bulk_update_campaign_status, but the purpose is unambiguous.

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?

Gives procedural guidance for the write flow (dry_run defaults True; set dry_run=False and confirm=True after review), which is actionable. However, it never says when to prefer this over sibling tools such as bulk_update_campaign_status or pause/activate_campaign, so selection guidance is only implied.

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

upload_ad_imageA

Upload an image to the configured Meta ad account.

dry_run defaults to True. Set dry_run=False and confirm=True to upload. Returns an image hash that can be used in ad creatives.

NameRequiredDescriptionDefault
confirmNo
dry_runNo
image_pathYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the most important behavior: the safe default (dry_run=True) and the fact that a real upload requires both flags to be flipped. It also reveals the return value (image hash). It omits permissions/auth requirements, file constraints, and whether a failed gated call still touches the remote account.

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 short sentences, zero waste, with the core action front-loaded and the safety-gate instruction and return value following in priority order.

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?

There is no output schema, and the description compensates by naming the returned image hash. For a 3-parameter tool the safety gates, defaults, and return value are all covered; only input-file constraints and auth expectations are absent.

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 0%, so the description must compensate. It meaningfully explains dry_run and confirm, including how they interact to gate the upload, but says nothing about image_path semantics (format, relative vs absolute, existence checks) beyond what the bare schema shows.

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?

States a specific verb and resource ('Upload an image to the configured Meta ad account') and immediately clarifies the outcome (an image hash usable in ad creatives). It is trivially distinguishable from every sibling, which are all campaign/ad-set/insight management tools.

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?

Gives clear when-to-use context by stating the artifact is for use in ad creatives, and spells out the activation condition for a real upload (dry_run=False and confirm=True). It does not mention that only non-dry-run calls mutate remote state or reference any alternative tool, so it falls short of full when/when-not guidance.

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. 13 tool updatesv0.2.0
    • First observedactivate_campaign
    • First observedbulk_update_campaign_status
    • First observedcreate_meta_campaign
    • First observeddelete_campaign
    • First observedget_ad_account_summary
    • First observedget_campaign_status
    • First observedget_meta_insights
    • First observedlist_ad_sets
    • First observedlist_ads
    • First observedlist_campaigns
    • First observedpause_campaign
    • First observedupdate_daily_budget
    • First observedupload_ad_image

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct resources or actions, and descriptions clarify intent. There is some overlap between single-campaign pause/activate/delete and bulk_update_campaign_status, and get_campaign_status overlaps with list_campaigns/list_ad_sets/list_ads.

Naming Consistency5/5

All tools use snake_case with a predictable verb-first pattern such as list_campaigns, get_meta_insights, update_daily_budget, and delete_campaign. Minor additions like "meta" or "bulk" do not break consistency.

Tool Count5/5

The server has 13 tools, which is well within a reasonable range for an ad campaign management surface. Each tool has a plausible place in the workflow, from account summary and listing to creation, budget updates, and status controls.

Completeness3/5

Campaign-level CRUD is mostly covered: create, list, inspect status, update budget, pause/activate, delete, and bulk status updates. However, ad sets, ads, and creatives are not independently manageable after creation, and there are no update operations for targeting, creative content, bidding, or ad/ad set lifecycle beyond budget and campaign status.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to manage Facebook and Instagram advertising campaigns through the Meta Marketing API. Supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage Meta Ads (Facebook, Instagram) end-to-end through natural conversation, including launching campaigns, uploading creatives, updating budgets, and analyzing performance.
    42
    Business Source 1.1
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to create, manage, and automate Meta (Facebook/Instagram) ads campaigns via the Marketing API, with safe defaults and AI-generated creative.
    1
    MIT