Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Google Search Console

PYPI · MCP-GOOGLE-SEARCH-CONSOLE · SCANNED SEP 20

Google Search Console: SEO audits, performance queries, URL inspection, indexing checks.

+3 this week 82 Trust /100
Trust breakdown (7 categories)

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 hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 2 of 46 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 28 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability77
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4392 tokens (~258/item across 17 items; 17 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 Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 95% of tool parameters carry a description.Partial
  • Structured output schemas are declared (94% 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
  • We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 18 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
Install

How do I install the Google Search Console MCP server?

Google Search Console runs locally as a PyPI package, launched with uvx mcp-google-search-console. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · mcp-google-search-console

# add to Claude Code
claude mcp add acamolese-google-search-console-mcp -- uvx mcp-google-search-console
// .cursor/mcp.json
{
  "mcpServers": {
    "acamolese-google-search-console-mcp": {
      "command": "uvx",
      "args": [
        "mcp-google-search-console"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "acamolese-google-search-console-mcp": {
      "command": "uvx",
      "args": [
        "mcp-google-search-console"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add acamolese-google-search-console-mcp -- uvx mcp-google-search-console
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "acamolese-google-search-console-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "mcp-google-search-console"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add acamolese-google-search-console-mcp --command uvx --arg mcp-google-search-console
# ~/.hermes/config.yaml
mcp_servers:
  acamolese-google-search-console-mcp:
    command: "uvx"
    args: ["mcp-google-search-console"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "acamolese-google-search-console-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "mcp-google-search-console"
      ]
    }
  }
}
# add to Vellum
assistant mcp add acamolese-google-search-console-mcp -t stdio -c uvx -a mcp-google-search-console
// mcp.json
{
  "mcpServers": {
    "acamolese-google-search-console-mcp": {
      "command": "uvx",
      "args": [
        "mcp-google-search-console"
      ]
    }
  }
}
Changelog

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.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +15
    • Malware scan: unverified → pass security
  • 17 Sept 26 −14
    • Malware scan: pass → unverified security
  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

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 20 Sept 2026 · Analysed pypi/mcp-google-search-console@3.0.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 46 packages
Packages resolved 46
Stale 1
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 17 exposed · ~4,245 tokens

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 →

Tool Tokens
gsc_alerts ~210

What changed sharply enough to be worth a message today. Compares the last `window_days` against the window before it across both queries and pages, and returns only movements past the alerting rules: lost positions, collapsed CTR, dropped or vanished pages.

NameTypeReqDescription
date_tostringEnd date YYYY-MM-DD. Defaults to today.
no_cacheboolean
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
window_daysintegerLength of the window to compare.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_audit ~503

Build a complete, self-contained HTML SEO audit for one property. Collects the period and its baseline, top queries and pages, devices, countries, the daily trend, six months of history, sitemaps and an indexing check, then detects issues and builds a prioritised strategy and roadmap. Thresholds adapt to the size of the property, so small sites get a report too. Available in English and Italian. Ask the user for the period if they have not named one: the 28-day default is rarely what a client report wants. Returns a compact JSON summary first (KPIs with deltas, issue counts, top quick wins, roadmap), so the findings can be discussed without reading the HTML, followed by the report path or the document itself.

NameTypeReqDescription
brand_termsWords that mark a query as branded. Without them the first label of the domain is used, which is often wrong.
branding_pathstringPath to a branding.json overriding colours, logo, name and thresholds.
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
inspect_top_pagesintegerHow many top pages to run through URL Inspection. 0 disables it.
languagestringReport language: en, it. Defaults to en.
outputstring`file` writes the report and returns its path, `inline` returns the HTML as an embedded resource, `both` does both, `auto` picks by transport.
output_dirstringWhere to write the report. Defaults to ~/gsc-reports/.
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
sectionsSubset of sections to render: overview, issues, top_queries, top_pages, countries, sitemaps, indexing, strategy, roadmap.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.

No output schema declared.

No examples provided.

gsc_cannibalization ~307

Queries where several pages of the site compete for the same result. Reads one page of up to 25,000 query/page pairs; on a very large property the tail is cut off, and the meta says how many pairs were analysed. Each row lists the competing pages with their own clicks and positions.

NameTypeReqDescription
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
min_pagesintegerMinimum competing pages per query.
min_sharenumberA page must hold this share of the query's impressions to count.
no_cacheboolean
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_compare_periods ~347

Join two periods on one dimension and rank the rows by click delta. Answers "what changed" without the model diffing two tables by hand. Rows present in only one period are kept, with zeros on the missing side; the biggest movers in both directions are returned, worst first. The meta counts how many rows gained and how many lost clicks.

NameTypeReqDescription
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
dimensionstringOne of query, page, country, device, searchAppearance.
min_impressionsintegerDrop rows below this impression count in both periods.
no_cachebooleanBypass the response cache for this call.
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
prev_date_fromstringBaseline start YYYY-MM-DD. Defaults to the equally long period ending the day before date_from.
prev_date_tostringBaseline end YYYY-MM-DD.
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_content_decay ~240

Pages sliding down month after month. A period comparison hides this: a page that halves over six months never shows a sharp drop in any single month-on-month check. One query per month runs in parallel.

NameTypeReqDescription
consecutive_monthsintegerMonths of uninterrupted decline required.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
min_peak_clicksintegerIgnore pages that never reached this many clicks in a month.
monthsintegerHow many months of history to read (2-16).
no_cacheboolean
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_ctr_gaps ~315

Rows that rank well but are clicked far less than their position implies. The snippet, not the ranking, is the problem, which makes these the cheapest fixes available. `expected_ctr` is what a result at that position normally earns.

NameTypeReqDescription
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
entitystringAnalyse by `page` (default) or by `query`.
gap_rationumberFlag rows whose CTR is below this fraction of the expected CTR.
max_positionnumberOnly consider rows at or above this position.
no_cacheboolean
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_doctor ~66

Report the server's configuration and whether Search Console answers. Call this first when something fails: it names the auth mode in use, when the token expires, how many properties the account can read, the cache state and the defaults every other tool applies. Secrets are masked.

Input schema present but exposes no named parameters.

NameTypeReqDescription
authobjectyes
cacheobjectyes
defaultsobjectyes
mcp_majorintegeryes
mcp_versionstringyes
package_versionstringyes
pathsobjectyes
platformstringyes
propertiesobjectyes
python_versionstringyes
transportstringyes

No examples provided.

gsc_indexing_issues ~274

Check whether a batch of URLs is indexed, and why not when they are not. Runs the inspections concurrently and returns one row per input URL, in input order. A URL that fails gets an `error` column instead of a verdict; the rest of the batch still comes back. For the full payload of a single page (mobile usability, rich results, AMP) use `gsc_inspect_url`. Quota: 600 inspections per minute and 2,000 per day, per property. Columns: url, verdict (PASS / PARTIAL / FAIL / NEUTRAL), coverage_state, robots_txt_state, indexing_state, page_fetch_state, crawled_as, last_crawl_time, google_canonical, user_canonical, error. The meta carries a verdict summary.

NameTypeReqDescription
no_cachebooleanBypass the response cache for this call.
pagesarrayyesFully qualified URLs under site_url. At most 100 per call.
response_formatstring`tsv` (default, compact) or `json`.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_inspect_url ~147

Full URL Inspection for one page: index, mobile, rich results and AMP. Use this when one page needs a diagnosis. For an indexed-or-not sweep across many URLs use `gsc_indexing_issues`. Quota: 600 inspections per minute and 2,000 per day, per property.

NameTypeReqDescription
no_cachebooleanBypass the response cache for this call.
page_urlstringyesFully qualified URL under site_url.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
NameTypeReqDescription
ampobject
coverage_statestring
index_statusobject
inspection_result_linkstring
mobile_usabilityobject
page_urlstringyes
rich_resultsobject
site_urlstringyes
verdictstring

No examples provided.

gsc_performance_overview ~263

Site totals for a period, compared with the preceding one by default. Start here: it answers "is the site up or down" in one call, with the percentage change on every metric. `position_delta` is negative when the average position improves.

NameTypeReqDescription
compare_previousbooleanAlso fetch the equally long preceding period.
data_statestring`all` (default, includes today's partial data) or `final`.
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
no_cachebooleanBypass the response cache for this call.
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
typestringweb, image, video, news, discover or googleNews.
NameTypeReqDescription
currentyes
data_statestring
date_fromstringyes
date_tostringyes
delta
previous
previous_range
site_urlstringyes

No examples provided.

gsc_portfolio ~133

Every accessible property at a glance, ranked worst first. One row per property with the current period, the previous one and a health flag: critical below -30% clicks, warning below -15%. Use it to decide which property to look at before running anything else.

NameTypeReqDescription
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
limitintegerHow many properties to check.
no_cacheboolean
response_formatstring`tsv` (default, compact) or `json`.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_query ~482

Query the Search Analytics report: clicks, impressions, CTR, position. This is the general-purpose tool. With no dates it covers the last 28 days ending today (UTC), with data_state=all so today's partial data is included, matching what the Search Console UI shows. Example: site_url="sc-domain:example.com", dimensions="query,page", period="last_28_days", row_limit=100. Returns a `# meta ...` line then a TSV table, or JSON with `meta` and `rows`. The meta names the exact range, the row count, whether more rows exist and the `start_row` to pass next.

NameTypeReqDescription
aggregation_typestringauto, byPage or byProperty.
data_statestring`all` (default, includes today's partial data) or `final`.
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
dimensionsstringComma-separated dimensions: query, page, country, device, date, searchAppearance, hour. `hour` covers only the last 10 days.
filter_group_typestringOnly `and` is supported by the API within one group.
filtersList of {dimension, operator, expression}. Operators: equals, notEquals, contains, notContains, includingRegex, excludingRegex.
no_cachebooleanBypass the response cache for this call.
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
start_rowintegerZero-based pagination offset.
typestringweb, image, video, news, discover or googleNews.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_quick_wins ~305

Queries close enough to the top that a push would pay off. Ranked by the clicks each query would gain at `target_position`, not by impressions: a big query already near its ceiling is not an opportunity. The meta reports the thresholds that were applied.

NameTypeReqDescription
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
max_positionnumberIgnore queries below this position.
min_positionnumberIgnore queries above this position.
no_cacheboolean
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
target_positionintegerPosition to size the opportunity against.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_site_details ~99

Permission level and property type for one property.

NameTypeReqDescription
no_cachebooleanBypass the response cache for this call.
response_formatstring`tsv` (default, compact) or `json`.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_sitemaps ~168

List the sitemaps Google knows about for a property, with errors and warnings. Read-only: submitting or deleting a sitemap needs the read-write scope, which this server never requests. Returns one row per sitemap: path, last submitted and downloaded timestamps, pending flag, index flag, warning and error counts, and the submitted / indexed URL counts when Google reports them.

NameTypeReqDescription
no_cachebooleanBypass the response cache for this call.
response_formatstring`tsv` (default, compact) or `json`.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_sites ~99

List every property the authenticated account can read. Call this first when a property string fails: it returns the exact `site_url` values the other tools expect, and whether each one is a domain property (`sc-domain:example.com`) or a URL-prefix property.

NameTypeReqDescription
no_cachebooleanBypass the response cache for this call.
response_formatstring`tsv` (default, compact) or `json`.
NameTypeReqDescription
resultstringyes

No examples provided.

gsc_traffic_drops ~287

Pages that lost clicks against the baseline, each with a likely cause. `diagnosis` separates a ranking loss from falling demand, a collapsed CTR and a page that disappeared: the four need different fixes, and the raw numbers for both periods are in the row so the call can be checked.

NameTypeReqDescription
date_fromstringStart date YYYY-MM-DD. Overrides period and days.
date_tostringEnd date YYYY-MM-DD. Defaults to today.
daysRolling window length ending today.
min_drop_pctnumberMinimum click loss, in percent.
no_cacheboolean
periodstringNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
response_formatstring`tsv` (default, compact) or `json`.
row_limitintegerRows returned. Default 100, capped at 1000.
site_urlstringyes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
thresholdsOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
NameTypeReqDescription
resultstringyes

No examples provided.

Common questions

What is the Google Search Console MCP server?

Google Search Console is an MCP server listed in the public MCP registry as io.github.acamolese/google-search-console-mcp. Google Search Console: SEO audits, performance queries, URL inspection, indexing checks. This page covers its PyPI package (mcp-google-search-console).

Is the Google Search Console MCP server safe to use?

Google Search Console scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. 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 17 tools: gsc_sites, gsc_site_details, gsc_query, gsc_performance_overview, gsc_compare_periods, and 12 more. Their descriptions and schemas cost roughly 4,245 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 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.