Skip to main content
Glama

SEO GSC Wizard MCP

Merchant Center report query (MCQL)

query_gmc_report
Read-only

Use this when the user needs a Merchant Center field, filter or ordering the fixed Merchant Center tools do not expose (a product_view gtin, offers ordered by impressions). Runs a raw Merchant Center Query Language (MCQL) query against the reports of the Google Merchant Center account linked to a GSC Wizard site. MCQL is SQL-like: SELECT offer_id, title, clicks, impressions FROM product_performance_view WHERE date BETWEEN '2026-09-01' AND '2026-09-30' AND marketing_method = 'ORGANIC' ORDER BY clicks DESC. The views are product_performance_view, non_product_performance_view, product_view, price_competitiveness_product_view, price_insights_product_view, best_sellers_product_cluster_view, best_sellers_brand_view, competitive_visibility_competitor_view, competitive_visibility_top_merchant_view, competitive_visibility_benchmark_view. The performance and competitive visibility views require a date condition in WHERE; product_view and the two price views are dateless snapshots. Read only (MCQL cannot change anything) and always against the linked account. Not for questions a fixed tool answers: use get_organic_shopping_performance, get_product_listing_status, get_gmc_pricing_insights, get_gmc_best_sellers or get_gmc_competitors, which return normalised units. Rows come back raw: int64 as strings, money as amountMicros, rates as 0-1 fractions (see unitsNote), in the order of the query's ORDER BY (declared as sortedBy / sortOrder / thenBy in camelCase when it lists plain fields), in no defined order without one. At most limit rows (default 200, max 1000); hasMore says when the query matched more. An invalid query fails with bad_request and Google's masked diagnostic. 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
limitNoRows to return (default 200, max 1000).
queryYesThe MCQL query: SELECT <fields> FROM <view> [WHERE ...] [ORDER BY ...] [LIMIT n]. Field names are snake_case (offer_id, click_through_rate). String and date literals use single quotes.
siteUrlYesThe property URL as returned by list_sites (e.g. "sc-domain:example.com").

Output Schema

NameRequiredDescriptionDefault
hintNo
rowsNo
viewNo
queryNo
rangeNo
reasonNo
thenByNo
accountNo
hasMoreNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
cachedAtNo
nextStepNo
orderingNo
rowCountNo
sortedByNo
emptyNoteNo
resultKeyNo
sortOrderNo
thenOrderNo
truncatedNo
unitsNoteNo
dataSourceNo
emptyBecauseNo
gmcAccountIdNo
methodLimitsNo
notConfiguredNo
truncationNoteNo
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. Changed11 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"
      +  }
      +]
    • addedOutput schema / properties / sortOrder
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / sortedBy
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / thenBy
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / thenOrder
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
  3. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, open-world, and non-destructive behavior, and the description adds important operational context: it is always scoped to the linked account, certain views require date conditions, raw units are returned, ordering follows the query, and invalid queries or missing configuration produce specific failure shapes. It also explains that `hasMore` signals truncation and that `notConfigured` is a result rather than an error.

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?

The description is front-loaded with the core when-to-use condition and keeps most sentences functional for a complex raw-query tool. The view list and raw-result caveats are long but justified; there is minor redundancy with the schema on the `limit` default and maximum.

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?

Because an output schema exists, the description need not explain return shape, and it still covers the important surrounding context: raw unit representation, ordering behavior, `limit`/`hasMore`, invalid-query errors, and `notConfigured` handling. It is complete enough for an agent to invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful query-construction guidance beyond the schema: an MCQL example, the available views, and which views require date filters versus being dateless snapshots. This materially helps an agent author the `query` parameter, though it does not attempt to enumerate all field names.

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 description states a specific verb and resource: run a raw MCQL query against Merchant Center reports for the linked GSC Wizard site. It distinguishes this from the fixed Merchant Center tools and gives concrete examples of what it can expose that they cannot.

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?

It explicitly says when to use this tool: when a needed field, filter, or ordering is not exposed by fixed tools. It also names the fixed alternatives to use otherwise, including get_organic_shopping_performance, get_product_listing_status, get_gmc_pricing_insights, get_gmc_best_sellers, and get_gmc_competitors.

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