Skip to main content
Glama

SEO GSC Wizard MCP

Server Details

Ask your Search Console data in plain language and get real numbers, not guesses. The GSC Wizard MCP plugs your live Google Search Console data straight into Claude, ChatGPT, and any MCP-capable assistant - so the model reads your actual clicks, impressions, position and CTR instead of inventing them.

Ownership verified

Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
10.1% over 58 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 126 tools

Disambiguation3/5

Most tool groups are described carefully and are distinct (Bing/Yandex/GA4/GMC families are clearly separated by source prefix), but there are real overlaps: query_search_analytics is explicitly a superset of query_top_queries/query_top_pages/query_countries/query_devices; get_site_summary vs get_cross_site_summary vs get_tag_group_view describe similar aggregations; inspect_url vs bulk_inspect_urls vs check_tracked_url_now all trigger URL inspections; and add_site vs create_gsc_property are close cousins. Descriptions give enough guidance to pick correctly in most cases, but the surface is large enough that misselection is plausible.

Naming Consistency4/5

Strong, predictable verb_noun snake_case convention throughout (list_*, get_*, create_*, update_*, delete_*, analyze_*, find_*, detect_*, compare_*, submit_*, manage_*), with consistent data-source prefixes get_bing_*, get_yandex_*, get_ga4_*, get_gmc_*. A few outliers break the pattern (breakdown_by_path, check_tracked_url_now, get_cross_site_summary) but the overall scheme is readable and consistent.

Tool Count1/5

126 tools is far past any reasonable agent-facing surface, well above the 50+ extreme-mismatch threshold. The scope spans at least ten distinct domains (GSC analytics, Bing, Yandex, GA4, Merchant Center, indexing/IndexNow, sitemaps, tagging, shared reports, experiments, migrations), and even within a domain the set is bloated, making discovery and correct selection costly.

Completeness4/5

Coverage of the primary domains is very broad, with full CRUD on content groups, topic clusters, saved filters, annotations, tags, and migration redirects. Minor dead ends exist: experiments can be listed and scored but not created, report clients can be created/listed but not deleted, and sitemaps can be submitted but not removed.

Available Tools

128 tools
add_migration_redirectsAdd migration redirect mappingsAInspect

Saves redirect mappings (old URL -> new URL) for a site migration, tied to the source property A and target property B they move traffic between. These back the Migration Compare workflow: use compare_migration for the before/after performance read, and these mappings to record which old URL became which new one. Pass label to keep several migrations apart on one account. Rows are APPENDED, never deduplicated against what is already stored, so re-sending the same list stores it twice; clear a set first with delete_migration_redirects if you are re-uploading.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoGroups this batch, e.g. "2026-blog-restructure". Also what delete targets.
siteUrlAYesSource property (the old site), as registered in GSC.
siteUrlBYesTarget property (the new site), as registered in GSC.
redirectsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
labelNo
skippedNo
insertedNo
siteUrlANo
siteUrlBNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses a non-obvious behavioral trait beyond the annotations: rows are APPENDED, never deduplicated, so re-sending the same list stores it twice, with the remedy (delete first). Annotations only cover the safety profile (readOnly/destructive/openWorld), so this append semantics detail is genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then routing and the append caveat. Four sentences that mostly earn their place, though the compare_migration reference is slightly more verbose than needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for this tool: output schema exists so return values needn't be described, annotations cover the safety profile, and the description supplies the append/dedup caveat, sibling routing, and label grouping semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already documents siteUrlA/B, redirects, and label. The description reinforces A/B as source/target and explains label as the mechanism to keep migrations apart on one account, but adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Saves redirect mappings (old URL -> new URL) for a site migration') and ties it to the source/target properties. It clearly distinguishes itself from siblings compare_migration (read) and delete_migration_redirects (clear).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use compare_migration for the before/after read, use these mappings to record old->new, and clear a set first with delete_migration_redirects when re-uploading. Both the when-to-use and the alternative are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_siteAdd a property to GSC WizardInspect

Registers a GSC property the user already has access to (in Google Search Console) inside GSC Wizard. The property URL must appear in Search Console and be VERIFIED for the connected Google account: an unverified property is rejected, because Google refuses every data request for one. It is not provisioned by this call. Pass a URL prefix (https://example.com/) or a domain property (sc-domain:example.com); the scheme and host are matched case-insensitively and a missing trailing slash is added. Adding a property that is already registered is not an error: the result has alreadyRegistered: true and the existing row (with activated, as in list_sites).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteNo
messageNo
accountRepairedNo
alreadyRegisteredNo
add_tracked_urlsAdd URLs to the indexing trackerAInspect

Adds URLs to the GSC Wizard Indexing Tracker for a property, creating the tracker if it does not exist yet. Each URL must belong to the property's domain. Enforces the 1,800-URL-per-tracker cap (URLs over the cap are skipped and reported). Newly added URLs start as "pending"; call check_tracked_url_now to inspect them immediately, or wait for the app's hourly cron.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedNo
siteUrlNo
requestedNo
trackerIdNo
alreadyTrackedNo
skippedOverCapNo
capacityRemainingNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag readOnly=false, destructive=false, openWorld=true; the description adds substantial non-obvious behavior: tracker is created if absent, domain membership is enforced, the 1,800-URL cap silently skips and reports overflow, and new entries land in a 'pending' state. This is exactly the kind of side-effect and state-transition detail annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then constraints, then next-step guidance. Every sentence carries distinct, load-bearing information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return-value explanation is unnecessary, and the description still covers creation behavior, the domain constraint, the cap edge case, and the resulting URL state. An agent has everything needed to call it correctly and interpret the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema alone leaves the two parameters under-explained. The description compensates by clarifying that each URL must belong to the property's domain and that the 1800 limit is enforced with skip-and-report semantics rather than schema-level rejection, though it does not say what siteUrl format (property vs. full URL) is expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Adds URLs to the GSC Wizard Indexing Tracker for a property') and includes the auto-creation scope detail. It also names the follow-up sibling check_tracked_url_now, letting an agent distinguish this ingest tool from the inspection tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear operational context: URLs must belong to the property's domain, the 1,800 cap causes skips that are reported, and newly added URLs can be inspected via check_tracked_url_now rather than waiting for the hourly cron. It stops short of an explicit when-not-to-use statement (e.g., versus submit_indexnow_urls), so it falls just short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_cannibalizationAnalyze keyword cannibalization
Read-only
Inspect

Finds queries where multiple pages of the property compete for the same search, ranked by a cannibalization score (Shannon entropy over the pages’ impressions: higher means impressions split more evenly across pages, i.e. worse cannibalization). Served from the GSC Wizard ClickHouse warehouse when available: it keeps only queries ranked by at least two pages before any cut, then scores them most impressions first, up to 10,000 queries or 25,000 page-query rows, whichever comes first. Each query lists at most 50 pages (most impressions first); pageCount, totalClicks and totalImpressions always cover every competing page, and the score is taken over the listed ones. Otherwise the live Search Console API (see dataSource) reads the top 25,000 page-query rows by clicks, which drops zero-click competing pages first. truncated: true means the cut was hit; scanLimit is that cut (on the warehouse, the number of queries scored when truncated, else the query cap; on the live API, page-query rows). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
minImpressionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
siteUrlNo
scanLimitNo
truncatedNo
dataSourceNo
cannibalizedNo
dataMaturityNo
minImpressionsNo
settledThroughNo
warehouseLatestDateNo
analyze_ctr_curveAnalyze CTR-by-position curve
Read-only
Inspect

Builds the property’s actual click-through-rate curve bucketed by average position (1-20) and compares each bucket to one or more industry benchmarks. Available sources: awr (Advanced Web Ranking 2026), awr2026 (AWR 2026 CTR study, organic across all SERPs), awrAio (same study, SERPs carrying an AI Overview), firstPageSage (First Page Sage 2026), sistrix (Sistrix 2024), backlinko (Backlinko 2019), or "all" (default) to compare against every source at once. Comparing awr2026 with awrAio is the AI Overview click tax for that position. Each bucket reports a benchmarks map (expected CTR per source) and a deltas map (actual minus expected; negative = underperforming); when a single source is selected the bucket also carries flat expectedCtr/ctrDelta. CTR values are percentages (0-100); deltas are percentage points. Served from the GSC Wizard ClickHouse warehouse when available, where every query in the window is measured; otherwise the live Search Console API (see dataSource), which returns only the top 25,000 queries by clicks. truncated: true means that cut was hit: zero-click queries are dropped first, so bucket CTRs read HIGH, not low. scanLimit is the cut applied (null on the warehouse, which has none). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
minImpressionsNo
benchmarkSourceNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
bucketsNo
siteUrlNo
sourcesNo
scanLimitNo
truncatedNo
dataSourceNo
dataMaturityNo
minImpressionsNo
settledThroughNo
benchmarkSourceNo
warehouseLatestDateNo
analyze_query_shapesQuery shape analysis (AI Mode fingerprints)A
Read-only
Inspect

Classifies a property's queries by SHAPE to surface the fingerprints of AI Overviews / AI Mode fan-out traffic (the app's Query Analysis report). Buckets: reply artefacts ("yes", "show me"), pivot follow-ups ("what about gemini"), conversational questions, LLM tracker probes, agent harnesses, pasted strings, long uncategorised, and conventional keywords. Returns per-bucket query/click/impression counts and shares, zero-click counts, average position, and top example queries, plus an aiShaped roll-up of the conversational buckets. Heuristic pattern matching in 27 languages: it judges how a query LOOKS, not what the searcher meant, so treat single rows as evidence rather than proof. Reads the ClickHouse warehouse when available, else the live Search Console API. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
bucketsNoOptional. Only return these buckets, e.g. ["reply_artefact","pivot_follow_up","conversational_question"] for the AI-conversation shapes. Omit for all buckets.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
examplesPerBucketNoHow many top example queries (by impressions) to return per bucket. 0 returns counts only.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
totalsNo
bucketsNo
siteUrlNo
aiShapedNo
languagesNo
truncatedNo
dataSourceNo
searchTypeNo
candidateFilteredNo
candidatesScannedNo
questionFormQueriesNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only safety (readOnly/openWorld), and the description adds real behavioral depth beyond them: the data-source fallback (ClickHouse warehouse else live Search Console API), the heuristic limitation ('judges how a query LOOKS, not what the searcher meant'), the single-row caveat, and the ~2-3 day settling lag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, followed by the taxonomy, then returns, then caveats and defaults. It is long, but every sentence carries information; the bucket parenthetical examples slightly pad the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter analytical tool with an output schema, an agent has everything needed: what it computes, the allowed buckets, the date defaults and lag, the data-source fallback, and the interpretation caveat. Return values are covered by the output schema and additionally summarized.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the description compensates: it enumerates the conceptual bucket groups with example queries, restates the optional date-range default behavior, and explains the aiShaped roll-up. It does not describe siteUrl or searchType, but the remaining schema descriptions are adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (classifies by SHAPE) and resource (a property's queries) with a clearly named goal (surfacing AI Overviews / AI Mode fan-out fingerprints). The bucket taxonomy and the aiShaped roll-up make it unmistakably distinct from siblings like get_query_shape_trend or query_top_queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the context of use (the app's Query Analysis report) and gives concrete operating instructions — omit dates for last 28 settled days, data lags 2-3 days. It does not explicitly name a sibling alternative or state when NOT to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_sampling_impactAnalyze GSC sampling / anonymization impact
Read-only
Inspect

Estimates how much click/impression data Google Search Console hides through anonymization (privacy-threshold row dropping) for a property over a date range. Compares the per-day totals against the summed top query rows and top page rows; the gap is the lost share. On the live API path this reveals true GSC sampling. On the ClickHouse warehouse path the data is unsampled, so the reported loss reflects only top-N row truncation (see the note field). The response dataSource says which path served the request. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
totalsNo
siteUrlNo
dataSourceNo
dataMaturityNo
pageSamplingNo
querySamplingNo
settledThroughNo
warehouseLatestDateNo
audit_onpage_seoOn-page SEO audit
Read-only
Inspect

Crawls a property's pages and runs a technical on-page/SEO audit per URL: HTTP status, indexability (noindex / canonicalised), title & meta-description length, H1s, word count, canonical, internal/external links, image alt coverage, structured data, Open Graph, viewport, hreflang, and a scored list of issues by severity. Pass explicit urls, or omit them to audit the top pages by Search Console impressions. URLs must belong to the property. Fetches each page live and stops after about 50 seconds: when truncated is true, the pages in notAudited were not fetched, so call again with urls set to that list to finish.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsNoExplicit page URLs to audit (max 25). Omit to auto-pick top pages.
maxUrlsNoHow many pages to audit when auto-picking (default 10, max 25).
siteUrlYes
minImpressionsNoWhen auto-picking, only consider pages with at least this many impressions (28-day).

Output Schema

ParametersJSON Schema
NameRequiredDescription
pagesNo
messageNo
siteUrlNo
skippedNo
summaryNo
crawlNoteNo
truncatedNo
budgetNoteNo
dataSourceNo
notAuditedNo
robotsNoteNo
contextNoteNo
auditedCountNo
contextRangeNo
breakdown_by_pathBreakdown by subdomain / path
Read-only
Inspect

Aggregates page-level performance into a subdomain and first-folder breakdown. Each page URL is parsed and grouped by its host plus the first depth path segments (depth 1 -> /folder, depth 2 -> /folder/subfolder, etc.). Returns per-group clicks, impressions, CTR, impression-weighted average position, and the number of distinct pages. Served from the ClickHouse warehouse when available (every page is grouped), otherwise the live Search Console API (up to 25,000 page rows are grouped; see dataSource). truncated says when pages or groups were left out. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
depthNo
rangeNo
groupsNo
siteUrlNo
truncatedNo
dataSourceNo
groupCountNo
dataMaturityNo
pageRowsCappedNo
settledThroughNo
truncationNoteNo
warehouseLatestDateNo
bulk_inspect_urlsInspect multiple URLsInspect

Runs the Google URL Inspection API against a list of URLs, persisting each result to GSC Wizard's inspection history. Each result carries the verdict, coverage, the Google-selected and user-declared canonicals (null when Google did not report one) and a Search Console link. Google caps inspections at 2,000 per property per day (shared across the UI and every MCP call); this tool counts each inspection against that cap and stops once it is reached, returning the URLs it could not get to. A Google rate limit, quota refusal or property-level permission refusal also stops the run: the URLs not yet inspected come back skipped, with skipReason, and the result carries stopReason (and retryAfterSeconds when Google gave one). Call get_inspection_quota first if you want to see remaining headroom. Each inspection takes about 7 seconds at Google, run 5 at a time, so a call takes up to 25 URLs (about 35 seconds); for larger sets add them with add_tracked_urls and let the Indexing Tracker inspect them in the background (check_tracked_url_now inspects a few of them immediately).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYesUp to 25 URLs per call; use add_tracked_urls for more.
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
quotaNo
failedNo
messageNo
resultsNo
siteUrlNo
skippedNo
succeededNo
stopReasonNo
quotaExhaustedNo
retryAfterSecondsNo
check_tracked_url_nowCheck tracked URLs nowInspect

Triggers an immediate Google URL Inspection for up to 10 tracked URLs in the GSC Wizard Indexing Tracker, updating each URL's status, warnings, and append-only history. Each result carries the Google-selected and user-declared canonicals (null when Google did not report one). Counts against the daily 2,000-inspection/property quota. If the quota is exhausted, the call returns a quota message instead of running. URLs are inspected five at a time (about 7 seconds each at Google). If Google rate-limits the property or refuses access to it, the URLs not yet inspected come back with skipped: true and a skipReason (plus retryAfterSeconds when Google gave one) and are left untouched; retry them later. Use sparingly; the app's hourly cron checks tracked URLs automatically. This is a server-side write and is audit-logged.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
messageNo
resultsNo
siteUrlNo
stoppedNo
notCheckedNo
quotaExhaustedNo
compare_migrationCompare a site migration (A vs B)
Read-only
Inspect

Before/after Search Console comparison for a site migration or restructure. Three modes: "cross-property" compares two GSC properties (old domain vs new); "two-urls" compares two URL-prefix sections within one property; "regex" splits one property by two regexes. Returns the daily clicks/impressions trend for each side, per-side totals, and the query and page winners/losers by click delta. Without goLiveDate both sides use the same date window (startDate/endDate): A vs B over one period. With goLiveDate it becomes a before/after comparison around the launch: side A is read over the before window and side B over the after window, placed by windowStrategy ("recent", the default: the last windowDays settled days vs the windowDays days before go-live; "from-go-live": the first windowDays days from go-live vs the windowDays days before it; "full": the 90 days before go-live vs everything since). windowDays defaults to 28; yoyBaseline compares with the same weeks a year earlier instead. The go-live result adds windows (dates, days since go-live, warnings), recoveryPct (B clicks per day as a % of A clicks per day; null under 10 baseline clicks) and trend buckets (lost / declined / stable / improved / new) for queries and pages; pages of two properties are joined by path. For the full health verdict (risk score, redirect checks, recommendations, projected recovery) use get_migration_health. Reads the ClickHouse warehouse when available, else the live Search Console API. Query and page lists cover at most the top 25,000 rows by clicks per side; truncated and truncationNote say when a cap was reached. Regexes are capped at 2,000 characters and must not nest quantifiers (for example (a+)+). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYescross-property | two-urls | regex.
limitNoMax query/page winners and losers to return per list (default 50).
regexANoSide A page regex (required for regex mode).
regexBNoSide B page regex (required for regex mode).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYesSide A property (and the single property for two-urls/regex).
siteUrlBNoSide B property (required for cross-property).
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
goLiveDateNoOptional. First day the new setup was live, as YYYY-MM-DD. When given, side A is read over the before window and side B over the after window around this date (see windowStrategy), and the result adds windows, recoveryPct and trend buckets. Do not combine with startDate/endDate.
urlPrefixANoSide A URL prefix (required for two-urls): a full URL ("https://acme.com/old-blog/"), a host ("blog.acme.com/") or a path on any host ("/old-blog/"), as list_migrations returns them.
urlPrefixBNoSide B URL prefix (required for two-urls), in the same forms as urlPrefixA.
windowDaysNoOnly with goLiveDate. Window length in days for "recent" and "from-go-live" (default 28). Shortened to the post-launch days available.
yoyBaselineNoOnly with goLiveDate. Compare the after window with the same weeks one year (364 days) earlier instead of the days before go-live, which removes seasonality. Default false.
windowStrategyNoOnly with goLiveDate. "recent" (default): the last windowDays days vs the windowDays days before go-live, where the migration stands now. "from-go-live": the first windowDays days after go-live vs the windowDays days before, the launch dip included. "full": the 90 days before go-live vs every day since (lengths differ; per-day figures and recovery stay comparable).

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNo
noteNo
pagesNo
rangeNo
sidesNo
queriesNo
summaryNo
windowsNo
truncatedNo
dailyTrendNo
dataSourceNo
recoveryPctNo
recoveryNoteNo
truncationNoteNo
create_annotationCreate a chart annotationAInspect

Adds a chart annotation. Scope is "account" by default (visible only to the user); pass siteUrl to scope the annotation to a single property. Platform-wide annotations are reserved for system events and cannot be created via this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNo
labelYes
siteUrlNoOmit for account-wide; pass to scope to a property.
categoryNo
eventDateYesRequired. The date the event occurred, as YYYY-MM-DD (e.g. 2026-06-08).
descriptionNo
clientRequestIdNoOptional idempotency key (a UUID, one per form session). Resending the same key returns the row the first call created instead of inserting a duplicate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
annotationNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description's job is lighter. It adds real value by disclosing the default account-level visibility, the siteUrl scoping behavior, and the reserved platform-wide scope — none of which the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then scope semantics, then the exclusion. Every sentence carries information and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the safety profile is covered by annotations. The description is complete enough for an agent to call the tool correctly, with the main residual gap being its silence on the non-required fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43% across 7 parameters, so the description is expected to compensate, but it only touches siteUrl — and largely repeats that parameter's own schema description. Terms like label, color, category, and description receive no clarification the schema doesn't already imply, leaving the low-coverage params underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Adds a chart annotation'), which is unambiguous against siblings like list_annotations, update_annotation, and delete_annotation. It does not, however, explicitly name a sibling or contrast with one, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: account scope is the default, pass siteUrl to narrow to a property, and platform-wide annotations are not creatable here. That last clause is a genuine when-not condition. It stops short of a 5 because it never names an alternative tool or workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_content_groupCreate a content groupInspect

Creates a content group partition on a property. Rules are an array of { type, value } objects (prefix / contains / regex / equals) that match URLs into the group. Group names are unique per site. A regex rule that cannot compile is rejected; one that is valid but unsupported by the warehouse (a lookahead, lookbehind or backreference) or skipped as ReDoS-prone is accepted and reported in ruleWarnings. Relay those to the user, since a skipped pattern matches no pages at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
colorNo
rulesYes
siteUrlYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
groupNo
create_gsc_propertyCreate GSC propertiesInspect

Creates one or more URL-prefix properties in Google Search Console (Webmasters sites.add) and registers them in GSC Wizard. Use this to add folder-level properties (e.g. https://example.com/blog/) that do not yet exist in Search Console. They are auto-verified if the connected Google account owns the parent domain property. parentSiteUrl is an existing GSC Wizard property whose Google account has access; the new properties inherit it. Every property URL must be under the parentSiteUrl domain (that domain or a subdomain of it). Created properties are added hidden and consume no plan slot until you show them with set_dashboard_visibility, which enforces the dashboard limit. For properties that already exist in GSC, use add_site instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
registerNoAlso register the created properties in GSC Wizard (default true).
propertyUrlsYesURL-prefix properties to create, e.g. ["https://example.com/blog/"]. Max 50. Each must be under the parentSiteUrl domain (that domain or a subdomain).
parentSiteUrlYesAn already-registered GSC Wizard property whose Google account owns the domain.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
failedNo
createdNo
resultsNo
registeredNo
parentSiteUrlNo
create_report_clientAdd a report clientInspect

Adds a client contact (an email address, plus an optional name) that shareable reports can then be granted to with manage_report_access. Adding a client does NOT email them and does not give them access to anything on its own; it only creates the contact. Emails are stored lowercased and must be unique per account; adding an address that already exists returns the existing client rather than failing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
clientNo
createdNo
create_saved_filterCreate a saved filterAInspect

Stores a filter preset against a property, as the dashboard's filter panel would. filters is the list of filter rows (dimension / operator / value), in the same shape list_saved_filters returns, and filterLogic says whether they combine with AND or OR. Saving a preset does not apply it to anything on its own: it appears in the property's filter presets for the user to pick.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
filtersYesThe filter rows, in the shape list_saved_filters returns. Pass [] for a preset with no rows.
siteUrlYes
filterLogicNoHow the rows combine: "and" (default, every row must match) or "or" (any one row). Matches the dashboard's Match All / Match Any toggle.
clientRequestIdNoOptional idempotency key (a UUID, one per form session). Resending the same key returns the row the first call created instead of inserting a duplicate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filterNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=false (a write) and destructiveHint=false, so the safety profile is covered. The description adds real behavioral value beyond that: a newly saved preset is inert until picked, and it surfaces in the property's presets. It does not mention error modes or duplicate-name handling, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then parameter semantics, then the key side-effect caveat. No filler and nothing repeated from the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description supplies the essential side-effect behavior plus the shape reference for `filters`. It omits any auth/permission context and does not mention the idempotency behavior, which the schema covers for clientRequestId.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60%, so the schema documents enum values and the filterLogic toggle reasonably well. The description adds a meaningful cross-reference by stating `filters` matches the shape that list_saved_filters returns, which helps an agent build the array. It does not cover the undocumented name/siteUrl parameters, so it falls short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Stores a filter preset against a property.' It also clarifies the intended analogue ('as the dashboard's filter panel would'), which removes ambiguity about what a preset is. It stops short of explicitly contrasting with update_saved_filter or delete_saved_filter, so sibling differentiation is only implicit via the referencing of list_saved_filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (create a new preset that appears in the property's filter presets) but there is no explicit when-to-use versus update_saved_filter, nor prerequisites such as required scopes or property setup. The caveat that saving 'does not apply it to anything on its own' is genuinely useful context, though it describes effect rather than selecting between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_shared_reportCreate a shareable reportInspect

Saves a table of rows as a shareable GSC Wizard report. Pass the rows you got from another tool (e.g. query_top_queries, get_content_group_performance) plus the columns describing which fields to show; the report renders at view time, so the stored payload stays small. THIS IS STEP 1 OF 3: the returned URL opens for NOBODY until access is granted, not even for the account owner, because the viewer is the client portal and requires a client login. To actually share it: (2) create_report_client with the recipient's email, then (3) manage_report_access to grant them the report. Do not hand the URL to anyone before step 3; it will not open. Up to 50 reports per account; delete old ones with delete_shared_report.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYesThe table rows. Each row is an object keyed by the column `key` values.
titleYes
columnsYesColumn definitions, in display order.
siteUrlNoProperty this report is about; recorded on the report for context.
dateRangeNoReporting period, shown in the report header.
reportTypeNoFree-form label for what produced the report (e.g. "top-queries").mcp
dataSourceTypeNoWhich kind of report this is, for the viewer.inline
comparisonRangeNoComparison period, shown alongside the reporting period.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
reportNo
create_topic_clusterCreate a topic clusterAInspect

Creates a topic cluster on a property by grouping keywords under a name. Cluster names are unique per property, and the call is idempotent: if the name already exists the existing cluster is returned with alreadyExisted: true instead of an error, so there is never anything to retry. Use update_topic_cluster to change an existing cluster's keywords. Keywords are stored as text and matched against GSC queries in the dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
siteUrlYes
keywordsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
clusterNo
alreadyExistedNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false. The description adds genuinely non-obvious behavior: idempotency with alreadyExisted: true returned instead of an error, name uniqueness per property, and that keywords are stored as text and matched against GSC queries. This exceeds what structured fields disclose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and effect, then the idempotency rule and sibling routing. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format need not be spelled out, and the description still highlights the alreadyExisted flag. It omits permission/scope requirements and behavior on invalid input (e.g., empty or oversized keyword lists), leaving minor gaps for a write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explains name (unique per property, with the already-exists consequence) and keywords (stored as text, matched against GSC queries); siteUrl's role is only implied by "on a property" and the 1000-keyword ceiling is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+effect: "Creates a topic cluster on a property by grouping keywords under a name." It distinguishes itself from update_topic_cluster and list_topic_clusters by scoping to creation/grouping, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative ("Use update_topic_cluster to change an existing cluster's keywords") and states the condition that selects it, plus the idempotent already-exists case so the agent knows a duplicate call needs no retry.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_annotationDelete a chart annotationA
Destructive
Inspect

Deletes a chart annotation by id. Only annotations the user owns can be removed; platform-scoped annotations cannot be deleted via this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
annotationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
labelNo
deletedNo
annotationIdNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the destructive nature is covered. The description adds real value beyond the annotations by disclosing an authorization/ownership constraint on which annotations are eligible for deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core action front-loaded and the constraint following immediately. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, and the destructive annotation covers the safety profile. The ownership constraint completes the practical picture; only edge cases like deleting a non-existent id are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema documents nothing about the single annotationId parameter. The description adds only 'by id', confirming the param's role but giving no format or sourcing guidance beyond the uuid type already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Deletes') and resource ('chart annotation') scoped by id. The purpose is unmistakable, though it does not explicitly name or contrast with siblings like create_annotation, update_annotation, or list_annotations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear exclusion: only user-owned annotations can be removed, while platform-scoped annotations cannot be deleted via this tool. This tells the agent when NOT to use it, though it doesn't route to alternatives (e.g., list_annotations to discover ids).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_content_groupDelete a content group
Destructive
Inspect

Deletes a content group by id. The property it belongs to must be one you own or one shared with you with full access.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
deletedNo
groupIdNo
delete_migration_redirectsDelete migration redirect mappingsA
Destructive
Inspect

Permanently deletes saved redirect mappings. Narrow the deletion with label and/or the A/B property pair; to delete EVERY mapping on the account you must pass confirmDeleteAll: true, since an unnarrowed delete would also wipe unrelated migrations. Preview exactly what would go with list_migration_redirects using the same filters first.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOnly mappings carrying this label.
siteUrlANoOnly mappings whose source property is this.
siteUrlBNoOnly mappings whose target property is this.
confirmDeleteAllNoRequired when no label or property filter is given: deletes every mapping.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNo
filtersNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds the critical guard behavior: unnarrowed deletes are blocked unless confirmDeleteAll is passed, and deletions are permanent. This is genuine behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all load-bearing: purpose, narrowing + guard, and the preview recommendation. The destructive scope is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. For a destructive, no-required-param tool, the description covers everything an agent needs to call it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema baseline is 3, but the description adds the interplay between filters and confirmDeleteAll (that the flag is required precisely when no filter is supplied) and explains the A/B pair as source/target property narrowing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Permanently deletes saved redirect mappings") and its scope is unmistakable. It is clearly distinguishable from the sibling add_migration_redirects and from the read-only list_migration_redirects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to narrow (label and/or A/B property pair), when confirmDeleteAll: true is mandatory, and why (an unnarrowed delete would also wipe unrelated migrations). It also routes the agent to list_migration_redirects with the same filters as a preview step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_saved_filterDelete a saved filter
Destructive
Inspect

Deletes a saved filter preset by id. Presets belong to the property, so its owner or anyone with full access to it may delete any of them, as in the GSC Wizard app; read-only access is not enough.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
deletedNo
filterIdNo
delete_shared_reportDelete a shareable reportA
Destructive
Inspect

Permanently deletes a saved shareable report and every client grant on it, breaking the shared link for anyone who still has it. Only reports owned by the authenticated user can be deleted. Find the id with list_shared_reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleNo
deletedNo
reportIdNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation by naming the cascade (all client grants destroyed), the external impact (existing shared links break for holders), the permanence of deletion, and the ownership authorization requirement. This is exactly the extra context a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the destructive effect front-loaded, followed by the authorization constraint and the id-lookup hint. No filler and no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the annotations already cover the safety profile. The description supplies the remaining essentials: cascade scope, irreversibility, ownership gate, and id provenance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It tells the agent where the reportId comes from (list_shared_reports) without restating the raw name, but does not describe the expected format or what happens on a malformed/unknown id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (permanently deletes) and resource (a saved shareable report) and quantifies the effect: every client grant is removed and the shared link breaks. This clearly separates it from siblings like delete_saved_filter, delete_content_group, and delete_annotation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition (only reports owned by the authenticated user) and routes the agent to list_shared_reports for obtaining the id. It lacks an explicit when-not-to-use case (e.g., revoking access for one client via manage_report_access), but the context is otherwise unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_siteRemove a property from GSC Wizard
Destructive
Inspect

Unregisters a property from GSC Wizard. Cascades to topic clusters, content groups, saved filters, inspections, and annotations scoped to this property. Does NOT remove the property from Google Search Console itself. Pass confirm=true to acknowledge; this guards against accidental deletes.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired confirmation. Must be true.
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNo
siteUrlNo
delete_topic_clusterDelete a topic cluster
Destructive
Inspect

Deletes a topic cluster by id. The property it belongs to must be one you own or one shared with you with full access.

ParametersJSON Schema
NameRequiredDescriptionDefault
clusterIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
deletedNo
clusterIdNo
detect_anomaliesDetect traffic anomalies
Read-only
Inspect

Flags statistically anomalous days in a property's Search Console series for a chosen metric (clicks, impressions, CTR, or position). Uses a robust Modified Z-score with median absolute deviation and day-of-week baselines (mean absolute deviation when most days are identical, as on a low-traffic property), then scores each spike/drop by severity (critical → info). Days without rows count as zero for clicks and impressions, so a drop to zero (deindexing) is flagged; the 21-day minimum is measured in calendar days from the first day with data. CTR and position use only days with impressions. coverage reports the days analysed and how an empty tail at the end of the window was treated. Good for "did something break / spike on a specific day?". Reads the ClickHouse warehouse when available, else the live Search Console API.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoTrailing days of daily data to analyze (min 21, default 90).
metricNoWhich metric to scan for anomalies.clicks
siteUrlYes
sensitivityNoModified Z-score threshold: lower = more sensitive (more anomalies). Default 3.5; 3-4 is typical.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
metricNo
siteUrlNo
summaryNo
coverageNo
anomaliesNo
dataSourceNo
sensitivityNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
detect_change_pointsDetect traffic change points
Read-only
Inspect

Finds the dates where a property's clicks or impressions shifted to a new sustained level (step changes / level shifts), reporting the before vs after average and the % change at each break. Unlike anomaly detection (one-off spikes), this locates durable regime changes: a migration, an algorithm update, a redesign. Each date is the day the shift is strongest (the first day of the new level). Days without rows count as zero, so a drop to zero (deindexing) is a change point; coverage reports how an empty tail at the end of the window was treated. Reads the ClickHouse warehouse when available, else the live Search Console API. When a shift starts from a zero baseline (beforeMean 0) it has no percentage: changePercent is 0 by convention, which does not mean no change; describe it as new traffic from zero using afterMean.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoTrailing days of daily data to analyze (min 14, default 180).
metricNoWhich metric to segment.clicks
siteUrlYes
sensitivityNoMean-shift threshold in std-devs: lower = more sensitive (more change points). Default 2.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countNo
rangeNo
metricNo
siteUrlNo
coverageNo
dataSourceNo
sensitivityNo
changePointsNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
find_decaying_contentFind decaying content
Read-only
Inspect

Finds queries or pages losing traffic between a baseline (earlier) period and a recent period, bucketed by severity of click loss (severe > 50%, moderate 20-50%, mild < 20%). Only keys with a meaningful baseline (clicks > 0 and impressions >= minImpressions) are considered. startDate/endDate is the RECENT period; comparisonStartDate/comparisonEndDate is the BASELINE period. For a full period-by-period matrix (clicks/impressions/position per month or week, like the app's Query Decay / Content Decay pages) use get_decay_overview instead. Returns at most limit rows (default 100, max 1000), worst decliners first. The baseline is scanned for its top scanLimit keys by clicks (warehouse: max(limit*10, 1000), capped at 50000; live API: 25000 rows per period). On the warehouse every scanned key's recent figure is exact. On the live API the recent period is its own top 25000, so a key missing from a full recent read is not known to be at zero: its recent clicks are at most the smallest count that read kept. When that ceiling is still below the key's baseline, the row is reported with recentIsUpperBound: true: recentClicks is the ceiling, the real loss is AT LEAST |clickChangePct|, severity is a floor, and its recent impressions and position are unknown (0). When the ceiling shows no loss, the key is left out and counted in unresolvedKeys. When the baseline window has a different length than the recent one, the comparison is per day: baseline clicks are scaled to the recent window's length (windowNormalization says so, and each row adds baselineClicksScaled; baselineClicks stays the raw total). positionDelta is 0 for a key with no recent row. truncated: true means a read hit its cap, so counts are measured within the scan, not across the whole property. Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum decaying rows to return (1-1000).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
dimensionNopage
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
minImpressionsNo
comparisonEndDateNoOptional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here.
comparisonStartDateNoOptional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countsNo
recentNo
siteUrlNo
baselineNo
decayingNo
dimensionNo
scanLimitNo
truncatedNo
dataSourceNo
dataMaturityNo
minImpressionsNo
settledThroughNo
unresolvedKeysNo
warehouseLatestDateNo
windowNormalizationNo
find_page_poaching_opportunitiesFind page poaching opportunities
Read-only
Inspect

Finds queries ranking just outside the top positions (between minPosition and maxPosition) and estimates the click upside of pushing them to a target position. The upside is computed from the property's OWN CTR at the target position (measured over every query in the window on the warehouse), not a broad industry benchmark, so the estimate reflects how this site actually converts impressions at that position. When the property has no queries at the target position, or fewer than 100 impressions there, it falls back to the industry benchmark named by fallbackBenchmark: awr (Advanced Web Ranking 2026, default), awr2026 (AWR 2026 CTR study, organic), awrAio (same study, SERPs with an AI Overview), firstPageSage (First Page Sage 2026), sistrix (Sistrix 2024), or backlinko (Backlinko 2019). The response reports targetCtr (the expected CTR used), ctrSource ("own" or the benchmark key) and ctrSourceNote (why). Sorted by potential click gain. Scans up to 25,000 queries: on the warehouse the ones with the most impressions; on the live API its click order. truncated: true means the scan hit that cap (scanNote says what that left out). Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
maxPositionNo
minPositionNo
minImpressionsNo
targetPositionNo
fallbackBenchmarkNoawr

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
paramsNo
siteUrlNo
scanNoteNo
ctrSourceNo
scanLimitNo
targetCtrNo
truncatedNo
dataSourceNo
dataMaturityNo
ctrSourceNoteNo
opportunitiesNo
settledThroughNo
warehouseLatestDateNo
forecast_trafficForecast organic traffic
Read-only
Inspect

Projects future Search Console clicks (or impressions) for a property using the app's forecasting model: multiplicative seasonal decomposition (ratio-to-moving-average) plus an auto-selected trendline (linear / polynomial / log / exponential / power by best R-squared), re-seasonalised for each future period. Optionally applies a manual growth rate and derives revenue from a conversion rate and average order value. History needs: weekly needs 13 complete weeks and monthly 6 complete months, after the first and last (possibly partial) period are dropped, so about 105 days (weekly) or 240 days (monthly) of data. Days and periods without rows count as zero. A constant history (for example all zero) gets a flat forecast with forecastNote. Reads the ClickHouse warehouse when available, else the live Search Console API.

ParametersJSON Schema
NameRequiredDescriptionDefault
aovNoOptional average order value (in currency units) used with cvr for revenue.
cvrNoOptional conversion rate as a decimal (0.025 = 2.5%) to derive forecast revenue.
metricNoMetric to forecast (treated as "sessions" by the model).clicks
siteUrlYes
currencyNoCurrency label for the revenue fields (display only).USD
growthRateNoOptional manual growth rate per period as a decimal (0.05 = +5%). Default 0.
granularityNoForecast granularity. Weekly needs about 105 days of history (13 complete weeks), monthly about 240 days (6 complete months).weekly
historyDaysNoTrailing days of history to fit on (default 480 ≈ 16 months; more improves seasonality).
trendlineTypeNoForce a trendline model, or "auto" for the best R-squared (default).auto
compoundGrowthNoCompound the growth rate across periods (default true).
forecastPeriodsNoHow many future periods (weeks or months) to project. Default 26.
additionalSessionsNoOptional flat sessions added to every forecast period. Default 0.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
metricNo
siteUrlNo
currencyNo
forecastNo
trendlineNo
dataSourceNo
granularityNo
dataMaturityNo
forecastNoteNo
historyRangeNo
settledThroughNo
seasonalIndicesNo
historicalPeriodsNo
candidateTrendlinesNo
warehouseLatestDateNo
generate_seo_reportGenerate full SEO reportA
Read-only
Inspect

Runs the full analysis suite for one property in a single call and returns a complete, self-contained HTML report styled like the GSC Wizard app (overview, top queries/pages, countries & devices, CTR curve vs benchmark, opportunities, ranking changes, decaying content, query decay matrix, cannibalization, section breakdown, data coverage, sitemaps). This is far faster than calling each analysis tool separately (one round trip, shared auth + property resolution, server-side parallel reads) and is served from the ClickHouse warehouse when available. Use format="html" (default) for a ready-to-open report, or format="json" for the underlying data bundle.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLength of the reporting window (and each comparison window).
formatNohtml
siteUrlYesProperty URL from list_sites (e.g. "sc-domain:example.com").
includeSitemapNoFetch + join the property’s sitemap (adds a network fetch).

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuine behavioral context beyond them: single round trip, shared auth + property resolution, server-side parallel reads, and ClickHouse warehouse sourcing when available. It does not discuss cost/rate limits of the heavy aggregate call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action in the first clause before the long section list, then closes with the performance rationale and format guidance. Every sentence carries information, though the parenthetical section catalog is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need not be described, annotations cover the safety profile, and the description still supplies the aggregate-vs-single-tool framing and format semantics. Nothing an agent needs to select or invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 75% schema coverage, the schema already documents days, siteUrl and includeSitemap. The description adds meaning to the format enum by explaining html = ready-to-open report versus json = underlying data bundle, which the bare enum does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Runs the full analysis suite for one property in a single call') and enumerates the sections produced (overview, top queries/pages, CTR curve, cannibalization, etc.). It is clearly distinguishable from the individual analyze_* / get_* siblings by explicitly framing itself as the one-call aggregate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly contrasts with the alternative workflow ('far faster than calling each analysis tool separately') and gives format selection guidance (html default vs json for the data bundle). It lacks an explicit when-not-to-use statement (e.g. when you only need one section), so it falls short of the top mark.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_infoGet account infoA
Read-only
Inspect

Returns the authenticated user, the connected Google accounts (email + scopes), and the subscription status. Useful as a first call to confirm the MCP server is wired up correctly and the user has the data sources you expect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
userNo
accessNo
apiKeyNo
subscriptionNo
googleAccountsNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful context beyond that by disclosing the payload contents (email, scopes, subscription) and the intended diagnostic role, though it says nothing about auth requirements or behavior when accounts are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both earning their place: the first enumerates the return payload, the second routes the agent to the right moment to call it. Front-loaded with the substantive content and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description is not obliged to detail return structure, yet it still summarizes the payload and gives the agent a clear reason to invoke the tool. For a zero-parameter read operation this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so per the rubric the baseline is 4. There is no parameter surface for the description to illuminate, and it does not need to compensate for any schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (returns) and enumerates the exact resource set: authenticated user, connected Google accounts with email + scopes, and subscription status. No sibling tool surfaces account/auth state, so it is unmistakably distinct from the list_* and get_* analytics tools around it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the use case as a diagnostic first call to verify the server is wired up and expected data sources are present. It does not need to name alternatives, since nothing else in the sibling set returns account context, but it stops short of stating any exclusions or failure conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_crawl_issuesBing crawl issuesA
Read-only
Inspect

URLs where Bing found crawl issues for a property: HTTP 4xx/5xx, 301/302 redirects, robots.txt blocks, DNS/timeout errors and malware, each with the HTTP code, inbound-link count, and decoded human-readable issue labels. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax issue URLs to return, most inbound links first (default 200, uncapped).
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rangeNo
issuesNo
siteUrlNo
rowCountNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/openWorldHint, so the safety profile is covered. The description adds genuinely extra behavior beyond the annotations: the per-row output shape (HTTP code, inbound-link count, decoded labels) and the notConfigured:true fallback when no Bing Webmaster API key exists — useful edge-case disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core purpose and issue enumeration, then the fallback-state caveat. Every clause carries information; no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be restated. The description covers the resource, its issue taxonomy, and the missing-key edge case, so an agent has enough to call it correctly. The one omission is guidance on when to pick this over get_bing_crawl_stats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: limit is well documented in the schema, but siteUrl has no description. The description adds only a loose hint ('for a property') that maps to siteUrl, and does nothing to clarify the limit semantics already in the schema. Adequate but with a clear gap it does not compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('URLs where Bing found crawl issues for a property') and enumerates the exact issue categories (4xx/5xx, redirects, robots.txt, DNS/timeout, malware) plus per-row fields. This detail naturally distinguishes it from the sibling get_bing_crawl_stats, which is aggregated counts rather than a per-URL list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use, when-not, or alternative is named. Usage is only implied by the resource itself, and the sibling get_bing_crawl_stats (closest alternative) is never referenced. The stated notConfigured prerequisite is the only contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_crawl_statsBing crawl statsA
Read-only
Inspect

Bing's daily crawl statistics for a property (roughly the last 6 months): pages crawled, pages in the index, inbound links, and a breakdown of response codes (2xx, 301, 302, 4xx, 5xx), robots.txt blocks, crawl errors and malware flags. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
dailyNo
rangeNo
siteUrlNo
rowCountNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavior: the default window is 'roughly the last 6 months' when dates are omitted, and the call degrades to notConfigured: true when no Bing Webmaster API key exists for the property — a failure mode annotations do not capture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and scope, then a compact metric enumeration, then the notConfigured caveat. Two sentences, no filler. The metric list is long but each item is a distinct return dimension, so it earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers target, default window, returned metrics and the missing-API-key state for a read-only, single-required-param tool. Since an output schema exists, enumerating return fields in the description is optional rather than necessary, and pagination/cardinality behavior is unaddressed — minor gaps only.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: startDate and endDate are well documented in the schema (format, examples, 'never pass null'), while siteUrl has no description at all. The description partially compensates by calling the target a 'property', but it adds no date syntax, timezone, or window semantics beyond what the schema already states. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (Bing daily crawl statistics for a property) and enumerates exactly which metrics come back: pages crawled, index size, inbound links, response-code breakdown, robots.txt blocks, crawl errors and malware flags. That level of specificity lets an agent separate it from neighbors like get_bing_page_stats, get_bing_link_counts and get_bing_crawl_issues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for crawl/indexing health of a Bing property, and the notConfigured note signals a prerequisite. But there is no explicit when-to-use statement, no exclusion, and no routing to alternatives such as get_bing_crawl_issues for issue detail or get_bing_page_stats for traffic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_feedsBing submitted sitemapsA
Read-only
Inspect

Sitemaps and feeds submitted to Bing Webmaster Tools for a property, with each feed's decoded status (Success / Pending / Warning / Error), type (Sitemap / RSS / Atom / ...), submitted and last-crawled dates, URL count and file size. The Bing counterpart to list_sitemaps. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
feedsNo
rangeNo
siteUrlNo
rowCountNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond the annotations: the decoded status vocabulary and the special return 'notConfigured: true when no Bing Webmaster API key is set up', which lets the agent anticipate an auth-related edge case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is front-loaded and dense, with the field enumeration and the sibling comparison arriving early and no filler sentences. The two long sentences are somewhat packed, but every clause carries information (fields, statuses, counterpart, notConfigured behavior).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't detail return shapes, yet it still summarizes key fields and the notConfigured edge case, making the tool fully actionable. It is complete for a single-param read tool; only the siteUrl value expectation is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter (siteUrl) with 0% schema description coverage, so the description carries the burden but only implicitly references it via 'for a property'. The parameter is largely self-describing by name, so little is lost, but the description adds no format, URL-normalization, or example guidance that would compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Sitemaps and feeds submitted to Bing Webmaster Tools for a property') and enumerates the returned fields so the agent knows exactly what data it gets. It explicitly distinguishes itself from the sibling list_sitemaps by calling itself 'the Bing counterpart', so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'The Bing counterpart to list_sitemaps' gives a clear context for when to reach for this tool over the general sitemap lister, which is strong routing guidance. However, it stops short of stating explicit when-not conditions or prerequisites (e.g., that a Bing property/API key must exist) beyond the notConfigured note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_keyword_statsBing keyword impression historyA
Read-only
Inspect

Bing Webmaster Tools' historical impression volume for a single keyword (weekly buckets), plus its broad-match impressions. This is Bing marketplace demand data, not tied to any of your properties, so it needs no siteUrl. Useful for gauging Bing search demand and seasonality for a term. Returns notConfigured: true when no Bing Webmaster API key is set up in the GSC Wizard app.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoTwo-letter market/country code Bing scopes the demand to (default "us").us
keywordYesThe keyword / search term to look up.
languageNoBCP-47 language tag for the market (default "en-US").en-US

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
countNo
statsNo
countryNo
keywordNo
languageNo
dataSourceNo
notConfiguredNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful context beyond that: it is not tied to any property (no siteUrl), and it returns notConfigured: true when no API key is configured, which surfaces an auth-state behavior an agent would otherwise miss.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose, then the property-independence, then the auth edge case. Efficient and no filler, though slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still covers the notable notConfigured case. Complete enough for a single-keyword read tool; a note on how it differs from sibling Bing query tools would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so country/language/keyword are already documented in the schema. The description adds only the negative detail that no siteUrl is needed, which is helpful but not parameter-level semantics beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (historical impression volume for a single keyword) with scope qualifiers (weekly buckets, broad-match impressions) and explicitly anchors it to Bing Webmaster Tools marketplace data. Clear enough to distinguish from the sibling get_bing_query_stats/get_bing_query_page_stats calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Says it is 'useful for gauging Bing search demand and seasonality,' which implies the use case, but never states when to prefer it over the many sibling Bing tools (e.g., get_bing_query_stats) or any exclusion conditions. Context is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_page_queriesBing queries for a pageA
Read-only
Inspect

The Bing search queries that led to ONE landing page (clicks, impressions, CTR as a 0-100 percentage, and impression-weighted average position per query). The per-page keyword view Bing Webmaster Tools shows when you drill into a URL, and the natural drill-down after get_bing_page_stats. Pass the page URL exactly as get_bing_page_stats returns it. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesThe landing page URL to break down, exactly as get_bing_page_stats returns it (e.g. https://example.com/blog/post/). Bing matches the full URL, not a prefix.
limitNoMax queries to return, ranked by clicks then impressions (default 100, uncapped).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
pageNo
rangeNo
queriesNo
siteUrlNo
rowCountNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, destructiveHint false, openWorldHint), so the bar is lower. The description adds real behavioral context beyond them: the exact-URL matching requirement and the notConfigured: true fallback when no Bing API key exists for the property. It does not discuss rate limits or quota consumption, which would have earned a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the tool's purpose, then the drill-down relationship, the URL pitfall, and the notConfigured edge case. Each sentence earns its place; the first is dense but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value documentation is not required, yet the description still clarifies that CTR is a 0-100 percentage and position is impression-weighted. It also covers the no-API-key edge case. Only a note on result volume/pagination beyond the schema's 'uncapped' limit is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema already documents page, limit, startDate, and endDate including the exact-URL and no-null pitfalls. The description mostly repeats the URL-matching instruction rather than adding syntax or format meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('The Bing search queries that led to ONE landing page') and enumerates the returned metrics, then explicitly positions itself against sibling get_bing_page_stats as its 'natural drill-down'. An agent can distinguish this from get_bing_query_stats or get_bing_page_stats without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context ('the natural drill-down after get_bing_page_stats') and a concrete prerequisite ('Pass the page URL exactly as get_bing_page_stats returns it'), which routes the agent correctly. It does not state when NOT to use it or name a competing per-page alternative, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_page_statsBing top pagesA
Read-only
Inspect

Top landing pages on Bing Webmaster Tools for a property, aggregated across the window (clicks, impressions, CTR as a 0-100 percentage, and impression-weighted average position). The Bing counterpart to query_top_pages. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax pages to return, ranked by clicks then impressions (default 100, uncapped).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
pagesNo
rangeNo
siteUrlNo
rowCountNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the aggregation window semantics and, importantly, the notConfigured: true return when no Bing API key is set up, which is non-obvious failure behavior an agent should anticipate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. Purpose and scope are front-loaded, and the counterpart routing hint follows immediately, so the most decision-relevant information comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, and it still covers purpose, scope, counterpart, and the key notConfigured error state. Only minor gaps remain, such as nothing on limit/ranking behavior, but those are handled by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% and the parameters (limit, startDate, endDate, siteUrl) are largely self-documented in the schema. The description only indirectly touches the window parameters via 'aggregated across the window' and adds no syntax or default guidance beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (top landing pages on Bing Webmaster Tools) with explicit scope (aggregated across the window) and enumerates the metrics returned (clicks, impressions, CTR as 0-100 percentage, impression-weighted average position). It also positions itself against the sibling query_top_pages as the Bing counterpart, so an agent can route between Google and Bing data without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Naming query_top_pages as the counterpart implies when to reach for it (Bing instead of Google data), which is useful routing context. However, there is no explicit when-to-use/when-not statement or distinction from the other close Bing siblings such as get_bing_page_queries or get_bing_query_page_stats, leaving selection partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_query_page_statsBing query + page pairs
Read-only
Inspect

Bing Webmaster Tools query+landing-page pairs for a property, aggregated across the window (clicks, impressions, CTR as a 0-100 percentage, and impression-weighted average position per pair). Shows which query drives each page on Bing, the basis for per-page keyword analysis and cannibalisation checks. Bing has no endpoint that returns these combinations, so they are assembled with one request per top page; pass query to pair from a single query instead, or use get_bing_page_queries for one page's queries. Coverage is bounded by seedLimit and by Bing's own top-value sampling, so totals are a lower bound (truncated says when). Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax query/page pairs, ranked by clicks then impressions (default 100, uncapped).
queryNoOptional. Pair from this single search query (Bing lists the pages that ranked for it) instead of fanning out over the top pages. Use it to answer "which pages compete for this term?".
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
seedLimitNoHow many top pages to expand into pairs (default 25, max 100). Each one is a separate Bing request, so raising it widens coverage but is slower and likelier to hit Bing rate limits. Only applies to the page fan-out, so a call that passes `query` uses it only if that path has to fall back to pairing by page.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
notesNo
pairsNo
rangeNo
siteUrlNo
pairedByNo
rowCountNo
seedCountNo
truncatedNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo
get_bing_query_page_trendBing query + page daily trendA
Read-only
Inspect

Daily clicks, impressions, CTR (0-100 percentage) and average position for ONE exact query+landing-page combination on Bing. The only Bing endpoint that carries a true pair-level position, so this is what a "did this page slip for this term?" check needs. Take the query and page verbatim from get_bing_query_page_stats or get_bing_page_queries. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesThe landing page URL, exactly as Bing reports it (full URL, not a prefix).
queryYesThe search query, exactly as Bing reports it.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
pageNo
dailyNo
queryNo
rangeNo
totalsNo
siteUrlNo
rowCountNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly, non-destructive, openWorld), so the description earns credit by adding non-obvious behavior: the CTR scale is a 0-100 percentage, and the tool returns notConfigured: true when no Bing Webmaster key exists. That failure-mode disclosure is genuinely useful context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the returned metrics, then the differentiator, then parameter sourcing, then the edge case. Three tight sentences with no filler and no repetition of schema-declared facts.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be explained. The description still covers the key edge case (notConfigured), the distinguishing capability (pair-level position), and where to derive inputs, leaving nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so structured fields already do most of the work (verbatim page/query, date omission behavior). The description still adds value by insisting query and page be taken verbatim from specific sibling endpoints, clarifying how to supply correct values rather than just what the fields are.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (daily clicks, impressions, CTR, average position) scoped to ONE exact query+landing-page pair on Bing. It also explicitly distinguishes itself from siblings as 'the only Bing endpoint that carries a true pair-level position,' so an agent can differentiate it from get_bing_query_page_stats or get_bing_page_queries without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case ('did this page slip for this term?') and tells the agent where to source required parameter values from (get_bing_query_page_stats / get_bing_page_queries). It stops short of stating when NOT to reach for it versus the sibling stats endpoints, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_query_statsBing top queriesA
Read-only
Inspect

Top search queries on Bing Webmaster Tools for a property, aggregated across the window (clicks, impressions, CTR as a 0-100 percentage, and impression-weighted average position). The Bing counterpart to query_top_queries. rowCount is how many rows this response holds (at most limit); totalRows is how many distinct queries Bing reported for the window before that cut. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax queries to return, ranked by clicks then impressions (default 100, uncapped).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rangeNo
queriesNo
siteUrlNo
rowCountNo
totalRowsNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, non-destructive, open-world), and the description adds substantial context on top: aggregation across a window, CTR expressed as a 0-100 percentage, impression-weighted average position, the rowCount/totalRows distinction, and the notConfigured: true condition when no API key exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then metric details, then rowCount/totalRows semantics, then the notConfigured edge case. Every sentence carries information, though the three-sentence structure is slightly dense rather than maximally scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a windowed-stats read tool with a rich output schema and full annotation coverage, the description supplies everything an agent needs: scope, metric definitions, truncation semantics, and the no-API-key state. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema itself documents limit, startDate, and endDate thoroughly (format, defaults, 'never pass null'). The description adds only the limit-related rowCount semantics and the unset-API-key behavior, so it largely leaves parameter meaning to the schema — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('top search queries on Bing Webmaster Tools for a property') and enumerates the metrics returned. It also explicitly positions itself as 'the Bing counterpart to query_top_queries', letting an agent distinguish it from the many sibling get_* stats tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The reference to query_top_queries gives a clear routing cue for when to pick this tool over the Google-side equivalent. It does not, however, state exclusions or contrast it with get_bing_keyword_stats / get_bing_query_page_stats, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_traffic_statsBing daily trafficA
Read-only
Inspect

Daily clicks and impressions from Bing Webmaster Tools (Bing/Yahoo/DuckDuckGo organic) for a property, roughly the last 6 months. Complements Google Search Console data with the Bing side of organic search. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-01-01). Omit BOTH startDate and endDate to return everything Bing has (roughly the last 6 months). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
dailyNo
rangeNo
totalsNo
siteUrlNo
dataSourceNo
bingSiteUrlNo
notConfiguredNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the ~6-month data horizon and, importantly, that it returns notConfigured: true when no Bing API key is configured — a non-obvious failure mode the agent must anticipate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with purpose, then data scope, then the notable edge-case return. No filler, though the Google-comparison sentence is more contextual than essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value detail is unnecessary, and annotations carry the safety profile. The description supplies the data window and the notConfigured failure mode, leaving only minor gaps like auth requirements covered indirectly via openWorldHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the startDate/endDate descriptions are already thorough (format, omit-both behavior, no-null warning). The description adds only "for a property" context and the 6-month default window; siteUrl itself is undocumented in both. Baseline 3 is appropriate given the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: daily clicks and impressions from Bing Webmaster Tools for a property, and clarifies it covers Bing/Yahoo/DuckDuckGo organic. An agent can distinguish it from other Bing tools (crawl, query, page stats), though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Complements Google Search Console data with the Bing side of organic search" gives a reasonable context for when the tool is relevant, but there is no explicit when-to-use vs alternatives guidance or exclusions. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bing_url_submission_quotaBing URL submission quotaA
Read-only
Inspect

Remaining Bing Webmaster Tools URL-submission quota for a property: the daily and monthly allowances left for submitting URLs to Bing's index. Returns notConfigured: true when no Bing Webmaster API key is set up for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rangeNo
siteUrlNo
dailyQuotaNo
dataSourceNo
bingSiteUrlNo
monthlyQuotaNo
notConfiguredNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnlyHint=true, openWorldHint=true), so the bar is lower. The description still adds real value by disclosing the notConfigured:true fallback when no API key exists, which is behavior an agent could not infer from annotations or schema. It doesn't mention rate limits or caching, but the key edge case is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and the return shape. Slightly redundant repetition of 'Bing Webmaster Tools URL-submission quota' across title and description, but no wasted clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return-value structure needn't be explained. For a single-parameter read tool with full annotation coverage, the description adds the notConfigured edge case and the daily/monthly distinction, giving enough to call it correctly. Missing only the siteUrl format hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One required parameter (siteUrl) at 0% schema description coverage, but zero parameters means baseline 4; with one parameter it drops to a 3. The description mentions 'for a property' which implies siteUrl maps to a property identifier, but gives no format, source, or validation guidance, and the schema provides only minLength:1.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-resource ('Remaining Bing Webmaster Tools URL-submission quota') and scopes it to a property. Distinguishes from siblings like get_inspection_quota (different engine) and submit_indexnow_urls (different submission path). An agent can identify the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns but never says when to call it, what triggers it, or how it relates to sibling tools such as submit_sitemap or get_crawl_stats. No alternatives are named and no conditions are given for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_blended_landing_pagesBlended GSC + GA4 landing pages
Read-only
Inspect

Joins Search Console (clicks, impressions, CTR, position) with GA4 (sessions, bounce rate, key events, revenue) per landing page, on the canonical path (no query/hash, no trailing slash). Flags GSC-only and GA4-only pages so neither side is silently dropped. By default GA4 metrics are limited to google / organic sessions so both sides describe the same traffic (set organicOnly to false for all-traffic GA4 metrics). Units differ by source: ctr is a percentage 0-100 (like every GSC CTR here) while bounceRate is a GA4 fraction 0-1. For a URL-prefix property with a path (e.g. https://example.com/blog/) only GA4 landing pages under that path are joined. Requires a GA4 property linked to the site in GSC Wizard; returns a notConfigured explanation otherwise. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return. Applies per period when dateGranularity is set.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
organicOnlyNoLimit GA4 metrics to google / organic sessions so they line up with GSC. Default true; set false for all-traffic GA4 metrics.
dateGranularityNoSplit the range into periods and return one set of rows per period, each tagged with a `date` (the period start, clamped to the requested range). Use this to chart a tool's output over time instead of getting a single aggregate: "month" gives month-on-month, "week" gives Monday-aligned weeks, "day" gives a daily series. Default "none" returns one aggregate over the whole range, unchanged. `limit` applies per period when set. Comparison fields (prev*) compare each period against the period before it.none
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
get_branded_performanceBranded vs non-branded performance
Read-only
Inspect

Splits a property's search performance into BRANDED and NON-BRANDED using the branded keywords saved on the property (set them with update_site; a keyword wrapped in slashes like /acme ?corp/ is treated as a regex, otherwise it is a case-insensitive substring). Returns totals, the branded share of clicks, a daily clicks trend for both sides, and the top queries on each side, with optional comparison-period totals. nonBranded is the property total minus branded, so the two sides add up to the property total (total) and brandedClickShare is branded clicks over that total. Search Console leaves anonymised queries out of any query-filtered read, so they cannot be matched against the keywords; they are rare, long-tail searches, counted in nonBranded and also reported on their own as anonymized. topNonBrandedQueries lists named queries only. Returns notConfigured (not an error) when the property has no branded keywords yet. Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many top queries to return per side.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
dailyNo
rangeNo
totalNo
reasonNo
brandedNo
siteUrlNo
previousNo
anonymizedNo
dataSourceNo
nonBrandedNo
searchTypeNo
dataMaturityNo
hasComparisonNo
notConfiguredNo
savedKeywordsNo
settledThroughNo
brandedKeywordsNo
comparisonRangeNo
brandedClickShareNo
topBrandedQueriesNo
brandedKeywordCountNo
warehouseLatestDateNo
topNonBrandedQueriesNo
get_content_group_performanceContent group performance
Read-only
Inspect

Measures a property's content groups: clicks, impressions, CTR, impression-weighted average position, distinct page count and share of clicks per group, plus an "uncategorized" bucket for pages no group claims. Pass groupId to drill into one group's top pages instead. Matching is first-match-wins in the groups' saved order, the same as the web app. Served from the GSC Wizard ClickHouse warehouse when available (where group totals are EXACT over every page of the property), otherwise from the live Search Console API over the top 25,000 pages by clicks (see dataSource and truncated). Use list_content_groups to see or create_content_group to add the definitions this reports on. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRow cap for the groupId page drill-down.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
groupIdNoDrill into one group: returns its top pages instead of the per-group aggregates. Accepts a content group id or the literal "uncategorized".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
pagesNo
rangeNo
groupsNo
groupIdNo
siteUrlNo
groupNameNo
truncatedNo
dataSourceNo
groupCountNo
searchTypeNo
dataMaturityNo
hasComparisonNo
uncategorizedNo
fallbackReasonNo
settledThroughNo
comparisonRangeNo
warehouseLatestDateNo
get_core_web_vitalsCore Web Vitals history (CrUX)
Read-only
Inspect

Chrome UX Report field data for a property (or a single page): the weekly history of Core Web Vitals (LCP, INP, CLS) plus FCP and TTFB, each with its p75 value, good/needs-improvement/poor rating, and the good-bucket density trend. Also reports any week-over-week rating regressions. Where Chrome detected ads, adMetrics adds its four experimental ad metrics (ad count, ad density, ad CPU, ad network weight) as a p75 trend each. These have no thresholds and no rating, and are absent for sites with no ads. Needs a Chrome UX Report API key configured in the app; returns notConfigured otherwise, or noData when CrUX has too little real-world traffic for the target.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoOptional single page URL to measure instead of the whole origin.
siteUrlYes
formFactorNoDevice class: ALL (default), PHONE, DESKTOP, or TABLET.ALL

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noDataNo
targetNo
docsUrlNo
messageNo
metricsNo
periodsNo
siteUrlNo
adMetricsNo
keySourceNo
formFactorNo
periodCountNo
regressionsNo
latestPeriodNo
periodLabelsNo
notConfiguredNo
get_cross_site_summaryCross-site performance summary
Read-only
Inspect

Aggregates a last-N-days clicks/impressions summary across the authenticated account's registered Search Console properties (optionally filtered to those carrying a given tag), with a same-length prior period for comparison and per-site totals. Without a tag it also covers properties shared with the account (marked shared: true; tags are the caller's own, so a tag filter covers owned properties only). Useful for a portfolio-level health check, and the MCP equivalent of the app's Global Reports page. Set includeSearchTypes to also split every property across web / image / video / news / discover, and includeCountries for a country leaderboard aggregated over the whole portfolio. Each site routes independently to the ClickHouse warehouse or the live Search Console API, so dataSource is reported per site. A site whose read fails is reported in errors rather than failing the whole call. Processes at most maxSites properties per call (default and maximum 100; scope.truncated says when more matched, so narrow by tag). The rate-limit cost scales with the number of properties and the breakdowns requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
daysNo
maxSitesNoHow many properties to process, at most 100 (the default). When more match, `scope.truncated` is true; filter by `tag` to cover the rest.
searchTypeNoSearch type of the headline totals and the per-site comparison.web
countryLimitNoHow many countries to return when includeCountries is set.
includeCountriesNoAlso return a country leaderboard aggregated across every property, with the number of properties contributing to each country. Costs one extra read per property.
includeSearchTypesNoAlso break every property down by search type (web, image, video, news, discover) for the current period. Costs five extra reads per property.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rangeNo
scopeNo
deltasNo
errorsNo
currentNo
perSiteNo
previousNo
countriesNo
comparisonNo
searchTypesNo
countryTotalNo
get_decay_overviewDecay overview (per-period matrix)
Read-only
Inspect

Per-query or per-page performance broken down by month or week: the same matrix the app's Query Decay and Content Decay pages render (a row per query/page, one column per period). Use this to SEE how traffic trended period by period; use find_decaying_content instead when you only need decliners between two fixed ranges. Returns the top limit rows by total clicks, each with a values array aligned to periods for the chosen metric, plus a TOTALS-style per-period aggregate across all matched rows. Defaults to the last months complete months (through the end of last month). Served from the GSC Wizard ClickHouse warehouse when available (longer history, no GSC sampling), otherwise the live Search Console API (see dataSource). On the live API each period is read separately; truncated: true with a note means a period's read was capped or did not finish in time, and incompletePeriods lists any period that reads 0 because it was not read.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
metricNoclicks
monthsNo
searchNo
endDateNoOptional. Window end as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
siteUrlYes
dimensionNoquery
startDateNoOptional. Window start as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
searchTypeNoweb
granularityNomonth
clusterKeywordsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rowsNo
rangeNo
metricNo
totalsNo
periodsNo
siteUrlNo
dimensionNo
truncatedNo
dataSourceNo
granularityNo
dataMaturityNo
rowsReturnedNo
rowsConsideredNo
settledThroughNo
incompletePeriodsNo
warehouseLatestDateNo
get_experiment_resultsScore an SEO experiment
Read-only
Inspect

Scores one SEO experiment: assigns the property's landing pages to the experiment's control and variant URL groups, then compares each variant against the control (group 0) on click growth period-over-period. Returns per-group clicks/impressions/CTR (with a confidence interval) and an impression-weighted average position, plus for each variant the uplift in growth (percentage points) with its CI, a significance test of that growth difference (significant exactly when the CI excludes 0), the winner, and a low-power warning. ctrPValue is a separate test of the CTR difference, for reference only. The comparison window is the prior same-length period. Reads the ClickHouse warehouse when available, else the live Search Console API.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
experimentIdYesThe experiment id from list_experiments.
confidenceLevelNoConfidence level for the significance test and CIs (default 0.95).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
groupsNo
siteUrlNo
truncatedNo
comparisonNo
dataSourceNo
experimentNo
comparisonsNo
truncationNoteNo
windowNormalizationNo
get_feed_audit_resultsFeed audit results
Read-only
Inspect

Results of the Merchant Center feed audit for a GSC Wizard site: the latest run (or the run of a given runDate) with its status, Feed Score (0-100, split into scoreFeed and scorePage), failure counts by severity, per-check applicable / failed / passed counts with pass rates, offers audited, pages fetched and crawl coverage, plus the score history of earlier runs for the trend. coverage and the rates are 0-1 fractions (0.12 = 12%), not the 0-100 percentage ctr uses elsewhere. checkKey narrows the checks list to one check; severity is accepted for parity with the app report, but the per-offer issue rows behind either filter live in the ClickHouse warehouse this server cannot read, so such a call answers issuesAvailable: false with a pointer at the Feed Audit report in the GSC Wizard app. run.crawlBlocked: true means the page crawl stopped early because the site refused GSCWizard-Bot (401/403 or robots.txt), so the page-plane checks and scorePage cover few or no pages; allow the crawler and queue a new run. run: null means no audit has run yet (queue one with run_feed_audit). syncPaused (with a one-line staleNote) means the Merchant Center sync is paused because Merchant Center no longer lets the connected Google account read the merchant: the stored results are still returned but may be stale, and syncPaused.message says how to fix it. syncNotice (reason "gmc_on_other_account") means Merchant Center is connected on another Google login than the property's Search Console one, so no new audit can run; stored results are still returned. Returns a notConfigured result (not an error) when Merchant Center is not connected, its credentials were revoked, no Merchant Center account is linked to the site, or (reason "gmc_on_other_account") no audit was ever stored because Merchant Center sits on another Google login.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum checks rows to return (default 100, max 500). Reserved for the per-offer issue list once a warehouse reader exists; the checks list never exceeds 21 rows.
runDateNoOptional run date (YYYY-MM-DD, the runDate returned by run_feed_audit). Omit for the latest run.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
checkKeyNoOptional check key to narrow the checks list to (e.g. "title_length", "jsonld_product_schema", "price_mismatch"). Per-offer issues for it are not readable here (see issuesAvailable).
severityNoOptional severity filter ("critical", "warning" or "info") for the per-offer issue list, which this server cannot serve (see issuesAvailable); accepted for parity with the app report.

Output Schema

ParametersJSON Schema
NameRequiredDescription
runNo
hintNo
rangeNo
checksNo
reasonNo
accountNo
filtersNo
historyNo
siteUrlNo
cachedAtNo
checkNoteNo
crawlNoteNo
emptyNoteNo
staleNoteNo
unitsNoteNo
checkCountNo
dataSourceNo
issuesHintNo
statusNoteNo
syncNoticeNo
syncPausedNo
gmcAccountIdNo
historyCountNo
notConfiguredNo
issuesAvailableNo
issuesRequestedNo
requestedRunDateNo
truncationReasonNo
get_filter_optionsGet report filter optionsA
Read-only
Inspect

Lists the scope filters available on a property for get_site_summary, query_top_queries, query_top_pages, query_countries and query_devices: whether branded keywords are set (for brand: 'branded' | 'non_branded'), and every content group (contentGroupId) and topic cluster (topicClusterId) with filterable and, when false, the reason. Works on properties shared with you as well as your own. Reads configuration only; no Search Console data is fetched.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
brandNo
siteUrlNo
contentGroupsNo
topicClustersNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description adds meaningful non-schema context by clarifying it reads configuration only and fetches no Search Console data, plus that shared properties are supported. It does not mention auth/permission nuances or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the purpose and the consuming tools; it is efficient and free of filler, though the long colon-delimited enumeration makes it slightly run-on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be described; the description still covers the returned structure (brand annotation and its branded/non_branded values, content groups, topic clusters with filterable flags and failure reasons), which is complete for a single-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (siteUrl) and schema coverage is 0%, so the schema does not document it. The description hints the identifier is a 'property' but gives no format guidance (URL vs property ID), leaving the single required argument under-explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Lists the scope filters available on a property') and enumerates exactly which downstream tools consume them (get_site_summary, query_top_queries, query_top_pages, query_countries, query_devices), clearly distinguishing it from sibling list tools like list_content_groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the five tools this feeds and notes it works on shared-as-well-as-owned properties, giving strong routing context. It stops short of stating when it must be called before those tools (e.g., 'call first to discover valid filter values'), so it is not a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ga4_ecommerceGA4 ecommerce report
Read-only
Inspect

GA4 ecommerce performance for the GA4 property linked to a GSC Wizard site: a revenue / transactions / purchasers summary plus channel, source-medium, page, landing-page, and product (itemName) breakdowns. Revenue is in the property currency (currencyCode). hasEcommerce is false when the property shows no ecommerce activity in the period. When active filters are incompatible with the item-scoped Products report, itemsFilterSkipped is true and items is unfiltered while every other table reflects the filters. totalRows gives the full row count of every table before limit. Returns a notConfigured result (not an error) when Google Analytics is not connected or no GA4 property is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
itemsNo
pagesNo
rangeNo
reasonNo
accountNo
siteUrlNo
sourcesNo
channelsNo
timeZoneNo
siteScopeNo
totalRowsNo
dataSourceNo
propertyIdNo
currencyCodeNo
hasEcommerceNo
landingPagesNo
hasComparisonNo
notConfiguredNo
reauthRequiredNo
comparisonRangeNo
ecommerceSummaryNoMetric totals keyed by GA4 metric name.
itemsFilterSkippedNo
propertyDisplayNameNo
prevEcommerceSummaryNo
get_ga4_error_pagesGA4 error pages
Read-only
Inspect

Reports GA4 error pages for the property linked to a site: sessions, page views, active users and bounce rate per error page, broken down by page title AND URL. GA4 has no native 404 signal, so error pages are identified by matching the pageTitle dimension against saved patterns (operators contains / equals / starts_with / ends_with / regex, case-insensitive, OR-ed together). By default it uses the patterns saved for the site in GSC Wizard; pass titleFilters to override them for one call without saving anything. Returns notConfigured when Google Analytics is not connected or no GA4 property is linked, and noPatterns when the site has no saved patterns and none were passed. totals counts each session and user once across all matching pages (not the sum of the rows), and bounceRate is a fraction 0-1, not a percentage. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many error-page rows to return, ordered by sessions.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
titleFiltersNoOverride the page-title patterns for this call only (nothing is saved). Omit to use the patterns saved on the site in GSC Wizard's Error Pages report.
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rangeNo
reasonNo
totalsNo
accountNo
siteUrlNo
patternsNo
timeZoneNo
truncatedNo
dataSourceNo
errorPagesNo
noPatternsNo
prevTotalsNo
propertyIdNo
hasComparisonNo
notConfiguredNo
patternSourceNo
reauthRequiredNo
comparisonRangeNo
matchedRowCountNo
get_ga4_key_eventsGA4 key events (conversions)
Read-only
Inspect

Segments the GA4 property linked to the site on ONE key event (conversion, e.g. form_submit): totals, session/user conversion rates, and per channel, source, landing page, page, country and device breakdowns. Also lists the available key events on the property. When keyEvent is omitted, the most active key event in the period is picked automatically. A keyEvent that is not marked as a key event in GA4 returns plain event counts instead (isKeyEvent: false, with a note). A key event whose name has characters other than letters, digits and _ (e.g. "Sign Up") is reported through an event filter instead, with metricMode "event_filter" and a note on what the numbers mean. rawEventCount is the plain count of the event; when GA4 counted fewer key events than that (marked as a key event after it fired, or counted once per session), a note explains the gap. Rates (sessionKeyEventRate, userKeyEventRate) are fractions 0-1, not percentages. Returns a notConfigured result when Google Analytics is not connected or no GA4 property is linked. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of rows per breakdown table.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
keyEventNoGA4 key event name to segment on (e.g. form_submit). Omit to pick the most active key event of the period automatically; the response lists all available names.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
pagesNo
rangeNo
reasonNo
accountNo
devicesNo
siteUrlNo
sourcesNo
summaryNoMetric totals keyed by GA4 metric name.
channelsNo
keyEventNo
timeZoneNo
countriesNo
keyEventsNo
siteScopeNo
dataSourceNo
isKeyEventNo
metricModeNo
propertyIdNo
prevSummaryNo
currencyCodeNo
landingPagesNo
hasComparisonNo
keyEventNamesNo
notConfiguredNo
rawEventCountNo
reauthRequiredNo
comparisonRangeNo
prevRawEventCountNo
propertyDisplayNameNo
get_ga4_llm_trafficGA4 traffic from AI assistants
Read-only
Inspect

Sessions, engagement, conversions (key events) and revenue referred to the site by ChatGPT, Perplexity, Microsoft Copilot, Google Gemini, Claude and 13 other AI assistants (identified by referrer domain and combined with GA4’s own "AI Assistant" channel), from the GA4 property linked to the site, with the share of total traffic they represent and per-assistant and per-landing-page breakdowns. Note: Google AI Overviews / AI Mode traffic carries no distinct referrer, is indistinguishable from google/organic, and is NOT included. llmShareOfSessions, engagementRate and bounceRate are fractions 0-1, not percentages. An assistant's activeUsers adds up its referrer domains (e.g. chatgpt.com + chat.openai.com), so a user who came through two of them counts twice; summary.activeUsers is exact. Returns a notConfigured result when Google Analytics is not connected or no GA4 property is linked. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of landing page rows returned.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
includeDailySplitNoInclude a per-assistant daily sessions split for the current period.
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
get_ga4_overviewGA4 traffic overview
Read-only
Inspect

Google Analytics 4 summary for the GA4 property linked to a GSC Wizard site: sessions, active/total/new users, page views, engagement rate, session duration, bounce rate, event count, and key events, with an automatic previous-period comparison (prevSummary). When the comparison period has no GA4 data at all (e.g. before the data stream existed), comparisonHasData is false and prevSummary is null instead of all zeros. Set includeTimeseries for daily points. engagementRate and bounceRate are fractions 0-1, not percentages; averageSessionDuration is in seconds. Returns notConfigured (with a reason and hint) instead of data when Google Analytics is not connected or no GA4 property is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here.
includeTimeseriesNo
comparisonStartDateNoOptional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
get_gmc_best_sellersMerchant Center best sellers
Read-only
Inspect

Google's best sellers ranking for one country from the Google Merchant Center account linked to a GSC Wizard site: the most popular product clusters ("product_cluster", the default) or brands ("brand") per Google product category, with rank, previous rank, relative demand (VERY_LOW..VERY_HIGH), its direction (SINKER / FLAT / RISER) and, for product clusters, whether any of your offers matches (inventoryStatus). Each product-cluster row carries demandGap: true when Google ranks the cluster but you do not stock it, the classic assortment-gap signal; note that inventory status ignores the report country. Pick WEEKLY (Monday-dated) or MONTHLY (1st-dated) reports; omit reportDate for the newest report Google has published (reports lag up to two weeks). countryCode is required because the Merchant API answers one country per request; categoryId (Google product taxonomy id) narrows to one category, otherwise every top-level category is returned. reportUnavailable (with no rows) means Google refuses this report for the Merchant Center account (eligibility); the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo"product_cluster" (ranked product clusters with title, category path, GTINs and your inventory status, the default) or "brand" (ranked brands, no inventory data).product_cluster
limitNoRows to return, ordered by (country, category, rank) (default 100, max 1000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
categoryIdNoOptional. Google product taxonomy id as a digits-only string (e.g. "166" for Apparel & Accessories). Omit for every top-level category.
reportDateNoOptional. The report to read as YYYY-MM-DD: a Monday for WEEKLY, the 1st of a month for MONTHLY. Omit for the newest published report (recommended: reports lag up to two weeks). Never pass null or the string "null".
countryCodeYesRequired. Report country as ISO 3166-1 alpha-2 (e.g. "US", "NL"). Case-insensitive.
granularityNo"WEEKLY" (Monday-dated reports, the default) or "MONTHLY" (1st-of-month reports).WEEKLY

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rowsNo
viewNo
rangeNo
reasonNo
accountNo
hasMoreNo
lagNoteNo
siteUrlNo
cachedAtNo
rowCountNo
emptyNoteNo
truncatedNo
categoryIdNo
dataSourceNo
reportDateNo
countryCodeNo
granularityNo
reportsSeenNo
gmcAccountIdNo
countryCaveatNo
notConfiguredNo
demandGapCountNo
truncationNoteNo
fetchedRowCountNo
truncationReasonNo
reportUnavailableNo
requestedReportDateNo
get_gmc_competitorsMerchant Center competitors
Read-only
Inspect

Competitive visibility from the Google Merchant Center account linked to a GSC Wizard site, for one (country, Google product category, traffic source) cell. "competitor" (default) returns one row per day per competing domain (rank, relativeVisibility, adsOrganicRatio, pageOverlapRate, higherPositionRate) plus a per-domain roll-up over the window; "top_merchant" returns one aggregate row per domain for the window (Google does not expose a date on that view); "benchmark" returns one row per day with yourDomainVisibilityTrend and categoryBenchmarkVisibilityTrend, both relative to the start of the window. relativeVisibility and adsOrganicRatio are RATIOS (200 = two hundred times as often as you); pageOverlapRate, higherPositionRate and the trends are 0-1 FRACTIONS as Google reports them (0.12 = 12%), not the 0-100 percentage ctr uses elsewhere in this server. countryCode (ISO 3166-1 alpha-2) and categoryId (Google product taxonomy id, digits) are both required because the Merchant API answers one cell per request. reportUnavailable (with no rows) means Google refuses this report for the Merchant Center account (eligibility); the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo"competitor" (daily rows per competing domain, the default), "top_merchant" (one aggregate row per domain for the window) or "benchmark" (daily trend of your domain against the category benchmark).competitor
limitNoRows to return, ordered by (date, rank, domain) (default 50, max 200). The per-domain roll-up in `domains` always covers every fetched row regardless of this cap.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
categoryIdYesRequired. Google product taxonomy id as a digits-only string (e.g. "166" for Apparel & Accessories, "222" for Electronics). Top-level ids work for every account.
countryCodeYesRequired. Report country as ISO 3166-1 alpha-2 (e.g. "US", "NL"). Case-insensitive.
trafficSourceNo"ORGANIC" (free listings, the default), "ADS" or "ALL".ORGANIC

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rowsNo
viewNo
rangeNo
reasonNo
accountNo
domainsNo
hasMoreNo
siteUrlNo
cachedAtNo
rowCountNo
emptyNoteNo
truncatedNo
unitsNoteNo
categoryIdNo
dataSourceNo
yourDomainNo
countryCodeNo
gmcAccountIdNo
notConfiguredNo
trafficSourceNo
truncationNoteNo
fetchedRowCountNo
truncationReasonNo
reportUnavailableNo
get_gmc_pricing_insightsMerchant Center pricing insights
Read-only
Inspect

Price competitiveness and sale-price suggestions from the Google Merchant Center account linked to a GSC Wizard site, joined per product: your price against the market benchmark for the same product (priceGapFraction, positive = you are more expensive), and Google's suggested sale price with the predicted change in impressions, clicks and conversions if you adopt it. Sort by "opportunity" (largest predicted clicks gain first, the default) or "gap" (largest absolute price gap first). Both views are dateless snapshots of the current catalog. All predicted*ChangeFraction and *Fraction fields are 0-1 FRACTIONS as Google reports them (0.12 = +12%), not the 0-100 percentage ctr uses elsewhere in this server. Benchmarks need valid GTINs and suggestions need conversion reporting, so an empty result usually means "not eligible", not "no data"; reportUnavailable (with no rows) means Google refuses the pricing report for the Merchant Center account outright, and the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo"opportunity" (largest predictedClicksChangeFraction first, the default) or "gap" (largest absolute priceGapFraction first). Products without the sort key go last.opportunity
limitNoProducts to return after sorting (default 100, max 1000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
countryCodeNoOptional. Restrict price benchmarks to one country (ISO 3166-1 alpha-2, e.g. "US"). Omit for every benchmark country; a product benchmarked in several countries then keeps its first benchmark and reports benchmarkCountryCode. Sale-price suggestions are never country-filtered.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rowsNo
sortNo
rangeNo
reasonNo
accountNo
hasMoreNo
siteUrlNo
summaryNo
cachedAtNo
rowCountNo
truncatedNo
unitsNoteNo
dataSourceNo
countryCodeNo
gmcAccountIdNo
snapshotDateNo
notConfiguredNo
truncationNoteNo
eligibilityNoteNo
truncationReasonNo
reportUnavailableNo
get_gmc_title_hygieneMerchant Center title hygiene
Read-only
Inspect

Title and description hygiene of the product catalog in the Google Merchant Center account linked to a GSC Wizard site: title length distribution (0-29 / 30-69 / 70-150 / 151+ characters), description length distribution (0-49 / 50-499 / 500-5000 / 5001+) and how many offers have no description, mean and median title length, duplicate titles (offers sharing the same normalised title, largest groups first), offers whose title repeats a word, and the most frequent title words with brand tokens flagged. Computed over a sample of the live catalog: the first limit products in feed order (default 2000, max 5000); truncated: true means the catalog had more. topWords[].share is a 0-1 FRACTION of the sampled offers, not the 0-100 ctr percentage; lengths are in characters, CJK titles included. A catalog snapshot, so it takes no date range. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoProducts to sample from the catalog, in feed order (default 2000, max 5000). The summary describes this sample; truncated says when the catalog had more.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
topWordsNoMost frequent title words to return (default 50, max 100).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
limitNo
rangeNo
reasonNo
accountNo
cjkNoteNo
sampledNo
siteUrlNo
cachedAtNo
topWordsNo
emptyNoteNo
truncatedNo
unitsNoteNo
dataSourceNo
offerCountNo
gmcAccountIdNo
snapshotDateNo
cjkTitleCountNo
notConfiguredNo
avgTitleLengthNo
truncationNoteNo
truncationReasonNo
medianTitleLengthNo
variantsCollapsedNo
descriptionMissingNo
repeatedWordOffersNo
duplicateTitleGroupsNo
titleLengthHistogramNo
duplicateTitleGroupsLimitNo
descriptionLengthHistogramNo
duplicateTitleGroupsCappedNo
get_indexing_trackerGet indexing tracker config + statsB
Read-only
Inspect

Returns the GSC Wizard Indexing Tracker configuration for a property plus summary stats (total tracked URLs, indexed / not-indexed / pending / error counts, active warnings, and the most recent check time). Returns tracker: null if no tracker is configured for the property.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statsNo
messageNo
siteUrlNo
trackerNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine value by disclosing the null-tracker case, but says nothing about permissions, error behavior, or freshness of the check time beyond the stat list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the primary behavior and finishing with the important null edge case. Minimal waste, though the stat enumeration is somewhat redundant with the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, the return-value detail is not strictly needed, and the description instead omits the more valuable missing piece: how this differs from get_indexing_tracker_report. Adequate for a simple single-parameter read tool, but with a clear routing gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (siteUrl) and the schema description coverage is 0%, so the description carries some burden. It implies the tool is property-scoped via 'for a property', which loosely maps to siteUrl, but adds no format or validation guidance beyond the schema's minLength constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (returns the Indexing Tracker config plus summary stats) and even enumerates the stat categories, so the agent knows exactly what comes back. It does not, however, distinguish itself from the close sibling get_indexing_tracker_report, leaving the agent to guess which to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of the obvious alternative get_indexing_tracker_report (or list_tracked_urls for URL-level data). The only usage hint is implicit in the null-return note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_indexing_tracker_reportIndexing tracker health report
Read-only
Inspect

Aggregate indexing-health report for a property over the last N days (default 30, max 90). Computes a 0-100 health score from indexed %, crawl freshness, and warning-free %, plus a coverage-state breakdown, crawl-freshness buckets, recently lost pages, and newly indexed pages. A property with no tracker yet answers configured: false with empty figures; add URLs with add_tracked_urls to start one.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysNo
messageNo
siteUrlNo
breakdownNo
lostPagesNo
truncatedNo
configuredNo
healthScoreNo
newlyIndexedNo
crawlFreshnessNo
coverageBreakdownNo
get_indexnow_settingsGet IndexNow settings
Read-only
Inspect

Reports whether IndexNow is set up for a property: whether an API key is configured (masked to its last four characters, the full key is never returned) AND whether the key file is actually reachable on the site. Both are required before search engines accept submissions. When keyFileVerified is false, keyFileUrl is the exact file the site owner must publish, containing the key and nothing else. keyFileVerified is null when the check was inconclusive (timeout or a bot rule), which is not a failure. Check here before submit_indexnow_urls and whenever a submission fails. When no key is set, call update_indexnow_settings with generateKey: true and publish the key file it returns.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteUrlNo
keyFileUrlNo
keySiteUrlNo
keyFileErrorNo
keyFileUrlHintNo
keyFileVerifiedNo
indexnowApiKeySetNo
indexnowApiKeyMaskedNo
get_inspection_quotaGet URL inspection quotaA
Read-only
Inspect

Returns the remaining URL inspection quota for a property today. GSC enforces a 2,000 inspection/day/property cap; GSC Wizard tracks usage across both UI and MCP calls. Call this before bulk inspections to avoid surprises.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
limitNo
siteUrlNo
remainingNo
unavailableNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the genuinely useful behavioral facts that aren't in annotations: the 2,000/day/property cap and that usage is tracked across both UI and MCP calls, which explains why local counters may disagree.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned, then the constraint, then the when-to-call advice. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation here. The description covers the cap, cross-surface usage tracking, and the recommended call timing — everything needed to use this quota-check tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single siteUrl parameter, so the description carries some burden. It says "for a property," hinting that siteUrl identifies a GSC property, but adds no format details (full URL vs. sc-domain: prefix) beyond that. Baseline 3 given only one simple parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (returns) and resource (remaining URL inspection quota) with scope (for a property today). An agent can immediately distinguish this from sibling tools like bulk_inspect_urls or inspect_url.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit timing guidance: "Call this before bulk inspections to avoid surprises." It implies the alternative (bulk_inspect_urls) and the precondition for using this tool, though it doesn't name that sibling directly or state when not to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_longtail_clustersLong-tail page clustering
Read-only
Inspect

Segments a property's pages into Head / Chunky Middle / Long Tail tiers by elbow detection on the cumulative-clicks curve (the app's Long-tail Clustering report). Returns each tier's page count, click/impression share, average CTR/position/query-diversity, the knee points, and the top pages per tier. Useful for spotting over-reliance on a few pages or a bloated long tail to prune. Reads the ClickHouse warehouse when available, else the live Search Console API. truncated: true (with truncationNote) means a cap cut the low-click tail: the warehouse clusters at most the 100,000 pages with the most clicks, the live API reads at most 100,000 query x page rows. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
presetNoTuning preset: default | content | ecommerce | small_site | enterprise.default
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
sensitivityNoOverride the preset's knee sensitivity: low | normal | high.
pagesPerClusterNoHow many top pages to list per tier (default 10). 0 returns tier stats only.
includeZeroClicksNoInclude pages with zero clicks (impressions only). Defaults per preset (usually true).

Output Schema

ParametersJSON Schema
NameRequiredDescription
kneesNo
rangeNo
presetNo
totalsNo
siteUrlNo
clustersNo
warningsNo
truncatedNo
dataSourceNo
sensitivityNo
truncationNoteNo
apiRowCapReachedNo
get_merchant_listings_performanceMerchant listings performance
Read-only
Inspect

Search Console performance for one search appearance, defaulting to MERCHANT_LISTINGS: the appearance inventory of the property, a daily clicks / impressions / CTR / position timeline, and the top pages (product URLs) behind it. Answers "how visible are my product results in Search, and which products carry it". Search Console merchant listings counts enriched product results in web Search only, while Google Merchant Center free-listing numbers (get_organic_shopping_performance) cover the Shopping tab, Images, Lens, YouTube and Maps too, so the two do not reconcile to one figure. Always served from the live Search Console API: search appearance is never stored in the GSC Wizard warehouse, and it can be filtered on but never grouped with another dimension. hasAppearance is false when the property has no rows for the requested appearance, which is normal for non-ecommerce sites. The window may span at most 16 months (Search Console retention); a longer one is rejected with bad_request. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTop pages to return, ordered by clicks (default 25, max 1000).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
appearanceNoSearch appearance code to report on. Defaults to MERCHANT_LISTINGS; other common values are PRODUCT_SNIPPETS and ORGANIC_SHOPPING. Read `appearances` in the response to see which codes this property actually has.MERCHANT_LISTINGS
includeAppearancesNoInclude the unfiltered per-appearance breakdown, which is the only way to learn which appearance codes the property has and how big each one is.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
pagesNo
totalsNo
endDateNo
hasMoreNo
siteUrlNo
rowCountNo
timelineNo
emptyNoteNo
startDateNo
appearanceNo
dataSourceNo
searchTypeNo
appearancesNo
dataMaturityNo
hasAppearanceNo
settledThroughNo
warehouseLatestDateNo
get_migration_healthGet migration health
Read-only
Inspect

Health check of a site migration around its go-live date: the Migration Compare analysis of the GSC Wizard app (without brand terms, the search-type split or the country / device filters of a saved migration; notes says what differs). Returns recovery (side B clicks per day as a % of side A clicks per day before go-live), pace against the recovery a migration on track reaches by now, momentum, a projected recovery with milestone dates, URL success per migration unit, a 0-100 risk score with its factors, prioritised recommendations, redirect status counts from the stored redirect checks, the top lost pages, redirect problems, lost queries and losing sections, the old-to-new impression handover, the click change split into demand / position / CTR effects, the country and device splits (segments) with their recommendations, and a launch checklist. siteUrl is the OLD property (side A); pass siteUrlB (the new property) for a domain move and omit it when the migration happened inside one property. Pass goLiveDate, or a migrationId from list_migrations to reuse a migration saved in the app (its properties, URL prefixes or regexes, go-live date, windows, mapping label and Only mapped URLs setting; explicit arguments override it). Redirect mappings are the ones saved for the property pair (add_migration_redirects or the app); without any, pages are joined by path. onlyMapped is the app's "Only mapped URLs": with saved mappings, the totals, recovery and health count only the pages the mappings claim, and so do the country and device splits of a side read from the warehouse (segments.scope says which; each 10 warehouse queries of those splits cost one more rate-limit unit). Windows as in compare_migration: windowStrategy "recent" (default), "from-go-live" or "full", windowDays (default 28), yoyBaseline. Page and query reads cover at most the top 25,000 rows by clicks per side and window, and at most 10,000 redirect mappings are analysed (each 2,000 costs one more rate-limit unit); truncated says when a cap was reached. health is null until a post-launch day has final data.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYesThe OLD property (side A), as returned by list_sites. With migrationId it must be the saved migration's old property.
siteUrlBNoThe NEW property (side B) for a move between properties. Omit when the migration happened inside one property.
goLiveDateNoFirst day the new setup was live, as YYYY-MM-DD. Required unless migrationId supplies one.
onlyMappedNoOnly mapped URLs: count only the pages the redirect mappings claim (the old URLs' pages on side A, their new URLs' pages on side B) in the totals, recovery and health. Default: the saved migration's setting with migrationId, else false. No effect without saved mappings.
windowDaysNoWindow length in days for "recent" and "from-go-live" (default 28).
migrationIdNoId of a migration saved in the app (list_migrations). Its setup supplies everything the arguments leave out.
yoyBaselineNoCompare with the same weeks one year (364 days) earlier instead of the days before go-live. Default false.
mappingLabelNoOnly the redirect mappings carrying this label ("__none__" = only unlabelled ones). Omit to use every mapping saved for the property pair.
windowStrategyNo"recent" (default): the last windowDays days vs the windowDays days before go-live. "from-go-live": the first windowDays days after go-live vs the windowDays days before. "full": the 90 days before go-live vs every day since.

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesNo
setupNo
healthNo
summaryNo
windowsNo
handoverNo
mappingsNo
segmentsNo
warningsNo
checklistNo
migrationNo
redirectsNo
truncatedNo
waterfallNo
dataSourceNo
pageTrendsNo
queryTrendsNo
topLostPagesNo
topLostQueriesNo
truncatedReadsNo
topLosingSectionsNo
topRedirectProblemsNo
get_organic_shopping_performanceOrganic shopping performance
Read-only
Inspect

Organic (free listing) product performance from the Google Merchant Center account linked to a GSC Wizard site: a daily clicks / impressions / conversions timeline plus the top offers, groupable by brand, Google category or merchant product type. Optionally includes the non-product timeline (category and home pages reached from Merchant Center surfaces). Merchant Center free-listing numbers cover the Shopping tab, Search, Images, Lens, YouTube and Maps, while Search Console merchant listings (get_merchant_listings_performance) counts enriched product results in web Search only, so the two do not reconcile to one figure. Conversions exist only where the merchant configured a Merchant Center conversion source. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTable rows to return, ordered by organic clicks (default 25, max 200).
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
groupByNoHow the table rows are grouped: "offer" (one row per product / offer id, the default), "brand", "category" (Google product taxonomy level 1) or "productType" (the merchant's own taxonomy level 1).offer
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
includeNonProductNoInclude the non-product timeline: clicks to category / home pages from Merchant Center surfaces, which never appear in the product numbers.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
totalsNo
accountNo
groupByNo
hasMoreNo
siteUrlNo
cachedAtNo
rowCountNo
timelineNo
truncatedNo
dataSourceNo
currencyCodeNo
gmcAccountIdNo
notConfiguredNo
conversionNoteNo
definitionNoteNo
truncationNoteNo
marketingMethodNo
nonProductTotalsNo
truncationReasonNo
nonProductTimelineNo
get_page_performancePage performance over time
Read-only
Inspect

Daily performance for a single page (clicks, impressions, CTR, position). Useful for diagnosing post-deploy regressions on a specific URL. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
pageUrlYes
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
dailyNo
rangeNo
pageUrlNo
siteUrlNo
dataSourceNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
get_position_distributionRanking position distribution
Read-only
Inspect

Slices a property by where it ranks, using the same 1-3 / 4-10 / 11-20 / 21+ bands as the GSC Wizard dashboard. granularity "period" (default) returns impressions, clicks and the number of queries (or pages) in each band over the whole range, showing how top-heavy the property's visibility is. granularity "daily" returns one row per day with the count of DISTINCT queries ranking in each band, which is how you see a ranking shift build up or a drop land on a specific date. Positions are impression-weighted averages, so a row sits in one band only. Served from the GSC Wizard ClickHouse warehouse when available (both views are computed in the warehouse over every query or page, never truncated; scanLimit is null there), otherwise from the live Search Console API over the top scanLimit rows by clicks, which drops zero-click rows first and so understates the deep bands when truncated is true (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
dimensionNoWhat a "row" is on the period path: a search query or a page.query
scanLimitNoHow many top rows by clicks to bucket on the live Search Console API. Raise it when a long-tail property reports `truncated: true`. Ignored on the ClickHouse warehouse, which buckets every row in SQL.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
granularityNo"period" = one bucket summary over the range; "daily" = distinct query counts per band per day (always keyed on query, ignores `dimension`).period

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysNo
noteNo
rangeNo
totalsNo
bucketsNo
siteUrlNo
dayTotalsNo
dimensionNo
scanLimitNo
truncatedNo
dataSourceNo
searchTypeNo
granularityNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
get_product_listing_statusProduct free-listing status
Read-only
Inspect

Free-listing eligibility and item issues per product, from the Google Merchant Center account linked to a GSC Wizard site, sorted by clickPotentialRank (1 = the product Google expects the most clicks from). Answers "which products are invisible in free listings, and why": each row carries the aggregated status (ELIGIBLE / ELIGIBLE_LIMITED / PENDING / NOT_ELIGIBLE_OR_DISAPPROVED), the free-listings status when the synced catalog has it, the top issue code and whether fixing it needs a merchant action or is just pending Google processing. statusCounts, issueCounts, problemCount and merchantActionCount (problems that need a feed or site fix) summarise the whole scan, not just the returned page; page through every row with offset, passing back nextOffset until it is null. Answered from the catalog snapshot GSC Wizard syncs daily into its warehouse when the site has one (dataSource: "clickhouse", syncedAt says when, stale: true when it is more than two days old; every offer is counted), with a live Merchant API scan of up to 5,000 products as the fallback (dataSource: "merchant-api", truncated when the catalog had more or Merchant Center was too slow to read it all within about 40 seconds; truncationReason says which). itemIssuesUnavailable: true means Google refused the issue data, so a missing issue code is unknown rather than clean. syncPaused (with a one-line staleNote) means the daily sync is paused because Merchant Center no longer lets the connected Google account read the merchant: the data is still returned but may be stale, and syncPaused.message says how to fix it. syncNotice (reason "gmc_on_other_account") means Merchant Center is connected on another Google login than the property's Search Console one, so the snapshot cannot refresh; the data is still returned. This is catalog state, not traffic: pair it with get_organic_shopping_performance for the clicks a product actually got. Returns a notConfigured result (not an error) when Merchant Center is not connected, its credentials were revoked, no Merchant Center account is linked to the site in the GSC Wizard app, or (reason "gmc_on_other_account") nothing was ever synced because Merchant Center sits on another Google login and no live read is possible.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoProduct rows to return, highest click potential first (default 25, max 200).
offsetNoRows to skip, for reading past the first page: pass the previous answer's nextOffset (default 0, max 100,000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
onlyProblemsNoReturn only products that are not plainly serving (limited, pending, disapproved, or carrying an item issue). Set false to list the whole catalog by click potential.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
staleNo
offsetNo
reasonNo
accountNo
hasMoreNo
scannedNo
siteUrlNo
cachedAtNo
rowCountNo
syncedAtNo
staleNoteNo
truncatedNo
dataSourceNo
nextOffsetNo
syncNoticeNo
syncPausedNo
issueCountsNo
gmcAccountIdNo
onlyProblemsNo
problemCountNo
statusCountsNo
notConfiguredNo
itemIssuesNoteNo
truncationNoteNo
truncationReasonNo
merchantActionCountNo
itemIssuesUnavailableNo
get_query_performanceQuery performance over time
Read-only
Inspect

Daily performance for a single search query, optionally restricted to one landing page. Useful for tracking position changes after on-page edits. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
pageUrlNo
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
dailyNo
queryNo
rangeNo
pageUrlNo
siteUrlNo
dataSourceNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
get_query_shape_trendQuery shape trend over time
Read-only
Inspect

Tracks how much of a property's search traffic comes from AI-shaped queries over time: the trend chart on the app's Query Analysis report. Returns one row per month (or week) with clicks and impressions split into AI-shaped (reply artefacts, pivot follow-ups, conversational questions) versus conventional keywords, plus the AI-shaped share of each metric. Use this to answer "are AI Overviews / AI Mode queries growing on this site?", which no single-period report can show. Defaults to the last 12 complete months. Served from the GSC Wizard ClickHouse warehouse when available (longer history, no sampling), otherwise the live Search Console API.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoHow many complete months to cover, ending with last month (1-16; Search Console keeps ~16 months).
endDateNoOptional. Window end as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD. Provide BOTH startDate and endDate to override the default window, or omit both to use the last `months` complete months. Never pass null or "null".
searchTypeNoweb
granularityNomonth

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
periodsNo
siteUrlNo
shapeNoteNo
truncatedNo
dataSourceNo
granularityNo
dataMaturityNo
settledThroughNo
truncationNoteNo
warehouseLatestDateNo
get_query_value_attributionEstimated GA4 value per GSC queryA
Read-only
Inspect

Estimates GA4 sessions, key events, and revenue per Search Console query via proportional click share: a query with 80% of a page's GSC clicks is credited 80% of that page's GA4 outcomes. Page-level estimates with known blind spots (device/country/date mismatches are invisible; every click is treated as equally likely to convert). matchedClickShare reports how much of the click volume the estimates cover; estRevenue appears only when the GA4 property records revenue. Requires a GA4 property linked to the site in GSC Wizard; returns a notConfigured explanation otherwise. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return. Applies per period when dateGranularity is set.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
organicOnlyNoLimit GA4 outcomes to google / organic sessions so only organic value is distributed across queries. Default true; set false to distribute all-traffic GA4 outcomes.
dateGranularityNoSplit the range into periods and return one set of rows per period, each tagged with a `date` (the period start, clamped to the requested range). Use this to chart a tool's output over time instead of getting a single aggregate: "month" gives month-on-month, "week" gives Monday-aligned weeks, "day" gives a daily series. Default "none" returns one aggregate over the whole range, unchanged. `limit` applies per period when set. Comparison fields (prev*) compare each period against the period before it.none

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower, yet the description adds substantial context beyond them: the proportional-attribution method, known blind spots ('device/country/date mismatches are invisible; every click is treated as equally likely to convert'), the notConfigured failure mode, and the ~2-3 day data lag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single paragraph is front-loaded with the core purpose and stays dense, with almost every clause carrying information (method, blind spots, prerequisites, defaults). It is slightly long and repeats the date-lag detail already present in the schema, but nothing is truly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with an output schema already defined, the description covers all that remains: methodology, coverage caveats, conditional fields (matchedClickShare, estRevenue), configuration prerequisites, and default window behavior. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (83%), which sets the baseline at 3, and the description mostly restates what the schema already documents (the optional date range and the last-28-settled-days default). It adds little parameter semantics beyond the structured fields, though the 28-day default framing is mildly reinforcing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Estimates GA4 sessions, key events, and revenue per Search Console query') and even spells out the estimation methodology (proportional click share). This niche purpose is not duplicated by any sibling like query_search_analytics or get_ga4_key_events, so an agent can recognize it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful preconditions ('Requires a GA4 property linked to the site in GSC Wizard; returns a notConfigured explanation otherwise') and default date behavior, which implies when it is applicable. However, it never states when to prefer this over adjacent tools (e.g. query_search_analytics) or when-not to use it, leaving alternatives to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ranking_changesGet ranking changes between two periods
Read-only
Inspect

Compares a current period against a comparison period and classifies movers by query or page into new, lost, improved, and declined buckets (improvement = better/lower average position). Useful for spotting what gained or lost visibility between two date ranges. limit (1-10000, default 50) applies PER BUCKET; counts gives the full size of each bucket before that cut. Each period reads its top scanLimit rows ranked by clicks (warehouse: max(limit*10, 1000), capped at 50000; live API: 25000), so counts are measured within those keys. On the warehouse every key in either period's top scanLimit is read in both periods, so new and lost are real; on the live API the two reads are independent, and a key just below one cut can show as new or lost. It is served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
dimensionNoquery
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
comparisonEndDateNoOptional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here.
comparisonStartDateNoOptional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
get_sitemap_performanceSitemap URL performance
Read-only
Inspect

Fetches a sitemap belonging to the property, extracts its URLs, and joins them with Search Console page performance over a date range. Each URL gets its clicks, impressions, CTR, and average position (zeros if the page has no GSC data). Reports how many sitemap URLs actually received impressions (indexedInGscCount). The warehouse reads the sitemap URLs themselves, so a zero is exact. The live API cannot, so it pages through the property's pages (top 100,000 by clicks at most) until every URL is found; truncated: true means some URLs were not reached, so their zeros are unknown rather than "no impressions" (scanLimit is the rows read). Expands one level of a sitemap index (up to 5 child sitemaps; a child that cannot be read is named in childSitemapNote instead of failing the call), caps extracted URLs at maxUrls (default 500, max 2000), and only fetches http(s) URLs on the property host or a subdomain of it. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). The sitemap is fetched with the user agent "GSCWizard-Bot/1.0 (On-Page SEO Checker)"; if the server blocks it (403/401/429) or no URLs come back, relay the whitelisting advice in the error or crawlNote. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
maxUrlsNo
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
sitemapUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
urlsNo
rangeNo
siteUrlNo
urlCountNo
crawlNoteNo
scanLimitNo
truncatedNo
dataSourceNo
sitemapUrlNo
sitemapNoteNo
dataMaturityNo
settledThroughNo
truncationNoteNo
childSitemapNoteNo
indexedInGscCountNo
failedChildSitemapsNo
warehouseLatestDateNo
get_site_summaryGet site performance summaryA
Read-only
Inspect

Returns clicks, impressions, CTR, and average position for a property over the last N days (default 28), with a same-length prior period for comparison. Use this for quick health checks before drilling into details. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). For an explicit window pass startDate/endDate (YYYY-MM-DD) instead: a date you pass always wins, and days only sizes an edge you leave out. The comparison period is always the same length as the window and sits immediately before it. avgPosition is impression-weighted, as Search Console reports it. dailyRows is the window day by day and previousDailyRows the comparison period day by day, in the same shape; previousDailyRows is omitted for a window longer than 180 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLength of the trailing window in days (default 28, max 180). Ignored for any edge you pin with startDate/endDate; when exactly one of those is given it sizes the other edge.
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the window ends at the latest settled Search Console date (data lags ~2-3 days). Passed alone, the window is `days` long and ends here. Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date: omit both startDate and endDate to use the trailing `days` window instead (Search Console data lags ~2-3 days, so the window ends at the latest settled date). Passed alone, the window runs from here to the latest settled date. Never pass null or the string "null".
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavior beyond that: the ClickHouse-vs-live-API data source fallback, impression-weighted avgPosition semantics, and the fact that previousDailyRows is dropped for windows longer than 180 days. It omits any permission or quota considerations, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the return values and primary use case, then handles window semantics. The closing sentence explaining dailyRows/previousDailyRows is somewhat redundant given an output schema exists, but the 180-day omission caveat inside it is a genuine behavioral detail, so the length is mostly earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich output schema and annotations covering safety, the description supplies exactly what structured fields cannot: data-source behavior, comparison-period construction, edge-case precedence between days and explicit dates, and a return-shape caveat. An agent can invoke this correctly for a 7-parameter tool without further inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 86%, so the baseline is 3 and the schema already carries most parameter meaning. The description adds real edge-case semantics the schema only implies: 'a date you pass always wins, and `days` only sizes an edge you leave out,' plus the rule that the comparison period is always equal-length and immediately preceding. It leaves the filter params (brand, contentGroupId, topicClusterId) entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (site-level clicks, impressions, CTR, average position over a trailing window) and explicitly positions itself as a high-level health check 'before drilling into details,' which separates it from get_page_performance, get_query_performance, and query_search_analytics. The agent can identify its role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage cue ('quick health checks before drilling into details') and explains when to switch to explicit startDate/endDate rather than relying on `days`. It does not name which drill-down sibling to use next or state any conditions where this tool should be avoided, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tag_group_viewTag group performance viewA
Read-only
Inspect

Aggregated cross-site report for every property carrying a given tag (the data behind the app's /group/tag/ dashboard). Returns last-N-days totals with a same-length prior-period comparison, a merged daily clicks/impressions trend, per-site totals, and merged top-N breakdowns by query, page, country, and device. Each site routes independently to the ClickHouse warehouse (longer history, no sampling) or the live Search Console API; dataSource is reported per site and a site whose read fails is reported in errors rather than failing the whole call. Use list_tags first to discover tag names; use get_cross_site_summary for a lighter totals-only view across all properties. Processes at most maxSites properties per call (default and maximum 100; scope.truncated says when more carry the tag). The rate-limit cost scales with the number of properties and dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes
daysNo
limitNo
maxSitesNoHow many tagged properties to process, at most 100 (the default). When more carry the tag, `scope.truncated` is true.
dimensionsNo
searchTypeNoweb

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
dailyNo
pagesNo
rangeNo
scopeNo
deltasNo
errorsNo
currentNo
devicesNo
perSiteNo
queriesNo
previousNo
countriesNo
comparisonNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/open-world safety; the description adds substantial behavioral detail: each site routes to ClickHouse (longer history, no sampling) or live Search Console API, dataSource is reported per site, and a failed site lands in `errors` rather than failing the whole call. It also discloses that rate-limit cost scales with property count and dimensions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return shape are front-loaded, then routing, error handling, and constraints follow in dense sentences with no filler. It is on the long side, but nearly every clause conveys operational information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex cross-site aggregation tool with routing, partial-failure semantics, and truncation, the description covers discovery (list_tags), alternatives (get_cross_site_summary), limits, and cost. An output schema exists, so the description needn't fully enumerate return fields, and its summary of returns is a bonus.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description must carry parameter meaning. It does explain days ('last-N-days totals'), dimensions ('merged top-N breakdowns by query, page, country, and device'), and maxSites with its truncation behavior, but limit and searchType are left to the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Aggregated cross-site report for every property carrying a given tag') and grounds it in a concrete dashboard path, so the agent knows exactly what this produces. It distinguishes itself from near siblings like get_cross_site_summary and get_content_group_performance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Use list_tags first to discover tag names; use get_cross_site_summary for a lighter totals-only view.' It also states the maxSites processing ceiling and that scope.truncated signals truncation, covering when this tool is and isn't the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_topic_cluster_performanceTopic cluster performance
Read-only
Inspect

Measures a property's topic clusters: clicks, impressions, CTR, impression-weighted average position, matched query count and share of clicks per cluster, plus an "unclustered" bucket for queries no cluster claims. Pass clusterId to drill into one cluster's top queries (each row lists which of the cluster's keywords matched). A cluster keyword is a case-insensitive substring unless wrapped in slashes (/seo ?tools/), which makes it a regex. IMPORTANT: clusters may OVERLAP (a query matching two clusters counts fully in both), so cluster totals do not sum to the property total; overlappingQueries reports how many queries are double-counted. Matching runs over the top scanLimit queries by clicks (default 50,000), read from the GSC Wizard ClickHouse warehouse when available (which scans at most 50,000 queries; scanLimit in the response is the limit actually applied), otherwise the live Search Console API (see dataSource). Use list_topic_clusters / create_topic_cluster to see or add the definitions this reports on. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRow cap for the clusterId query drill-down.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
clusterIdNoDrill into one cluster: returns its top matched queries instead of the per-cluster aggregates. Accepts a topic cluster id or the literal "unclustered".
scanLimitNoHow many top queries by clicks to match against the clusters. Raise it when a long-tail property reports `truncated: true`. Clamped at 50,000 on the ClickHouse path.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
queriesNo
siteUrlNo
clustersNo
clusterIdNo
scanLimitNo
truncatedNo
dataSourceNo
searchTypeNo
clusterNameNo
overlapNoteNo
unclusteredNo
clusterCountNo
dataMaturityNo
hasComparisonNo
scannedClicksNo
scannedQueriesNo
settledThroughNo
comparisonRangeNo
matchedQueryCountNo
overlappingQueriesNo
warehouseLatestDateNo
get_yandex_indexing_historyYandex indexing history
Read-only
Inspect

How Yandex crawls and indexes a property over time: the HTTP status codes Yandex's crawler received by day, how many pages are in Yandex search, and the count of pages that appeared in or were removed from Yandex results each day. Use the appeared/removed series to spot day-to-day indexing swings in Yandex: it has no Google Search Console equivalent, so it is the one place to watch pages entering and leaving an index day by day. These series carry no country or device dimension and no previous-period comparison; the response repeats that in limitations. When one of the two secondary series could not be read (a Yandex rate limit or timeout), it comes back empty and warnings says so. Returns notConfigured: true (with a reason) when no Yandex account is connected, the connection has to be granted again, the property is not in it, or the caller holds a share of the property rather than owning it: Yandex data is owner-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoEnd date (YYYY-MM-DD). Defaults to what Yandex returns by default.
siteUrlYes
startDateNoStart date (YYYY-MM-DD). Defaults to what Yandex returns by default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
hostIdNo
reasonNo
siteUrlNo
warningsNo
dataSourceNo
limitationsNo
notConfiguredNo
pagesInSearchNo
crawlResponsesNo
searchAppearanceChangesNo
get_yandex_query_statsYandex query stats
Read-only
Inspect

Search queries from Yandex Webmaster for a property, with impressions, clicks, average impression position and average clicked position. IMPORTANT COVERAGE LIMIT: Yandex exposes its top queries for the period, at most 3,000 of them, so totals derived from these rows are a floor, not a complete figure; say so when reporting them. Yandex serves 500 rows per request and this tool pages through as many as limit allows, defaulting to the first 500 by orderBy; totalAvailable and truncated say how much of the pool was left. CTR is a percentage (0-100, like every other CTR this server returns), calculated from impressions and clicks because Yandex publishes no CTR metric; null when there were no impressions. Yandex has no query-by-page report, so these queries cannot be attributed to URLs. The dates select a real window, so a longer range returns more queries and larger totals; omitting them gives the last week only. Yandex finishes a day about four days late, so range echoes the window it actually served. The full set of caveats is in limitations on every response. Returns notConfigured: true (with a reason) when no Yandex account is connected, the connection has to be granted again, the property is not in it, or the caller holds a share of the property rather than owning it: Yandex data is owner-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return, across pages. Yandex serves 500 per request and at most 3,000 for a window, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused.
endDateNoEnd date (YYYY-MM-DD). Defaults to the last week Yandex holds.
orderByNoWhich metric decides the 500 queries Yandex returns.TOTAL_SHOWS
siteUrlYes
startDateNoStart date (YYYY-MM-DD). Defaults to the last week Yandex holds.
deviceTypeNoDevice filter. Yandex filters rather than breaking down by device, so each value is a separate query. MOBILE_AND_TABLET overlaps MOBILE and TABLET, so do not sum them.ALL

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
rangeNo
hostIdNo
reasonNo
queriesNo
siteUrlNo
warningsNo
truncatedNo
dataSourceNo
deviceTypeNo
limitationsNo
coverageNoteNo
notConfiguredNo
totalAvailableNo
get_yandex_site_summaryYandex site summary
Read-only
Inspect

Yandex Webmaster's summary for a property: site quality index (SQI), pages in search, excluded pages, and the problems Yandex is currently reporting, by severity. Complements Google Search Console with the Yandex side of organic search, which matters for Russian, Turkish, Kazakh, Belarusian and Uzbek traffic. SQI and the problem severities are Yandex's own taxonomy with no Google equivalent, and Yandex serves no previous-period series, so there is nothing to compare against: the response carries these caveats in limitations, which should be passed on when reporting the numbers. When the problem list could not be read (a Yandex rate limit or timeout), problems is empty and warnings says so. Returns notConfigured: true (with a reason) when no Yandex account is connected, the connection has to be granted again, the property is not in it, or the caller holds a share of the property rather than owning it: Yandex data is owner-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
sqiNo
hintNo
hostIdNo
reasonNo
siteUrlNo
problemsNo
warningsNo
dataSourceNo
limitationsNo
excludedPagesNo
notConfiguredNo
pagesInSearchNo
problemCountsBySeverityNo
inspect_urlInspect a URLInspect

Runs the Google URL Inspection API for one URL and stores the result in the GSC Wizard inspection history. Returns the verdict, coverage state, robots.txt state, last crawl time, the fetched/crawled-as info, the Google-selected canonical (googleCanonical), the user-declared canonical (userCanonical), and a link to the result in Search Console (inspectionResultLink). A canonical field is null when Google did not report it for this URL (common for pages it has not indexed); it is never inferred from the page. GSC enforces a daily per-property quota, so call get_inspection_quota first if you plan to inspect many URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes
inspectionUrlYesThe fully-qualified URL to inspect. Must belong to siteUrl.

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteUrlNo
verdictNo
crawledAsNo
coverageStateNo
indexingStateNo
inspectionUrlNo
lastCrawlTimeNo
referringUrlsNo
userCanonicalNo
pageFetchStateNo
robotsTxtStateNo
googleCanonicalNo
inspectionResultLinkNo
list_algo_updatesList Google algorithm updates
Read-only
Inspect

Fetches confirmed Google ranking/algorithm updates from the official Search Status Dashboard. Filters to service_name="Ranking" so indexing/crawling incidents are excluded. Optionally clip to a date range: an update is included when its rollout (beginISO to endISO) overlaps the range, so one that started before startDate but was still rolling out inside it is listed. The feed is cached for 15 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional filter: only include updates that began on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".
startDateNoOptional filter: only include updates still rolling out on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
updatesNo
list_annotationsList chart annotations
Read-only
Inspect

Lists chart annotations visible to the user across scopes: platform-wide (Google ranking updates synced from the Search Status dashboard), account-wide (user notes), and property-scoped. Optionally restrict to one property. Property-scoped annotations are returned only when siteUrl is passed, and include every note on that property, whoever added it (the owner or a collaborator it is shared with), as on the GSC Wizard chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional filter: only include annotations on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".
siteUrlNo
startDateNoOptional filter: only include annotations on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or "null".

Output Schema

ParametersJSON Schema
NameRequiredDescription
annotationsNo
list_bing_sitesList Bing Webmaster sitesA
Read-only
Inspect

Lists the sites verified in the Bing Webmaster Tools account linked to GSC Wizard (via the stored Bing Webmaster API key). Use this to discover the exact site URLs Bing recognises before calling the other get_bing_* tools. Returns notConfigured: true when no Bing Webmaster API key is set up in the GSC Wizard app.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
countNo
sitesNo
dataSourceNo
notConfiguredNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only profile, but the description adds genuinely useful context beyond them: it depends on a stored Bing Webmaster API key and returns notConfigured: true when that key is absent. It does not describe the shape of the successful site list, though the output schema presumably covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then the usage rule, then the edge case. Every sentence carries information an agent needs; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema, this covers action, when to call it, credentials dependency, and the no-key failure mode. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The mention of the underlying API key is contextual rather than a caller-supplied parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') and resource ('sites verified in the Bing Webmaster Tools account linked to GSC Wizard'), and explicitly positions itself relative to the get_bing_* sibling family. An agent can tell it apart from the other Bing tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear when-to-use rule: discover the exact site URLs Bing recognises before calling the other get_bing_* tools. It names the related tool family but offers no explicit exclusion conditions (e.g. which Bing tool to use if the key is missing, or what to fall back on).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_content_groupsList content groupsB
Read-only
Inspect

Lists content groups for a property. Content groups partition the URL space using JSON rules (e.g. prefix matches, regex). Used in the dashboard for page-level aggregations.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
groupsNo
siteUrlNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful domain context by defining what a content group is and its JSON-rule basis, but discloses nothing about return shape, pagination, or scoping that goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the core action front-loaded and zero filler. Efficient and readable, though the dashboard sentence is more color than operational necessity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. For a simple read-only single-parameter list tool, the description covers purpose and domain meaning adequately; only pagination/ordering behavior is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for the single siteUrl parameter. 'For a property' weakly signals that the argument is a property URL, but there is no format or validation detail. With only one mostly self-evident required param, a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource ('Lists content groups') scoped to a property, and the follow-up sentence explains what content groups are ('partition the URL space using JSON rules'). This distinguishes it from get_content_group_performance or create/update/delete_content_group, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusion ('use X instead'), and no mention of the create/update/delete_content_group alternatives a caller might confuse it with. The dashboard reference gives context but not a trigger condition for invoking the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_experimentsList SEO experimentsA
Read-only
Inspect

Lists the SEO experiments (split tests) defined for a property in GSC Wizard, each with its control/variant URL groups, source, status, and start date. Use get_experiment_results to score one. By default only active experiments are returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes
includeArchivedNoInclude archived experiments as well as active ones.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
errorNo
siteUrlNo
experimentsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the burden is low. The description still adds useful behavioral context: the default active-only filtering and the shape of returned records, which is more than the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler; the core purpose leads, the sibling routing follows, and the default filter closes. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be detailed further, and the description still summarizes what each record contains. Combined with the default-filter note and sibling routing, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: includeArchived is documented in the schema, but siteUrl is not. The description partially compensates by stating the default filter ('only active experiments are returned'), which clarifies includeArchived's semantics, and implies siteUrl via 'for a property'. It does not, however, specify the siteUrl format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') plus resource ('SEO experiments (split tests)') and enumerates the returned fields (control/variant URL groups, source, status, start date). It is clearly distinguishable from the sibling get_experiment_results, which it explicitly positions as the scoring counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool and the condition that selects it ('Use get_experiment_results to score one'), and states the default scoping behavior. It lacks explicit when-not guidance (e.g., what to do if no experiments exist), but the routing context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ga4_custom_dimensionsGA4 custom dimensions & metrics
Read-only
Inspect

Lists the custom dimensions and custom metrics REGISTERED on the GA4 property linked to a site (GA4 Admin > Custom definitions) - the event parameters and user properties that property collects on top of the standard GA4 fields, such as a source_format or target_path sent with an internal_link_click event. Each entry carries the exact apiName (e.g. customEvent:source_format) that query_ga4_custom_dimensions takes. Call this FIRST: an event parameter that is not registered cannot be reported on at all, and GA4 answers an unregistered name with an empty report rather than an error, so a name must never be guessed. Returns a notConfigured result (not an error) when Google Analytics is not connected or no GA4 property is linked to the site in the GSC Wizard app.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
countNo
reasonNo
accountNo
siteUrlNo
dataSourceNo
propertyIdNo
definitionsNo
metricNamesNo
notConfiguredNo
dimensionNamesNo
reauthRequiredNo
list_ga4_propertiesList GA4 properties
Read-only
Inspect

Lists every Google Analytics 4 property readable by the connected Google accounts of the authenticated user, and which GSC Wizard sites each property is linked to (via linkedSiteUrls). Use it to discover GA4 property IDs or to verify the Analytics setup of a site. linkedSiteUrls covers only the sites of the GSC Wizard account this connection is authenticated as (returned as account): links made from a different GSC Wizard account come back empty here even though the app shows them. An empty result with connected: false means the Google Analytics consent has not been granted in the GSC Wizard app yet (connect Google Analytics at tool.gscwizard.com first), or, with reauthRequired: true, that it was granted but Google now rejects every such account, so it has to be reconnected. errors lists every Google account whose properties could not be read (its properties are missing from the list), with the reason.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
countNo
errorNo
errorsNo
accountNo
connectedNo
propertiesNo
reauthRequiredNo
list_gmc_accountsList Merchant Center accounts
Read-only
Inspect

Lists every Google Merchant Center account readable by the connected Google accounts of the authenticated user, and which GSC Wizard sites each account is linked to (via linkedSiteUrls). Use it to discover the Merchant Center account id to link to a property, or to verify the Shopping setup of a site. isAdvanced: true marks a multi-client parent account: reporting runs against a standalone account or one of its sub-accounts, never the parent itself. linkedSiteUrls covers only the sites of the GSC Wizard account this connection is authenticated as (returned as account). incomplete: true means the list is a floor, not the whole set: gaps and unprobedAccountIds say what could not be read or checked for sub-accounts, and errors names each connected Google account whose listing failed; retry for a complete list. An empty result with connected: false carries a reason: "no_scope" means the Merchant Center consent has not been granted in the GSC Wizard app yet (connect Merchant Center at tool.gscwizard.com first); "credentials_revoked" means it was granted but Google now rejects the stored credentials, so the Google account has to be reconnected on the Account page. On a shared property, linkedAccountId is withheld (null, with a note) until the owner enables the Merchant Center opt-in on your invite.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlNoOptional property URL as returned by list_sites. When given, the response also reports which Merchant Center account is currently linked to that property (`linkedAccountId`).

Output Schema

ParametersJSON Schema
NameRequiredDescription
gapsNo
hintNo
noteNo
countNo
errorNo
errorsNo
reasonNo
accountNo
siteUrlNo
accountsNo
connectedNo
incompleteNo
incompleteNoteNo
linkedAccountIdNo
gcpProjectNumberNo
unprobedAccountIdsNo
registrationRequiredNo
list_indexnow_submissionsList IndexNow submissions
Read-only
Inspect

Returns the IndexNow submission history for a property: URL, response code, submission source (manual / cron / mcp), and timestamp. Most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteUrlNo
submissionsNo
list_migration_redirectsList migration redirect mappingsA
Read-only
Inspect

Lists the saved redirect mappings (old URL -> new URL) used by the Migration Compare report, newest first. Mappings are grouped by the A/B property pair they belong to and optionally by a label, so one account can hold several migrations at once. Pass label or siteUrlA/siteUrlB to narrow. Use summaryOnly to get just the per-migration counts instead of the rows, which is the right call on a large mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOnly mappings carrying this label.
limitNo
siteUrlANoOnly mappings whose source property is this.
siteUrlBNoOnly mappings whose target property is this.
summaryOnlyNoReturn only the per-migration row counts, not the individual mappings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
redirectsNo
truncatedNo
migrationsNo
totalMappingsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and non-destructive, so safety is covered. The description adds real behavioral detail beyond that: results are newest-first, grouped by A/B property pair and optionally by label, and summaryOnly switches from rows to per-migration counts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences; ordering and grouping behavior is front-loaded, then filtering, then the summaryOnly shortcut. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no prose, and the description covers behavior, grouping, and filtering adequately. The only material gap is the undocumented limit parameter, a minor omission for an otherwise complete read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so baseline is 3, but the description explains the effect of label, siteUrlA/siteUrlB (narrowing) and summaryOnly (counts vs rows) in terms of intent rather than just field names. Only the limit parameter is left unexplained in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Lists) and resource (saved redirect mappings, old URL -> new URL) and ties it to the Migration Compare report. It is clearly distinguishable from the add/delete_migration_redirects siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete narrowing guidance (pass label or siteUrlA/siteUrlB) and a conditional recommendation (use summaryOnly on a large mapping). It doesn't explicitly contrast with sibling mutation tools, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_migrationsList saved migrations
Read-only
Inspect

Lists the site migrations saved on the account in the GSC Wizard app (Migration Compare), most recently updated first: id, name, mode (cross-property, two-urls or regex), the old (siteUrlA) and new (siteUrlB) property, go-live date, window settings, the redirect-mapping label, whether daily re-check alerts are on, and the last health snapshot from that re-check (status, recovery, risk score, redirect problem counts). Pass an id to get_migration_health as migrationId for the full analysis. Takes no arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
totalNo
truncatedNo
migrationsNo
list_report_clientsList report clients
Read-only
Inspect

Lists the client contacts on the account: the people who can be granted access to a shareable report. A client is just an email address (plus an optional name); they sign in with it to view reports shared with them. Use this to find a clientId for manage_report_access, or create_report_client to add a new contact.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
clientsNo
list_saved_filtersList saved filters
Read-only
Inspect

Lists saved filter presets, optionally restricted to one property. Each preset stores a JSON filter spec that mirrors the filter UI in the GSC Wizard dashboard. Presets belong to the property: with siteUrl you get every preset on it, including a property shared with you; without it you get the presets on the properties you own.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlNoRestrict to the presets on one property (one you own or one shared with you). Omit to list the presets on every property you own.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filtersNo
list_shared_reportsList shareable reportsA
Read-only
Inspect

Lists the shareable reports saved on the account, newest first, each with its view URL and the clients currently granted access. Use it to find a reportId before calling manage_report_access or delete_shared_report, or to audit who can see which report.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
reportsNo
unsharedCountNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description still adds useful behavioral context beyond that: the sort order and the fact that each row includes its view URL and granted clients. It stops short of describing pagination or what happens when more than 100 reports exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The scoping and payload facts come first, then the routing guidance, so the most important material is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still summarizes them. For a read-only listing tool with one optional parameter this is nearly complete; only the limit/truncation behavior is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'limit' parameter, and the description never mentions it. The schema carries the type, default, and min/max bounds, so the field is usable, but the description does not explain truncation or paging behavior, which matters given there is no cursor parameter. Baseline is three when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists the shareable reports saved on the account') and additionally pins down ordering ('newest first') and payload ('view URL and the clients currently granted access'). This is clearly distinguishable from neighbors like list_report_clients and create_shared_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the two follow-up tools this feeds (manage_report_access, delete_shared_report) and gives the selecting condition for each use case ('find a reportId' vs 'audit who can see which report'). No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitemapsList submitted sitemapsA
Read-only
Inspect

Lists every sitemap submitted to Google Search Console for a property, including submission timestamps, warning/error counts, and per-content-type submitted/indexed URL counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteUrlNo
sitemapsNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnlyHint=true, destructiveHint=false). The description adds return-content context (timestamps, warning/error counts, URL counts), which is useful but not deep behavioral detail. It doesn't state authentication requirements despite openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, information-dense sentence with no filler. Purpose and return contents are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be explained, yet the description still summarizes them helpfully. The main gap is lack of usage guidance relative to siblings like get_sitemap_performance and submit_sitemap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and only one parameter (siteUrl) exists. The description says 'for a property' but doesn't explicitly name siteUrl or clarify its format, so it adds minimal meaning beyond the schema's required field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Lists every sitemap submitted to Google Search Console for a property.' Distinguishes from submit_sitemap (write) and get_sitemap_performance (metrics), though it doesn't explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance. The agent must infer that this is for enumerating submitted sitemaps vs. get_sitemap_performance for performance data or submit_sitemap for adding one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitesList Search Console properties
Read-only
Inspect

Lists all Google Search Console properties connected to the authenticated GSC Wizard account. Returns the site URL (which may be a domain property prefixed with sc-domain: or a URL prefix property), tags, and which data source backs the property. Properties another user has shared with you are included too, badged with sharedBy (the owner) and accessLevel (READ_ONLY or FULL). permissionLevel is the Google Search Console permission (siteOwner / siteFullUser / siteRestrictedUser / siteUnverifiedUser), and readable: false means Google will refuse every data request for that property: it is listed in Search Console but not verified, so the user must verify it at search.google.com/search-console before any report will work. Do not attempt reads on a property with readable: false; tell the user to verify it instead. activated: false means the property is connected but is not shown on the account dashboard and is not synced to full storage, so every other property-scoped tool will refuse it with a selection error. Do not attempt reads on those either: either call set_dashboard_visibility to activate the property first, or choose one with activated: true. Properties shared with the caller are always activated: true, because the grant is itself the selection; a share whose owner no longer has an active GSC Wizard plan is left out, since no tool can read it. gscScope is the Search Console access of the Google connection behind the property: "full" allows submit_sitemap and create_gsc_property, "readonly" means Google will refuse those two (reads still work); absent when unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
list_tagsList property tagsA
Read-only
Inspect

Lists every tag defined on the account: account-level global tags plus any tag attached to a registered Search Console property, with the number of properties carrying each tag. Tags group properties into portfolios; feed a tag name to get_tag_group_view for an aggregated cross-site report, or to get_cross_site_summary for a totals-only view. Pass includeSites=true to also get the list of property URLs under each tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeSitesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsNo
totalTagsNo
totalSitesNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing the composition of the result set (global tags plus property-attached tags with per-tag property counts) and the effect of includeSites. It does not discuss auth, rate limits, or pagination, so it is not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core definition of what is listed, then routing guidance, then the parameter behavior. Every sentence adds distinct actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not enumerate return fields; it still usefully summarizes that per-tag property counts are returned. For a simple read-only listing with one optional flag, it covers what is listed, how to interpret tags, downstream use, and the parameter effect. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides no descriptions (0% coverage) for the single optional parameter includeSites. The description fully compensates: 'Pass includeSites=true to also get the list of property URLs under each tag.' That is exactly the semantic an agent needs to decide whether to set it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Lists every tag defined on the account: account-level global tags plus any tag attached to a registered Search Console property.' It also quantifies the return ('with the number of properties carrying each tag'), so an agent can distinguish this from siblings like manage_tags (mutation) or get_tag_group_view (report generation) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: tags group properties into portfolios and the output feeds get_tag_group_view for aggregated cross-site reports or get_cross_site_summary for totals-only views. However, these are downstream tools, not same-purpose alternatives, and there is no explicit when-not or prerequisite statement (e.g., that a registered property is required). Clear context but not a full when/when-not/alternatives treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_topic_clustersList topic clustersA
Read-only
Inspect

Lists topic clusters for a property. Each cluster groups a set of keywords under a name and is used by the dashboard to aggregate query-level metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteUrlNo
clustersNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful context about what a cluster contains (a name grouping keywords) and its role in dashboard metric aggregation, but says nothing about return shape beyond the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, fully front-loaded with the action and scope, no filler. Every clause earns its place by defining the resource and its consumer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and annotations cover the safety profile. The description covers purpose and resource semantics but omits any handling of empty/absent clusters or pagination, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter with 0% schema description coverage, so the description's mention of 'for a property' is the sole signal that siteUrl scopes the listing. That is minimal but sufficient for a single required param; no format details (URL shape) are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') and resource ('topic clusters') scoped to a property, and explains what a cluster is. Does not explicitly differentiate from sibling create_topic_cluster/update_topic_cluster/delete_topic_cluster, but the read semantics are clear from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage by mentioning the dashboard aggregation purpose, but never states when to call this vs. get_topic_cluster_performance or how to manage clusters. No explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tracked_urlsList tracked URLs
Read-only
Inspect

Paginated list of URLs in the GSC Wizard Indexing Tracker for a property, with optional status filter and URL substring search. Filter options: all, indexed, not_indexed, pending, errors, warnings. Returns the current verdict / coverage / indexing state, last-crawl time, the Google-selected and user-declared canonicals, and the Search Console link per URL, all from the latest inspection. A canonical is null when Google did not report it or the URL has not been inspected yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
filterNoall
searchNo
siteUrlYes
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
urlsNo
totalNo
messageNo
siteUrlNo
pageSizeNo
configuredNo
list_url_inspectionsList URL inspection history
Read-only
Inspect

Returns the inspection history GSC Wizard has stored for a property: verdict, coverage, indexing state, last-crawl time, the Google-selected and user-declared canonicals, and the Search Console link per URL. Most recent first. A null canonical with a non-null inspection_result_link means Google did not report it; when the link is null too, the row predates canonical storage (re-run inspect_url for a fresh result). Paged: follow pagination.nextOffset to walk the whole stored history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return per call (default 100, max 500).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
siteUrlYes
urlContainsNo
latestPerUrlNoCollapse repeat inspections of the same URL to the most recent one. Applied to the page after paging, so a page can return fewer rows than limit.

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteUrlNo
paginationNo
inspectionsNo
list_yandex_sitesYandex sites
Read-only
Inspect

Lists the sites in the connected Yandex Webmaster account, with their verification status and the canonical mirror Yandex resolved for each. Use this to find out which properties have Yandex data available. Only sites already added AND verified in Yandex Webmaster itself report data. The list is cached for ten minutes. Returns notConfigured: true when no Yandex account is connected, or when the connection has to be granted again (reason: reauth).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
sitesNo
reasonNo
dataSourceNo
limitationsNo
notConfiguredNo
manage_report_accessGrant or revoke report access
Destructive
Inspect

Grants or revokes client access to a saved shareable report. This is what makes a report openable at all: an ungranted report opens for nobody, including the account owner. After granting, the client opens the report URL, enters their email, and GSC Wizard emails them a login link. That self-serve sign-in only works once they hold a grant. Clients must already exist on the account: add them with create_report_client, find ids with list_report_clients. NOTE: unlike the web app's share dialog, this tool does NOT itself send a "report shared with you" notification. Either pass the recipient the report URL, or send the notification from Account > Shared Reports in GSC Wizard (https://tool.gscwizard.com/account/shared-reports), where each client has a Resend button. action "revoke" withdraws access. Granting is idempotent: a client who already had access stays granted and is reported as unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
reportIdYes
clientIdsYesClient ids from list_report_clients / create_report_client.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNo
noteNo
actionNo
grantedNo
revokedNo
reportIdNo
emailsSentNo
reportTitleNo
alreadyHadAccessNo
didNotHaveAccessNo
unknownClientIdsNo
manage_tagsManage property tags
Destructive
Inspect

Create, assign, unassign, rename, or delete property tags. Tags group Search Console properties into portfolios surfaced by list_tags and get_tag_group_view. Actions: "create" defines an account-level global tag (so it appears before any property uses it); "assign" adds a tag to the given properties; "unassign" removes it from the given properties; "rename" renames a tag across every property and the global list; "delete" removes a tag from every property and the global list. siteUrls is required for assign/unassign and ignored otherwise; newName is required for rename. assign/unassign also work on a property shared with you with full access (the tag is stored on that property, as in the app); create, rename and delete only touch your own properties and global tag list. A batch that would push any property past 50 tags changes nothing. For wholesale replacement of one property's tag set, use update_site instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes
actionYes
newNameNo
siteUrlsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagNo
actionNo
newNameNo
updatedNo
notTaggedNo
requestedNo
globalTagsNo
updatedSitesNo
alreadyTaggedNo
globalTagRemovedNo
globalTagRenamedNo
removedFromSitesNo
query_countriesCountry breakdown
Read-only
Inspect

Returns per-country performance (clicks, impressions, CTR, position) for a property over a date range. Country codes are ISO 3166-1 alpha-3. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
limitNoRows to return per call (default 100, max 1000).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
siteUrlNo
countriesNo
dataSourceNo
paginationNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
query_devicesDevice breakdown
Read-only
Inspect

Returns per-device-category performance (DESKTOP, MOBILE, TABLET) for a property over a date range. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see the response dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
devicesNo
siteUrlNo
dataSourceNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
query_ga4_custom_dimensionsGA4 custom dimension breakdown
Read-only
Inspect

Breaks GA4 traffic down by ONE custom dimension registered on the property linked to a site (the site's own event parameters or user properties, e.g. customEvent:source_format), optionally CROSSED with a second dimension - which is how a question like "which article sent how many readers to which page" is answered: primary customEvent:source_path, secondary customEvent:target_path, filtered to the one event that carries them. Metrics per row are eventCount, sessions, activeUsers and keyEvents, plus any registered custom metrics asked for. Run list_ga4_custom_dimensions first for the exact names; an unregistered name is rejected here rather than silently returning an empty report. Returns a notConfigured result (not an error) when Google Analytics is not connected or no GA4 property is linked. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of breakdown rows returned.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
dimensionNoapiName of the custom dimension to break down by, from list_ga4_custom_dimensions (e.g. customEvent:source_format). Omit to use the property's first registered custom dimension; the response reports the choice.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
valueFiltersNoNarrow the whole report to rows whose custom dimension matches a value - the way to drill from "every source_path" into "the target pages of ONE source_path". Filters AND together.
customMetricsNoUp to 3 registered custom METRIC apiNames to add as extra columns (from list_ga4_custom_dimensions metricNames).
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
secondaryDimensionNoOptional second dimension to cross the first with, producing one row per PAIR of values. Either another custom dimension apiName, or one of: eventName, pagePath, landingPage, sessionDefaultChannelGroup, sessionSourceMedium, country, deviceCategory.
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
accountNo
metricsNo
siteUrlNo
summaryNoMetric totals keyed by GA4 metric name.
rowCountNo
timeZoneNo
dimensionNo
siteScopeNo
totalRowsNo
truncatedNo
dataSourceNo
propertyIdNo
prevSummaryNo
hasComparisonNo
notConfiguredNo
reauthRequiredNo
comparisonRangeNo
availableMetricsNo
secondaryDimensionNo
availableDimensionsNo
query_ga4_reportGA4 breakdown report
Read-only
Inspect

Runs ONE Google Analytics 4 dimension breakdown for the GA4 property linked to a GSC Wizard site: channel, sourceMedium, page, landingPage, country, device, event, date (daily trend) or hostName. Each dimension carries its own metric set (returned in metrics). Set secondaryDimension to "date" or "hostName" to split every row further, e.g. dimension "event" + secondaryDimension "date" shows on which days an event fired; each row then carries that field (dates as YYYY-MM-DD). Rows include prev* fields that are only meaningful when a comparison range is given (hasComparison); date breakdowns take no comparison range. Only the first limit rows are returned (truncated and note say when more exist); to follow one event, pass filters: { event: [""] }. When the GA4 property is shared with other sites, results are limited to this site's hostnames and siteScope says so (on a shared property a hostName filter narrows within that scope; only the owner can replace it). Rates (engagementRate, bounceRate) are fractions 0-1, not percentages. Returns a notConfigured result (not an error) when Google Analytics is not connected or no GA4 property is linked to the site in the GSC Wizard app. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoOptional GA4 dimension filters applied to every report in the call. Within a list field the values OR together; different fields AND together. Omit entirely for unfiltered data.
siteUrlYes
dimensionYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
comparisonEndDateNoOptional. End of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).
secondaryDimensionNoOptional second dimension that splits every row: "date" (per day) or "hostName" (per site/stream host). Must differ from `dimension`.
comparisonStartDateNoOptional. Start of the comparison period as YYYY-MM-DD. Provide BOTH comparison dates to compare two periods; omit both for no comparison (prev* fields are then 0 and hasComparison false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
noteNo
rowsNo
rangeNo
reasonNo
accountNo
metricsNo
siteUrlNo
rowCountNo
timeZoneNo
dimensionNo
siteScopeNo
totalRowsNo
truncatedNo
dataSourceNo
propertyIdNo
hasComparisonNo
notConfiguredNo
reauthRequiredNo
comparisonRangeNo
secondaryDimensionNo
query_search_analyticsQuery Search Console analytics
Read-only
Inspect

Runs a Search Console searchAnalytics.query against one of the user's properties. Supports date / query / page / country / device / searchAppearance dimensions, dimension filters, and any of the supported search types (web, image, video, news, discover, googleNews). Use this for ad-hoc questions like "top queries last 28 days" or "page-level performance for /pricing". Eligible requests are served from the GSC Wizard ClickHouse warehouse (longer history, no sampling); requests using searchAppearance, the googleNews type or 3+ distinct dimensions fall back to the live Search Console API. The response dataSource says which path ran. Rows are sorted by clicks, or by date first when date is one of the dimensions. Regex filters use RE2 (no lookahead or backreferences; use excludingRegex to exclude). Returns 100 rows by default: read pagination in the response to see whether the result was truncated, and page through with startRow or ask for more at once with rowLimit. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
filtersNoDimension filters joined with AND. Pass an empty list or omit for no filtering.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
rowLimitNoRows to return per call (default 100, max 25000). Large values return a lot of raw rows; prefer paging with startRow.
startRowNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
dimensionsNo
searchTypeNoweb

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rowsNo
endDateNo
siteUrlNo
rowCountNo
startDateNo
dataSourceNo
dimensionsNo
paginationNo
searchTypeNo
dataMaturityNo
settledThroughNo
warehouseLatestDateNo
query_top_pagesTop landing pagesA
Read-only
Inspect

Returns the top landing pages for a property over a date range, sorted by clicks. Convenience wrapper around query_search_analytics. Served from the ClickHouse warehouse when available, otherwise the live Search Console API (see the response dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
limitNoRows to return per call (default 100, max 1000).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, but the description adds real behavioural context: it may be served from the ClickHouse warehouse or the live Search Console API (surfaced in `dataSource`), and data lags ~2-3 days. That backend variability is not derivable from the annotations or schema and is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences: purpose and sort first, then wrapper relationship, then data-source and date-default behaviour. No redundant filler; each clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and annotations cover the safety profile; the description fills in backend provenance and date-window defaults. It is essentially complete for a 9-param read tool, with only explicit alternative-selection guidance missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 78%, so most parameters (brand, limit, offset, dates, content/topic filters) are already documented inline, including the 28-settled-day default. The description largely restates the date-range behaviour rather than adding syntax or format meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns the top landing pages for a property over a date range, sorted by clicks') and anchors it to the underlying primitive ('Convenience wrapper around query_search_analytics'). An agent can distinguish it from query_top_queries and query_search_analytics without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Naming query_search_analytics as the parent implies this is the convenient preset for landing-page rankings, and the date-omission guidance is actionable. However, it never says when to prefer this over siblings like get_page_performance or breakdown_by_path, nor any when-not condition, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_top_queriesTop search queriesA
Read-only
Inspect

Returns the top search queries for a property over a date range, sorted by clicks. Convenience wrapper around query_search_analytics for the most common request. Served from the GSC Wizard ClickHouse warehouse (longer history, no sampling) when available, otherwise from the live Search Console API; the response dataSource field says which. Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional. Narrow to queries matching the property's branded keywords ('branded') or to all others ('non_branded'). Needs branded keywords set (update_site brandedKeywords); see get_filter_options.
limitNoRows to return per call (default 100, max 1000).
offsetNoRows to skip. Use pagination.nextOffset from a previous call to get the next page.
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
contentGroupIdNoOptional. Narrow to pages in this content group (id from get_filter_options or list_content_groups). Groups whose rules cannot be applied as a filter are refused; get_filter_options says which.
topicClusterIdNoOptional. Narrow to queries in this topic cluster (id from get_filter_options or list_topic_clusters). Clusters whose keywords cannot be applied as a filter are refused.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
titleNo
blocksNoStacked sub-blocks (kind="sections").
sourceNo
columnsNoColumn defs (kind="table").
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
dataMaturityNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, openWorld), so the description goes well beyond structured data: it discloses the dual data source (ClickHouse warehouse vs live API), the no-sampling/longer-history tradeoff, that the response `dataSource` field reports which was used, and the ~2-3 day data lag. This is exactly the operational context an agent cannot infer elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core purpose before moving to the wrapper relationship, data-source behavior, and date defaults. Every sentence carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter analytics tool with an output schema and rich annotations, the description supplies the missing operational pieces: source selection, sampling behavior, and default date-window logic. Since an output schema exists, it correctly avoids explaining return values beyond the one useful `dataSource` note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (78%), and the description largely restates what the schema already documents about the optional date range and its 28-day default rather than adding new meaning. It does not compensate for the undocumented params (siteUrl, searchType), so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (returns top search queries), the sort order (by clicks), and the scope (for a property over a date range). It explicitly frames itself as a wrapper around query_search_analytics, letting an agent separate it from that sibling and from query_top_pages without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the underlying alternative (query_search_analytics) and positions this as 'the most common request', which gives clear context for when to reach for it. It lacks an explicit when-not clause (e.g. 'use query_search_analytics for advanced filtering'), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_tracked_urlsRemove URLs from the indexing trackerB
Destructive
Inspect

Removes URLs from the GSC Wizard Indexing Tracker for a property. Pass the full URL strings to stop tracking. Returns the number of rows actually removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
removedNo
siteUrlNo
requestedNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation/safety profile is covered. The description adds a genuinely useful nuance with 'Returns the number of rows actually removed,' implying partial/no-op removal when URLs were not tracked, but it says nothing about permissions, the 1800-item cap, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler, and the action plus scope are front-loaded ahead of the parameter hint and return note. Nothing is redundant enough to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return-count sentence is a bonus rather than a necessity, and the core destructive operation is described. However, for a destructive 2-param mutation with no schema descriptions, the definition leaves the batching limit and the handling of untracked URLs for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and neither parameter has a description, so the description must compensate. It clarifies that 'urls' must be full URL strings (not paths) and that siteUrl identifies the property, but it omits the minItems=1 / maxItems=1800 bounds and required-ness context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Removes URLs from the GSC Wizard Indexing Tracker') and scopes it 'for a property,' so an agent can distinguish it from get_indexing_tracker or list_tracked_urls. It does not explicitly name its inverse sibling add_tracked_urls, but 'stop tracking' makes the direction unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Pass the full URL strings to stop tracking' implies how to invoke it, but there is no explicit when-to-use vs. when-not guidance and no mention of alternatives such as add_tracked_urls or list_tracked_urls. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_feed_auditRun feed auditInspect

Queues a Merchant Center feed audit for a GSC Wizard site: 21 deterministic checks over the synced product catalog (title and description length, duplicate titles / descriptions / images / URLs, GTIN, category, product type and required attributes, image size and ratio) plus a crawl of the product pages on the owner-approved host allowlist (HTTP status, JSON-LD Product schema, price and title consistency, H1 and title-element counts, page images missing from the feed), rolled up into a 0-100 Feed Score. The tool only ENQUEUES: the audit runs in the GSC Wizard app worker (the feed plane within minutes, the page crawl at a politeness-bounded pace over every distinct product URL, so a large catalog can take hours), and enqueued: false with a skipReason means a run is still in progress (run_in_progress, with the run summary in run), a run for today already exists, or one completed inside the 28-day cadence (pass force: true to override the cadence; the one-per-day rule cannot be overridden). Each user may start at most 3 runs per 24 hours (rate_limited beyond that; a call that queues nothing does not count). Poll get_feed_audit_results with the returned runDate for status and the score. Returns a notConfigured result (not an error) when Merchant Center is not connected, is connected on another Google login than the property's Search Console one (reason "gmc_on_other_account": the audit runs through the sync, which reads only through the Search Console account), its credentials were revoked, or no Merchant Center account is linked to the site in the GSC Wizard app. Requires full access on a shared property.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoQueue an audit even when one completed inside the last 28 days (default false). Cannot bypass the one-audit-per-property-per-day rule or a run still in progress.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").

Output Schema

ParametersJSON Schema
NameRequiredDescription
runNo
hintNo
forceNo
rangeNo
reasonNo
accountNo
runDateNo
siteUrlNo
cachedAtNo
enqueuedNo
dataSourceNo
skipReasonNo
gmcAccountIdNo
notConfiguredNo
truncationReasonNo
score_opportunitiesScore ranking opportunities
Read-only
Inspect

Ranks queries by an impression-weighted opportunity score that favours near-threshold positions (positions 3-30) with low current CTR, and estimates the extra clicks available if CTR improved. potentialClicks is the extra clicks a 25% CTR would bring a query ranked lower than position 3. It is 0 when the query already clicks at or above that benchmark (common for small or navigational queries), which says nothing about its rank. Sorted by score. CTR values are percentages (0-100). Scans up to 25,000 queries: on the warehouse the ones with the most impressions; on the live API its click order. truncated: true means the scan hit that cap (scanNote says what that left out). Served from the GSC Wizard ClickHouse warehouse when available, otherwise the live Search Console API (see dataSource). Date range is optional: omit startDate/endDate to analyze the last 28 settled days (data lags ~2-3 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date. Omit BOTH startDate and endDate to analyze the last 28 settled days automatically (Search Console data lags ~2-3 days). Never pass null or the string "null".
searchTypeNoweb
minImpressionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
rangeNo
siteUrlNo
scanNoteNo
scanLimitNo
truncatedNo
dataSourceNo
dataMaturityNo
opportunitiesNo
minImpressionsNo
settledThroughNo
warehouseLatestDateNo
set_dashboard_visibilityShow or hide properties on the dashboardInspect

Shows or hides registered properties on the GSC Wizard dashboard, the same switch as the app's Dashboard Management page. Visibility is also what makes a property usable by the other MCP tools, so use this to bring a newly added property into scope. Showing a property consumes a dashboard slot from the plan and is refused when the plan limit is reached; ClickHouse-synced properties are always shown and consume no slot. Hiding a property only removes it from the workspace: no data is deleted, and it can be shown again at any time. The response reports slot usage before and after.

ParametersJSON Schema
NameRequiredDescriptionDefault
visibleYestrue = show on the dashboard (consumes a slot), false = hide.
siteUrlsYesRegistered property URLs, as returned by list_sites.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
slotsNo
updatedNo
visibleNo
unchangedNo
notRegisteredNo
submit_indexnow_urlsSubmit URLs to IndexNowInspect

Pings IndexNow for the given URLs, telling participating search engines (Bing, Yandex, Seznam) that the pages have changed. The property needs an IndexNow API key and a published key file: check get_indexnow_settings first. If no key is set: 1) call update_indexnow_settings with generateKey: true; 2) publish the returned keyFileContent as a plain-text file at the returned keyFileUrl (the root of every host you submit URLs for); 3) call submit_indexnow_urls again. URLs are grouped by host before submission. Up to 100 URLs per call. Note that the usual 202 response means "accepted, key validation pending", not delivered: engines fetch the site key file afterwards and silently discard the batch if it is not reachable, so do not report a 202 as confirmed indexing.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes
siteUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNo
actionsNo
batchIdNo
keyFileNo
messageNo
outcomeNo
siteUrlNo
attemptedNo
submittedNo
keySiteUrlNo
submissionsNo
historyLoggedNo
skippedOffPropertyNo
pendingKeyValidationNo
submit_sitemapSubmit a sitemap to Search Console
Idempotent
Inspect

Submits (or re-submits) an existing sitemap URL to Google Search Console for a property, the same action as "Add a new sitemap" in the Sitemaps report. It does not create or host a sitemap: the file must already be published and reachable at the URL you pass; this only registers it with Google or asks Google to fetch it again after new content went live. Every sitemap URL must be on the property host or a subdomain of it. Up to 20 sitemaps per call. Submitting is idempotent and queues a download; it does not index anything by itself, and Google reports parse warnings/errors only after it has fetched the file, so a freshly submitted sitemap normally comes back pending. Requires a Google account connected with full Search Console access (a read-only connection is refused before anything is sent). If a rate limit or a permission refusal stops a batch after some sitemaps were accepted, the accepted ones are still reported and the rest are listed in notAttempted, with stopReason. Use list_sitemaps to see what is already submitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYes
sitemapUrlsYesAbsolute URLs of already-published sitemaps, e.g. ["https://example.com/sitemap_index.xml"]. Each must be on the property host or a subdomain of it. Max 20.

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNo
actionsNo
messageNo
resultsNo
siteUrlNo
attemptedNo
submittedNo
stopReasonNo
notAttemptedNo
retryAfterSecondsNo
update_annotationUpdate a chart annotation
Destructive
Inspect

Edits a chart annotation the user owns: its date, label, description, category or colour. Only the fields you pass change. Scope cannot be changed (an account-wide annotation cannot be moved onto a property or vice versa); delete it and create a new one instead. Platform-scoped annotations are system events and cannot be edited via this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNo
labelNo
categoryNo
eventDateNoThe date the event occurred, as YYYY-MM-DD (e.g. 2026-06-08).
descriptionNo
annotationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
annotationNo
update_content_groupUpdate a content group
Destructive
Inspect

Edits an existing content group: its name, description, color, or matching rules. Only the fields you pass change; omit a field to leave it untouched. Passing rules REPLACES the whole rule list (rules have no stable ids across edits), so read the current rules with list_content_groups first if you mean to add one. Changing rules reassigns pages immediately in every report that uses the group; nothing is recomputed or stored, so the next get_content_group_performance call reflects the edit. A regex rule that cannot compile is rejected; one that is valid but unsupported by the warehouse or skipped as ReDoS-prone is accepted and reported in ruleWarnings. Relay those, since a skipped pattern matches no pages at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
colorNo
rulesNoReplaces the entire rule list. Same { type, value } shape as create_content_group.
groupIdYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
groupNo
update_indexnow_settingsSet the IndexNow API key
Destructive
Inspect

Sets, generates, rotates or clears the IndexNow API key for a property. The key is what search engines use to verify submissions from submit_indexnow_urls. To set IndexNow up, pass generateKey: true: a valid key is created and returned with keyFileUrl and keyFileContent. IMPORTANT: the site owner must then publish keyFileContent as a plain-text file at keyFileUrl (at the root of every host whose URLs will be submitted), or every submission is discarded. generateKey refuses to replace an existing key; to rotate, pass clear: true first. You can also pass your own indexnowApiKey (8-128 letters, digits and hyphens), for example one whose key file the site already publishes: the file is checked right after saving and keyFileVerified reports the result (true = ready to submit). Pass clear: true to remove the key, which disables IndexNow submissions for the property. Reading the key back later (get_indexnow_settings) only ever returns it masked.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoRemove the stored key instead of setting one. Disables IndexNow submissions.
siteUrlYes
generateKeyNoCreate a new valid key and return the key file to publish. Only when the property has no key yet; clear the old key first to rotate.
indexnowApiKeyNoThe new key. Omit when using generateKey or clear.

Output Schema

ParametersJSON Schema
NameRequiredDescription
clearedNo
siteUrlNo
nextStepNo
generatedNo
keyFileUrlNo
keyFileUrlsNo
keyFileErrorNo
keyFileContentNo
keyFileVerifiedNo
indexnowApiKeySetNo
indexnowApiKeyMaskedNo
update_saved_filterUpdate a saved filter
Destructive
Inspect

Renames a saved filter preset and/or replaces its filter rows. Only the fields you pass change. filters is the list of filter rows (dimension / operator / value), in the same shape list_saved_filters returns, and is REPLACED wholesale, not merged: read the current rows with list_saved_filters and pass them back with your edits applied. Passing filters without filterLogic resets the preset to AND, so pass both when the preset used OR. The property's owner or anyone with full access to it may edit any preset on it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
filtersNoReplaces the stored filter rows. Omit to keep the current ones.
filterIdYes
filterLogicNoOnly read when `filters` is passed; the two are stored together.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filterNo
update_siteUpdate a property
Destructive
Inspect

Updates the GSC Wizard metadata for a property: tags, branded keywords, sitemap URL list, and how fast GSC Wizard may crawl the site. Only fields you pass are updated; omit a field to leave it unchanged. Pass null for a crawl-rate field to clear the override and go back to the app default. On a property shared with you, FULL access is needed (as in the property settings of the web app); READ_ONLY access is refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
siteUrlYes
sitemapUrlsNo
brandedKeywordsNo
crawlMinDelayMsNoMinimum milliseconds between crawl batches (0-60000). Composes with robots.txt Crawl-delay; the longer wait wins. null = app default.
crawlMaxConcurrencyNoPages GSC Wizard may fetch from this site at once (1-10). Lower it if the site answers 429 during an audit. null = app default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteNo
update_topic_clusterUpdate a topic clusterA
Destructive
Inspect

Edits an existing topic cluster's name or keyword list. Only the fields you pass change. keywords REPLACES the whole list by default; pass mode "add" or "remove" to merge into or subtract from the current keywords instead, which is what you usually want when extending a cluster. A keyword is matched as a case-insensitive substring unless it is wrapped in slashes (/seo ?tools/), which makes it a regex. Read the current list with list_topic_clusters first when replacing.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoHow `keywords` is applied: "replace" (default) swaps the list, "add" merges new keywords in (deduplicated, case-insensitively), "remove" deletes the listed ones.replace
nameNo
keywordsNo
clusterIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
clusterNo
keywordsAfterNo
keywordsBeforeNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations flag destructiveHint=true, and the description justifies it by explaining that keywords REPLACES the whole list by default and how to avoid that with mode add/remove. It also discloses the partial-update semantics ('Only the fields you pass change'). It stops short of auth/permission or reversibility notes, but adds real context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then dense but relevant detail on replacement vs merge and keyword matching. Four sentences, each carrying information (destructive default, mode alternatives, regex syntax, list-first tip). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with an output schema already present, the description covers partial-update behavior, the destructive default, merge modes, and matching rules. Nothing critical to correct invocation is missing, though permission requirements are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (25%), so the description must carry the load, and it does: it explains keywords semantics (full replacement vs add/remove merge), substring vs slash-delimited regex matching, and mode behavior. clusterId and name constraints are left to the schema, but the high-value keyword semantics are well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Edits') and resource ('an existing topic cluster') plus the fields it operates on (name, keyword list). 'Existing' implicitly distinguishes it from create_topic_cluster and delete_topic_cluster among its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear mode-selection guidance ('mode "add" or "remove" ... which is what you usually want when extending a cluster') and a prerequisite ('Read the current list with list_topic_clusters first when replacing'). It doesn't state when to reach for a different tool entirely, but the routing within the tool is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • Changedcompare_migration11 fields changed
      • addedInput schema / properties / goLiveDate
        Added value: +{
        +  "description": "Optional. First day the new setup was live, as YYYY-MM-DD. When given, side A is read over the before window and side B over the after window around this date (see windowStrategy), and the result adds windows, recoveryPct and trend buckets. Do not combine with startDate/endDate.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / urlPrefixA / description
        Previous value: -"Side A URL prefix (required for two-urls)."New value: +"Side A URL prefix (required for two-urls): a full URL (\"https://acme.com/old-blog/\"), a host (\"blog.acme.com/\") or a path on any host (\"/old-blog/\"), as list_migrations returns them."
      • changedInput schema / properties / urlPrefixB / description
        Previous value: -"Side B URL prefix (required for two-urls)."New value: +"Side B URL prefix (required for two-urls), in the same forms as urlPrefixA."
      • addedInput schema / properties / windowDays
        Added value: +{
        +  "description": "Only with goLiveDate. Window length in days for \"recent\" and \"from-go-live\" (default 28). Shortened to the post-launch days available.",
        +  "maximum": 365,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / windowStrategy
        Added value: +{
        +  "description": "Only with goLiveDate. \"recent\" (default): the last windowDays days vs the windowDays days before go-live, where the migration stands now. \"from-go-live\": the first windowDays days after go-live vs the windowDays days before, the launch dip included. \"full\": the 90 days before go-live vs every day since (lengths differ; per-day figures and recovery stay comparable).",
        +  "enum": [
        +    "recent",
        +    "from-go-live",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / yoyBaseline
        Added value: +{
        +  "description": "Only with goLiveDate. Compare the after window with the same weeks one year (364 days) earlier instead of the days before go-live, which removes seasonality. Default false.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / recoveryNote
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
      • addedOutput schema / properties / recoveryPct
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / truncated / $ref
        Added value: +"#/properties/windows/anyOf/0/properties/yoyBaseline"
      • removedOutput schema / properties / truncated / type
        Removed value: -[
        -  "boolean",
        -  "null"
        -]
      • addedOutput schema / properties / windows
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "after": {
        +          "$ref": "#/properties/windows/anyOf/0/properties/before"
        +        },
        +        "before": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "days": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "end": {
        +                  "$ref": "#/properties/mode"
        +                },
        +                "start": {
        +                  "$ref": "#/properties/mode"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "daysSinceGoLive": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "equalLength": {
        +          "$ref": "#/properties/windows/anyOf/0/properties/yoyBaseline"
        +        },
        +        "goLiveDate": {
        +          "$ref": "#/properties/mode"
        +        },
        +        "latestDate": {
        +          "$ref": "#/properties/mode"
        +        },
        +        "strategy": {
        +          "$ref": "#/properties/mode"
        +        },
        +        "timeline": {
        +          "$ref": "#/properties/windows/anyOf/0/properties/before"
        +        },
        +        "warnings": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "code": {
        +                "$ref": "#/properties/mode"
        +              },
        +              "message": {
        +                "$ref": "#/properties/mode"
        +              },
        +              "severity": {
        +                "$ref": "#/properties/mode"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "windowScale": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "yoyBaseline": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedcreate_shared_report1 field changed
      • changedInput schema / properties / dataSourceType / enum
        Previous value: -[
        -  "inline",
        -  "queries",
        -  "pages",
        -  "countries",
        -  "rankings",
        -  "content-group",
        -  "page-performance"
        -]New value: +[
        +  "inline",
        +  "queries",
        +  "pages",
        +  "countries",
        +  "rankings",
        +  "content-group",
        +  "page-performance",
        +  "migration"
        +]
    • Addedget_migration_health
    • Addedlist_migrations
  2. 5 tool updates
    • Changedget_feed_audit_results3 fields changed
      • addedOutput schema / properties / staleNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / syncNotice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / syncPaused
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_gmc_best_sellers1 field changed
      • addedOutput schema / properties / reportUnavailable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_gmc_competitors1 field changed
      • addedOutput schema / properties / reportUnavailable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_gmc_pricing_insights1 field changed
      • addedOutput schema / properties / reportUnavailable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_product_listing_status2 fields changed
      • addedOutput schema / properties / syncNotice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / syncPaused
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  3. 2 tool updates
    • Changedget_product_listing_status4 fields changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to skip, for reading past the first page: pass the previous answer's nextOffset (default 0, max 100,000).",
        +  "maximum": 100000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / merchantActionCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / nextOffset
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / offset
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
    • Changedget_yandex_query_stats1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Rows to return, across pages. Yandex serves 500 per request and holds 3,000, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused."New value: +"Rows to return, across pages. Yandex serves 500 per request and at most 3,000 for a window, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused."
  4. 63 tool updates
    • Changedadd_site9 fields changed
      • addedOutput schema / properties / accountRepaired
        Added value: +{
        +  "$ref": "#/properties/alreadyRegistered"
        +}
      • addedOutput schema / properties / alreadyRegistered
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / site / properties / activated
        Added value: +{
        +  "$ref": "#/properties/alreadyRegistered"
        +}
      • changedOutput schema / properties / site / properties / connectedAt / $ref
        Previous value: -"#/properties/site/properties/id"New value: +"#/properties/message"
      • addedOutput schema / properties / site / properties / id / $ref
        Added value: +"#/properties/message"
      • removedOutput schema / properties / site / properties / id / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / site / properties / permissionLevel / $ref
        Previous value: -"#/properties/site/properties/id"New value: +"#/properties/message"
      • changedOutput schema / properties / site / properties / siteUrl / $ref
        Previous value: -"#/properties/site/properties/id"New value: +"#/properties/message"
    • Changedanalyze_cannibalization1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_ctr_curve1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedanalyze_sampling_impact1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedaudit_onpage_seo4 fields changed
      • addedOutput schema / properties / budgetNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / contextNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / notAudited
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
    • Changedbreakdown_by_path5 fields changed
      • addedOutput schema / properties / groupCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / pageRowsCapped
        Added value: +{
        +  "$ref": "#/properties/truncated"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedbulk_inspect_urls6 fields changed
      • addedOutput schema / properties / results / items / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / skipReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / retryAfterSeconds
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
      • addedOutput schema / properties / stopReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedcheck_tracked_url_now7 fields changed
      • addedOutput schema / properties / notChecked
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / retryAfterSeconds
        Added value: +{
        +  "$ref": "#/properties/count"
        +}
      • addedOutput schema / properties / results / items / properties / skipReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / results / items / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / stopped
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "message": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "reason": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "retryAfterSeconds": {
        +          "$ref": "#/properties/count"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedcompare_migration2 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/mode"
        +}
    • Changeddetect_anomalies2 fields changed
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "calendarDays": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "daysAnalyzed": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "daysWithData": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "firstDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "lastDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "trailingGap": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "lastDataDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "missingDays": {
        +                  "$ref": "#/properties/sensitivity"
        +                },
        +                "note": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "status": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "zeroFilledDays": {
        +          "$ref": "#/properties/sensitivity"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changeddetect_change_points2 fields changed
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "calendarDays": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "daysWithData": {
        +          "$ref": "#/properties/sensitivity"
        +        },
        +        "firstDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "lastDataDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "trailingGap": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "lastDataDate": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "missingDays": {
        +                  "$ref": "#/properties/sensitivity"
        +                },
        +                "note": {
        +                  "$ref": "#/properties/siteUrl"
        +                },
        +                "status": {
        +                  "$ref": "#/properties/siteUrl"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "zeroFilledDays": {
        +          "$ref": "#/properties/sensitivity"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedfind_decaying_content5 fields changed
      • changedInput schema / properties / comparisonEndDate / description
        Previous value: -"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here."
      • changedInput schema / properties / comparisonStartDate / description
        Previous value: -"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here."
      • addedOutput schema / properties / decaying / items / properties / baselineClicksScaled
        Added value: +{
        +  "$ref": "#/properties/recent/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / windowNormalization
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "comparisonDays": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        },
        +        "currentDays": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "scale": {
        +          "$ref": "#/properties/recent/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedfind_page_poaching_opportunities5 fields changed
      • addedOutput schema / properties / ctrSourceNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / scanLimit
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / scanNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedforecast_traffic3 fields changed
      • changedInput schema / properties / granularity / description
        Previous value: -"Forecast granularity. Weekly needs >= 13 weeks of history, monthly >= 6 months."New value: +"Forecast granularity. Weekly needs about 105 days of history (13 complete weeks), monthly about 240 days (6 complete months)."
      • addedOutput schema / properties / forecastNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_branded_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_content_group_performance2 fields changed
      • addedOutput schema / properties / fallbackReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_cross_site_summary2 fields changed
      • addedOutput schema / properties / perSite / items / properties / shared
        Added value: +{
        +  "$ref": "#/properties/scope/anyOf/0/properties/truncated"
        +}
      • changedOutput schema / properties / scope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "days": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "searchType": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        -      },
        -      "siteCount": {
        -        "$ref": "#/properties/scope/anyOf/0/properties/days"
        -      },
        -      "tag": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "truncated": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "days": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "searchType": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/tag"
        +      },
        +      "sharedCount": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "siteCount": {
        +        "$ref": "#/properties/scope/anyOf/0/properties/days"
        +      },
        +      "tag": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "truncated": {
        +        "type": [
        +          "boolean",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_decay_overview2 fields changed
      • addedOutput schema / properties / incompletePeriods
        Added value: +{
        +  "$ref": "#/properties/periods"
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_experiment_results3 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / windowNormalization
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "comparisonDays": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "currentDays": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "scale": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_feed_audit_results4 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / crawlNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / run / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "bySeverity": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": false,
        -            "properties": {
        -              "critical": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "info": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              },
        -              "warning": {
        -                "$ref": "#/properties/range/anyOf/0/properties/days"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "completedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "coverage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "createdAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "error": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "offersAudited": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "offersTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pageScored": {
        -        "$ref": "#/properties/notConfigured"
        -      },
        -      "pagesFailed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesFetched": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "pagesTotal": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "perCheck": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "applicable": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                },
        -                "failed": {
        -                  "$ref": "#/properties/range/anyOf/0/properties/days"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "runDate": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "runId": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "score": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreFeed": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scorePage": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "scoreVersion": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "startedAt": {
        -        "$ref": "#/properties/siteUrl"
        -      },
        -      "status": {
        -        "$ref": "#/properties/siteUrl"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "bySeverity": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "critical": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "info": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              },
        +              "warning": {
        +                "$ref": "#/properties/range/anyOf/0/properties/days"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "completedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "coverage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "crawlBlocked": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "createdAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "error": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "offersAudited": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "offersTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pageScored": {
        +        "$ref": "#/properties/notConfigured"
        +      },
        +      "pagesFailed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesFetched": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "pagesTotal": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "perCheck": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "applicable": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "failed": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "runDate": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "runId": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "score": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreFeed": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scorePage": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "scoreVersion": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "startedAt": {
        +        "$ref": "#/properties/siteUrl"
        +      },
        +      "status": {
        +        "$ref": "#/properties/siteUrl"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_ga4_ecommerce2 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedget_ga4_error_pages2 fields changed
      • addedOutput schema / properties / prevTotals
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "activeUsers": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "screenPageViews": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "sessions": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedget_ga4_key_events3 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / metricMode
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedget_ga4_overview3 fields changed
      • changedInput schema / properties / comparisonEndDate / description
        Previous value: -"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here."
      • changedInput schema / properties / comparisonStartDate / description
        Previous value: -"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here."
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
    • Changedget_gmc_best_sellers2 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_competitors2 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_pricing_insights3 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • changedOutput schema / properties / summary / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "aboveBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "atBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "belowBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "competitivenessRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "effectivenessCounts": {},
        -      "insightsRows": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "products": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "withBenchmark": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      },
        -      "withSuggestion": {
        -        "$ref": "#/properties/range/anyOf/0/properties/days"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "aboveBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "atBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "belowBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "competitivenessRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "currencyMismatch": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "effectivenessCounts": {},
        +      "insightsRows": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "products": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "withBenchmark": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      },
        +      "withSuggestion": {
        +        "$ref": "#/properties/range/anyOf/0/properties/days"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_gmc_title_hygiene3 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / variantsCollapsed
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
    • Changedget_indexing_tracker_report3 fields changed
      • addedOutput schema / properties / configured
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/configured"
        +}
    • Changedget_indexnow_settings1 field changed
      • addedOutput schema / properties / keySiteUrl
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_longtail_clusters2 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/apiRowCapReached"
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_merchant_listings_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_organic_shopping_performance4 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / truncationNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_page_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_position_distribution2 fields changed
      • changedInput schema / properties / scanLimit / description
        Previous value: -"How many top rows by clicks to bucket. Raise it when a long-tail property reports `truncated: true`. The ClickHouse period path clamps it at 50,000; ignored by the ClickHouse daily path, which aggregates in SQL."New value: +"How many top rows by clicks to bucket on the live Search Console API. Raise it when a long-tail property reports `truncated: true`. Ignored on the ClickHouse warehouse, which buckets every row in SQL."
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_product_listing_status8 fields changed
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / itemIssuesNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / itemIssuesUnavailable
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / rows / items / properties / freeListingsStatus
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / stale
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
      • addedOutput schema / properties / staleNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / syncedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_query_shape_trend1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_ranking_changes2 fields changed
      • changedInput schema / properties / comparisonEndDate / description
        Previous value: -"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. End of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to end a baseline of the same length here."
      • changedInput schema / properties / comparisonStartDate / description
        Previous value: -"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window."New value: +"Optional. Start of the baseline / comparison period as YYYY-MM-DD. Omit both comparison dates to use the same-length period immediately before the current window; give only this one to start a baseline of the same length here."
    • Changedget_sitemap_performance3 fields changed
      • addedOutput schema / properties / childSitemapNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / failedChildSitemaps
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "error": {
        +            "$ref": "#/properties/siteUrl"
        +          },
        +          "sitemapUrl": {
        +            "$ref": "#/properties/siteUrl"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_topic_cluster_performance1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedget_yandex_indexing_history2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_yandex_query_stats2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_yandex_site_summary2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedinspect_url3 fields changed
      • addedOutput schema / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_algo_updates2 fields changed
      • changedInput schema / properties / endDate / description
        Previous value: -"Optional filter: only include updates on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."New value: +"Optional filter: only include updates that began on or before this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."
      • changedInput schema / properties / startDate / description
        Previous value: -"Optional filter: only include updates on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."New value: +"Optional filter: only include updates still rolling out on or after this date (YYYY-MM-DD). Omit to include all. Never pass null or \"null\"."
    • Changedlist_ga4_custom_dimensions1 field changed
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/notConfigured"
        +}
    • Changedlist_ga4_properties2 fields changed
      • addedOutput schema / properties / errors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accountEmail": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "message": {
        +            "$ref": "#/properties/hint"
        +          },
        +          "reason": {
        +            "$ref": "#/properties/hint"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/connected"
        +}
    • Changedlist_gmc_accounts18 fields changed
      • changedOutput schema / properties / account / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / accountEmail / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / accountId / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / accountName / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / accounts / items / properties / name / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / error / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / errors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accountEmail": {
        +            "$ref": "#/properties/reason"
        +          },
        +          "error": {
        +            "$ref": "#/properties/reason"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / gaps
        Added value: +{
        +  "$ref": "#/properties/accounts/items/properties/linkedSiteUrls"
        +}
      • changedOutput schema / properties / gcpProjectNumber / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / hint / $ref
        Added value: +"#/properties/reason"
      • removedOutput schema / properties / hint / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / incomplete
        Added value: +{
        +  "$ref": "#/properties/connected"
        +}
      • addedOutput schema / properties / incompleteNote
        Added value: +{
        +  "$ref": "#/properties/reason"
        +}
      • changedOutput schema / properties / linkedAccountId / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • changedOutput schema / properties / note / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / siteUrl / $ref
        Previous value: -"#/properties/hint"New value: +"#/properties/reason"
      • addedOutput schema / properties / unprobedAccountIds
        Added value: +{
        +  "$ref": "#/properties/accounts/items/properties/linkedSiteUrls"
        +}
    • Changedlist_saved_filters1 field changed
      • changedInput schema / properties / siteUrl / description
        Previous value: -"Restrict to filters for one property. Omit to list all of the user's filters."New value: +"Restrict to the presets on one property (one you own or one shared with you). Omit to list the presets on every property you own."
    • Changedlist_tracked_urls5 fields changed
      • addedOutput schema / properties / configured
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / message
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / urls / items / properties / googleCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / urls / items / properties / inspectionResultLink
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / urls / items / properties / userCanonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_url_inspections3 fields changed
      • addedOutput schema / properties / inspections / items / properties / google_canonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / inspections / items / properties / inspection_result_link
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / inspections / items / properties / user_canonical
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedlist_yandex_sites1 field changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "$ref": "#/properties/limitations/items"
        +}
    • Changedquery_countries1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_devices1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedquery_ga4_custom_dimensions2 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedquery_ga4_report2 fields changed
      • changedInput schema / properties / filters / properties / hostName / description
        Previous value: -"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once."New value: +"GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response). For the property owner, setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once; on a property shared with you it only narrows within the scope."
      • addedOutput schema / properties / reauthRequired
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
    • Changedquery_search_analytics1 field changed
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedrun_feed_audit4 fields changed
      • changedInput schema / properties / force / description
        Previous value: -"Queue an audit even when one completed inside the last 28 days (default false). Cannot bypass the one-audit-per-property-per-day rule."New value: +"Queue an audit even when one completed inside the last 28 days (default false). Cannot bypass the one-audit-per-property-per-day rule or a run still in progress."
      • addedOutput schema / properties / cachedAt
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / run
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bySeverity": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "critical": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "info": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                },
        +                "warning": {
        +                  "$ref": "#/properties/range/anyOf/0/properties/days"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "completedAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "coverage": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "crawlBlocked": {
        +          "$ref": "#/properties/notConfigured"
        +        },
        +        "createdAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "error": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "offersAudited": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "offersTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "pageScored": {
        +          "$ref": "#/properties/notConfigured"
        +        },
        +        "pagesFailed": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "pagesFetched": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "pagesTotal": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "perCheck": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "applicable": {
        +                    "$ref": "#/properties/range/anyOf/0/properties/days"
        +                  },
        +                  "failed": {
        +                    "$ref": "#/properties/range/anyOf/0/properties/days"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "runDate": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "runId": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "score": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "scoreFeed": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "scorePage": {
        +          "$ref": "#/properties/range/anyOf/0/properties/days"
        +        },
        +        "scoreVersion": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "startedAt": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "status": {
        +          "$ref": "#/properties/siteUrl"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / truncationReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedscore_opportunities4 fields changed
      • addedOutput schema / properties / scanLimit
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / scanNote
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / warehouseLatestDate
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedsubmit_indexnow_urls2 fields changed
      • addedOutput schema / properties / historyLogged
        Added value: +{
        +  "$ref": "#/properties/pendingKeyValidation"
        +}
      • addedOutput schema / properties / keySiteUrl
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedsubmit_sitemap5 fields changed
      • addedOutput schema / properties / actions / $ref
        Added value: +"#/properties/notAttempted"
      • removedOutput schema / properties / actions / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / notAttempted
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / retryAfterSeconds
        Added value: +{
        +  "$ref": "#/properties/attempted"
        +}
      • addedOutput schema / properties / stopReason
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
    • Changedupdate_indexnow_settings8 fields changed
      • addedInput schema / properties / generateKey
        Added value: +{
        +  "default": false,
        +  "description": "Create a new valid key and return the key file to publish. Only when the property has no key yet; clear the old key first to rotate.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / indexnowApiKey / description
        Previous value: -"The new key. Omit together with clear: true to remove the current key."New value: +"The new key. Omit when using generateKey or clear."
      • addedOutput schema / properties / generated
        Added value: +{
        +  "$ref": "#/properties/indexnowApiKeySet"
        +}
      • addedOutput schema / properties / keyFileContent
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / keyFileError
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / keyFileUrl
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / keyFileUrls
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / keyFileVerified
        Added value: +{
        +  "$ref": "#/properties/indexnowApiKeySet"
        +}
  5. 1 tool update
    • Changedget_yandex_query_stats3 fields changed
      • changedInput schema / properties / deviceType / description
        Previous value: -"Device filter. Yandex filters rather than breaking down by device, so each value is a separate query. MOBILE_AND_TABLET overlaps MOBILE and TABLET — do not sum them."New value: +"Device filter. Yandex filters rather than breaking down by device, so each value is a separate query. MOBILE_AND_TABLET overlaps MOBILE and TABLET, so do not sum them."
      • addedInput schema / properties / limit / description
        Added value: +"Rows to return, across pages. Yandex serves 500 per request and holds 3,000, so a limit above 500 costs one extra round trip per 500 rows. The default is one page: ask for more only when the long tail matters, since a few thousand rows can exceed a host response-size ceiling and be refused."
      • changedInput schema / properties / limit / maximum
        Previous value: -500New value: +3000
  6. 4 tool updates
    • Changedget_yandex_indexing_history1 field changed
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/siteUrl"
        +  },
        +  "type": "array"
        +}
    • Changedget_yandex_query_stats1 field changed
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/siteUrl"
        +  },
        +  "type": "array"
        +}
    • Changedget_yandex_site_summary1 field changed
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "$ref": "#/properties/siteUrl"
        +  },
        +  "type": "array"
        +}
    • Changedlist_yandex_sites8 fields changed
      • changedOutput schema / properties / dataSource / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • changedOutput schema / properties / hint / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • addedOutput schema / properties / limitations
        Added value: +{
        +  "items": {
        +    "anyOf": [
        +      {
        +        "not": {}
        +      },
        +      {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    ]
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / sites / items / properties / hostId / $ref
        Added value: +"#/properties/limitations/items"
      • removedOutput schema / properties / sites / items / properties / hostId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / sites / items / properties / mainMirrorUrl / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • changedOutput schema / properties / sites / items / properties / unicodeUrl / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
      • changedOutput schema / properties / sites / items / properties / url / $ref
        Previous value: -"#/properties/sites/items/properties/hostId"New value: +"#/properties/limitations/items"
  7. 2 tool updates
    • Changedget_ga4_key_events2 fields changed
      • addedOutput schema / properties / prevRawEventCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
      • addedOutput schema / properties / rawEventCount
        Added value: +{
        +  "$ref": "#/properties/range/anyOf/0/properties/days"
        +}
    • Changedquery_ga4_report2 fields changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
  8. 10 tool updates
    • Changedgenerate_seo_report4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_blended_landing_pages4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_ga4_llm_traffic4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_ga4_overview4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_query_value_attribution4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_ranking_changes4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedget_site_summary4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedlist_sites4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedquery_top_pages4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
    • Changedquery_top_queries4 fields changed
      • addedOutput schema / properties / comparisonHasData
        Added value: +{
        +  "description": "false when the comparison period has no data at all, so there is no comparison.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / note
        Added value: +{
        +  "$ref": "#/properties/kind",
        +  "description": "Caveat about the result, when the tool returned one."
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
        +  "description": "Caveats about the result, when the tool returned several."
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/title"
        +        },
        +        "note": {
        +          "$ref": "#/properties/title"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
        +}
  9. 5 tool updates
    • Changedget_ga4_ecommerce2 fields changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_ga4_key_events5 fields changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedOutput schema / properties / isKeyEvent
        Added value: +{
        +  "$ref": "#/properties/hasComparison"
        +}
      • addedOutput schema / properties / keyEventNames / $ref
        Added value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • removedOutput schema / properties / keyEventNames / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedget_ga4_overview1 field changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
    • Changedquery_ga4_custom_dimensions6 fields changed
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • changedOutput schema / properties / availableDimensions / $ref
        Previous value: -"#/properties/metrics"New value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • changedOutput schema / properties / availableMetrics / $ref
        Previous value: -"#/properties/metrics"New value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • addedOutput schema / properties / metrics / $ref
        Added value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • removedOutput schema / properties / metrics / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedquery_ga4_report7 fields changed
      • changedInput schema / properties / dimension / enum
        Previous value: -[
        -  "channel",
        -  "sourceMedium",
        -  "page",
        -  "landingPage",
        -  "country",
        -  "device",
        -  "event"
        -]New value: +[
        +  "channel",
        +  "sourceMedium",
        +  "page",
        +  "landingPage",
        +  "country",
        +  "device",
        +  "event",
        +  "date",
        +  "hostName"
        +]
      • addedInput schema / properties / filters / properties / hostName
        Added value: +{
        +  "description": "GA4 hostName values, matched exactly (any of), e.g. [\"www.example.com\"]. When the linked GA4 property is shared with other sites, results are already limited to this site's hostnames (see `siteScope` in the response); setting hostName replaces that automatic scope, e.g. to read another stream or several hosts at once.",
        +  "items": {
        +    "maxLength": 256,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 300,
        +  "type": "array"
        +}
      • addedInput schema / properties / secondaryDimension
        Added value: +{
        +  "description": "Optional second dimension that splits every row: \"date\" (per day) or \"hostName\" (per site/stream host). Must differ from `dimension`.",
        +  "enum": [
        +    "date",
        +    "hostName"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / metrics / $ref
        Added value: +"#/properties/siteScope/anyOf/0/properties/hostnames"
      • removedOutput schema / properties / metrics / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / secondaryDimension
        Added value: +{
        +  "$ref": "#/properties/siteUrl"
        +}
      • addedOutput schema / properties / siteScope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hostnames": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "includesSubdomainsOf": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "note": {
        +          "$ref": "#/properties/siteUrl"
        +        },
        +        "sharedWithSites": {
        +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  10. 126 tool updates
    • First observedadd_migration_redirects
    • First observedadd_site
    • First observedadd_tracked_urls
    • First observedanalyze_cannibalization
    • First observedanalyze_ctr_curve
    • First observedanalyze_query_shapes
    • First observedanalyze_sampling_impact
    • First observedaudit_onpage_seo
    • First observedbreakdown_by_path
    • First observedbulk_inspect_urls
    • First observedcheck_tracked_url_now
    • First observedcompare_migration
    • First observedcreate_annotation
    • First observedcreate_content_group
    • First observedcreate_gsc_property
    • First observedcreate_report_client
    • First observedcreate_saved_filter
    • First observedcreate_shared_report
    • First observedcreate_topic_cluster
    • First observeddelete_annotation
    • First observeddelete_content_group
    • First observeddelete_migration_redirects
    • First observeddelete_saved_filter
    • First observeddelete_shared_report
    • First observeddelete_site
    • First observeddelete_topic_cluster
    • First observeddetect_anomalies
    • First observeddetect_change_points
    • First observedfind_decaying_content
    • First observedfind_page_poaching_opportunities
    • First observedforecast_traffic
    • First observedgenerate_seo_report
    • First observedget_account_info
    • First observedget_bing_crawl_issues
    • First observedget_bing_crawl_stats
    • First observedget_bing_feeds
    • First observedget_bing_keyword_stats
    • First observedget_bing_link_counts
    • First observedget_bing_page_queries
    • First observedget_bing_page_stats
    • First observedget_bing_query_page_stats
    • First observedget_bing_query_page_trend
    • First observedget_bing_query_stats
    • First observedget_bing_traffic_stats
    • First observedget_bing_url_submission_quota
    • First observedget_blended_landing_pages
    • First observedget_branded_performance
    • First observedget_content_group_performance
    • First observedget_core_web_vitals
    • First observedget_cross_site_summary
    • First observedget_decay_overview
    • First observedget_experiment_results
    • First observedget_feed_audit_results
    • First observedget_filter_options
    • First observedget_ga4_ecommerce
    • First observedget_ga4_error_pages
    • First observedget_ga4_key_events
    • First observedget_ga4_llm_traffic
    • First observedget_ga4_overview
    • First observedget_gmc_best_sellers
    • First observedget_gmc_competitors
    • First observedget_gmc_pricing_insights
    • First observedget_gmc_title_hygiene
    • First observedget_indexing_tracker
    • First observedget_indexing_tracker_report
    • First observedget_indexnow_settings
    • First observedget_inspection_quota
    • First observedget_longtail_clusters
    • First observedget_merchant_listings_performance
    • First observedget_organic_shopping_performance
    • First observedget_page_performance
    • First observedget_position_distribution
    • First observedget_product_listing_status
    • First observedget_query_performance
    • First observedget_query_shape_trend
    • First observedget_query_value_attribution
    • First observedget_ranking_changes
    • First observedget_site_summary
    • First observedget_sitemap_performance
    • First observedget_tag_group_view
    • First observedget_topic_cluster_performance
    • First observedget_yandex_indexing_history
    • First observedget_yandex_query_stats
    • First observedget_yandex_site_summary
    • First observedinspect_url
    • First observedlist_algo_updates
    • First observedlist_annotations
    • First observedlist_bing_sites
    • First observedlist_content_groups
    • First observedlist_experiments
    • First observedlist_ga4_custom_dimensions
    • First observedlist_ga4_properties
    • First observedlist_gmc_accounts
    • First observedlist_indexnow_submissions
    • First observedlist_migration_redirects
    • First observedlist_report_clients
    • First observedlist_saved_filters
    • First observedlist_shared_reports
    • First observedlist_sitemaps
    • First observedlist_sites
    • First observedlist_tags
    • First observedlist_topic_clusters
    • First observedlist_tracked_urls
    • First observedlist_url_inspections
    • First observedlist_yandex_sites
    • First observedmanage_report_access
    • First observedmanage_tags
    • First observedquery_countries
    • First observedquery_devices
    • First observedquery_ga4_custom_dimensions
    • First observedquery_ga4_report
    • First observedquery_search_analytics
    • First observedquery_top_pages
    • First observedquery_top_queries
    • First observedremove_tracked_urls
    • First observedrun_feed_audit
    • First observedscore_opportunities
    • First observedset_dashboard_visibility
    • First observedsubmit_indexnow_urls
    • First observedsubmit_sitemap
    • First observedupdate_annotation
    • First observedupdate_content_group
    • First observedupdate_indexnow_settings
    • First observedupdate_saved_filter
    • First observedupdate_site
    • First observedupdate_topic_cluster

Publisher details

Operator
GSC Wizard · Publisher source
Vendor relationship
First-party
Trust center
Not available
Restrictions
Unknown

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources