Google Search Console
PYPI · OPEN-GSC-MCP
Search Console analytics, hourly data, URL inspection and sitemaps, with guards for API quirks.
Available components
Last scanned (3 hours ago)
Scores higher than 94% of PyPI servers
Category Marketing and SEO
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs uv_build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 2 of 43 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to onlymoein/google-search-console-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 20 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 5137 tokens (~233/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 96% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- 31 Oct 26 +16
- Malware scan: unverified → pass ▲ security
- 29 Oct 26 −14
- Malware scan: pass → unverified ▼ security
- 27 Oct 26 +1
- Security disclosure: unverified → pass ▲ functional
- 26 Oct 26 0
- Security disclosure: pass → unverified ▼ functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed pypi/open-gsc-mcp@1.4.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | onlymoein/google-search-console-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/onlymoein/google-search-console-mcp/.github/workflows/release.yml@refs/tags/v1.4.0 |
| Rekor log index | 3262574193 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:cd9898a3fd63052ffc6238ad01df9c3d43b2b7648b780918d4fbcf3d841810c1 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | uv_build |
Background: Why install scripts are a supply-chain risk →
Dependencies 43 packages
| Packages resolved | 43 |
|---|---|
| Stale | 1 |
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_site Add a Search Console property ~68
Add a property to this account. It starts unverified: ownership must be verified in the Search Console web interface before any data is available.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | New property: 'sc-domain:example.com' or a URL prefix such as 'https://www.example.com/'. |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| done | boolean | yes | – |
| notes | array | – | – |
| site_url | string | yes | – |
| target | string | yes | – |
No examples provided.
audit_indexing Audit indexing ~390
Full indexing audit of a property, rebuilt from its sitemaps because Google's API does not expose the Page indexing report's URL lists. Each call inspects the next URLs (new ones first, then any checked more than 14 days ago) and reports every URL inspected so far: grouped by Google's index status with likely fixes, plus canonical conflicts, indexed pages with no search impressions in 90 days, and pages shown in search but missing from the sitemaps. Progress is saved locally, so call again to continue, today or on later days; Google allows 2,000 inspections per property per day.
| Name | Type | Req | Description |
|---|---|---|---|
| examples | integer | – | Example URLs shown per issue. |
| fetch_pages | boolean | – | Also fetch inspected pages directly (only URLs inside the property), as many as inspect or 50 if it is 0, to compare their status code, redirects, noindex and canonical tag now with what Google last… |
| inspect | integer | – | URLs to inspect in this call. Each takes a few seconds and they run 10 at a time, so 50 is about 30 seconds. 0 only reports. |
| issue | – | – | List every URL with this issue key (from issues[].key), 100 at a time. Nothing new is inspected. |
| restart | boolean | – | Forget this property's saved audit and start over. |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| sitemap_url | – | – | Audit this sitemap (or sitemap index) instead of every sitemap submitted for the property. |
| start | integer | – | Offset into the issue's URLs. |
| Name | Type | Req | Description |
|---|---|---|---|
| coverage | array | yes | – |
| inspected | integer | yes | – |
| inspected_now | integer | yes | – |
| issue | – | – | The issue listed in urls, if any. |
| issues | array | yes | – |
| live_checked | integer | yes | – |
| next_start | – | – | Pass as start to list the next page of the issue's URLs. |
| not_yet_inspected | integer | yes | – |
| notes | array | – | – |
| quota_exhausted_today | boolean | yes | – |
| quota_used_today | integer | yes | Inspections this server used for the property today (Pacific Time). Other tools and clients share Google's 2,000 a day. |
| site_url | string | yes | – |
| sitemaps | array | yes | – |
| urls | array | – | – |
| urls_in_sitemaps | integer | yes | – |
No examples provided.
batch_inspect_urls Inspect many URLs ~161
Inspect up to 50 URLs concurrently and summarize their index verdicts. Failures are reported per URL; if the daily quota runs out, the remaining URLs are skipped and listed so you can retry them later.
| Name | Type | Req | Description |
|---|---|---|---|
| language_code | string | – | BCP-47 language for issue messages, e.g. 'en-US' or 'de-DE'. |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| urls | array | yes | 1-50 page URLs. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| notes | array | – | – |
| site_url | string | yes | – |
| verdict_counts | object | yes | – |
No examples provided.
compare_periods Compare two periods ~331
Compare search performance between two periods of equal length: totals plus a per-key breakdown with absolute and percent changes. Position change is negative when ranking improved.
| Name | Type | Req | Description |
|---|---|---|---|
| current_end | – | – | Last day of the period to analyze. Defaults to 3 days ago, the last day that is usually final. |
| current_start | – | – | First day of the period to analyze, YYYY-MM-DD (Pacific Time). |
| data_state | string | – | Defaults to 'final': fresh, still-changing data in the current period would read as a decline against a complete baseline. |
| dimensions | – | – | Compare per value of these. Omit for ['query']; [] for totals only. |
| fetch_limit | integer | – | Top rows fetched per period before joining. |
| filters | – | – | Filters, combined with AND. |
| previous_end | – | – | Last day of the baseline; same length as current. |
| previous_start | – | – | First day of the baseline. Defaults to the period just before. |
| row_limit | integer | – | Rows to return. |
| search_type | string | – | – |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| sort_by | string | – | clicks_change (default) and impressions_change rank the biggest gains and losses first; ties fall back to the other metric's change, then current impressions. clicks and impressions rank by the curre… |
| Name | Type | Req | Description |
|---|---|---|---|
| current_period | array | yes | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| notes | array | – | – |
| previous_period | array | yes | – |
| rows | array | yes | – |
| search_type | string | yes | – |
| site_url | string | yes | – |
| totals | – | yes | – |
No examples provided.
delete_site Delete a Search Console property ~60
Remove a property from this account. This removes access for this account only; it does not delete the site or other users' access. Confirm with the user first.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | The property's exact site_url, as listed by list_sites. |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| done | boolean | yes | – |
| notes | array | – | – |
| site_url | string | yes | – |
| target | string | yes | – |
No examples provided.
delete_sitemap Delete a sitemap ~85
Remove a sitemap from Search Console. Google may still know the URLs in it, and the file itself is not touched. Confirm with the user first.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | The property's exact site_url, as listed by list_sites. |
| sitemap_url | string | yes | Full URL of the sitemap, e.g. 'https://www.example.com/sitemap.xml'. |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| done | boolean | yes | – |
| notes | array | – | – |
| site_url | string | yes | – |
| target | string | yes | – |
No examples provided.
explain_change Explain a change in traffic ~374
Answer "why did traffic go up or down?" between two periods of equal length. Splits the change by page, query, country, device and search appearance and says which slices account for most of it; separates clicks lost to fewer impressions from clicks lost to a lower CTR; and lists Google updates that ran in or near the periods. Defaults compare the last 28 days of final data with the 28 before.
| Name | Type | Req | Description |
|---|---|---|---|
| breakdowns | – | – | Dimensions to split the change by. Omit for every one the search type has: page, query, country, device and searchAppearance. |
| current_end | – | – | Last day of the period to analyze. Defaults to 3 days ago, the last day that is usually final. |
| current_start | – | – | First day of the period to analyze, YYYY-MM-DD (Pacific Time). |
| data_state | string | – | Defaults to 'final': fresh, still-changing data in the current period would read as a decline against a complete baseline. |
| fetch_limit | integer | – | Top rows fetched per period and breakdown. |
| filters | – | – | Explain the change within this slice only; combined with AND. |
| metric | string | – | The metric whose change to explain. |
| previous_end | – | – | Last day of the baseline; same length as current. |
| previous_start | – | – | First day of the baseline. Defaults to the period just before. |
| search_type | string | – | – |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| top | integer | – | Movers to list per breakdown and direction. |
| Name | Type | Req | Description |
|---|---|---|---|
| breakdowns | array | yes | – |
| current_period | array | yes | – |
| data_state | string | yes | – |
| effects | – | – | – |
| google_updates | array | yes | Google updates and incidents in or near the periods. Timing alone does not show that one caused the change. |
| metric | string | yes | – |
| notes | array | – | – |
| previous_period | array | yes | – |
| requests | array | yes | The exact request bodies sent to Google. |
| search_type | string | yes | – |
| site_url | string | yes | – |
| summary | array | yes | The findings in plain sentences. |
| totals | – | yes | – |
No examples provided.
get_site Get a Search Console property ~89
Get one property's exact site_url, type and this account's permission level.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| Name | Type | Req | Description |
|---|---|---|---|
| permission_level | string | yes | – |
| property_type | string | yes | – |
| site_url | string | yes | – |
No examples provided.
get_sitemap Get a sitemap ~107
Status of one submitted sitemap.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| sitemap_url | string | yes | Full URL of the sitemap, e.g. 'https://www.example.com/sitemap.xml'. |
| Name | Type | Req | Description |
|---|---|---|---|
| contents | array | – | – |
| errors | integer | – | – |
| is_index | boolean | – | – |
| is_pending | boolean | – | – |
| last_downloaded | – | – | – |
| last_submitted | – | – | – |
| path | string | yes | – |
| type | – | – | – |
| warnings | integer | – | – |
No examples provided.
inspect_url Inspect a URL ~171
Google's index status for one URL: whether it is indexed and why not, last crawl, canonical chosen by Google versus declared, robots.txt and fetch state, sitemaps and rich results. This is Google's indexed view, not a live test of the page.
| Name | Type | Req | Description |
|---|---|---|---|
| language_code | string | – | BCP-47 language for issue messages, e.g. 'en-US' or 'de-DE'. |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| url | string | yes | Full URL of the page, inside the property. |
| Name | Type | Req | Description |
|---|---|---|---|
| amp_verdict | – | – | – |
| canonical_mismatch | – | – | – |
| coverage_state | – | – | – |
| crawled_as | – | – | – |
| google_canonical | – | – | – |
| indexing_state | – | – | – |
| inspection_link | – | – | – |
| last_crawl_time | – | – | – |
| page_fetch_state | – | – | – |
| referring_urls | array | – | – |
| rich_results | array | – | – |
| rich_results_verdict | – | – | – |
| robots_txt_state | – | – | – |
| site_url | string | yes | – |
| sitemaps | array | – | – |
| url | string | yes | – |
| user_canonical | – | – | – |
| verdict | – | – | PASS, PARTIAL, FAIL or NEUTRAL. |
No examples provided.
list_search_appearances List search appearances ~216
Step one: list the search appearances (rich results and other result features, such as VIDEO or REVIEW_SNIPPET) the property had, with clicks and impressions. Then call query_search_appearance with one of the names to break it down.
| Name | Type | Req | Description |
|---|---|---|---|
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| search_type | string | – | – |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
list_sitemaps List sitemaps ~123
List submitted sitemaps with their status: last submitted and downloaded, errors, warnings, whether processing is pending, and URL counts by content type.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| sitemap_index | – | – | Only list the sitemaps inside this sitemap index URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | – |
| sitemaps | array | yes | – |
No examples provided.
list_sites List Search Console properties ~40
List every Search Console property this account can access, with its exact site_url and permission level. Call this first: every other tool needs a site_url.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| notes | array | – | – |
| sites | array | yes | – |
No examples provided.
query_discover_analytics Query Discover performance ~326
Google Discover performance: clicks, impressions and CTR by page, country or date. Discover reports no queries, no average position and no device breakdown, and has data only for sites that appear in Discover feeds.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | string | – | 'auto' aggregates by page. byNewsShowcasePanel counts News Showcase panels instead: it needs the filter searchAppearance equals NEWS_SHOWCASE and cannot group or filter by page, so dimensions default… |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Group rows by these. Omit for ['page'] (['date'] with byNewsShowcasePanel); [] for totals. |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_google_news_analytics Query Google News performance ~339
Google News performance (news.google.com and the Google News app): clicks, impressions and CTR by page, country, device or date. Google News reports no queries and no average position. For the News tab in Google Search, use query_news_tab_analytics.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | string | – | 'auto' aggregates by page. byNewsShowcasePanel counts News Showcase panels instead: it needs the filter searchAppearance equals NEWS_SHOWCASE and cannot group or filter by page, so dimensions default… |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Group rows by these. Omit for ['page'] (['date'] with byNewsShowcasePanel); [] for totals. |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_hourly_analytics Query hourly search analytics ~243
Search performance broken down by hour (Pacific Time) for the last ~10 days. Use it to spot same-day spikes or compare today with the same day last week. The most recent hours are incomplete; first_incomplete_hour says where that starts.
| Name | Type | Req | Description |
|---|---|---|---|
| dimensions | – | – | Extra grouping besides the hour. Omit for hourly totals. |
| end_date | – | – | Last day, YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| search_type | string | – | – |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time, within the last 10 days. Defaults to 2 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_image_analytics Query Google Images performance ~288
Performance in Google Images and the Images tab of Search: clicks, impressions, CTR and average position within image results, by query, page, country, device or date.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | string | – | 'auto' is right almost always. byProperty cannot be used with page grouping or filters. |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Group rows by these. Omit for ['query']; [] for totals. searchAppearance must be the only dimension. |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_news_tab_analytics Query News tab performance ~302
Performance in the News tab of Google Search: clicks, impressions, CTR and average position, by query, page, country, device or date. For news.google.com and the Google News app, use query_google_news_analytics.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | string | – | 'auto' is right almost always. byProperty cannot be used with page grouping or filters. |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Group rows by these. Omit for ['query']; [] for totals. searchAppearance must be the only dimension. |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_search_analytics Query search analytics ~375
Clicks, impressions, CTR and average position from the Performance report, grouped by dimensions and filtered. Rows are sorted by clicks. Invalid combinations are rejected with an explanation before Google is called. For Discover, Images, video, Google News or the News tab, the matching query_*_analytics tool offers only what that surface supports.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | string | – | 'auto' is right almost always. byProperty cannot be used with page grouping or filters, nor with Discover or Google News. |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Group rows by these, in order. Omit for ['query']; pass [] for property totals. searchAppearance must be the only dimension (see list_search_appearances). Discover and Google News have no query dimen… |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| search_type | string | – | web, image, video, news (the News tab), discover or googleNews. |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_search_appearance Query one search appearance ~297
Step two: performance of one search appearance, broken down by query, page, country, device or date. Get the appearance name from list_search_appearances.
| Name | Type | Req | Description |
|---|---|---|---|
| appearance | string | yes | Exact appearance name from list_search_appearances, such as VIDEO or REVIEW_SNIPPET. |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Break the appearance down by these. Omit for ['query'] (['page'] for Discover and Google News). |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Extra filters, combined with AND with the appearance. |
| row_limit | integer | – | Rows to return (1-25,000). |
| search_type | string | – | – |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
query_video_analytics Query video search performance ~301
Performance in the Videos tab of Google Search: clicks, impressions, CTR and average position, by query, page, country, device or date. Video results shown on the main web results are counted under web search, not here.
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | string | – | 'auto' is right almost always. byProperty cannot be used with page grouping or filters. |
| data_state | string | – | 'all' includes fresh data that may still change and matches the Search Console UI; 'final' is finalized data only (lags 2-3 days). |
| dimensions | – | – | Group rows by these. Omit for ['query']; [] for totals. searchAppearance must be the only dimension. |
| end_date | – | – | Last day (inclusive), YYYY-MM-DD in Pacific Time. Defaults to today. |
| filters | – | – | Filters, combined with AND. |
| row_limit | integer | – | Rows to return (1-25,000). |
| site_url | string | yes | The property, as listed by list_sites: 'sc-domain:example.com' for a domain property or 'https://www.example.com/' for a URL-prefix property. A bare domain such as 'example.com', or any URL on the si… |
| start_date | – | – | First day, YYYY-MM-DD in Pacific Time. Defaults to 28 days ago. |
| start_row | integer | – | Zero-based row offset, for paging. |
| Name | Type | Req | Description |
|---|---|---|---|
| aggregation_type | – | – | – |
| data_state | string | yes | – |
| dimensions | array | yes | – |
| end_date | string | yes | – |
| first_incomplete_date | – | – | – |
| first_incomplete_hour | – | – | – |
| next_start_row | – | – | Pass as start_row to fetch the next page, if there is one. |
| notes | array | – | – |
| request | object | yes | The exact request body sent to Google. |
| row_count | integer | yes | – |
| rows | array | yes | One object per row: dimension values by name, then clicks, impressions, ctr (0-1) and position (absent for Discover and Google News). |
| search_type | string | yes | – |
| site_url | string | yes | – |
| start_date | string | yes | – |
No examples provided.
submit_sitemap Submit a sitemap ~72
Submit (or resubmit) a sitemap so Google fetches it. Safe to repeat.
| Name | Type | Req | Description |
|---|---|---|---|
| site_url | string | yes | The property's exact site_url, as listed by list_sites. |
| sitemap_url | string | yes | Full URL of the sitemap, e.g. 'https://www.example.com/sitemap.xml'. |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| done | boolean | yes | – |
| notes | array | – | – |
| site_url | string | yes | – |
| target | string | yes | – |
No examples provided.
How do I install the Google Search Console MCP server?
Google Search Console runs locally as a PyPI package, launched with uvx open-gsc-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · open-gsc-mcp
claude mcp add onlymoein-google-search-console-mcp -- uvx open-gsc-mcp
What is the Google Search Console MCP server?
Google Search Console is an MCP server listed in the public MCP registry as io.github.onlymoein/google-search-console-mcp. Search Console analytics, hourly data, URL inspection and sitemaps, with guards for API quirks. This page covers its PyPI package (open-gsc-mcp).
Is the Google Search Console MCP server safe to use?
Google Search Console scores 91 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Google Search Console MCP server expose?
Google Search Console exposes 22 tools: list_sites, get_site, add_site, delete_site, query_search_analytics, and 17 more. Their descriptions and schemas cost roughly 4,758 tokens of context every time the server is loaded.
Is the Google Search Console MCP server still maintained?
Google Search Console is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Google Search Console MCP server under?
Google Search Console declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.