The most visual MCP server for the Facebook Ad Library. Search any advertiser and your AI surfaces real creatives in-context.
Two tools with explicit definitions in mcp_server.py. Both have descriptive text and clear use cases, but critical issues limit overall quality: (1) Schema definitions are only partially visible, parameter types shown but no explicit return schemas documented in code; (2) Some parameter descriptions contain example values (violates pattern:tool-description guidance); (3) Error handling guidance is minimal; (4) No explicit enum constraints for categorical parameters. The server implements tool annotations (readOnlyHint, openWorldHint) which is a positive signal. However, the incomplete schema visibility and reliance on inferred output structure cap the score in the fair-to-poor range.
Retrieve currently running ads for a brand using their Meta Platform ID. Use this tool after getting a platform ID from get_meta_platform_id. This tool fetches active advertisements from the Meta Ad Library, including ad content, media URLs, dates, and targeting information. For complete analysis of visual elements, colors, design, or image content, you MUST also use analyze_ad_image on the media_url from each ad.
Search for companies or brands in the Meta Ad Library and return their platform IDs. Use this tool when you need to find a brand's Meta Platform ID before retrieving their ads. This tool searches the Facebook Ad Library to find matching brands and their associated Meta Platform IDs for ad retrieval.
Output schemas not explicitly documented in code. Tools return Dict[str, Any] but the structure (fields, types, nested object shapes) is not formally specified. LLMs cannot reliably extract next_cursor, total_count, or chaining IDs needed for pagination and tool composition.
Parameter descriptions for get_meta_platform_id include example values ('Nike', ['Nike', 'Coca-Cola', 'Apple']) which LLMs tend to reuse literally rather than adapt.
Parameter descriptions for get_meta_ads include examples ('US', 'CA', 'GB', 'AU') in free-form text. The 'country' parameter should declare valid country codes as an enum constraint, not embedded examples.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Error handling in code includes validation messages but no recovery guidance. E.g. 'Brand name must be provided and cannot be empty' is clear, but there's no hint like 'Try again with a non-empty name' or pointer to discovery tools. Per pattern:recovery-guide, errors should tell the LLM what to do next.
The 'limit' parameter in get_meta_ads has a default of 50 and max of 500, but these constraints are only in the description text, not in a formal JSON Schema minItems/maxItems.
API key management via get_scrapecreators_api_key() is called inside tool logic, but the MCP server definition does not expose how the key is injected. Per pattern:secret-injection, credentials should be server-side only and never appear as tool parameters. Current approach is secure but lacks explicit documentation in the MCP interface.