Tools Reference
You don't call these tools yourself: your AI client picks them from your question. All 9 tools are read-only.
| Tool | What it does |
|---|---|
list_sites |
The Search Console properties you can read, with your permission level |
search_analytics |
Clicks, impressions, CTR and position, grouped and filtered |
compare_periods |
Period-over-period change by query or page |
find_opportunities |
Tag Pilot check: low-CTR and striking-distance queries or pages |
inspect_url |
How Google indexed one URL |
list_sitemaps, get_sitemap |
Submitted sitemaps and their status |
connect |
Connects this computer: returns a link and a code to approve |
connection_status |
Whether this computer is connected |
site_url is the property exactly as list_sites shows it: sc-domain:example.com for a domain property, or a URL prefix with its trailing slash, such as https://www.example.com/. You can just name the site in your question; the AI client looks it up.
Dates are YYYY-MM-DD, today, yesterday or NdaysAgo (e.g. 7daysAgo), in Pacific Time like Search Console itself. The default range is the 28 days ending 3 days ago (30daysAgo to 3daysAgo), the latest days with final data.
Connection tools
Your AI client uses these to connect the computer to your free Tag Pilot account and Google. You don't need a terminal: just say "connect my Search Console", or ask a data question.
connect
Starts connecting (or reuses a connect already in progress) and returns a clickable link and a code like ABCD-1234. Open the link in any browser, check the code, approve, and allow Google access. Clients that support MCP URL elicitation also offer to open the link for you. If the computer is already connected, it says so. No parameters.
connection_status
Whether this computer is connected:
| Answer | Meaning |
|---|---|
connected |
Connected, with the device name shown on the Search Console MCP page |
waiting |
A sign-in is open; shows the link and code again |
not_connected |
Not connected yet; the AI client calls connect |
error |
Something failed, with the next step |
| Parameter | Type | Default | |
|---|---|---|---|
wait |
boolean | true |
Wait up to 25 seconds for an open sign-in to finish before answering |
Data tools called before the computer is connected return the same link and code, and the AI client retries your question once you've approved.
list_sites
Every property the signed-in Google account can see: domain properties (all subdomains and protocols) and URL-prefix properties, with the permission level: owner, full, restricted or unverified. Unverified properties are listed but their data can't be read. No parameters.
"Which Search Console properties do I have?"
search_analytics
The Search Analytics report: clicks, impressions, CTR (0–1) and average position.
| Parameter | Type | Default | |
|---|---|---|---|
site_url |
string | Required | |
start_date, end_date |
string | 30daysAgo, 3daysAgo |
See Dates above |
dimensions |
list | none | Any of date, hour, query, page, country, device, searchAppearance. None: one row with the property totals |
filters |
list | All must match, see Filters below | |
search_type |
string | web |
web, image, video, news, discover, googleNews |
data_state |
string | final |
final: finished days only. all: include fresh, still-changing data. hourly_all: needed for the hour dimension |
aggregation_type |
string | auto |
auto, byPage, byProperty, byNewsShowcasePanel |
row_limit |
integer | 100 |
1–25,000 rows, sorted by clicks |
start_row |
integer | 0 |
Paging: pass next_start_row from the previous result |
discover and googleNews don't support grouping by query or aggregation_type: "byProperty".
Filters are a list of {"dimension", "operator", "expression"} that must all match:
[
{"dimension": "query", "operator": "contains", "expression": "shoes"},
{"dimension": "country", "expression": "pol"},
{"dimension": "page", "operator": "excludingRegex", "expression": "/blog/"}
]
- Dimensions:
query,page,country,device,searchAppearance. - Operators:
equals(default),contains,notEquals,notContains,includingRegex,excludingRegex(RE2 syntax). countryuses lowercase ISO 3166-1 alpha-3 codes (pol,usa,deu);deviceisDESKTOP,MOBILEorTABLET;pageis a full URL.
The result has the rows, next_start_row when there may be more, and notes on anonymised queries and incomplete data.
"Top 20 queries by clicks last month, with CTR and position."
compare_periods
Period-over-period change by query or page: clicks, impressions, CTR and position for both periods with the deltas, rows marked new or lost, and property totals for both periods (which include anonymised queries). Biggest movers first. Uses 4 Search Analytics queries.
| Parameter | Type | Default | |
|---|---|---|---|
site_url |
string | Required | |
dimension |
string | query |
query or page |
start_date, end_date |
string | last 28 days of final data | The current period |
compare_start_date, compare_end_date |
string | the same number of days right before | The earlier period |
filters, search_type |
As in search_analytics |
||
sort |
string | clicks_change |
clicks_change (biggest absolute change), clicks_gain, clicks_loss, impressions_change, position_change |
top |
integer | 25 |
Rows to return, 1–500 |
rows_per_period |
integer | 5000 |
Rows fetched per period, up to 25,000. Rows outside this are not compared, so "new" or "lost" can also mean "outside the top N" |
A negative position_change means the page moved up.
"Which pages lost the most clicks in the last 28 days compared with the 28 days before?"
find_opportunities
A Tag Pilot SEO check over one period, by query or page:
low_ctr: rows on page one (average position up to 10) with plenty of impressions but a CTR under half of a typical CTR for their position: the title or snippet probably underperforms.striking_distance: rows at average positions around 5–20 with enough impressions, where a small ranking gain pays off.
| Parameter | Type | Default | |
|---|---|---|---|
site_url |
string | Required | |
dimension |
string | query |
query or page |
start_date, end_date, filters, search_type |
As in search_analytics |
||
min_impressions |
integer | 100 |
Ignore rows with fewer impressions |
min_position, max_position |
number | 5, 20 |
The striking-distance range |
top |
integer | 25 |
Rows per list, 1–200 |
rows_to_scan |
integer | 5000 |
Rows fetched (by clicks), up to 25,000 |
"Typical CTR" is a rough benchmark curve (position 1 ≈ 28%, 3 ≈ 10%, 10 ≈ 2%), not Google data. The potential_extra_clicks estimates are for ranking the list, not a forecast.
"Find SEO opportunities on example.com: pages with a low CTR for their position, and queries just off page one."
inspect_url
Google's indexed version of one URL (the URL Inspection API): verdict and coverage state, last crawl, robots.txt and fetch state, the canonical Google chose vs the one you declared (flagged when they differ), sitemaps and referring URLs, rich results and AMP. It's not a live test of the current page.
| Parameter | Type | Default | |
|---|---|---|---|
site_url |
string | Required | |
url |
string | Required: the full URL, inside site_url |
|
language_code |
string | en-US |
Language for the messages, e.g. pl |
Google allows 2,000 inspections per day and 600 per minute per property, so use it for a handful of important URLs, not whole sitemaps.
"Is https://www.example.com/pricing indexed? Which canonical did Google pick?"
list_sitemaps and get_sitemap
Submitted sitemaps (or the ones in a sitemap index): type, whether it's an index, pending, last submitted and downloaded, errors, warnings, and submitted URL counts per content type. Google no longer reports indexed counts per sitemap; use inspect_url for single URLs.
| Tool | Parameters |
|---|---|
list_sitemaps |
site_url; optional sitemap_index to list only the sitemaps in that index |
get_sitemap |
site_url, sitemap_url (full URL, e.g. https://www.example.com/sitemap.xml) |
"Do any of our sitemaps have errors? When did Google last download them?"
Things to know about Search Console data
- Lag: data typically arrives after 2–3 days, so the default range ends 3 days ago. Ask for fresher data and the tools use
data_state: "all"; the result then says from which date data is incomplete. - Pacific Time: Search Console's days start at midnight Pacific Time, and relative dates are computed in Pacific Time too.
- Anonymised queries: queries too rare to show (for privacy) are left out of rows grouped or filtered by query. Per-query rows therefore add up to less than the totals by date, country or device;
compare_periodsreports property totals separately for that reason. - Row limits: one call returns up to 25,000 rows (page with
start_row), and Google exposes at most 50,000 rows per day per search type, sorted by clicks. - By page vs by property: grouping or filtering by page counts each URL separately, so totals differ from the property-level totals in the Search Console interface.
- Quotas: Search Analytics allows 1,200 queries per minute per site and per user, plus a load quota that long, query-and-page-level requests use up faster. URL Inspection allows 2,000 inspections per day per property.