AskWatch Google Search Console MCP

Ask Google Search Console in plain language. Hosted, free, no Google Cloud project.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
87%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,673Tokens (tool definitions)
~2.1 KBTypical response size
Significant attention impact (2.09% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "gsc": {
      "url": "https://mcp.askwatch.ai/gsc"
    }
  }
}

Remote endpoints

https://mcp.askwatch.ai/gscstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢site_overview(site, days, start_date, end_date)

How the site did over a period compared with the one before it: clicks, impressions, CTR, average position and the change in each. Covers the question 'how is my site doing'.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢top(site, dimension, country, device, order_by, ...)

Top queries, pages, countries or devices for a period. Optionally narrowed to one country or device — 'top pages in Germany on mobile' is one call.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "dimension": {
      "type": "string",
      "enum": [
        "query",
        "page",
        "country",
        "device"
      ],
      "description": "What to group by. Default query."
    },
    "country": {
      "type": "string",
      "description": "ISO-3166-1 alpha-3, e.g. deu, usa. Filters rather than groups."
    },
    "device": {
      "type": "string",
      "enum": [
        "desktop",
        "mobile",
        "tablet"
      ]
    },
    "order_by": {
      "type": "string",
      "enum": [
        "clicks",
        "impressions"
      ],
      "description": "Default clicks."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "Rows to return. Default 25, maximum 100; `has_more` says whether there were more."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢changes(site, dimension, min_impressions, limit, days, ...)

What gained and what lost between this period and the one before it, with small rows filtered out. Answers 'what dropped in the last 28 days'.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "dimension": {
      "type": "string",
      "enum": [
        "query",
        "page"
      ],
      "description": "Default query."
    },
    "min_impressions": {
      "type": "integer",
      "minimum": 0,
      "description": "Noise floor. Default 30 in either window."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "Rows to return. Default 25, maximum 100; `has_more` says whether there were more."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_opportunities(site, min_impressions, limit, days, start_date, ...)

Queries ranking 5-20 with plenty of impressions but a click-through rate below what is typical at their position — where a title or snippet rewrite is worth the most clicks.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "min_impressions": {
      "type": "integer",
      "minimum": 0,
      "description": "Default 60."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "Rows to return. Default 25, maximum 100; `has_more` says whether there were more."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_cannibalization(site, min_impressions, limit, days, start_date, ...)

Queries where more than one page of the site is being shown, with how each page does on them.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "min_impressions": {
      "type": "integer",
      "minimum": 0,
      "description": "Per page. Default 30."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "Rows to return. Default 25, maximum 100; `has_more` says whether there were more."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢page_queries(site, page, match, limit, days, ...)

What searches a specific page is shown for.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "page": {
      "type": "string",
      "description": "Full URL of the page."
    },
    "match": {
      "type": "string",
      "enum": [
        "equals",
        "contains"
      ],
      "description": "Default equals."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "Rows to return. Default 25, maximum 100; `has_more` says whether there were more."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "required": [
    "page"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢brand_split(site, brand_terms, days, start_date, end_date)

Branded versus non-branded search, split on the words supplied. The split is only as good as those terms: misspellings and the domain name catch more of what people type.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "brand_terms": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Words that make a search branded, e.g. ['askwatch', 'ask watch']."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "required": [
    "brand_terms"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢query(site, dimensions, filters, limit, start_row, ...)

Direct query against Google's Search Analytics API, with the same dates, dimensions and filters it takes, passed through unchanged.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "dimensions": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "query",
          "page",
          "country",
          "device",
          "date"
        ]
      },
      "description": "Group by these. Omit for totals."
    },
    "filters": {
      "type": "array",
      "items": {},
      "description": "Google's dimensionFilterGroups, passed through unchanged."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "description": "Rows to return. Default 25, maximum 100; `has_more` says whether there were more."
    },
    "start_row": {
      "type": "integer",
      "minimum": 0,
      "description": "Paging offset; `next_start_row` comes back in the answer."
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 480,
      "description": "Length of the window, counted back from the last day with data. Default 28."
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Overrides `days`."
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD. Defaults to the last day with data."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_sites

Search Console properties this connection can read, from Google's Sites API. These are the exact strings the site argument takes.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢inspect_url(site, url)

Google's index status for one URL, as the URL Inspection API reports it: whether it is indexed, when it was last crawled, and which canonical Google chose.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    },
    "url": {
      "type": "string",
      "description": "The exact URL to inspect."
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_sitemaps(site)

Sitemaps submitted for the property and their status, from Google's Sitemaps API. Read-only: submitting is not possible with read access.

Input Schema

{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Search Console property, exactly as list_sites reports it (sc-domain:example.com or https://example.com/). Optional when the account has only one property."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools