Look up any advertiser's Google ads — search by domain or keyword, retrieve ad creatives, decode text ad content, compare active ad counts across competitors and summarise an advertiser's format mix. No API key required.
This MCP server demonstrates solid definition quality with clear naming conventions, comprehensive parameter schemas, and well-documented tool purposes. All 8 tools follow verb_noun patterns (search_*, get_*, compare_*, fetch_*, download_*) and include detailed descriptions. However, output schemas are documented only in docstrings rather than formal JSON Schema definitions, and some parameter descriptions could better follow the constraint-first pattern (e.g., replacing examples with enums). Error handling guidance is minimal, tools lack recovery hints for common failure modes like rate limiting or missing advertisers. Tool composition is strong: each tool has a single clear responsibility, and the 8-tool set covers a logical progression from search to detail to summary to bulk download. The server correctly exposes human-friendly identifiers (domain, advertiser name) alongside opaque IDs, reducing lookup friction.
Summarise one advertiser: format mix, copy sample, destinations. Fetches a sample of the advertiser's creatives and aggregates them: counts and share by format (text/image/video), the last-shown date range, de-duplicated headlines, descriptions and CTA labels, and the hosts the ads send people to. Pure aggregation — read strategy into it yourself.
Compare active Google ad counts across a set of domains, one row each. The competitor paid-surface question in one call: who is running ads, and how many. Rows come back in input order; sort by ad_count yourself. Every row has a status. "ok" means an advertiser was found; "absent" means no advertiser is registered for that domain and IS a genuine zero; "blocked" means Google rate-limited the lookup and is NOT a zero; "error" is anything else. Rows flagged parent_entity resolved to a differently named advertiser (a parent company, a reseller, or a stranger whose ads mention the domain) — never cite those counts as the domain's own.
Download a whole advertiser's creatives into one folder, with a manifest. This is the bulk path for collecting real ad examples — images at their original resolution, videos sampled to stills — so they can be dropped straight into a deck or a report. Each creative gets its own subfolder.
Download an ad's actual creative to local files. Image ads are always saved at their original resolution, so the file you get back is the real creative — usable in a deck or a slide as-is. Video ads are downloaded and sampled into evenly spaced JPEG frames.
Output schemas documented only in docstrings, not as formal JSON Schema. Tool return types are inferred from docstring prose rather than structured schema definitions that clients can parse and validate.
Error handling lacks recovery guidance. Tools do not document what errors can occur (rate limiting, network failure, advertiser not found) or suggest corrective actions. E.g., compare_advertisers returns 'blocked' status but does not tell the LLM how to retry or interpret that state.
Parameter descriptions include example values (e.g., 'e.g. nike.com', 'e.g. CR10813648716908961793') which LLMs may reuse literally in real calls rather than adapting to context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 73 | 2026-07-28+ | v2 |
Get full details for a specific ad creative.
Get ads for an advertiser with decoded content. Searches for the advertiser by name, fetches their ad creatives, and returns full details including decoded text ad content (headline, description, destination URL).
Find an advertiser by their website domain.
Search for advertisers by keyword or company name.
Numeric parameters (count, sample, frames, width) lack explicit bounds in parameter descriptions. E.g., 'count' defaults to 10 and caps at 100, but the description does not state the valid range, forcing clients to trust implementation comments.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are absent. Tools are correctly marked READ_ONLY or WRITE at registration, but formal annotations in output schema are missing, leaving clients to infer idempotency and side-effect safety.