MCP server for Meta Ads (Facebook/Instagram) management through AI assistants
The Meta Ads MCP server has consistent naming patterns and clear parameter descriptions, but lacks documented output schemas, error handling guidance, and some parameter constraints. All 12 tools start with action verbs (get_, create_, update_, search_), which is a strong foundation. However, tool descriptions are concise (mostly 6-15 words), falling below the production baseline of 194 chars, they lack context about when to use each tool, dependencies, or recovery guidance. Parameter schemas are present with type declarations and descriptions, but output schemas are entirely undocumented, LLMs cannot plan downstream calls without knowing what fields to expect. Error handling is absent: there are no recovery guides, no distinction between retryable and fatal errors, and no actionable error messages. The server uses HTTP transport (fastmcp + uvicorn), which is current. Overall, this is a solid tier-C implementation with good naming discipline but significant gaps in description richness, output documentation, and error guidance that would cause agents to struggle in production.
Create a new ad campaign.
Get detailed information about a specific ad account.
List all accessible Meta ad accounts.
List ads from an ad set, account, or campaign.
Get detailed information about a specific ad set.
List ad sets for an account or campaign.
Get detailed information about a specific campaign.
No output schemas documented. LLMs cannot infer what fields returned objects contain, forcing blind downstream tool calls and increasing context loss risk.
Tool descriptions are extremely terse (6-15 words, avg 10 chars below production baseline of 194). Lack context about when to call each tool, what data they return, and dependencies between tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
List campaigns for an ad account.
Get performance metrics and analytics.
Search for demographic targeting options.
Search for targeting interests by keyword.
Update campaign status, budget, or settings.
No error handling or recovery guidance. Agents will not know whether to retry, ask the user to fix input, or report a fatal error. No distinction between retryable (rate limit, timeout) and non-retryable errors (permission denied, invalid account).
create_campaign and update_campaign modify state but lack confirmation/dry-run support. Agents have no way to preview changes before executing irreversible actions.
Parameter descriptions lack format/constraint details. E.g., 'Ad account ID' does not explain whether to include 'act_' prefix, and 'Campaign objective' lacks enum values (should list: OUTCOME_TRAFFIC, OUTCOME_AWARENESS, etc.).
No pagination guidance for list tools (get_campaigns, get_adsets, get_ads). Tools accept a 'limit' param but do not document whether they return a cursor, total count, or simple offset-based pagination.
Inconsistent parameter naming across similar tools. 'get_campaigns' filters by 'status', but 'create_campaign' and 'update_campaign' also use 'status'. The description for create_campaign status says '(ACTIVE or PAUSED, default: PAUSED)' but get_campaigns status description is missing the enum values.