Skip to main content
The server exposes 27 tools in six groups. Your MCP client’s live tool list is the source of truth — these tables mirror the registered schemas. All tools act as the connected user via their bearer token. Account-scoped read tools use the session’s current account unless an explicit accountId is passed; the search intelligence tools take no accountId — access derives from the resolved article or generation source. There is no login tool: authentication happens at connection time via OAuth. One exception: the gsc_* tools read Google Search Console through a shared service account rather than your token (see the prerequisite in Google Search Console (GSC)). Your token is still used for the account settings and article lookups behind them. For the domain model behind these tools — the search universe, citations and brand mentions, campaigns and lifecycle tiers, publishing density — start with Concepts. Two defaults shape almost every figure below. The tracked universe is campaign + standard seed terms: every reporting_* tool uses that scope, and content_planner_list_seed_terms returns it when you omit priorityTier. And the top-entity lists are a top 10 plus a pinned reference row for your own domain or brand, so array position is never a rank — see reading counts and ranks correctly.

Auth

Content planner

Search intelligence

Both tools look up by articleId alone, or by generationSource + sourceId as a pair — the two modes are mutually exclusive. Access derives from the resolved article or source, so neither takes an accountId.

Reporting

All reporting_* tools return Google data only — traditional organic rankings and Google AI Overview citations/mentions. “AI” in reporting output always means Google AI Overview, never ChatGPT. For ChatGPT figures, use the content planner chatgpt-* modes (see Concepts). Google is the primary channel — stable, comprehensive, the vast majority of searches; ChatGPT is a secondary, volatile signal, so low ChatGPT rates are the norm, not a problem. Every reporting_* figure covers active campaign + standard seed terms and never backlog — the same default scope as content_planner_list_seed_terms, so a universe size quoted here reconciles with a planner count taken at that default scope. Before quoting a count, a share, or a position from the entity lists, read reading counts and ranks correctly.

Articles

The account’s published and draft articles — published content is the publishing-density lever that drives citations. Work token-efficiently: search first, preview outlines next, and fetch full content only when you need it. Article HTML can exceed 100KB, so articles_get_outline exists to keep it out of your context.

Google Search Console (GSC)

Real Google Search Console performance data — clicks, impressions, CTR, and average position — for the account’s site, read live from GSC. Where the reporting and content planner tools track citations in AI answers, these tools track actual organic traffic. Read impressions first: AI traffic doesn’t click, so impressions are the primary signal of how visible your content is to AI. Clicks and CTR describe human traffic only — never present a click decline as an AI-visibility decline. Prerequisite: GSC access works only when [email protected] is added to the site’s Google Search Console property with Full access (Search Console → Settings → Users and permissions). Without it, the tools cannot resolve a GSC property and return an error listing what the service account can see. How the tools find your data:
  • The account’s publishing URL comes from its CMS settings — the reverse-proxy rewrite wins over the CMS URL — and is matched against the GSC properties the service account can access. gsc_get_context shows the result.
  • Some accounts have a GSC domain property (sc-domain:, covers every subdomain); others only have URL-prefix properties. In the URL-prefix case, AGA content may live on a separate property from the main site (for example resources.example.com next to example.com) — so the aggregate tools query every same-domain property and merge the results for the true picture. Every aggregate response includes a perProperty breakdown so you can see the composition, and gsc_list_sites flags each property as primary or satellite.
  • Aggregate tools split performance into AGA content vs the main domain — what share of clicks, impressions, and growth comes from AI Growth Agent slugs — matched on exact published-article slugs against GSC page URLs, not subdirectories (a subdirectory can mix AGA and non-AGA content). The segment block reports its strategy and confidence; when segmentation isn’t possible for an account, the tools say so instead of guessing.
  • Responses stay compact: totals plus top rows (25 by default, max 100), never full row dumps. For deep analysis, gsc_export_dataset pulls the full dataset and writes it to a file on the MCP server — the response carries a pre-signed downloadUrl you should curl immediately (the signature expires in ~1 hour) — and gsc_query_export slices the dataset without re-pulling — no repeated API calls, no bulk data in context. Identical exports within 6 hours reuse the dataset.
  • Every performance response carries a meta block stating the assumptions behind its numbers: aggregationFrame (which GSC grouping the totals came from — frames never reconcile, never mix them), complete and coverageRatio (capped pulls are auto-partitioned by device, then page-regex, and reconciled against an uncapped denominator), partitionsUsed, incompleteDays (only the dates inside the real GSC lag window — today−3 … today at call time — which revise upward; historical pulls carry no flags), and anonymization (named vs anonymized traffic on ["page", "query"] pulls). Query-frame responses without a page denominator also carry a top-level queryBiasNote — named queries are a biased floor; size segments at page level. Check meta.complete before quoting impression figures — see Reading Search Console data correctly.
  • Rows are pre-tagged for analysis. Query rows carry tags.queryChars and tags.queryShape (human / ambiguous / ai_shaped, from query length — the human-vs-AI-shaped split); page rows carry tags.hostname, tags.pageClass (canonical, cms_origin, tenant_subdomain, main_site, other) so you can exclude tenant subdomains and the CMS origin without parsing URLs yourself, and tags.isWebStory — AGA ships a Web Story twin per article under /web-stories/, so split Web Story URLs off from article URLs.
  • GSC data finalizes with a delay: default date ranges end about 3 days ago, and dates still inside that lag window (listed in meta.incompleteDays) are incomplete and revise upward. Never trend on them.

Rate limits

The growflow-v2 backend rate-limits to roughly 200 requests per minute. Prefer filtered queries over repeated full-list polling. Google enforces a separate daily per-property load quota on Search Console pulls. When it trips, every gsc_* call against that property fails until it resets the next day — narrower date ranges and tiny row limits fail identically, because it is a property-level daily cap, not a request-size limit. The tools return GSC 429 errors with quota-specific guidance: budget your pulls up front, prefer one wide export plus local re-slicing with gsc_query_export over many narrow calls, and exploit the 6-hour identical-params cache instead of re-pulling.