Skip to main content
Glama
flin-google-search-console-mcp

flin-google-search-console-mcp

by flin-agency

flin-google-search-console-mcp

Read-only MCP server for Google Search Console, built to work well in Claude Desktop with a browser-based OAuth flow and local token storage.

For the prepared Claude Code plugin, see plugin/README.md. It requires Claude Code's secret configuration prompts and is separate from the desktop extension below. Directory submission is prepared, not yet approved.

Privacy Policy

See PRIVACY.md for data flows, storage, retention and deletion. The server sends requests to Google and returns results to your MCP client. It does not send Search Console data to flin GmbH. OAuth tokens are stored as local JSON files and are not encrypted by the server. Sensitive client settings in Claude and the server's token files are separate storage mechanisms.

Publisher: flin GmbH, Weinbergstrasse 31, 8006 Zürich, Switzerland. Privacy and security contact: flin@flin.agency. See SUPPORT.md.

Related MCP server: google-search-console-mcp-python

Claude Desktop Quickstart

If your goal is simply "make this work in Claude Desktop", follow these steps in order.

1) Make sure the Google account has Search Console access

The Google account you use during login must already have access to at least one Search Console property.

Accepted access levels for the API include owner, full, and read access.

2) Create or choose a Google Cloud project

In Google Cloud:

  1. Create a new project or select an existing one.

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

Official references:

In Google Cloud, configure the OAuth consent screen for the same project.

For most personal or team setups:

  • choose External

  • keep the app in Testing while you validate the integration

  • add your own Google account as a test user

Important:

  • If the app is External and still in Testing, users must be listed as test users

  • Google documents that test-user authorizations in testing mode can expire after 7 days

This MCP only requests one read-only scope:

  • https://www.googleapis.com/auth/webmasters.readonly

Official references:

4) Create OAuth credentials of type Desktop app

Create an OAuth client in the same Google Cloud project:

  1. Go to Credentials

  2. Click Create client

  3. Choose Desktop app

  4. Copy the generated:

    • client ID

    • client secret

You do not need to manually wire redirect URIs into Claude Desktop for this MCP. The desktop OAuth flow uses a local loopback callback handled by the running MCP process.

5) Add the MCP to Claude Desktop

Download flin-google-search-console-mcp-<version>.mcpb from the GitHub releases and open it in a current Claude Desktop version with MCPB UV runtime support. Alternatively, use Install Extension in the desktop extension settings.

Enter the Google OAuth client ID and client secret from step 4 and, optionally, a default property such as sc-domain:example.com. The secret field is marked sensitive. Continue with the login instructions below. Manual JSON editing is not required; the Google Cloud setup in steps 1–4 is still required.

The extension runs locally on macOS and Windows. From installer 0.1.7, it checks PyPI for the newest stable server release every time the server starts. Restart Claude Desktop to apply a published server update; no new installer is needed for ordinary server releases. Running conversations are not hot-updated. Python 3.12 and server packages are managed by uv. Startup requires internet access; the installer contains no credentials or saved tokens.

Already installed 0.1.6 or earlier? Install the 0.1.7 bundle once to enable this mechanism. Keep the same OAuth settings; tokens remain outside the extension. The extension's displayed version describes the launcher. health_check returns server_version, the actual running PyPI version.

Changes to Claude's extension settings, permissions, launcher or required Python version may still require a new bundle. Claude does not auto-update privately shared manifests from GitHub. A package that drops Python 3.12 support cannot be used by this launcher; uv selects the latest compatible stable version.

Alternative: manual configuration

The existing PyPI installation remains available. Its minimum configuration is:

{
  "mcpServers": {
    "flin-google-search-console-mcp": {
      "command": "uvx",
      "args": ["flin-google-search-console-mcp@latest"],
      "env": {
        "GOOGLE_CLIENT_ID": "your_oauth_client_id",
        "GOOGLE_CLIENT_SECRET": "your_oauth_client_secret"
      }
    }
  }
}

If you want a default property so you do not have to pass site_url every time:

{
  "mcpServers": {
    "flin-google-search-console-mcp": {
      "command": "uvx",
      "args": ["flin-google-search-console-mcp@latest"],
      "env": {
        "GOOGLE_CLIENT_ID": "your_oauth_client_id",
        "GOOGLE_CLIENT_SECRET": "your_oauth_client_secret",
        "GOOGLE_SEARCH_CONSOLE_SITE_URL": "sc-domain:example.com"
      }
    }
  }
}

For local development from a checkout:

{
  "mcpServers": {
    "flin-google-search-console-mcp-local": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/flin-google-search-console-mcp",
        "flin-google-search-console-mcp"
      ],
      "env": {
        "GOOGLE_CLIENT_ID": "your_oauth_client_id",
        "GOOGLE_CLIENT_SECRET": "your_oauth_client_secret"
      }
    }
  }
}

Replace /absolute/path/to/flin-google-search-console-mcp with your local checkout path.

6) Restart Claude Desktop

After saving the MCP configuration, fully restart Claude Desktop so it reloads the local server definition.

7) Complete the first login inside Claude

Start with these prompts:

Run health_check for the Google Search Console MCP and show the full result.
List my Search Console sites.

On the first authenticated tool call, the MCP opens a browser window. Sign in with the Google account that has Search Console access and approve the request.

After that:

  • the token is stored locally

  • future access tokens refresh automatically

  • you do not need to paste a refresh token into Claude Desktop config

What the MCP stores locally

The MCP stores a local token JSON file after the first successful login.

New token directories are created with private permissions. Existing directories keep their permissions; on macOS and Linux, they must belong to the current user and must not be writable by other users. Token files are written with owner-only access.

Default locations:

  • macOS: ~/Library/Application Support/flin-google-search-console-mcp/token.json

  • Linux: ~/.config/flin-google-search-console-mcp/token.json

  • Windows: %APPDATA%\flin-google-search-console-mcp\token.json

If you want to override the location:

{
  "mcpServers": {
    "flin-google-search-console-mcp": {
      "command": "uvx",
      "args": ["flin-google-search-console-mcp@latest"],
      "env": {
        "GOOGLE_CLIENT_ID": "your_oauth_client_id",
        "GOOGLE_CLIENT_SECRET": "your_oauth_client_secret",
        "GOOGLE_SEARCH_CONSOLE_TOKEN_PATH": "/absolute/path/to/flin-google-search-console-mcp-token.json"
      }
    }
  }
}

Multiple Google accounts

You can connect multiple Google accounts and choose the account per tool call.

By default, named account tokens are stored next to the default token. To choose a dedicated token directory, set GOOGLE_SEARCH_CONSOLE_TOKEN_DIR:

{
  "mcpServers": {
    "flin-google-search-console-mcp": {
      "command": "uvx",
      "args": ["flin-google-search-console-mcp@latest"],
      "env": {
        "GOOGLE_CLIENT_ID": "your_oauth_client_id",
        "GOOGLE_CLIENT_SECRET": "your_oauth_client_secret",
        "GOOGLE_SEARCH_CONSOLE_TOKEN_DIR": "/absolute/path/to/search-console-tokens"
      }
    }
  }
}

Then pass account in tool calls:

{
  "tool": "list_sites",
  "args": {
    "account": "work"
  }
}

The first call for a new account opens the OAuth browser flow and stores a separate token, for example work.json. Account names may contain only letters, numbers, _, -, and ..

An account name must not resolve to the default token file, including case variants or filesystem aliases. With the default storage layout, token is reserved. Omit account to use the default account. Existing named account files remain supported.

First Prompts To Verify Everything Works

Use these in Claude Desktop after the server is configured.

Health check

Run health_check for the Google Search Console MCP and show the full result.

Confirm available properties

List my Search Console sites and tell me whether sc-domain:example.com is available.

Quick summary

Run get_site_summary for site_url sc-domain:example.com from 2026-04-01 to 2026-04-20 and show clicks, impressions, ctr, and position.

Top queries

Run get_top_queries for site_url sc-domain:example.com from 2026-04-01 to 2026-04-20 with row_limit 25 and show the top queries by clicks.

Top pages

Run get_top_pages for site_url sc-domain:example.com from 2026-04-01 to 2026-04-20 with row_limit 25 and show the top pages by clicks.

URL inspection

Run inspect_url for site_url sc-domain:example.com and inspection_url https://example.com/.

Property Format: Domain vs URL-prefix

This is one of the most common setup mistakes.

Examples:

  • Domain property: sc-domain:example.com

  • URL-prefix property: https://www.example.com/

Use the exact property string returned by list_sites. Do not guess.

What This MCP Exposes

  • health_check

  • list_sites

  • get_site_summary

  • query_performance

  • get_top_queries

  • get_top_pages

  • get_dimension_breakdown

  • inspect_url

Which Tool To Use

Recommended call order:

  1. health_check

  2. list_sites

  3. get_site_summary

  4. get_top_queries or get_top_pages

  5. query_performance for custom dimensions and filters

  6. inspect_url for indexability and canonical checks on a specific URL

Search Analytics Notes

  • query_performance uses the Search Analytics API under the hood

  • Search Analytics returns top rows, not guaranteed full exports

  • The MCP maps Google's positional keys[] rows into named dimensions objects

Supported knobs include:

  • dimensions

  • filters

  • search_type

  • aggregation_type

  • data_state

  • row_limit

  • start_row

Example Tool Calls

Site summary

{
  "tool": "get_site_summary",
  "args": {
    "site_url": "sc-domain:example.com",
    "start_date": "2026-04-01",
    "end_date": "2026-04-20"
  }
}

Top queries

{
  "tool": "get_top_queries",
  "args": {
    "account": "work",
    "site_url": "sc-domain:example.com",
    "start_date": "2026-04-01",
    "end_date": "2026-04-20",
    "row_limit": 25
  }
}

Query performance with filters

{
  "tool": "query_performance",
  "args": {
    "site_url": "sc-domain:example.com",
    "start_date": "2026-04-01",
    "end_date": "2026-04-20",
    "dimensions": ["page"],
    "filters": [
      {
        "dimension": "device",
        "operator": "equals",
        "expression": "MOBILE"
      }
    ],
    "row_limit": 50
  }
}

URL inspection

{
  "tool": "inspect_url",
  "args": {
    "site_url": "sc-domain:example.com",
    "inspection_url": "https://example.com/blog/seo-agent"
  }
}

Source Setup

If you want to run the MCP from source:

uv sync --extra dev
cp .env.example .env
# Fill .env values
uv run --env-file .env flin-google-search-console-mcp

Published Package

Run the latest published package directly:

uvx flin-google-search-console-mcp@latest

Troubleshooting

missing_configuration

  • GOOGLE_CLIENT_ID or GOOGLE_CLIENT_SECRET is missing from the MCP config

oauth_required

  • no usable token exists yet

  • the first browser-based login has not been completed

  • the stored refresh token is no longer usable and the browser flow must run again

permission_denied

  • the Google account used during login does not have access to the Search Console property

No sites returned

  • verify that the Google account really has Search Console access

  • confirm you logged into the correct Google account in the browser

Google shows an unverified or testing warning

  • this is usually expected while the app is in testing mode

  • make sure your Google account is added as a test user on the OAuth consent screen

Security

See the security review for checks, fixes and remaining limitations. Tokens must be private files (0600 on macOS/Linux); legacy token files with broader permissions must be restricted before use. The extension is unsigned; SHA256SUMS verifies download integrity, not publisher identity.

More Docs

Release on GitHub + PyPI

This repository publishes automatically with GitHub Actions:

  • CI: .github/workflows/ci.yml

  • Release: .github/workflows/release.yml triggered by git tags v*

CI tests the Python package, desktop bundle and Claude Code plugin on Linux, macOS and Windows. It also checks the plugin manifest and rejects stale copies of the runtime in plugin/. A release tag builds all formats, publishes the Python package to PyPI, verifies the launcher against that published version, and creates a GitHub Release with the .mcpb, plugin ZIP, their checksums and Python distributions. Only Python distributions go to PyPI.

A manual workflow run on a branch only validates and builds downloadable workflow artifacts. Publishing requires a version tag matching the project, package, plugin and lockfile versions. Publishing a directory listing requires the separate process described in the submission guide.

PyPI publication runs automatically for each version tag. To retry publishing an older tag separately, manually run Release on that tag with publish_pypi enabled.

1) Configure PyPI Trusted Publisher

In PyPI project settings for flin-google-search-console-mcp, add a Trusted Publisher with:

  • Owner: flin-agency

  • Repository: flin-google-search-console-mcp

  • Workflow: release.yml

  • Environment: pypi

2) Cut a release

Follow the release checklist, commit and push the reviewed changes, then tag the prepared version:

git tag v0.1.7
git push origin v0.1.7

Available Tools

8 tools
get_dimension_breakdownD
Read-onlyIdempotent

Get a single-dimension Search Analytics breakdown.

NameRequiredDescriptionDefault
accountNo
filtersNo
end_dateYes
site_urlNo
dimensionYes
row_limitNo
start_rowNo
data_stateNo
start_dateYes
search_typeNoweb

Output Schema

NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no word on quota/rate limits, pagination behavior, which dimension values are valid, or how filters constrain results, all of which matter for a Search Console analytics call.

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

Conciseness3/5

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

It is a single front-loaded sentence with no padding, so nothing needs trimming. However, brevity here comes at the cost of saying almost nothing beyond the name, so it is concise without being informative.

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

Completeness2/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 need not be explained, but for a 10-parameter reporting tool the description is far too thin. The valid dimension values, filter format, date conventions, and pagination defaults are all left to inference.

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

Parameters2/5

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

With 10 parameters and 0% schema description coverage, the description must carry the burden, but it only vaguely gestures at the 'dimension' parameter. start_date/end_date formats, the filters array structure, row_limit/start_row pagination semantics, search_type defaults, and data_state are all undocumented anywhere.

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

Purpose2/5

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

The sentence largely restates the tool name: 'get_dimension_breakdown' becomes 'Get a single-dimension ... breakdown.' The only added information is the domain ('Search Analytics'), which does not distinguish it from siblings like query_performance, get_top_queries, or get_top_pages, whose names suggest overlapping reporting behavior.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool versus query_performance, get_top_queries, or get_top_pages, nor any mention of prerequisites or exclusions. An agent must guess which reporting tool to select.

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

get_site_summaryC
Read-onlyIdempotent

Get aggregate performance metrics for a property over a date range.

NameRequiredDescriptionDefault
accountNo
end_dateYes
site_urlNo
data_stateNo
start_dateYes
search_typeNoweb

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint with destructiveHint=false, so the safety profile is well covered and the bar is lower. The description adds nothing beyond restating the aggregate-over-date-range idea: no mention of whether metrics are totals versus averages, data freshness, or result-size limits.

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?

A single front-loaded sentence with no filler or redundancy. It is efficient but under-specified rather than over-long, so the only structural issue is missing content, not wasted content.

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

Completeness2/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 need not be explained, but the definition is otherwise thin for a six-parameter tool with 0% schema coverage and five plausible sibling alternatives. An agent cannot tell from this text how search_type or data_state change results or how the summary differs from query_performance.

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

Parameters2/5

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

Schema description coverage is 0% across six parameters, so the description must compensate and it largely does not. Only the date-range intent of start_date/end_date is implied; account, site_url, data_state, and especially search_type (defaulting to 'web') carry no meaning anywhere.

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

Purpose4/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 ('Get aggregate performance metrics') scoped by date range and property, which is clear enough to act on. However, it never distinguishes itself from siblings such as query_performance or get_dimension_breakdown, so an agent could reasonably pick the wrong one for a summary-only request.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. With six sibling tools covering performance querying, top queries/pages, and dimension breakdowns, the description should say this returns totals-only and route users elsewhere for per-item rows, but it does not.

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

get_top_pagesC
Read-onlyIdempotent

Get top page rows for a property over a date range.

NameRequiredDescriptionDefault
accountNo
filtersNo
end_dateYes
site_urlNo
row_limitNo
start_rowNo
data_stateNo
start_dateYes
search_typeNoweb

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare this as a safe, read-only, idempotent, open-world operation, so the description's safety burden is low. However, it adds almost no behavioral context: it does not explain what "top" means, how rows are ordered, how pagination works, or what data_state and search_type affect.

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 a single front-loaded sentence with no wasted wording. Its brevity is efficient, though it also reflects under-specification rather than rich concision.

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

Completeness2/5

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

This is a moderately complex reporting tool with nine parameters, pagination controls, filters, and multiple scope-related options. The output schema and annotations help, but the description omits critical selection and interpretation details an agent would need to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is 0% across nine parameters, so the description must compensate and does not. It vaguely implies a property and date range but does not clarify account versus site_url, filters format, row_limit/start_row pagination, data_state, or search_type.

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

Purpose4/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 ("Get top page rows") and scope ("for a property over a date range"). It is clear enough to identify the tool, but it does not distinguish it from siblings such as get_top_queries or get_dimension_breakdown.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It does not mention get_top_queries, get_dimension_breakdown, or any conditions under which top pages should be preferred.

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

get_top_queriesC
Read-onlyIdempotent

Get top query rows for a property over a date range.

NameRequiredDescriptionDefault
accountNo
filtersNo
end_dateYes
site_urlNo
row_limitNo
start_rowNo
data_stateNo
start_dateYes
search_typeNoweb

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

The annotations establish a safe, idempotent read, while the description adds only basic property and date-range scoping. It does not explain what makes a query 'top,' how results are ordered, or how filtering and pagination affect the retrieval.

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 single sentence is front-loaded, readable, and free of filler. Its brevity is efficient, although some additional detail is needed elsewhere to make the tool reliably invocable.

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

Completeness2/5

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

The output schema and safety annotations reduce some documentation burden, but the description is insufficient for a nine-parameter tool whose schema provides no parameter descriptions. Missing ranking semantics, filter structure, property-selection rules, pagination behavior, and sibling routing are material gaps.

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

Parameters2/5

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

The description loosely supports the date parameters and property selection, but does not specify date formats or distinguish account from site_url. With 0% schema description coverage, filters, row_limit, start_row, data_state, and search_type remain effectively undocumented.

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

Purpose4/5

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

The description uses a clear verb and resource—getting top query rows—and adds property and date-range scope. It implies a distinction from get_top_pages by focusing on queries, but does not explicitly differentiate itself from query_performance or get_dimension_breakdown.

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 wording implies use when an agent wants query-level results for one property and period. It gives no explicit selection criteria, prerequisites, or guidance on when to use a sibling tool instead.

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

health_checkB
Read-onlyIdempotent

Check local configuration and saved sign-in status without opening a browser or calling Google.

NameRequiredDescriptionDefault
accountNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior by confirming nothing leaves the machine (no browser launch, no Google API call), but it says nothing about what constitutes a healthy vs unhealthy result or how failures surface.

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?

One tight sentence with the key constraint front-loaded after the verb phrase; no filler or redundancy. It could have spent a few more words on the account parameter at no real cost to brevity.

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

Completeness3/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 need not be described, and the offline/local behavior is well covered. What remains missing is any explanation of the 'account' argument and any explicit trigger condition for running a health check, which for a diagnostic tool is a meaningful omission.

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

Parameters2/5

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

The single 'account' parameter has 0% schema description coverage and the description never mentions it, so the agent has no guidance on what account values are accepted (email? index? alias?) or what happens when it is omitted. This is the main semantic gap in the definition.

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

Purpose4/5

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

States a concrete verb ('Check') and specific resources ('local configuration and saved sign-in status'), and adds a scope boundary ('without opening a browser or calling Google') that separates it from the data-querying siblings like list_sites or query_performance. It doesn't name a sibling explicitly, but the local/offline framing makes the distinction clear.

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?

Usage is only implied: the phrase 'saved sign-in status' hints at diagnosing auth/credential problems, but there is no explicit 'use this when X' or 'use this before calling Y'. An agent must infer the diagnostic intent from context rather than being told.

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

inspect_urlB
Read-onlyIdempotent

Read Google's indexed status for a URL within an accessible property; does not request indexing.

NameRequiredDescriptionDefault
accountNo
site_urlNo
language_codeNo
inspection_urlYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description's 'does not request indexing' largely restates readOnlyHint rather than adding new behavior, and it says nothing about quota, per-property auth, or failure modes for inaccessible properties.

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 compact sentence with the primary action front-loaded and the disambiguation clause second. Every word earns its place; nothing is padded or redundant.

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

Completeness3/5

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

The output schema exists, so return values need no explanation, which helps. But with four parameters at 0% description coverage and no annotations for auth or quota, the description leaves real gaps around language_code and account/property selection that an agent would have to guess at.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden for four parameters and mostly does not. 'Within an accessible property' loosely gestures at site_url/account, and inspection_url is self-evident, but language_code is never mentioned and the account-vs-site_url relationship is unexplained.

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

Purpose4/5

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

States a specific verb and resource: 'Read Google's indexed status for a URL within an accessible property.' It also preempts a likely confusion by stating 'does not request indexing.' Sibling differentiation is only implicit, since none of the listed siblings (query_performance, get_top_queries, list_sites) overlap in purpose.

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 phrase 'within an accessible property' implies a precondition (the property must be accessible), and the negative clause excludes the request-indexing use case. However, there is no explicit guidance on when to prefer this over sibling tools, or what to do when a property is not accessible.

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

list_sitesA
Read-onlyIdempotent

List properties available to the selected Google account before choosing a site to analyse.

Opens Google sign-in in the browser if needed and saves or refreshes the local token. Does not modify Search Console properties.

NameRequiredDescriptionDefault
accountNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds materially new behavior: it may open a browser sign-in flow and persist or refresh a local token. It also explicitly bounds the side effects by stating it does not modify Search Console properties, resolving the apparent tension between a token write and readOnlyHint=true.

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 short sentences, front-loaded with the primary action and the sequencing constraint, followed by the side effect and the explicit non-effect. Nothing is redundant or padded.

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?

An output schema exists, so return values need no explanation, and the description covers the auth side effect, the non-destructive scope, and when to call it. The only remaining gap is the meaning and accepted values of the optional `account` parameter.

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

Parameters2/5

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

Schema description coverage is 0% for the single `account` parameter, so the description carries the burden of explaining it. It only implies that the account is a selector ("the selected Google account") and does not say what values are accepted, whether it is an email, an index, or what happens when it is omitted.

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

Purpose4/5

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

States a specific verb and resource ("List properties available to the selected Google account") and implicitly distinguishes itself from siblings by positioning it as the step "before choosing a site to analyse", which the sibling tools (get_site_summary, query_performance, etc.) all require. It never names a sibling explicitly, so it falls short of full differentiation.

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?

Gives clear sequencing guidance: run this before analysing a site, because it establishes which properties are available. It does not state any when-not-to-use condition or name the alternative tools, so there is no explicit alternative routing.

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

query_performanceC
Read-onlyIdempotent

Query Search Analytics performance data with explicit dimensions and filters.

NameRequiredDescriptionDefault
accountNo
filtersNo
end_dateYes
site_urlNo
row_limitNo
start_rowNo
data_stateNo
dimensionsNo
start_dateYes
search_typeNoweb
aggregation_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no mention of row_limit/start_row pagination behavior, the 1000-row default, data freshness (data_state), or Search Console API quota constraints that materially affect calls.

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

Conciseness3/5

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

A single short sentence with no filler, and the resource is front-loaded. It is concise to the point of being under-specified for an 11-parameter tool, so brevity here costs more than it saves.

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

Completeness2/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 need not be explained, but the request side is badly under-covered: 11 parameters at 0% schema description coverage and no guidance on which sibling to prefer. For a complex, open-ended query tool this leaves too much undocumented.

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

Parameters2/5

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

Schema description coverage is 0% across 11 parameters, so the description carries the full burden and only names two of them ('dimensions', 'filters'). It says nothing about site_url vs account selection, search_type's default of 'web', aggregation_type, data_state, or the paging pair start_row/row_limit.

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

Purpose4/5

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

The description gives a concrete verb ('Query') and resource ('Search Analytics performance data') plus the two levers the tool exposes (dimensions, filters), so an agent can tell it retrieves performance metrics. It does not, however, distinguish this from siblings like get_top_queries, get_top_pages, or get_dimension_breakdown, which appear to be convenience wrappers over the same surface.

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

Usage Guidelines2/5

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

There is no statement of when to use this generic query tool versus the more specific siblings, and no prerequisites or exclusions are mentioned. The agent must infer routing from the tool names alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.7
    • Changedget_dimension_breakdown1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedget_site_summary1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedget_top_pages1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedget_top_queries1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedhealth_check1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedinspect_url1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedlist_sites1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
    • Changedquery_performance1 field changed
      • addedInput schema / properties / account
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Account"
        +}
  2. 8 tool updatesv0.1.0
    • First observedget_dimension_breakdown
    • First observedget_site_summary
    • First observedget_top_pages
    • First observedget_top_queries
    • First observedhealth_check
    • First observedinspect_url
    • First observedlist_sites
    • First observedquery_performance

TDQS

B3/5.0

Scored across 8 tools

Disambiguation3/5

Most tools are clearly distinct, but query_performance overlaps heavily with get_top_queries, get_top_pages, and get_dimension_breakdown, which are convenience wrappers around the same Search Analytics data. An agent may struggle to choose between the generic query tool and the specialized top-N tools.

Naming Consistency4/5

Nearly all tools follow a consistent snake_case verb_noun pattern (list_sites, get_site_summary, query_performance, inspect_url). health_check is a minor deviation as a noun phrase, but overall naming remains predictable.

Tool Count5/5

Eight tools are well-scoped for a Google Search Console analytics server. Each tool covers a distinct operation, and the count avoids both thinness and bloat.

Completeness4/5

The surface covers authentication status, site listing, aggregate metrics, flexible queries, top-N reports, dimension breakdowns, and URL inspection status. Minor gaps exist around sitemap management and requesting indexing, but core read-oriented workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Google Search Console API that enables querying search analytics, managing sites, inspecting URLs, and supporting domain delegation via service accounts.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for Google Search Console data, enabling search analytics, URL inspection, indexing diagnostics, and sitemap management through MCP clients.
    12 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Secure MCP server for Google Search Console. Query search analytics (clicks, impressions, CTR, position), manage sitemaps, inspect URL indexing status, and manage site properties.
    10
    AGPL 3.0