@digestseo/mcp-gsc 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +3 -3
- package/SETUP.md +1 -1
- package/package.json +2 -2
- package/src/index.ts +12 -5
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.3] - 2026-09-21
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- The documented and npm-declared Node.js minimum is now 22+, matching the bundled Wrangler 4 runtime requirement instead of advertising unsupported Node.js 20 installs.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- URL Inspection guidance now states that Google reports the version currently in its index rather than running a live URL test, and no longer presents the deprecated mobile-usability field as a current primary signal.
|
|
17
|
+
|
|
10
18
|
## [0.4.2] - 2026-09-21
|
|
11
19
|
|
|
12
20
|
### Fixed
|
package/README.md
CHANGED
|
@@ -75,8 +75,8 @@ By default (`GSC_ACCESS_MODE=readwrite`), this server exposes 21 tools. Read-onl
|
|
|
75
75
|
| **`sites.get`** | Read | Retrieve one exact Search Console property and the connected account's permission level for it. |
|
|
76
76
|
| **`analytics.query`** | Read | Impressions, clicks, CTR, and average position over a date range, with dimensions, filters, safe pagination, and selectable search type. Pass `dimensions: []` for true site totals; Google's aggregate row may omit `keys`. |
|
|
77
77
|
| **`insights.page_queries`** / **`insights.query_pages`** | Read | Drill from one exact page to its Search Console queries, or from one exact query to the pages Google surfaced for it, with `row_limit` / `start_row` pagination. |
|
|
78
|
-
| **`urls.inspect`** | Read | Google's URL Inspection report for
|
|
79
|
-
| **`urls.inspect_many`** | Read | Inspect up to 10 URLs sequentially in one call. Each URL still consumes one Google URL Inspection request and one unit of the server's shared inspection safety budget. |
|
|
78
|
+
| **`urls.inspect`** | Read | Google's URL Inspection report for the version of one page currently known in Google's index. It is not a live URL test; mobile-usability output is deprecated. |
|
|
79
|
+
| **`urls.inspect_many`** | Read | Inspect Google's indexed versions of up to 10 URLs sequentially in one call. Each URL still consumes one Google URL Inspection request and one unit of the server's shared inspection safety budget; this does not run live URL tests. |
|
|
80
80
|
| **`sitemaps.list`** / **`sitemaps.get`** | Read | List submitted sitemaps or retrieve one sitemap's details. |
|
|
81
81
|
| **`insights.quick_wins`** / **`insights.cannibalization`** / **`insights.content_decay`** | Read | Surface average-position opportunity rows, query/page overlap, and evidence-ranked click declines. Quick-win candidates are observed query/page rows selected by aggregate Search Console average position, not proof of a stable current rank, and CTR is context rather than an eligibility filter. Cannibalization candidate totals/shares are scoped to observed query/page rows rather than true query-level property totals; content-decay results distinguish likely decay from weak evidence and improving visibility with click volatility. |
|
|
82
82
|
| **`indexing.list_pages`** / **`analytics.compare`** | Read | Analyze pages receiving Search Console impressions and compare two periods, optionally using the same search type and query/page/country/device/search-appearance filters for both periods. `indexing.list_pages` is performance data, not index coverage: a missing URL may still be indexed; use `urls.inspect` / `urls.inspect_many` for URL-level index status. |
|
|
@@ -97,7 +97,7 @@ Once connected, ask your assistant things like:
|
|
|
97
97
|
|
|
98
98
|
- *"What are my top 20 queries by clicks in the last 28 days?"*
|
|
99
99
|
- *"Compare impressions for example.com this month vs last month — which pages dropped?"*
|
|
100
|
-
- *"
|
|
100
|
+
- *"What does Google's indexed version of `https://example.com/pricing` show for index status and last crawl?"*
|
|
101
101
|
- *"Which high-impression query/page rows have an average position between 5 and 15? Show me those optimization opportunities."*
|
|
102
102
|
- *"Give me a weekly digest for `sc-domain:example.com` ending today."*
|
|
103
103
|
- *"Do any of my sitemaps have errors or warnings?"*
|
package/SETUP.md
CHANGED
|
@@ -10,7 +10,7 @@ By the end you'll have a Worker at `https://<your-worker>.workers.dev/mcp` that
|
|
|
10
10
|
|
|
11
11
|
- A [Cloudflare account](https://dash.cloudflare.com/sign-up) (the free Workers plan is enough to start).
|
|
12
12
|
- A [Google account](https://accounts.google.com/) with access to the Search Console properties you want to query.
|
|
13
|
-
- Node.js
|
|
13
|
+
- Node.js 22+ and npm. The bundled Wrangler 4 runtime requires Node 22 or newer.
|
|
14
14
|
- The Wrangler CLI — installed for you by `npm install`; invoke it with `npx wrangler …`.
|
|
15
15
|
|
|
16
16
|
Clone and install:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digestseo/mcp-gsc",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "scripts/glama-start.mjs",
|
|
6
6
|
"bin": {
|
|
@@ -87,6 +87,6 @@
|
|
|
87
87
|
"vitest": "^4.1.11"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
|
-
"node": ">=
|
|
90
|
+
"node": ">=22.0.0"
|
|
91
91
|
}
|
|
92
92
|
}
|
package/src/index.ts
CHANGED
|
@@ -172,14 +172,19 @@ const SITE_DETAIL_OUTPUT_SCHEMA = {
|
|
|
172
172
|
site: z.object(SITE_OUTPUT_SCHEMA),
|
|
173
173
|
};
|
|
174
174
|
|
|
175
|
+
const URL_INSPECTION_SCOPE_NOTE =
|
|
176
|
+
"Google's URL Inspection API reports the version currently known in Google's index; it does not run a live URL test or prove current live-page indexability. The mobileUsabilityResult field is deprecated and may be absent.";
|
|
177
|
+
|
|
175
178
|
const INSPECTION_OUTPUT_SCHEMA = {
|
|
176
179
|
inspection_result: z.unknown(),
|
|
180
|
+
note: z.string(),
|
|
177
181
|
};
|
|
178
182
|
|
|
179
183
|
const INSPECTION_BATCH_OUTPUT_SCHEMA = {
|
|
180
184
|
requested_count: z.number().int().positive(),
|
|
181
185
|
succeeded_count: z.number().int().nonnegative(),
|
|
182
186
|
failed_count: z.number().int().nonnegative(),
|
|
187
|
+
note: z.string(),
|
|
183
188
|
results: z.array(
|
|
184
189
|
z.object({
|
|
185
190
|
inspection_url: z.string(),
|
|
@@ -523,12 +528,12 @@ const TOOL_CATALOG = [
|
|
|
523
528
|
{
|
|
524
529
|
name: 'urls.inspect',
|
|
525
530
|
description:
|
|
526
|
-
"Inspect a single URL
|
|
531
|
+
"Inspect Google's indexed version of a single URL: index status, last crawl, page-fetch/indexing state, canonicals, and rich-results/AMP analysis where available. This is not a live URL test; mobile usability is a deprecated response field. Use urls.inspect_many for 2-10 URLs.",
|
|
527
532
|
},
|
|
528
533
|
{
|
|
529
534
|
name: 'urls.inspect_many',
|
|
530
535
|
description:
|
|
531
|
-
|
|
536
|
+
"Inspect Google's indexed versions of up to 10 URLs sequentially in one MCP call while charging the same URL Inspection safety budget per URL. This does not run live URL tests.",
|
|
532
537
|
},
|
|
533
538
|
{
|
|
534
539
|
name: 'sitemaps.list',
|
|
@@ -719,7 +724,7 @@ class GscMcpRuntime {
|
|
|
719
724
|
'urls.inspect',
|
|
720
725
|
{
|
|
721
726
|
title: 'Inspect URL index status',
|
|
722
|
-
description: `Inspect a single URL
|
|
727
|
+
description: `Inspect the version of a single URL currently known in Google's index. Returns Google's index-status analysis, last crawl, page-fetch/indexing state, canonicals, and rich-results/AMP analysis where available. This API does not test the live URL or prove current live-page indexability, and its mobile-usability result is deprecated. Use this when the user asks 'is X indexed?' or wants Google's indexed-state evidence for one page. For a bounded group of 2-10 URLs, prefer urls.inspect_many; Google still processes one URL Inspection request per URL and applies the same quota semantics.`,
|
|
723
728
|
inputSchema: {
|
|
724
729
|
site_url: z.string().describe(SITE_URL_DESCRIPTION),
|
|
725
730
|
inspection_url: z
|
|
@@ -748,8 +753,9 @@ class GscMcpRuntime {
|
|
|
748
753
|
inspection_url,
|
|
749
754
|
language_code,
|
|
750
755
|
);
|
|
751
|
-
return toolResponse(JSON.stringify(result, null, 2), {
|
|
756
|
+
return toolResponse(JSON.stringify({ note: URL_INSPECTION_SCOPE_NOTE, inspection_result: result }, null, 2), {
|
|
752
757
|
inspection_result: result,
|
|
758
|
+
note: URL_INSPECTION_SCOPE_NOTE,
|
|
753
759
|
});
|
|
754
760
|
},
|
|
755
761
|
);
|
|
@@ -758,7 +764,7 @@ class GscMcpRuntime {
|
|
|
758
764
|
'urls.inspect_many',
|
|
759
765
|
{
|
|
760
766
|
title: 'Inspect multiple URLs',
|
|
761
|
-
description: `Inspect up to 10 URLs from one Search Console property
|
|
767
|
+
description: `Inspect the versions of up to 10 URLs currently known in Google's index from one Search Console property. This API does not run live URL tests. Google still processes one URL Inspection request per URL, so every requested URL consumes one quota unit and one unit of this server's shared URL-inspection safety budget. Requests are sent sequentially to avoid unnecessary bursts. Use this for a small group of important or debugging-target URLs; do not use it to crawl an entire site.`,
|
|
762
768
|
inputSchema: {
|
|
763
769
|
site_url: z.string().describe(SITE_URL_DESCRIPTION),
|
|
764
770
|
inspection_urls: z
|
|
@@ -809,6 +815,7 @@ class GscMcpRuntime {
|
|
|
809
815
|
requested_count: inspection_urls.length,
|
|
810
816
|
succeeded_count: succeededCount,
|
|
811
817
|
failed_count: results.length - succeededCount,
|
|
818
|
+
note: URL_INSPECTION_SCOPE_NOTE,
|
|
812
819
|
results,
|
|
813
820
|
};
|
|
814
821
|
return toolResponse(JSON.stringify(payload, null, 2), payload);
|