Skip to main content
Glama
gerald-guledew

gsc-doctor

gsc-doctor

An MCP server for Google Search Console, built around one question that the existing tools answer badly: why are my pages not indexed?

Google exposes the Pages report in the Search Console UI, but there is no bulk API for it. You can only inspect URLs one at a time. Most Search Console MCP servers stop at thin one-tool-per-endpoint wrappers and leave you to do that fan-out by hand. gsc-doctor does it for you: it reads your sitemap, inspects every URL, groups the results by coverage state, and annotates each group with what the state actually means and what to do about it.

Tools

Tool

What it does

diagnose_indexing

Reads URLs from your sitemap (or an explicit list), inspects each, and returns a grouped coverage report with plain-language guidance. This is the reason the project exists.

list_properties

Lists the properties your service account can read, with permission levels. Run this first to get the exact siteUrl string.

inspect_url

Full URL Inspection result for a single page: index status, Google's chosen canonical, crawl details, mobile usability, rich results.

search_analytics

Clicks, impressions, CTR and average position, broken down by query, page, country, device, date or search appearance.

list_sitemaps

Every submitted sitemap with last download time, errors, warnings and URL counts.

submit_sitemap

Submits a sitemap. Only registered when GSC_ALLOW_WRITES=true.

Beyond the raw coverage state, diagnose_indexing flags problems that are easy to miss in the UI:

  • Pages where Google picked a different canonical than the one you declared

  • noindex arriving via meta tag or X-Robots-Tag header

  • robots.txt blocks

  • Failed page fetches

  • Indexed pages that no submitted sitemap references

Related MCP server: Google Search Console MCP Server

Setup

1. Enable the API and create a service account

  1. Open the Google Cloud Console and create (or pick) a project.

  2. Enable the Google Search Console API for that project.

  3. Go to IAM & Admin > Service Accounts and create a service account.

  4. Under its Keys tab, add a key of type JSON and download it.

2. Grant it access to your property

Open Search Console, then Settings > Users and permissions > Add user. Paste the service account's client_email (it looks like name@project.iam.gserviceaccount.com) and give it Full or Restricted access.

This step is the one people forget. Without it every call returns HTTP 403.

3. Install

git clone https://github.com/gerald-guledew/gsc-doctor.git
cd gsc-doctor
npm install
npm run build

4. Register with Claude Code

claude mcp add gsc-doctor --env GSC_CREDENTIALS_PATH=/absolute/path/to/key.json -- node /absolute/path/to/gsc-doctor/dist/index.js

Or add it to your MCP client config directly:

{
  "mcpServers": {
    "gsc-doctor": {
      "command": "node",
      "args": ["/absolute/path/to/gsc-doctor/dist/index.js"],
      "env": {
        "GSC_CREDENTIALS_PATH": "/absolute/path/to/key.json"
      }
    }
  }
}

Configuration

Variable

Purpose

GSC_CREDENTIALS_PATH

Path to the service account JSON key.

GSC_CREDENTIALS_JSON

The key as an inline JSON string, for environments that inject secrets as env vars. Takes precedence over the path.

GSC_ALLOW_WRITES

Set to true to enable submit_sitemap. Off by default.

If neither credential variable is set, the server falls back to Application Default Credentials.

Usage

Ask your assistant things like:

  • "Why aren't my pages indexed?"

  • "Diagnose indexing for sc-domain:example.com"

  • "Which queries drove impressions last month but almost no clicks?"

  • "Is https://example.com/pricing/ indexed, and which canonical did Google choose?"

Property identifiers must match Search Console exactly: sc-domain:example.com for a domain property, https://example.com/ for a URL-prefix property. Use list_properties if you are unsure.

Security

  • Writes are opt-in. With GSC_ALLOW_WRITES unset the server requests the read-only OAuth scope, so the token it holds is incapable of mutating your property even if something tried.

  • Credentials never leave your machine. The server runs locally and talks only to Google's API.

  • .gitignore already excludes the common service account key filename patterns. Keep your key out of the repo.

Limitations

These are constraints of Google's API, not of this server:

  • No "Request Indexing". The UI button has no API equivalent. The separate Indexing API officially accepts only JobPosting and BroadcastEvent markup. Tools that point it at ordinary pages are working outside Google's documented policy.

  • No bulk Pages report. URL Inspection is per-URL, quota roughly 2,000 per day and 600 per minute per property. diagnose_indexing defaults to 50 URLs per run for that reason.

  • No Removals, manual actions or security issues. Not exposed by the API at all.

  • No Core Web Vitals. That data lives in the separate CrUX API.

  • Search Console data lags real time by about three days, which is why search_analytics defaults its end date accordingly.

License

MIT

Available Tools

5 tools
diagnose_indexingDiagnose index coverageA
Read-only

Explains why pages are or are not indexed. Reads URLs from the site's sitemap (or takes an explicit list), inspects each one, and groups the results by coverage state with plain-language guidance. This reconstructs the Pages report, which Google exposes in the UI but not as a bulk API.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsNoSpecific URLs to inspect. When omitted, URLs are read from the sitemap.
maxUrlsNoCap on URLs inspected (default 50). Daily inspection quota is about 2,000.
siteUrlYesProperty identifier exactly as Search Console lists it: "sc-domain:example.com" for a domain property, or "https://example.com/" for a URL-prefix property.
sitemapUrlNoSitemap to read URLs from. Defaults to <origin>/sitemap.xml.
concurrencyNoParallel inspections (default 5). The per-minute limit is about 600.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, and the description consistently describes read-only operations. It adds meaningful behavioral context beyond the annotation: it reads from sitemaps, inspects URLs, groups by coverage state, and produces plain-language guidance. No contradiction exists.

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

Conciseness5/5

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

Three sentences with no wasted words. The core purpose is front-loaded, followed by operational detail and then a rationale that aids selection. Every sentence earns its place.

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

Completeness4/5

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

The description, rich parameter schema, and read-only annotation together cover the tool's purpose, input selection, behavior, and output shape at a useful level. An output schema is absent, but the description gives enough return expectation by mentioning grouping by coverage state and guidance. Minor detail about exact response format is not critical for correct invocation.

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 the schema already documents all five parameters. The description reinforces the sitemap-vs-explicit-list behavior for `urls` and `sitemapUrl`, but adds no new parameter meaning beyond what the schema already states.

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 action and resource: it 'Explains why pages are or are not indexed' and details the mechanism ('Reads URLs from the site's sitemap', 'inspects each one', 'groups the results by coverage state'). It also distinguishes itself by noting it reconstructs the Pages report not available as a bulk API.

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

Usage Guidelines4/5

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

The description clearly communicates when to use it: for batch index-coverage diagnostics via sitemap or explicit URL list, especially when the Pages report is needed outside the UI. It does not explicitly name sibling alternatives or state exclusions, but the bulk-report framing provides strong usage context.

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

inspect_urlInspect a single URLA
Read-only

Returns the full URL Inspection result for one page: index status, canonical Google selected, crawl details, mobile usability and detected rich results.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe full URL to inspect. Must belong to the property.
siteUrlYesProperty identifier exactly as Search Console lists it: "sc-domain:example.com" for a domain property, or "https://example.com/" for a URL-prefix property.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, lowering the bar. The description adds useful behavioral context by specifying exactly what the result includes, such as 'index status', 'canonical Google selected', 'crawl details', and 'mobile usability'. It does not contradict annotations.

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

Conciseness5/5

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

One tightly written sentence that front-loads the core action and resource ('Returns the full URL Inspection result for one page') and then efficiently lists the included result categories. No wasted words.

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

Completeness4/5

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

Since there is no output schema, the description compensates by naming the main result categories an agent should expect. It does not cover error conditions or authentication nuances, but for a read-only inspection tool with only two well-documented parameters, this is reasonably complete.

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 the schema already documents both parameters fully. The description adds no additional parameter-level detail beyond mentioning a single 'page', but the baseline of 3 is appropriate when the schema carries the load.

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 ('Returns'), a specific resource ('URL Inspection result for one page'), and enumerates the result categories (index status, canonical, crawl details, mobile usability, rich results). This clearly distinguishes it from sibling tools like search_analytics or list_sitemaps, which operate on different resources.

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

Usage Guidelines4/5

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

The description clearly implies this is for inspecting a single URL, which gives context for when to use it. It does not explicitly name alternatives or say when not to use it, but the 'one page' scope is sufficient directional guidance.

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

list_propertiesList Search Console propertiesA
Read-only

Lists every Search Console property the configured service account can read, with its permission level. Run this first to discover the exact siteUrl string other tools need.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, and the description reinforces this by saying the properties are those the service account 'can read.' It also adds context about the permission level being included and the purpose of discovering siteUrl strings.

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

Conciseness5/5

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

Two sentences with no filler. The core action and result are front-loaded, and the usage guidance is compact and directly actionable.

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?

For a simple, parameterless list tool with no output schema, the description fully covers what the tool returns, its access scope, and how it should be used first. Nothing essential is missing.

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 has zero parameters and schema coverage is 100%, so there is nothing for the description to explain. The baseline of 4 is appropriate for a parameterless tool.

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 clear verb ('Lists'), the exact resource ('every Search Console property the configured service account can read'), and the useful detail that it includes permission level. This clearly distinguishes it from sibling tools like diagnose_indexing or search_analytics.

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

Usage Guidelines4/5

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

Provides explicit sequencing guidance: 'Run this first' to discover the siteUrl string needed by other tools. It does not explicitly enumerate alternatives or exclusions, but the intended when-to-use context is unmistakable.

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

list_sitemapsList submitted sitemapsA
Read-only

Shows every sitemap submitted for the property with its last download time, warnings, errors and per-type URL counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteUrlYesProperty identifier exactly as Search Console lists it: "sc-domain:example.com" for a domain property, or "https://example.com/" for a URL-prefix property.

TDQS

A4.2/5.0
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation, and the description adds useful behavioral context by enumerating the returned information (download time, warnings, errors, per-type counts). No contradiction exists between description and annotations.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and resource, then lists the returned data compactly. It contains no filler and every clause earns its place.

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

Completeness4/5

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

The tool has one required parameter fully covered by the schema, and although there is no output schema, the description enumerates the key return elements. It is sufficient for an agent to understand the tool's purpose and call it correctly.

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%, and the schema already fully documents the siteUrl parameter with format examples. The description adds no additional parameter semantics beyond referring to 'the property', so baseline 3 is appropriate.

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 uses a specific verb and resource: 'Shows every sitemap submitted for the property' and details the output fields (last download time, warnings, errors, per-type URL counts). This clearly distinguishes it from siblings like list_properties or inspect_url.

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

Usage Guidelines4/5

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

The description clearly implies when to use the tool: whenever the agent needs submitted sitemaps and their status for a property. It does not explicitly mention when not to use it, but the context is clear enough for correct selection.

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

search_analyticsQuery search performanceA
Read-only

Returns clicks, impressions, CTR and average position from the Performance report, broken down by the dimensions you choose.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoSearch type (default "web").
endDateNoYYYY-MM-DD. Defaults to 3 days ago (data lags).
siteUrlYesProperty identifier exactly as Search Console lists it: "sc-domain:example.com" for a domain property, or "https://example.com/" for a URL-prefix property.
rowLimitNoRows to return (default 25).
startDateNoYYYY-MM-DD. Defaults to 30 days ago.
dimensionsNoBreakdown dimensions (default ["query"]).

TDQS

A4/5.0
Behavior4/5

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

the readOnlyHint annotation establishes that this is a safe read operation, so the description doesn't need to restate that. The description adds valuable behavioral context by naming the exact return metrics, which is especially important given the absence of an output schema. It doesn't cover details like pagination or rate limits, but the schema already provides rowLimit and date handling.

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

Conciseness5/5

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

A single, information-dense sentence that front-loads exactly what the tool returns and mentions the key customizability. No filler or redundant restatement of the title or schema.

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

Completeness4/5

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

The combination of schema (full parameter documentation), annotation (safe read), and description (returned metrics) covers almost everything an agent needs to call the tool correctly. The only meaningful gap is the lack of explicit usage guidance, but the sibling tool set is distinct enough that confusion is unlikely.

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%, with each of the six parameters already documented (defaults, formats, enums, required field). The description only says 'dimensions you choose', which adds no information beyond what the schema's dimensions parameter already states, so it doesn't lift the score above the baseline.

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 uses a specific verb ('Returns'), names the exact resource ('Performance report'), and lists the concrete metrics (clicks, impressions, CTR, average position) plus the key option (dimensions). This clearly differentiates it from siblings like list_properties, inspect_url, and list_sitemaps, which target different concerns.

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

Usage Guidelines3/5

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

The tool's purpose of querying search performance is clear from the title and description, but there is no explicit guidance on when to choose it over alternatives or any stated exclusions. Usage is implied rather than explicitly framed, leaving the agent to infer it is the right tool for search analytics.

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

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct Search Console concern: property discovery, sitemap listing, bulk indexing analysis, single-URL inspection, and performance analytics. The potential overlap between diagnose_indexing and inspect_url is clearly separated by bulk versus single-page scope.

Naming Consistency4/5

Most names follow a verb_noun snake_case pattern, with list_properties and list_sitemaps being perfectly parallel. diagnose_indexing uses a gerund object and search_analytics reads as a domain term rather than a clear verb_noun action, so the pattern is not perfectly uniform.

Tool Count5/5

Five tools is a tight, well-scoped set for a diagnostic Search Console server. Each tool earns its place and there are no redundant or filler tools.

Completeness5/5

The read-only diagnostic workflow is covered end-to-end: discover the property, inspect sitemaps, analyze indexing at scale, drill into a single URL, and query performance metrics. Mutation tools would be out of scope for a 'doctor' server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying Google Search Console and Google Analytics 4 through natural language, with tools for SEO analysis like anomaly detection, cannibalization detection, and opportunity scoring.
    29
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Turns Google Search Console into an SEO copilot by enabling natural language queries for search analytics, URL inspection, sitemap management, and opportunity discovery.
    16
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gerald-guledew/gsc-doctor'

If you have feedback or need assistance with the MCP directory API, please join our Discord server