Skip to main content
Glama

SEO GSC Wizard MCP

List Search Console properties

list_sites
Read-only

Use this when the user asks which Search Console properties they can analyze. Lists all Google Search Console properties connected to the authenticated GSC Wizard account: the site URL (a domain property prefixed with sc-domain: or a URL prefix property), tags, and which data source backs the property. Properties another user has shared with you are included too, badged with sharedBy (the owner) and accessLevel (READ_ONLY or FULL). permissionLevel is the Google Search Console permission (siteOwner / siteFullUser / siteRestrictedUser / siteUnverifiedUser), and readable: false means Google will refuse every data request for that property: it is listed in Search Console but not verified, so the user must verify it at search.google.com/search-console before any report will work. Do not attempt reads on a property with readable: false; tell the user to verify it instead. activated: false means the property is connected but is not shown on the account dashboard and is not synced to full storage, so every other property-scoped tool will refuse it with a selection error. Do not attempt reads on those either: where this connection offers it, call set_dashboard_visibility to activate the property first, or choose one with activated: true. Properties shared with the caller are always activated: true, because the grant is itself the selection; a share whose owner no longer has an active GSC Wizard plan is left out, since no tool can read it. gscScope is the Search Console access of the Google connection behind the property: "full" allows submit_sitemap and create_gsc_property, "readonly" means Google will refuse those two (reads still work); absent when unknown. Not for Bing, Yandex or GA4: use list_bing_sites, list_yandex_sites or list_ga4_properties. Owned properties come first, then shared ones, each by siteUrl ascending.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
hintNo
kindNoWidget variant: "kpis", "table", or "sections".
kpisNoKPI cards (kind="kpis").
noteNoCaveat about the result, when the tool returned one.
rowsNoData rows (kind="table").
notesNoCaveats about the result, when the tool returned several.
scopeNoThe brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property.
titleNo
blocksNoStacked sub-blocks (kind="sections").
reasonNo
sourceNo
thenByNoSecondary sort field, when the tool states one.
accountNo
columnsNoColumn defs (kind="table").
warningNoA caveat that changes how the numbers read.
coverageNoHow much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows.
nextStepNo
orderingNoSort order per list, when the result holds several lists.
sortedByNoRow field the rows are sorted by.
timeZoneNoGA4 property's IANA reporting time zone.
emptyTextNo
siteScopeNoSet when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites.
sortOrderNo"asc" or "desc".
thenOrderNoThe tie-break's direction, present only when it differs from sortOrder.
partialDaysNoRequested days after settledThrough; their numbers are still incomplete.
dataMaturityNo
emptyBecauseNo
methodLimitsNo
notConfiguredNo
reauthRequiredNo
settledThroughNoLast day the data is complete through.
comparisonHasDataNofalse when the comparison period has no data at all, so there is no comparison.
coverageUnavailableNoWhy coverage is null, when it is.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changed
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +true
    • addedOutput schema / properties / account
      Added value: +{
      +  "$ref": "#/properties/title"
      +}
    • addedOutput schema / properties / coverage
      Added value: +{
      +  "description": "How much of the property total the returned rows cover, with the property totals inline. Quote totals from here; do not sum the rows."
      +}
    • addedOutput schema / properties / coverageUnavailable
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "Why coverage is null, when it is."
      +}
    • changedOutput schema / properties / dataMaturity / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "dateBasis": {
      -        "$ref": "#/properties/title"
      -      },
      -      "firstIncompleteDate": {
      -        "$ref": "#/properties/title"
      -      },
      -      "note": {
      -        "$ref": "#/properties/title"
      -      },
      -      "probe": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "dataState": {
      -                "$ref": "#/properties/title"
      -              },
      -              "endDate": {
      -                "$ref": "#/properties/title"
      -              },
      -              "searchType": {
      -                "$ref": "#/properties/title"
      -              },
      -              "startDate": {
      -                "$ref": "#/properties/title"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "settledThrough": {
      -        "$ref": "#/properties/title"
      -      },
      -      "source": {
      -        "$ref": "#/properties/title"
      -      },
      -      "warehouseCutoff": {
      -        "$ref": "#/properties/title"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "dateBasis": {
      +        "$ref": "#/properties/title"
      +      },
      +      "firstIncompleteDate": {
      +        "$ref": "#/properties/title"
      +      },
      +      "note": {
      +        "$ref": "#/properties/title"
      +      },
      +      "probe": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": true,
      +            "properties": {
      +              "dataState": {
      +                "$ref": "#/properties/title"
      +              },
      +              "endDate": {
      +                "$ref": "#/properties/title"
      +              },
      +              "searchType": {
      +                "$ref": "#/properties/title"
      +              },
      +              "startDate": {
      +                "$ref": "#/properties/title"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "settledThrough": {
      +        "$ref": "#/properties/title"
      +      },
      +      "source": {
      +        "$ref": "#/properties/title"
      +      },
      +      "warehouseCutoff": {
      +        "$ref": "#/properties/title"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / emptyBecause
      Added value: +{
      +  "$ref": "#/properties/title"
      +}
    • addedOutput schema / properties / hint
      Added value: +{
      +  "$ref": "#/properties/title"
      +}
    • addedOutput schema / properties / methodLimits
      Added value: +{
      +  "$ref": "#/properties/title"
      +}
    • addedOutput schema / properties / nextStep
      Added value: +{
      +  "$ref": "#/properties/title"
      +}
    • addedOutput schema / properties / notConfigured
      Added value: +{
      +  "$ref": "#/properties/comparisonHasData"
      +}
    • addedOutput schema / properties / ordering
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "sortOrder": {
      +            "$ref": "#/properties/title"
      +          },
      +          "sortedBy": {
      +            "$ref": "#/properties/title"
      +          },
      +          "thenBy": {
      +            "$ref": "#/properties/title"
      +          },
      +          "thenOrder": {
      +            "$ref": "#/properties/title"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Sort order per list, when the result holds several lists."
      +}
    • addedOutput schema / properties / partialDays
      Added value: +{
      +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
      +  "description": "Requested days after settledThrough; their numbers are still incomplete."
      +}
    • addedOutput schema / properties / reason
      Added value: +{
      +  "$ref": "#/properties/title"
      +}
    • addedOutput schema / properties / reauthRequired
      Added value: +{
      +  "$ref": "#/properties/notConfigured"
      +}
    • addedOutput schema / properties / scope
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "brand": {
      +          "$ref": "#/properties/kind",
      +          "description": "\"branded\" or \"non_branded\"."
      +        },
      +        "brandKeywordsSkipped": {
      +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
      +          "description": "Branded keywords that could not be compiled and were left out of the filter."
      +        },
      +        "contentGroup": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "id": {
      +                  "$ref": "#/properties/title"
      +                },
      +                "name": {
      +                  "$ref": "#/properties/title"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "topicCluster": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "id": {
      +                  "$ref": "#/properties/title"
      +                },
      +                "name": {
      +                  "$ref": "#/properties/title"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The brand, content group or topic cluster filter these numbers are narrowed to; absent when the call was unscoped and the numbers cover the whole property."
      +}
    • changedOutput schema / properties / siteScope / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "hostnames": {
      -        "anyOf": [
      -          {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "includesSubdomainsOf": {
      -        "$ref": "#/properties/title"
      -      },
      -      "note": {
      -        "$ref": "#/properties/title"
      -      },
      -      "sharedWithSites": {
      -        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "hostnames": {
      +        "anyOf": [
      +          {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "includesSubdomainsOf": {
      +        "$ref": "#/properties/title"
      +      },
      +      "note": {
      +        "$ref": "#/properties/title"
      +      },
      +      "sharedWithSites": {
      +        "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / sortOrder
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "\"asc\" or \"desc\"."
      +}
    • addedOutput schema / properties / sortedBy
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "Row field the rows are sorted by."
      +}
    • addedOutput schema / properties / thenBy
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "Secondary sort field, when the tool states one."
      +}
    • addedOutput schema / properties / thenOrder
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "The tie-break's direction, present only when it differs from sortOrder."
      +}
    • addedOutput schema / properties / warning
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "A caveat that changes how the numbers read."
      +}
  2. Changed4 schema fields changed
    • addedOutput schema / properties / comparisonHasData
      Added value: +{
      +  "description": "false when the comparison period has no data at all, so there is no comparison.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / note
      Added value: +{
      +  "$ref": "#/properties/kind",
      +  "description": "Caveat about the result, when the tool returned one."
      +}
    • addedOutput schema / properties / notes
      Added value: +{
      +  "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames",
      +  "description": "Caveats about the result, when the tool returned several."
      +}
    • addedOutput schema / properties / siteScope
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "hostnames": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "includesSubdomainsOf": {
      +          "$ref": "#/properties/title"
      +        },
      +        "note": {
      +          "$ref": "#/properties/title"
      +        },
      +        "sharedWithSites": {
      +          "$ref": "#/properties/siteScope/anyOf/0/properties/hostnames"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Set when GA4 numbers were narrowed to this site's hostnames because the property is shared with other sites."
      +}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the read-only/non-destructive profile, but the description goes well beyond them: it explains that readable:false means Google will refuse every data request, that activated:false causes selection errors from every other property-scoped tool, that shared properties are always activated, and that gscScope 'readonly' blocks submit_sitemap and create_gsc_property. This is exactly the behavioral 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?

It is front-loaded with the trigger and the scope statement, and the dense flag semantics (readable, activated, gscScope) each earn their place because they change agent behavior. The single-paragraph block is long and slightly sprawling for a zero-argument list tool, keeping it short of a 5.

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 shape needn't be re-explained, yet the description adds the semantics the schema cannot (what readable:false and activated:false imply, how shares are ordered and badged). Routing, warnings, and ordering are all covered for a tool of this complexity.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate at the input level; the 0-param baseline of 4 applies. The description instead invests its detail in output-field semantics, which is appropriate but not a parameter concern.

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?

States a specific verb and resource ('Lists all Google Search Console properties connected to the authenticated GSC Wizard account') and enumerates the returned fields. It also names the sibling tools it is not for (list_bing_sites, list_yandex_sites, list_ga4_properties), so an agent can distinguish it without opening any schema.

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 trigger ('Use this when the user asks which Search Console properties they can analyze'), explicit alternatives for other platforms, and explicit when-not guidance ('Do not attempt reads on a property with readable: false'; 'Do not attempt reads on those either'). It even routes to the corrective action (set_dashboard_visibility) when a property is not activated.

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