# Google Search Console MCP (npm · mcp-google-search-console)

MCP server for the Google Search Console API: search analytics, sitemaps, URL inspection, sites.

- Trust score: 67/100 (medium)
- Change this week: +29
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-19

## Components

- npm · `mcp-google-search-console`: 67/100 (this document), [markdown](https://verifymcp.io/servers/a1-x-tech-mcp-google-search-console/mcp-google-search-console.md), [page](https://verifymcp.io/servers/a1-x-tech-mcp-google-search-console/mcp-google-search-console)

## Channel facts

- Registry: `npm`
- Package: `mcp-google-search-console`
- Version: `1.1.0`
- 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-08-19.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 96 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/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 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3340 tokens (~278/item across 12 items; 12 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**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 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

### Claude

```bash
claude mcp add a1-x-tech-mcp-google-search-console -- npx -y mcp-google-search-console
```

### Codex

```bash
codex mcp add a1-x-tech-mcp-google-search-console -- npx -y mcp-google-search-console
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "a1-x-tech-mcp-google-search-console": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-google-search-console"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add a1-x-tech-mcp-google-search-console --command npx --arg -y --arg mcp-google-search-console
```

### Hermes

```yaml
mcp_servers:
  a1-x-tech-mcp-google-search-console:
    command: "npx"
    args: ["-y", "mcp-google-search-console"]
```

### Other

```json
{
  "mcpServers": {
    "a1-x-tech-mcp-google-search-console": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-google-search-console"
      ]
    }
  }
}
```

## 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-08-19 (score 67, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-08-18 (score 52, +14)

- [security regression] Malware scan: pass → unverified
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] Package version: 1.0.0 → 1.1.0

### 2026-08-11 (score 38, 0)

- [functional] Package version: 0.1.0 → 1.0.0
- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-09 (score 38)

First indexed and scored.

## MCP tools (12)

### `list_sites` (~122 tokens)

List Search Console properties

Lists every Search Console property the authenticated account can access. Returns { siteEntry: [{ siteUrl, permissionLevel }] } where siteUrl is either a URL-prefix property ("https://example.com/") or a domain property ("sc-domain:example.com"), and permissionLevel is siteOwner, siteFullUser, siteRestrictedUser or siteUnverifiedUser. Call this FIRST: every other tool needs the siteUrl exactly as returned here — a near-match (missing trailing slash, wrong scheme, www vs non-www) is a different property and returns 403/404.

### `get_site` (~143 tokens)

Get one property

Returns one property's entry: { siteUrl, permissionLevel }. A 404 means the value does not match any registered property — check the exact format (trailing slash, scheme, sc-domain: prefix) against list_sites output.

Input parameters:

- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `add_site` (~185 tokens)

Add a property

Adds a property to the account's Search Console set. The property starts UNVERIFIED (permissionLevel siteUnverifiedUser) and most data calls will return 403 until it is verified — verification happens through the Search Console UI or the separate Site Verification API, not through this API. Success is an empty API response (surfaced as { ok: true, added }). Requires the full webmasters OAuth scope (the readonly scope cannot mutate).

Input parameters:

- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `delete_site` (~166 tokens)

Remove a property

Removes (unlinks) a property from the account's Search Console set. No data is deleted and other owners keep their access — this only removes the property from THIS account's list; it can be re-added later. Success is an empty API response (surfaced as { ok: true, removed }). Requires the full webmasters OAuth scope.

Input parameters:

- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `list_sitemaps` (~235 tokens)

List sitemaps

Lists the sitemaps submitted for a property (or, with sitemap_index, the children of a sitemap index file). Returns { sitemap: [WmxSitemap] } with per-sitemap path, lastSubmitted, lastDownloaded, isPending, isSitemapsIndex, type (sitemap/rssFeed/atomFeed/patternSitemap/urlList/notSitemap), warnings and errors counts, and contents[] with per-content-type submitted counts. The contents[].indexed field is deprecated and returns nothing useful — never present it as indexed pages.

Input parameters:

- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…
- `sitemap_index` (string): URL of a sitemap index file — lists its child sitemaps instead of the property's own list.

### `get_sitemap` (~173 tokens)

Get one sitemap

Returns one submitted sitemap's details (the same WmxSitemap shape as list_sitemaps): errors/warnings counts, isPending, lastSubmitted/lastDownloaded, and per-content-type submitted counts. Useful to check processing status after submit_sitemap.

Input parameters:

- `feedpath` (string, required): The full sitemap URL, e.g. "https://example.com/sitemap.xml".
- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `submit_sitemap` (~194 tokens)

Submit a sitemap

Submits (or resubmits) a sitemap for the property. The feedpath must be the sitemap's full URL on the property. Success is an EMPTY API response (surfaced as { ok: true, submitted }); processing is asynchronous — check errors/warnings later with get_sitemap. Requires the full webmasters OAuth scope (readonly is not enough).

Input parameters:

- `feedpath` (string, required): The full sitemap URL, e.g. "https://example.com/sitemap.xml".
- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `delete_sitemap` (~180 tokens)

Delete a sitemap

Removes a sitemap from Search Console. This does not delete the file from the site, and Google may still discover it via robots.txt — it only removes the submission. Success is an empty API response (surfaced as { ok: true, deleted }). Requires the full webmasters OAuth scope.

Input parameters:

- `feedpath` (string, required): The full sitemap URL, e.g. "https://example.com/sitemap.xml".
- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `search_analytics` (~659 tokens)

Search Analytics (performance) query

Runs a Search Analytics (performance) query for a property: clicks, impressions, CTR and average position from Google Search, grouped by the requested dimensions. Each returned row has keys[] (one value per requested dimension, in the same order) plus clicks, impressions, ctr (a FRACTION 0..1, not a percent) and position; rows are sorted by clicks descending. With no dimensions you get one totals row for the range. Dates are calendar dates in Pacific Time and end_date is INCLUSIVE; final data lags ~2-3 days behind (use data_state "all" for fresh, still-changing rows). Pagination: there is no page token — repeat with start_row increased by row_limit until a response comes back with no rows. When grouping by query/page some anonymized long-tail data is never returned, so summed rows will not match a dimensionless totals query. Quota: 1,200 queries/minute per site and per user.

Input parameters:

- `aggregation_type` (string): How metrics are aggregated: "auto" (default) lets the API decide, "byPage"/"byProperty" force it, "byNewsShowcasePanel" is for News Showcase. Affects how clicks/impressions are counted, not which row…
- `data_state` (string): "final" (default) — only finalized data; "all" — include fresh data still subject to change; "hourly_all" — required when grouping by hour (recent data only).
- `dimensions` (array): How to group rows; keys[] in each row follows this order. "country" values are ISO 3166-1 alpha-3 codes, "device" is DESKTOP/MOBILE/TABLET, "hour" requires data_state "hourly_all". Omit for one total…
- `end_date` (string, required): Last date of the range, YYYY-MM-DD, Pacific Time, inclusive.
- `filters` (array): Row filters, ALL combined with AND — the API has no OR across filters (run separate queries instead).
- `row_limit` (integer): Max rows to return (1..25000; API default 1000).
- `search_type` (string): Which search surface to report: "web" (default), "image", "video", "news" (News tab of search), "discover" (Discover feed), "googleNews" (news.google.com and the app). discover/googleNews support a r…
- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…
- `start_date` (string, required): First date of the range, YYYY-MM-DD, Pacific Time.
- `start_row` (integer): 0-based row offset for pagination (default 0). A response with no rows means the end.

### `get_top_queries` (~351 tokens)

Top search queries

Convenience wrapper over search_analytics for the most common ask: the top search queries for a property, sorted by clicks descending (the API's default order). Each row has keys[0] = the query string plus clicks, impressions, ctr (a FRACTION 0..1) and position. Dates are calendar dates in Pacific Time, end_date inclusive; final data lags ~2-3 days. Anonymized long-tail queries are never returned. Same endpoint and quota as search_analytics — use search_analytics directly for other dimensions, pagination, fresh data or regex filters.

Input parameters:

- `country` (string): Only count traffic from this country — ISO 3166-1 alpha-3 code, e.g. "usa".
- `device` (string): Only count traffic from this device class.
- `end_date` (string, required): Last date of the range, YYYY-MM-DD, Pacific Time, inclusive.
- `limit` (integer): How many top queries to return (1..25000; default 100).
- `page_filter` (string): Only count traffic to pages whose URL CONTAINS this substring, e.g. "/blog/".
- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…
- `start_date` (string, required): First date of the range, YYYY-MM-DD, Pacific Time.

### `inspect_url` (~373 tokens)

Inspect a URL's index status

Inspects a URL's status in the Google index (URL Inspection API). Returns { inspectionResult } with: inspectionResultLink (the Search Console UI page for this inspection); indexStatusResult — verdict (PASS/PARTIAL/FAIL/NEUTRAL), human-readable coverageState (e.g. "Submitted and indexed"), robotsTxtState (ALLOWED/DISALLOWED), indexingState, lastCrawlTime, pageFetchState (SUCCESSFUL/SOFT_404/NOT_FOUND/SERVER_ERROR/...), googleCanonical vs userCanonical, sitemap[], referringUrls[], crawledAs (DESKTOP/MOBILE); plus ampResult and richResultsResult (with per-item issues and severities) when applicable. Only the status of the version already in the Google index is returned — this is NOT a live test. mobileUsabilityResult may still appear in responses but the product is retired — ignore it. QUOTA WARNING: only 2,000 inspections per property per DAY (and 600/minute) — throttle any batch inspection and expect 429/403 rateLimitExceeded beyond that.

Input parameters:

- `inspection_url` (string, required): The fully-qualified URL to inspect. It must belong to the property given in site_url.
- `language_code` (string): IETF BCP-47 language for the human-readable issue messages, e.g. "en-US" (the default).
- `site_url` (string, required): The property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different proper…

### `raw_request` (~223 tokens)

Raw Search Console API call

Escape hatch to call any Google Search Console API path directly, for requests the typed tools don't cover. Two surfaces share the host: "webmasters/v3/..." (sites, sitemaps, searchAnalytics) and "v1/..." (urlInspection). siteUrl and feedpath are PATH SEGMENTS and must be URL-encoded (encodeURIComponent), e.g. "webmasters/v3/sites/sc-domain%3Aexample.com/sitemaps". The path may carry a query string. The Bearer token is added automatically; the method defaults to GET. Note: sites.add and sitemaps.submit are PUT with no body and return an empty response on success.

Input parameters:

- `body` (object): JSON request body (POST only; PUT endpoints here take no body).
- `method` (string): HTTP method (the Search Console API uses only these four). Defaults to GET.
- `path` (string, required): API path relative to https://searchconsole.googleapis.com, e.g. "webmasters/v3/sites" or "v1/urlInspection/index:inspect".

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/a1-x-tech-mcp-google-search-console/mcp-google-search-console#diagnostics

## Score history

- 2026-08-19: 67
- 2026-08-18: 52
- 2026-08-17: 38
- 2026-08-16: 38
- 2026-08-15: 38
- 2026-08-14: 38
- 2026-08-13: 38
- 2026-08-12: 38
- 2026-08-11: 38
- 2026-08-10: 38
- 2026-08-09: 38

## Links

- npm package: https://www.npmjs.com/package/mcp-google-search-console
- Socket report: https://socket.dev/npm/package/mcp-google-search-console
- Repository: https://github.com/A1-x-Tech/mcp-google-search-console
- Changelog RSS feed: https://verifymcp.io/servers/a1-x-tech-mcp-google-search-console/mcp-google-search-console.xml
- Changelog JSON feed: https://verifymcp.io/servers/a1-x-tech-mcp-google-search-console/mcp-google-search-console.json
- HTML version of this page: https://verifymcp.io/servers/a1-x-tech-mcp-google-search-console/mcp-google-search-console
