Serveur MCP

Ad Radar

dev.ad-radar/ad-radar
Marketing et publicité Recherche et exploration Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Searches Meta ad library data, analyzes winning hooks and patterns, and generates swipe or analysis prompts for competitor ads.

advertiser_hooks
Advertiser hooks
The hooks, hook mechanisms and angles an advertiser uses most, aggregated over all of its ads: the pattern worth swiping, not a single ad. advertiserId comes from search_ads.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['advertiserId'], 'properties': {'advertiserId': {'type': 'integer'}}, 'additionalProperties': False}
get_ad
Ad details
Full record of one ad: headline, body, CTA, full transcript, metrics, media (public URLs), links (post, Ad Library, landing page, board). The transcript is in English: when the ad runs in another language (e.g. Spanish), transcript is the English translation, translatedFrom names the language and transcriptOriginal holds the original script. Text fields are null when they aren't available for that ad; the links always point to the original.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['key'], 'properties': {'key': {'type': 'string', 'maxLength': 80, 'description': 'adKey ("meta:<id>"), a bare id, a Meta Ad Library id or "id:<internal id>"'}}, 'additionalProperties': False}
get_swipe_prompt
Swipe prompt
A ready-to-run prompt for one ad. kind='swipe' = rebuild the ad for your product: map its beats, check the fit, write a full version with the same structure, plus alternative hooks. kind='analysis' = why the ad works (audience, funnel, psychology, weak spots) and how to apply it to your business. Pass product to fill it in, then follow the returned prompt.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['key'], 'properties': {'key': {'type': 'string', 'maxLength': 80, 'description': 'adKey ("meta:<id>"), a bare id, a Meta Ad Library id or "id:<internal id>"'}, 'kind': {'enum': ['swipe', 'analysis'], 'type': 'string', 'default': 'swipe'}, 'niche': {'type': 'string', 'maxLength': 300, 'description': 'Angle or audience to lean into (swipe only)'}, 'product': {'type': 'string', 'maxLength': 500, 'description': 'Your product, the one the prompt is for'}, 'annotate': {'type': 'boolean', 'default': True, 'description': 'Mark the copy blocks inside the script when available (swipe only)'}}, 'additionalProperties': False}
list_taxonomy
Taxonomy
The board's taxonomy dimensions (awareness, angle, hook_pattern, vformat, pformat, landing...) with their valid values: the slugs to use in the tags filter of search_ads.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
search_ads
Search ads
Search the Ad Radar board: competitor ads from the Meta Ad Library, with the same filters as the board. By default only ACTIVE ads, sorted by score. Returns compact rows with an adKey: call get_ad for the full record and get_swipe_prompt for a ready-to-run prompt. Call list_taxonomy first for valid tag values. headline and body can be null when the ad's text isn't available: use the tags to understand it. spendEstimate is an ESTIMATE based on engagement, not real spend.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'default': 1, 'maximum': 200, 'minimum': 1}, 'sort': {'enum': ['score', 'reactions', 'rpd', 'days', 'recent'], 'type': 'string', 'default': 'score'}, 'tags': {'type': 'object', 'description': 'Taxonomy filters: { "<dimension>": ["slug", ...] }. Different dimensions are ANDed, slugs within one are ORed', 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}, 'tier': {'enum': ['winner', 'rising'], 'type': 'string', 'description': 'winner = top 10% by score and running 21+ days; rising = growing. Every ad on the radar has at least $50k estimated spend'}, 'limit': {'type': 'integer', 'default': 15, 'maximum': 50, 'minimum': 1}, 'media': {'enum': ['video', 'image', 'all'], 'type': 'string', 'default': 'all'}, 'query': {'type': 'string', 'maxLength': 300, 'description': 'Free text over headline, body, advertiser name and transcript'}, 'minDays': {'type': 'integer', 'minimum': 0, 'description': 'Minimum days running'}, 'categories': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advertiser vertical, e.g. health, pet'}, 'advertiserId': {'type': 'integer'}, 'includePastWinners': {'type': 'boolean', 'default': False, 'description': 'Also include winners that are no longer running (archive)'}}, 'additionalProperties': False}
winning_patterns
Winning patterns
The 'What to do now' block of the analytics page: for each taxonomy value, how many times more often it produces winners than average (lift), with adoption (ads, advertisers) and example ads. doThis = above average, lower = below.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'format': {'enum': ['all', 'video', 'image'], 'type': 'string', 'default': 'all'}}, 'additionalProperties': False}
Ajouté
winning_patterns
5 October 2026 02:40
Ajouté
advertiser_hooks
5 October 2026 02:40
Ajouté
list_taxonomy
5 October 2026 02:40
Ajouté
get_swipe_prompt
5 October 2026 02:40
Ajouté
get_ad
5 October 2026 02:40
Ajouté
search_ads
5 October 2026 02:40