@digestseo/mcp-gsc 0.4.28 → 0.4.29

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 CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.29] - 2026-09-23
11
+
12
+ ### Fixed
13
+ - `urls.inspect_many` now rejects exact duplicate URLs before reserving local safety-budget units or calling Google, preventing one batch from wasting URL Inspection quota on repeated identical requests.
14
+ - `analytics.query` now rejects explicit `byPage` aggregation when the request also groups or filters by page, returning deterministic local guidance to use `auto` instead of forwarding a provider-invalid aggregation shape to Google.
15
+
10
16
  ## [0.4.28] - 2026-09-23
11
17
 
12
18
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digestseo/mcp-gsc",
3
- "version": "0.4.28",
3
+ "version": "0.4.29",
4
4
  "private": false,
5
5
  "main": "scripts/glama-start.mjs",
6
6
  "bin": {
package/src/google.ts CHANGED
@@ -371,6 +371,12 @@ export function assertSearchAnalyticsQueryCompatible(body: SearchAnalyticsQuery)
371
371
  }
372
372
  }
373
373
 
374
+ if (body.aggregationType === 'byPage' && hasPageGroupingOrFilter) {
375
+ throw new Error(
376
+ 'Search Analytics aggregationType byPage cannot be combined with page grouping or filtering; use auto instead.',
377
+ );
378
+ }
379
+
374
380
  if (body.aggregationType === 'byProperty') {
375
381
  if (hasPageGroupingOrFilter) {
376
382
  throw new Error(
package/src/index.ts CHANGED
@@ -987,8 +987,11 @@ class GscMcpRuntime {
987
987
  .array(z.string().url())
988
988
  .min(1)
989
989
  .max(10)
990
+ .refine((urls) => new Set(urls).size === urls.length, {
991
+ message: 'inspection_urls must not contain duplicate URLs.',
992
+ })
990
993
  .describe(
991
- 'Between 1 and 10 fully-qualified URLs to inspect. Each URL must belong to the site_url property.',
994
+ 'Between 1 and 10 unique fully-qualified URLs to inspect. Each URL must belong to the site_url property.',
992
995
  ),
993
996
  language_code: z
994
997
  .string()
@@ -1216,7 +1219,7 @@ class GscMcpRuntime {
1216
1219
  .enum(['auto', 'byNewsShowcasePanel', 'byPage', 'byProperty'])
1217
1220
  .default('auto')
1218
1221
  .describe(
1219
- "How Google aggregates metrics. Leave as 'auto' unless specific semantics are needed. 'byProperty' cannot be used with page grouping/filtering or search_type discover/googleNews. 'byNewsShowcasePanel' requires search_type discover/googleNews plus a searchAppearance equals NEWS_SHOWCASE filter, and cannot be combined with page grouping/filtering or another searchAppearance filter.",
1222
+ "How Google aggregates metrics. Leave as 'auto' unless specific semantics are needed. When grouping/filtering by page, use 'auto'; explicit 'byPage' and 'byProperty' are rejected for that request shape. 'byProperty' is also unavailable for search_type discover/googleNews. 'byNewsShowcasePanel' requires search_type discover/googleNews plus a searchAppearance equals NEWS_SHOWCASE filter, and cannot be combined with page grouping/filtering or another searchAppearance filter.",
1220
1223
  ),
1221
1224
  dimension_filter_groups: z
1222
1225
  .array(