1. First session: check auth and pick an account
Tools:auth_status → list_accounts → set_account. Or invoke the
explore prompt.
- Call
auth_statusto confirm the session: user, accounts, current account, and access-token expiry. A “not authenticated” result means the OAuth connection needs a reconnect — reconnect or re-add the server. - Call
list_accountsto see every account available to the signed-in user and which one is current. - If the wrong account is current, call
set_accountwith the rightaccountId. All later read calls then use it.
2. Weekly wins digest
Tools:reporting_get_account_overview → reporting_get_available_dates →
reporting_get_wins → summarize. Or invoke the wins-digest prompt.
- Call
reporting_get_account_overviewfor the current state of the account — visibility rate, most-cited domains, and most-mentioned brands — so the digest opens with where the account stands. Each list is a top 10 plus your own domain or brand as a pinned reference row: readrankandisPinnedReferencerather than array position, and quote each count against its own total (topCitedDomainsTotalortopMentionedBrandsTotal). See reading counts and ranks correctly. - Call
reporting_get_available_datesto get the snapshot dates for the current account. - Call
reporting_get_winswithstartDateset to the snapshot closest to one week ago andendDateset to the most recent snapshot. - Summarize the
rankingWins,mentionWins, andpositionMovementsinto a digest: new citations, new AI Overview brand mentions, and the biggest position improvements (positiveorganicDelta/aiOverviewDelta).
3. AI Overview visibility check
Tools:reporting_get_account_overview → reporting_get_trend →
reporting_get_wins → content_planner_list_seed_terms
- Call
reporting_get_account_overviewto establish the baseline: current visibility rate with the period comparison, and where the account stands in the most-cited domains list. That list is the top 10 plus your own domain pinned for reference — readrankandisPinnedReference, never array position, and read a pinned row withcount: 0as not cited at all. - Call
reporting_get_trend(defaultrankingmode,ratey-axis) to see whether visibility is rising or falling over the period — read the rate against universe size, as in explain a trend change. - Call
reporting_get_winsbetween the period’s first and last snapshots to list the new AI Overview citations and brand mentions behind the trend. - Call
content_planner_list_seed_terms(defaultgoogle-rankingmode) to spot campaign-tier seed terms where you are not yet in the AI Overview — candidates for the next content push. Its default scope is campaign + standard, matching the trend’s universe, so name that scope whenever you quote a universe size.
4. Content pipeline: from seed terms to queries
Tools:content_planner_list_seed_terms → content_planner_list_questions
- Call
content_planner_list_seed_termswithpriorityTier: ["campaign"]to get the campaign-tier seed terms and their aggregate metrics. OmitpriorityTierfor the default scope — campaign + standard, the tracked universe — and checktierScopein the payload to see what came back. - Call
content_planner_list_questionswith theseedIdof a chosen term to list the queries (API: questions) under it, including per-query search intelligence (organic and AI Overview positions, brand mentions). - Use the queries with no AI Overview presence as the brief for the next articles.
5. Compare against a competitor
Tools:content_planner_list_seed_terms / content_planner_list_questions
with referenceUrl / referenceBrand → reporting_get_top_entities →
reporting_get_urls
You can view your search universe from a competitor’s perspective — see
competitor views for how the filters work.
- Call
content_planner_list_seed_termswith a competitor domain asreferenceUrlto see which seed terms and queries they rank for. For mention metrics, pass the competitor’s brand asreferenceBrand. Drill into a term withcontent_planner_list_questionsusing the same filters. - Call
reporting_get_top_entitieswithmode: "ranking"to see where the competitor stands among the most-cited domains, then withmode: "mention"to compare their brand against the most-mentioned brands.entitiesis the top 10 plus your own domain or brand pinned for reference, so read each row’srankandisPinnedReference— a competitor that is not in the list is outside the top 10, and the payload says nothing more about where. Quote everycountagainsttotal, the queries analyzed for the requestedmode. Start fromreporting_get_account_overviewif you want both lists and your own standing in one call. - Call
reporting_get_urlswithsearchset to the competitor’s domain (substring match on the host), orhostinurlview for an exact match, to drill into the specific competitor URLs getting cited across your universe.
content_planner_list_seed_terms with mode: "chatgpt-ranking" or
mode: "chatgpt-mentions" — the response’s domainCounts and brandCounts
are the aggregate most-cited domains and most-mentioned brands for that mode,
so you can place the competitor (and yourself) in the ChatGPT mix. These two
count differently from the reporting lists: they are a top-50 list, each
count is the number of queries the domain or brand appears in (at most once
per query), and neither pins an own-entity row — so your own domain or brand
may simply be absent. Treat ChatGPT as a secondary read — volatile and biased
toward training data: report significant citations or mentions, never alarm on
low rates.
Ask: “Which of my queries does competitor.com rank for, and where do they sit
among the most-cited domains?“
6. Explain a trend change
Tools:reporting_get_trend → content_planner_list_seed_terms. Or invoke
the trend-explanation prompt.
Rate changes only mean something against the size of your search universe —
see reading trends for the full caveat.
- Call
reporting_get_trendand read the rate movement alongsidecomparison.universeand the per-snapshottotalQuestionsvalues. - Tell universe growth from genuine decline: a rate dip that follows universe growth (new seed terms or queries added) means the denominator grew — that is expansion, not decline. A rate change on a stable universe is a genuine performance signal.
- Call
content_planner_list_seed_termssorted bypublishedCountto check the publishing density of the new terms. Compare like with like: its default scope is campaign + standard, the same universe the trend measures, so the two sizes reconcile. A term moved into campaign or standard from backlog enters the universe and grows the denominator. Recently added terms start with little published content and naturally rank at lower rates until coverage builds — see publishing density.
7. Search Console deep dive
Tools:gsc_get_context → gsc_get_overview →
gsc_export_dataset → gsc_query_export. Or invoke the gsc-content-deep-dive
prompt.
Requires GSC access for the shared service account — see the prerequisite in
Google Search Console (GSC).
- Call
gsc_get_contextto confirm the resolved GSC properties and the segmentation strategy — do this first, or whenever data looks wrong. - Call
gsc_get_overviewfor property-frame totals and the daily trend, split AGA content vs main domain. Notemeta.incompleteDays— the trailing days that will revise upward. - Call
gsc_export_datasetwithdimensions: ["page", "query"](plus any page filter) to pull the full dataset — the response’sdownloadUrldownloads the raw file. Checkmeta.complete/meta.coverageRatio: capped pulls are auto-partitioned and reconciled against an uncapped denominator, so this tells you whether the file covers the named universe. - Call
gsc_query_exportrepeatedly with differentgroupBy/dimensionFilters— local slices, no new API calls. Use rowtags.queryShapeto split AI-shaped from human-shaped queries (never blend them into one CTR),tags.pageClassto excludetenant_subdomainandcms_originhosts, andtags.isWebStoryto separate Web Story twins from article URLs.
8. Measure AGA content’s search impact
Tools:gsc_get_context → gsc_get_overview → gsc_compare_periods →
articles_search + gsc_query_analytics → gsc_inspect_url /
gsc_list_sitemaps. Or invoke the gsc-content-deep-dive prompt.
The full evaluation path — see
evaluating AGA content performance
for the stance behind it.
- Call
gsc_get_contextand read thematurityblock — how long the account has been publishing decides the comparison cadence. - Call
gsc_get_overview. Lead with impressions (the AI-visibility signal) and AGA’s share of the property’s impressions, reported as measured (it matches the GSC UI); clicks are the human-traffic read. State theinterpretationHintsas findings. - Call
gsc_compare_periodswith the cadence that matches maturity:periodPreset: "wow"in the first ~8 weeks (which pages are picking up?),"mom"or"qoq"after. ReadimpressionGrowthShare(AI visibility) alongsidegrowthShare(human traffic). - For a new account, check indexing coverage: call
articles_searchwithstatuses: ["published"], thengsc_query_analyticswithdimensions: ["page"](or slice an export), and join on the slug. The share of published slugs with zero impressions is the coverage gap; long-published zero-impression pages are retire candidates. - Diagnose any suspicious page with
gsc_inspect_url(indexing verdict, canonical form) and confirm sitemap pickup withgsc_list_sitemaps.
See also
- Concepts — the domain model behind these recipes
- Available MCP tools — full input and output reference
- Prompts and resources — invoke several of these recipes as server prompts
- First analysis on an account — the full Phase 0–5 runbook behind the deep-dive recipes
- List available accounts — account selection details
- Where am I winning in AI Overviews? — reading the wins result
- How is my content performing in Google search?
— reading Search Console results and their
metablock