MCPMCP Tools/AEO
AEO
AI/answer-engine-optimization reports.
- Readget_aeo_reportAI answer-engine visibility report for a SINGLE location — how visible the business is across AI assistants (ChatGPT, Gemini, Perplexity). Requires locationId. Returns: generatedAt; configuredEngines (engines with an API key); the overall visibility score (0–100) + per-engine scores; the keyword map (prompts where each engine surfaces the business, with a % hit-rate bubble per prompt); the prompt × engine matrix (per cell: score, whether you were mentioned, your rank, and the verbatim answer excerpt); a competitor gap table; the ranking-gap distribution (share of answers where you rank 1–3 / 4–10 / 11+, per engine + All); the optimization-insight radar (Relevance / Reviews / Engagement / Freshness / Citations, per engine); citations coverage (sources AI engines cite, each active/detected/missing, per engine); and sentiment mentions. Pass `prompt` to drill into ONE row of the matrix — you get that prompt's cells plus the headline scores and nothing else, which is what you want when the caller clicked a single cell. Backs the AEO single-location page.
- Readget_aeo_rollupAI-visibility roll-up across a client's (or the whole agency's) locations — the AEO 'all locations' table. Optional clientId scopes to one client; omit for agency-wide. Optional tags narrows to locations carrying ANY of the given internal tags (discover them with list_location_tags). Returns rows (per location: name, city, tags, overall AI-visibility score 0–100, per-engine ChatGPT/Gemini/Perplexity scores, latest report generatedAt + yearMonth; null score = no report generated yet) plus configuredEngines. Backs the AEO all-locations rollup.
- Writeenqueue_aeo_reportTrigger (re)generation of a SINGLE location's AI answer-engine visibility report in the BACKGROUND. Requires locationId. Queues the same concurrency-capped job the app uses (queries each configured engine — ChatGPT/Gemini/Perplexity — across discovery prompts, then scores). Idempotent per month: skips a location that already has a report for the current year-month unless force=true. Returns immediately with { enqueued: true } — the report is written asynchronously, so poll get_aeo_report afterwards to read the result. Use this to create or refresh AEO data for a location.