Skip to main content
Glama

SEO GSC Wizard MCP

Merchant Center pricing insights

get_gmc_pricing_insights
Read-only

Use this when the user asks whether their prices are competitive in Google Shopping or what Google suggests they charge. Price competitiveness and sale-price suggestions from the Google Merchant Center account linked to a GSC Wizard site, joined per product: your price against the market benchmark for the same product (priceGapFraction, positive = you are more expensive), and Google's suggested sale price with the predicted change in impressions, clicks and conversions if you adopt it. Rows are ordered by sort: "opportunity" (largest predicted clicks gain first, the default) or "gap" (largest absolute price gap first), missing values last. Both views are dateless snapshots of the current catalog. All predicted*ChangeFraction and *Fraction fields are 0-1 FRACTIONS as Google reports them (0.12 = +12%), not the 0-100 percentage ctr uses elsewhere in this server. Not for competitors or best sellers: use get_gmc_competitors or get_gmc_best_sellers. Benchmarks need valid GTINs and suggestions need conversion reporting, so an empty result usually means "not eligible", not "no data"; reportUnavailable (with no rows) means Google refuses the pricing report for the Merchant Center account outright, and the other reports are unaffected. Returns a notConfigured result (not an error) when Merchant Center is not connected or no Merchant Center account is linked to the site in the GSC Wizard app.

Input Schema

NameRequiredDescriptionDefault
sortNo"opportunity" (largest predictedClicksChangeFraction first, the default) or "gap" (largest absolute priceGapFraction first). Products without the sort key go last.opportunity
limitNoProducts to return after sorting (default 100, max 1000).
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").
countryCodeNoOptional. Restrict price benchmarks to one country (ISO 3166-1 alpha-2, e.g. "US"). Omit for every benchmark country; a product benchmarked in several countries then keeps its first benchmark and reports benchmarkCountryCode. Sale-price suggestions are never country-filtered.

Output Schema

NameRequiredDescriptionDefault
hintNo
rowsNo
sortNo
rangeNo
reasonNo
thenByNo
accountNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
summaryNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
sortOrderNo
thenOrderNo
truncatedNo
unitsNoteNo
dataSourceNo
countryCodeNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
snapshotDateNo
notConfiguredNo
truncationNoteNo
eligibilityNoteNo
truncationReasonNo
reportUnavailableNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / listKey
      Added value: +{
      +  "$ref": "#/properties/siteUrl",
      +  "description": "Name of the top-level field that holds the rows sortedBy describes."
      +}
  2. Changed13 schema fields changed
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +true
    • addedOutput schema / properties / emptyBecause
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / methodLimits
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / nextStep
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / ordering
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "sortOrder": {
      +            "$ref": "#/properties/siteUrl"
      +          },
      +          "sortedBy": {
      +            "$ref": "#/properties/siteUrl"
      +          },
      +          "thenBy": {
      +            "$ref": "#/properties/siteUrl"
      +          },
      +          "thenOrder": {
      +            "$ref": "#/properties/siteUrl"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / range / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "days": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "endDate": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "startDate": {
      -        "$ref": "#/properties/siteUrl"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "days": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "endDate": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "startDate": {
      +        "$ref": "#/properties/siteUrl"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / reportUnavailable / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "message": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "reason": {
      -        "$ref": "#/properties/siteUrl"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "message": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "reason": {
      +        "$ref": "#/properties/siteUrl"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / rows / items / additionalProperties
      Previous value: -falseNew value: +true
    • addedOutput schema / properties / sortOrder
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / sortedBy
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • changedOutput schema / properties / summary / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aboveBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "atBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "belowBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "competitivenessRows": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "currencyMismatch": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "effectivenessCounts": {},
      -      "insightsRows": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "products": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "withBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "withSuggestion": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "aboveBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "atBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "belowBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "competitivenessRows": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "currencyMismatch": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "effectivenessCounts": {},
      +      "insightsRows": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "products": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "withBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "withSuggestion": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / thenBy
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / thenOrder
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / reportUnavailable
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "message": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "reason": {
      +          "$ref": "#/properties/siteUrl"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
  4. Changed3 schema fields changed
    • addedOutput schema / properties / cachedAt
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • changedOutput schema / properties / summary / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aboveBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "atBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "belowBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "competitivenessRows": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "effectivenessCounts": {},
      -      "insightsRows": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "products": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "withBenchmark": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      },
      -      "withSuggestion": {
      -        "$ref": "#/properties/range/anyOf/0/properties/days"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "aboveBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "atBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "belowBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "competitivenessRows": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "currencyMismatch": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "effectivenessCounts": {},
      +      "insightsRows": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "products": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "withBenchmark": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      },
      +      "withSuggestion": {
      +        "$ref": "#/properties/range/anyOf/0/properties/days"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / truncationReason
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/open-world safety; the description adds substantial behavior: both views are dateless snapshots, row ordering semantics including where missing values land, a unit warning that this tool returns 0-1 fractions while `ctr` elsewhere in the server is 0-100, and three distinct non-error/degraded outcomes (empty = not eligible, `reportUnavailable` = Google refuses the report for the account with other reports unaffected, `notConfigured` = Merchant Center not connected). This is exactly the context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and organized as purpose → outputs → ordering → caveats → exclusions, with no filler. It is dense and clause-heavy, packing ordering rules and three failure modes into long run-on sentences, so a small trim would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be re-explained, and the description still covers the things the schema cannot: eligibility requirements (valid GTINs, conversion reporting), degraded-result semantics, and unit conventions. For a read-only, open-world report tool, nothing an agent needs in order to call it correctly or interpret an empty response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented, and the description's restatement of `sort` ordering largely duplicates the schema. It adds a useful data-shape note (fractions vs percentages) but no new parameter-level semantics, notably leaving the countryCode multi-benchmark nuance entirely to the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the exact user question this answers (price competitiveness in Google Shopping, Google's suggested price), and the body states the two concrete outputs: priceGapFraction vs. market benchmark and suggested sale price with predicted impression/click/conversion deltas. It explicitly names the sibling tools it is not (get_gmc_competitors, get_gmc_best_sellers), so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit triggering condition ("Use this when the user asks whether their prices are competitive... or what Google suggests they charge") plus hard exclusions with the correct alternative named for each. It also warns that an empty result means "not eligible" rather than "no data", which prevents a common misdiagnosis path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources