# Google Search Console (pypi · gsc-mcp-full)

Google Search Console: 37 tools, every API endpoint, hourly data, history beyond 16 months.

- Trust score: 68/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-08

## Components

- pypi · `gsc-mcp-full`: 68/100 (this document), [markdown](https://verifymcp.io/servers/mamrrez-gsc-mcp-full/gsc-mcp-full.md), [page](https://verifymcp.io/servers/mamrrez-gsc-mcp-full/gsc-mcp-full)

## Channel facts

- Registry: `pypi`
- Package: `gsc-mcp-full`
- Version: `0.2.2`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-08.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 2 of 42 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 5 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 72/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4295 tokens (~116/item across 37 items; 37 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Google Search Console MCP server?

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

### Claude

```bash
claude mcp add mamrrez-gsc-mcp-full -- uvx gsc-mcp-full
```

### Cursor

```json
{
  "mcpServers": {
    "mamrrez-gsc-mcp-full": {
      "command": "uvx",
      "args": [
        "gsc-mcp-full"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "mamrrez-gsc-mcp-full": {
      "command": "uvx",
      "args": [
        "gsc-mcp-full"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add mamrrez-gsc-mcp-full -- uvx gsc-mcp-full
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mamrrez-gsc-mcp-full": {
      "type": "local",
      "command": [
        "uvx",
        "gsc-mcp-full"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mamrrez-gsc-mcp-full --command uvx --arg gsc-mcp-full
```

### Hermes

```yaml
mcp_servers:
  mamrrez-gsc-mcp-full:
    command: "uvx"
    args: ["gsc-mcp-full"]
```

### Netclaw

```json
{
  "McpServers": {
    "mamrrez-gsc-mcp-full": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "gsc-mcp-full"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add mamrrez-gsc-mcp-full -t stdio -c uvx -a gsc-mcp-full
```

### Other

```json
{
  "mcpServers": {
    "mamrrez-gsc-mcp-full": {
      "command": "uvx",
      "args": [
        "gsc-mcp-full"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-03 (score 68, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-02 (score 53)

First indexed and scored.

## MCP tools (37)

### `get_capabilities` (~31 tokens)

Auth status, scope, write access, history coverage and the list of tools. Call this first when unsure.

Output parameters:

- `result` (string)

### `reauthenticate` (~23 tokens)

Forget the cached client and sign in again (switch Google accounts or scopes).

Output parameters:

- `result` (string)

### `build_query_regex` (~160 tokens)

Build a Search Console regex for a term that works in any script and matches its common spellings.

Use the result as query_regex in other tools or paste it into the Search Console UI
(regex filter). RE2's \b is ASCII-only, so this uses Unicode-safe boundaries; Arabic
script gets ی/ي, ک/ك, ه/ة, ا/أ/إ/آ classes with optional vowel marks and half-spaces;
digits match Persian, Arabic-Indic and full-width forms; Cyrillic е/ё; case-insensitive.
loose=True also lets words run together. Accent and kana variants are not covered.

Input parameters:

- `loose` (boolean)
- `term` (string, required)
- `whole_word` (boolean)

Output parameters:

- `result` (string)

### `list_properties` (~23 tokens)

List every Search Console property this account can see, with the permission level.

Output parameters:

- `result` (string)

### `get_property` (~35 tokens)

Details of one property (exact URL and permission level). Accepts loose input like example.com.

Input parameters:

- `site_url` (string, required)

Output parameters:

- `result` (string)

### `add_property` (~38 tokens)

Add a property to this account (needs GSC_ALLOW_WRITE=1). Verification still happens in Search Console.

Input parameters:

- `site_url` (string, required)

Output parameters:

- `result` (string)

### `remove_property` (~38 tokens)

Remove a property from this account (needs GSC_ALLOW_WRITE=1). Data is not deleted at Google.

Input parameters:

- `site_url` (string, required)

Output parameters:

- `result` (string)

### `query_search_analytics` (~487 tokens)

Search Analytics rows with any dimensions and filters. The general-purpose query tool.

Args:
    site_url: property (sc-domain:example.com, https://example.com/ or just example.com).
    days / start_date / end_date: range; explicit dates (YYYY-MM-DD) win over days.
    dimensions: comma list of query, page, country, device, date, searchAppearance, hour.
    search_type: web, image, video, news, discover, googleNews.
    query_filter: a term in ANY language; case-insensitive, and matches its common spellings
        (ی/ي, ک/ك, half-space, vowel marks, Persian/Arabic digits, е/ё).
    query_regex / query_regex_exclude: raw RE2 regex (see build_query_regex for a safe one).
    page_filter: substring of the page URL; page_exact: the exact URL; page_filter_exclude: substring to
        leave out; page_regex: RE2 regex on the URL.
    country: ISO-3166-1 alpha-3 (IRN, USA…); device: DESKTOP, MOBILE, TABLET.
    data_state: all (matches the UI, default) or final.
    group_variants: merge spelling variants of the same query (only when dimensions=query).
    level: standard or loose grouping (loose also merges spacing and accent differences).
    sort_by: clicks, impressions, ctr, position — applied to the fetched rows; Google itself always
        returns the top rows by clicks. limit: rows shown. max_rows: rows fetched.

Input parameters:

- `country`
- `data_state`
- `days` (integer)
- `device`
- `dimensions` (string)
- `end_date`
- `group_variants` (boolean)
- `level` (string)
- `limit` (integer)
- `max_rows` (integer)
- `page_exact`
- `page_filter`
- `page_filter_exclude`
- `page_regex`
- `query_filter`
- `query_regex`
- `query_regex_exclude`
- `search_appearance`
- `search_type` (string)
- `site_url` (string, required)
- `sort_by` (string)
- `start_date`

Output parameters:

- `result` (string)

### `performance_overview` (~135 tokens)

One-screen summary: totals, trend, top queries and pages, devices, countries, and how fresh the data is.

granularity: day, week, month or auto — the same choice as the Performance report's time-granularity
menu (for hourly, use hourly_performance). auto picks day up to 31 days, week up to six months, then month.

Input parameters:

- `days` (integer)
- `end_date`
- `granularity` (string)
- `search_type` (string)
- `site_url` (string, required)
- `start_date`
- `top` (integer)

Output parameters:

- `result` (string)

### `compare_periods` (~178 tokens)

Compare a period with an earlier one; biggest movers first.

compare_to: previous (the same number of days just before) | year_ago (the same calendar dates last
year) | 52_weeks (364 days back, weekdays aligned) | custom (give previous_start and previous_end).
dimension: query, page, country, device or searchAppearance. Queries are matched across spellings.

Input parameters:

- `compare_to` (string)
- `days` (integer)
- `dimension` (string)
- `end_date`
- `level` (string)
- `limit` (integer)
- `page_filter`
- `previous_end`
- `previous_start`
- `query_filter`
- `search_type` (string)
- `site_url` (string, required)
- `start_date`

Output parameters:

- `result` (string)

### `queries_for_page` (~129 tokens)

Which queries send traffic to one page. Spelling variants are merged unless group_variants=False.

Give the exact page URL. If nothing matches exactly, pages whose URL contains the text are used
instead and listed, so a path such as /blog/ works too.

Input parameters:

- `days` (integer)
- `end_date`
- `group_variants` (boolean)
- `level` (string)
- `limit` (integer)
- `page_url` (string, required)
- `search_type` (string)
- `site_url` (string, required)
- `start_date`

Output parameters:

- `result` (string)

### `pages_for_query` (~87 tokens)

Which pages rank for one query — in each of its spellings — and how the impressions split between them.

Input parameters:

- `days` (integer)
- `end_date`
- `level` (string)
- `limit` (integer)
- `query` (string, required)
- `search_type` (string)
- `site_url` (string, required)
- `start_date`

Output parameters:

- `result` (string)

### `hourly_performance` (~181 tokens)

Hourly data for the last 10 days — Search Console's 24-hour view, and the only way to get true LOCAL days.

hours=24 reproduces the Performance report's 24-hour view: the most recent 24 hourly points,
including preliminary ones. Otherwise the last `days` (max 10) are returned. Search Console's daily
numbers are Pacific-Time days; with timezone= (e.g. Asia/Tehran, Asia/Tokyo) the hours are re-cut
into local days (by=day) or listed per local hour (by=hour).

Input parameters:

- `by` (string)
- `days` (integer)
- `hours`
- `page_filter`
- `query_filter`
- `search_type` (string)
- `site_url` (string, required)
- `timezone`

Output parameters:

- `result` (string)

### `data_freshness` (~43 tokens)

Which recent days are final and which are still changing, for daily and hourly data.

Input parameters:

- `search_type` (string)
- `site_url` (string, required)

Output parameters:

- `result` (string)

### `list_sitemaps` (~48 tokens)

Sitemaps submitted for a property, with errors/warnings and URL counts. Pass sitemap_index to list its children.

Input parameters:

- `site_url` (string, required)
- `sitemap_index`

Output parameters:

- `result` (string)

### `get_sitemap` (~43 tokens)

Details of one sitemap: submission/download dates, errors, warnings, per-type URL counts.

Input parameters:

- `site_url` (string, required)
- `sitemap_url` (string, required)

Output parameters:

- `result` (string)

### `submit_sitemap` (~43 tokens)

Submit (or resubmit) a sitemap URL (needs GSC_ALLOW_WRITE=1).

Input parameters:

- `site_url` (string, required)
- `sitemap_url` (string, required)

Output parameters:

- `result` (string)

### `delete_sitemap` (~46 tokens)

Remove a sitemap from Search Console (needs GSC_ALLOW_WRITE=1). The file itself is untouched.

Input parameters:

- `site_url` (string, required)
- `sitemap_url` (string, required)

Output parameters:

- `result` (string)

### `inspect_url` (~56 tokens)

Full URL Inspection for one page: index verdict, crawl, canonical, robots, sitemaps, rich results, mobile.

Input parameters:

- `language` (string)
- `page_url` (string, required)
- `site_url` (string, required)

Output parameters:

- `result` (string)

### `inspect_urls` (~104 tokens)

Inspect up to 50 URLs in parallel (comma- or newline-separated). Quota is checked first.

Columns: `index` is the indexing verdict, `rich results` the structured-data verdict — a page can
PASS one and FAIL the other. URLs not reached within the time budget are marked and can be re-sent.

Input parameters:

- `concurrency` (integer)
- `language` (string)
- `site_url` (string, required)
- `urls` (string, required)

Output parameters:

- `result` (string)

### `indexing_summary` (~63 tokens)

Problems only: which of the given URLs are not indexed or have structured-data failures, and why. Up to 50 URLs.

Input parameters:

- `concurrency` (integer)
- `language` (string)
- `site_url` (string, required)
- `urls` (string, required)

Output parameters:

- `result` (string)

### `inspection_quota` (~38 tokens)

How many URL inspections this server has used today for a property (Google allows ~2,000/day).

Input parameters:

- `site_url` (string, required)

Output parameters:

- `result` (string)

### `query_variants` (~224 tokens)

Keywords that Search Console splits across several spellings, with their real combined totals.

Groups queries by a per-script match key: Persian/Arabic letter forms (ی/ي, ک/ك, ه/ة, ا/أ/إ/آ),
half-space, vowel marks, digit scripts, kana width, case, separator punctuation — also inside mixed
queries such as «خريد iphone 13». level=loose additionally merges spacing, accents (café/cafe),
hiragana/katakana, Simplified/Traditional Chinese (with the zh extra). Only groups with at least
min_variants spellings are shown. source=history uses the local store.

Input parameters:

- `days` (integer)
- `end_date`
- `level` (string)
- `limit` (integer)
- `max_rows` (integer)
- `min_variants` (integer)
- `query_filter`
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`

Output parameters:

- `result` (string)

### `language_breakdown` (~81 tokens)

Share of clicks and impressions by the script/language of the query (Persian vs Arabic vs Latin…).

Input parameters:

- `days` (integer)
- `end_date`
- `max_rows` (integer)
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`

Output parameters:

- `result` (string)

### `keyboard_mistypes` (~184 tokens)

Queries typed with the keyboard on the wrong layout (e.g. "ovdn lhadk" = «خرید ماشین» on a Persian keyboard).

A hit is reported only when the remapped text is a query that really appears in the data, so the
list is precise. include_unmatched=True also lists vowel-less Latin queries that map cleanly onto a
layout (more findings, some false positives). layouts: any of fa, fa2 (the two Persian layouts in
common use), ar, ru, he.

Input parameters:

- `days` (integer)
- `end_date`
- `include_unmatched` (boolean)
- `layouts` (string)
- `max_rows` (integer)
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`

Output parameters:

- `result` (string)

### `top_terms` (~132 tokens)

Most demanded words across all queries — works for Chinese/Japanese/Thai (no spaces) too.

Uses jieba / fugashi / pythainlp when installed (`pip install gsc-mcp-full[zh]` etc.), otherwise a
script-aware fallback. Terms are merged across spellings.

Input parameters:

- `days` (integer)
- `end_date`
- `max_rows` (integer)
- `query_filter`
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`
- `top` (integer)

Output parameters:

- `result` (string)

### `find_cannibalization` (~168 tokens)

Queries where two or more of your pages compete as separate results, ranked by impressions going to the non-best page.

Spelling variants of a query are merged first, so «خرید ماشین» on page A and «خريد ماشين» on page B
is caught. min_share is the impression share a page needs to count as competing.

Input parameters:

- `days` (integer)
- `end_date`
- `level` (string)
- `limit` (integer)
- `max_rows` (integer)
- `min_impressions` (integer)
- `min_share` (number)
- `query_filter`
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`

Output parameters:

- `result` (string)

### `striking_distance` (~144 tokens)

Queries ranking just off page one (default positions 8–20) with real demand — the quickest wins.

potential_clicks estimates extra clicks at position 5. Spelling variants are merged first.

Input parameters:

- `days` (integer)
- `end_date`
- `limit` (integer)
- `max_position` (number)
- `max_rows` (integer)
- `min_impressions` (integer)
- `min_position` (number)
- `query_filter`
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`
- `with_pages` (boolean)

Output parameters:

- `result` (string)

### `low_ctr_opportunities` (~153 tokens)

Query/page pairs on page one whose CTR is far below what their position should earn — title/snippet work.

Expected CTR is the site's own median per position when there is enough data, otherwise a benchmark
curve; ratio=0.5 flags rows under half the expected CTR.

Input parameters:

- `days` (integer)
- `end_date`
- `limit` (integer)
- `max_position` (number)
- `max_rows` (integer)
- `min_impressions` (integer)
- `query_filter`
- `ratio` (number)
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`

Output parameters:

- `result` (string)

### `content_movers` (~163 tokens)

Pages (or queries) that lost or gained ≥ threshold of their clicks vs an earlier period.

compare_to: previous | year_ago (same calendar dates) | 52_weeks (weekdays aligned).
Decayed = dropped, rising = grew, lost = had clicks before and none now, new = the opposite.

Input parameters:

- `compare_to` (string)
- `days` (integer)
- `dimension` (string)
- `end_date`
- `limit` (integer)
- `max_rows` (integer)
- `min_previous_clicks` (integer)
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`
- `threshold` (number)

Output parameters:

- `result` (string)

### `brand_split` (~146 tokens)

Brand vs non-brand traffic. Give the brand in every script it is searched in, comma-separated
(e.g. "toyota, تویوتا, トヨタ"). Each term matches its spelling variants, as whole words; with
level=loose a term of 4+ characters also matches when glued to its neighbours (toyotacamry).

Input parameters:

- `brand_terms` (string, required)
- `days` (integer)
- `end_date`
- `level` (string)
- `max_rows` (integer)
- `search_type` (string)
- `site_url` (string, required)
- `source` (string)
- `start_date`

Output parameters:

- `result` (string)

### `sync_history` (~172 tokens)

Copy Search Analytics rows into the local SQLite history, one day at a time (keeps data past 16 months).

Days already stored and final are skipped; recent or empty days are refreshed. dimensions defaults to
query,page; add country,device for more detail (more rows). One call works for about 45 seconds and
then reports how many days are left — call it again to continue, or run `gsc-mcp-full sync SITE
\--days N` in a terminal (no time limit; put it in cron to keep history growing).

Input parameters:

- `days` (integer)
- `dimensions` (string)
- `end_date`
- `refresh_provisional` (boolean)
- `search_type` (string)
- `site_url` (string, required)
- `start_date`

Output parameters:

- `result` (string)

### `history_status` (~36 tokens)

What the local history contains: per property and search type, first/last day, rows, final days.

Input parameters:

- `site_url`

Output parameters:

- `result` (string)

### `history_query` (~132 tokens)

Query the local history for any date range, grouped by dimensions (queries merged across spellings).

dimensions: query, page, country, device, date. query_contains matches the multilingual match key,
so «ماشين» finds «ماشین» and 空调 works without spaces.

Input parameters:

- `country`
- `device`
- `dimensions` (string)
- `end_date` (string, required)
- `limit` (integer)
- `page_contains`
- `query_contains`
- `search_type` (string)
- `site_url` (string, required)
- `start_date` (string, required)

Output parameters:

- `result` (string)

### `history_trend` (~86 tokens)

Clicks/impressions/CTR/position per day, ISO week or month from the local history — any length of time.

Input parameters:

- `end_date` (string, required)
- `granularity` (string)
- `page_contains`
- `query_contains`
- `search_type` (string)
- `site_url` (string, required)
- `start_date` (string, required)

Output parameters:

- `result` (string)

### `history_compare` (~107 tokens)

Compare two stored periods (e.g. this quarter vs the same quarter two years ago) — beyond the API's 16 months.

dimension: query, page, country or device.

Input parameters:

- `dimension` (string)
- `end_date` (string, required)
- `limit` (integer)
- `previous_end` (string, required)
- `previous_start` (string, required)
- `search_type` (string)
- `site_url` (string, required)
- `start_date` (string, required)

Output parameters:

- `result` (string)

### `history_sql` (~73 tokens)

Run a read-only SELECT on the history database. Table `rows` (site, search_type, date, query, qkey, page,
country, device, clicks, impressions, position); `sync_days`. qkey is the multilingual match key.

Input parameters:

- `limit` (integer)
- `sql` (string, required)

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/mamrrez-gsc-mcp-full/gsc-mcp-full#diagnostics

## Score history

- 2026-10-08: 68
- 2026-10-06: 68
- 2026-10-04: 68
- 2026-10-03: 68
- 2026-10-02: 53

## 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.mamrrez/gsc-mcp-full. Google Search Console: 37 tools, every API endpoint, hourly data, history beyond 16 months. This page covers its PyPI package (gsc-mcp-full).

### Is the Google Search Console MCP server safe to use?

Google Search Console scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 8 October 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 37 tools: get_capabilities, reauthenticate, build_query_regex, list_properties, get_property, and 32 more. Their descriptions and schemas cost roughly 4,030 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 8 October 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.

## Links

- PyPI project: https://pypi.org/project/gsc-mcp-full/
- Socket report: https://socket.dev/pypi/package/gsc-mcp-full
- Repository: https://github.com/mamrrez/gsc-mcp-full
- Website: https://mamrrez.github.io/gsc-mcp-full/
- Changelog RSS feed: https://verifymcp.io/servers/mamrrez-gsc-mcp-full/gsc-mcp-full.xml
- Changelog JSON feed: https://verifymcp.io/servers/mamrrez-gsc-mcp-full/gsc-mcp-full.json
- HTML version of this page: https://verifymcp.io/servers/mamrrez-gsc-mcp-full/gsc-mcp-full
