MCP server for Meta Marketing API v26.0 — 135 tools for Facebook & Instagram ad campaign management
The server implements 19 tools (sample shown) as part of a claimed 135-tool suite for Meta Marketing API v26.0. Tool naming is consistent and verb-driven (get_, list_, create_, update_, delete_). Descriptions are present for all tools shown and range from 80-280 characters, adequate but often generic without WHEN/WHY guidance or prerequisites. All parameters have descriptions and type declarations (string, number), which is good. However, critical issues emerge: (1) JSON string parameters (creative, targeting, tracking_specs, promoted_object) lack inline validation hints or format documentation, LLMs will struggle to construct valid JSON; (2) Parameter relationships are undocumented (e.g., promotion_object required for certain optimization_goals); (3) Output schemas are not documented in the source, we cannot verify what fields are returned or their types; (4) Error handling is not visible in the tool definitions; (5) Some parameter descriptions contain API version-specific warnings (v26.0 removals) but lack actionable guidance on what to do instead. The descriptions mention constraints (e.g., 'e.g. act_123 or 123') but rely on free-text examples rather than formal enums for known finite sets like status/optimization_goal/billing_event.
Copy an existing ad. Creates a duplicate within the same or different ad set.
Create a new ad. Requires name, adset_id, and creative (JSON object_story_spec). Defaults to PAUSED status.
Create a new ad set. Requires name, campaign_id, budget, optimization_goal, billing_event, and targeting. Defaults to PAUSED status.
Delete an ad. This action is irreversible.
Delete an ad set. This action is irreversible.
Get activity log for the ad account. Shows changes made to campaigns, ad sets, ads, etc.
JSON string parameters lack format/validation documentation. Parameters like 'creative' (object_story_spec), 'targeting', 'tracking_specs', 'promoted_object' are documented only as 'JSON string' with brief description. LLMs cannot infer valid JSON structure without explicit schema or examples of field names and types.
Output schemas not visible. Tool definitions document input parameters but lack response schema documentation. Unclear what fields agents should expect from create_ad, get_account, list_ads, etc. This blocks downstream tool chaining and forces agents to guess what IDs/fields are available.
Undocumented parameter dependencies. E.g., 'promoted_object' is required for certain optimization_goals but this dependency is not stated in parameter descriptions. Parameter relationships must be explicit: 'Required if optimization_goal is OUTCOME_SALES|OUTCOME_APP_PROMOTION|...'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get details of a specific ad by ID.
Get details of the configured ad account including status, balance, currency, timezone, and spend info.
Get a preview of an ad in a specific format. Returns HTML iframe for rendering.
Get details of a specific ad set by ID.
Get delivery estimate for an ad set, including estimated daily reach. Note: the delivery_estimate edge exists on the ad set (and ad account) node, not on individual ads. Also note: as of v26.0, the daily_outcomes_curve, budget_guardrail, and estimate_dau fields are no longer returned (removed with no replacement).
List users who have access to the ad account with their roles and permissions.
List all ad accounts accessible by the current user. Returns paginated results.
List ads in the ad account. Optionally filter by campaign, ad set, or status.
List ad sets in the ad account. Optionally filter by campaign or status.
Search the Meta Ad Library for ads. Allows searching by keywords, countries, and ad type. Useful for competitive research and transparency.
Update an existing ad. Only provided fields will be modified.
Update the configured ad account settings. Only provided fields will be modified.
Update an existing ad set. Only provided fields will be modified.
Enum values described as free-text examples rather than formal enums. E.g., status field accepts 'ACTIVE, PAUSED, DELETED, ARCHIVED' but this is embedded in description text, not declared as an enum schema constraint. LLMs may hallucinate invalid status values like 'SUSPENDED' or 'PENDING'.
Error handling not documented in tool definitions. No guidance on what errors may occur, how to recover, or whether operations are retryable. E.g., delete_ad says 'This action is irreversible' but does not clarify whether a 409 conflict can occur or how to handle it.
API-version-specific warnings in descriptions lack actionable migration guidance. E.g., 'as of v26.0, daily_outcomes_curve... are no longer returned' in get_delivery_estimate. The description tells agents what changed but not what to use instead or how to adapt.
Fallback behavior relies on environment variables but is not clear in descriptions. Multiple tools say 'Falls back to META_AD_ACCOUNT_ID env var if omitted' but do not state whether the env var is required at server startup or whether agents should always pass account_id explicitly to avoid hidden dependencies.
Descriptions are generic and lack WHEN/WHY guidance. E.g., 'Get details of the configured ad account...' does not explain when agents should call this vs list_ad_accounts or when it is necessary as a prerequisite for other operations.