seo-webmaster-mcp
Summary: A single MCP server that gives AI assistants organic search analytics, URL indexing diagnostics, sitemap health checks, and instant indexing across Google Search Console, Bing Webmaster Tools, and IndexNow.
Check provider health (
engine_status) — verify configuration/connection status for all integrated search engines, with setup guidance.List properties (
list_sites) — enumerate verified sites across Google and Bing with permission levels.Query search analytics (
search_analytics) — pull clicks, impressions, CTR, and average position grouped by query, page, country, device, searchAppearance, or date, with row limits/pagination, filters (text, exact, regex), search verticals (web, image, video, news, discover, googleNews), and data-freshness control.Inspect URLs (
inspect_url) — check live index status, crawl info, canonical URLs, mobile usability, and rich-results/schema validation (Google live; Bing returns coarse stats marked UNKNOWN).Monitor sitemaps (
list_sitemaps,get_sitemap) — list submitted sitemaps with errors, last download dates, and indexed URL counts, or pull deep metrics for one feed.Instant indexing (
submit_urls_indexnow) — push added/updated/deleted URLs to Bing, Yandex, Seznam, and other IndexNow engines (up to 10,000), optionally passing key/keyLocation.Note: the README also documents
submit_urls_google(Google Indexing API, 200 URLs/day), but that tool is not present in the server schema.
Provides tools for querying search performance data (clicks, impressions, CTR, position) from Google Search Console, inspecting URL indexing status, and managing sitemaps.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@seo-webmaster-mcpWhat were my top 10 Google queries last week for example.com?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
seo-webmaster-mcp
A unified Model Context Protocol (MCP) server providing AI assistants (Claude Desktop, Claude Code, Cursor, Windsurf, Cline, Zed, etc.) with comprehensive organic search analytics, URL inspection, sitemap health monitoring, and instant search engine indexing across Google Search Console, Google Indexing API, Bing Webmaster Tools, and IndexNow.
🚀 Quickstart (Running in 2 Minutes)
You do not need to configure all engines. All engines are completely optional!
If you only have Google Search Console, only configure Google.
If you only have Bing Webmaster Tools, only configure Bing.
If you want instant indexing without API keys, you can use IndexNow.
If you configure nothing, start the server and ask your AI: "Check engine status" to see step-by-step setup guides!
Option A: Run via npx (Recommended)
No cloning required. Your MCP client will download and run the latest version automatically.
1. Claude Desktop
Add to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"seo-webmaster": {
"command": "npx",
"args": ["-y", "@itsaakashpatel/seo-webmaster-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/your/gsc-key.json",
"BING_WEBMASTER_API_KEY": "your_bing_api_key",
"INDEXNOW_KEY": "your_indexnow_key"
}
}
}
}2. Cursor
Add to .cursor/mcp.json (project-level) or Cursor Settings → Features → MCP Servers:
{
"mcpServers": {
"seo-webmaster": {
"command": "npx",
"args": ["-y", "@itsaakashpatel/seo-webmaster-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/your/gsc-key.json",
"BING_WEBMASTER_API_KEY": "your_bing_api_key",
"INDEXNOW_KEY": "your_indexnow_key"
}
}
}
}3. Claude Code CLI
Add to ~/.claude.json:
{
"mcpServers": {
"seo-webmaster": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@itsaakashpatel/seo-webmaster-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/your/gsc-key.json",
"BING_WEBMASTER_API_KEY": "your_bing_api_key",
"INDEXNOW_KEY": "your_indexnow_key"
}
}
}
}Related MCP server: search-console-mcp
🛠️ Step-by-Step Setup Guide
1. Google Search Console & Google Indexing API
Both Search Console and Indexing API use theexact same service account credentials.
Create a Cloud Project: Go to Google Cloud Console and create a project (e.g.
my-seo-tools).Enable APIs:
In APIs & Services → Library, search for Google Search Console API and click Enable.
(Optional for instant Google push) Search for Indexing API (
indexing.googleapis.com) and click Enable.
Create Service Account:
Go to APIs & Services → Credentials → Create Credentials → Service Account.
Name it (e.g.
gsc-reader), click Create and Continue, then Done.
Generate JSON Key File:
Click on the created service account email.
Go to the Keys tab → Add Key → Create new key → JSON.
Save the downloaded file somewhere safe on your computer (e.g.,
~/.config/gcloud/gsc-key.json).
Grant Property Access in Search Console:
Copy the service account's email address (e.g.
gsc-reader@my-seo-tools.iam.gserviceaccount.com).Open Google Search Console.
Select your property → Settings (bottom left) → Users and permissions → Add user.
Paste the service account email:
For read-only search analytics: select Restricted or Full.
If using Google Indexing API: select Owner (required by Google to publish indexing requests).
Set Environment Variable:
Set
GOOGLE_APPLICATION_CREDENTIALSto the absolute path of your downloaded JSON file.Alternatively, you can paste the raw JSON string or base64 into
GOOGLE_SERVICE_ACCOUNT_KEY.
2. Bing Webmaster Tools
Sign in to Bing Webmaster Tools and ensure your site is verified.
Click the Settings gear icon (top right) → API Access → API Key.
Generate an API Key and copy it.
Set the
BING_WEBMASTER_API_KEYenvironment variable in your MCP configuration.
3. IndexNow (Instant Indexing to Bing, Yandex, Seznam, Naver)
IndexNow allows search engines to instantly discover updated, new, or deleted URLs without waiting for crawlers.
Generate a Key: Create a random 32-character hexadecimal key (or use Bing's Key Generator).
Host the Verification File:
Place a text file named
<your-key>.txtcontaining only the key at your website root:https://example.com/<your-key>.txtConfirm it opens in your browser and displays only the key string.
Set Environment Variable:
Set
INDEXNOW_KEYto your key string.(Optional) If your key file is hosted in a subfolder or custom URL, set
INDEXNOW_KEY_LOCATIONto the full URL (e.g.https://example.com/assets/my-key.txt).
🧰 Available MCP Tools
Tool | Engine | Description |
All | Check connection and configuration health across all 4 search engine providers with setup tips. | |
Google & Bing | List all verified website properties with user permissions/roles. | |
Google & Bing | Query clicks, impressions, CTR, and average position grouped by query, page, country, device, and date. | |
Google & Bing | Inspect live URL index status, crawl dates, canonical tags, mobile usability, and rich results schema. | |
Google & Bing | List submitted sitemaps, error/warning counts, crawl timestamps, and indexed URL breakdown. | |
Google & Bing | Retrieve deep indexing statistics for a specific sitemap feed. | |
IndexNow | Instantly notify Bing, Yandex, and partner engines about up to 10,000 published/updated/deleted URLs. | |
Google Indexing | Push up to 200 URLs/day to Google via the Indexing API ( |
1. engine_status
No parameters required.
2. list_sites
Parameter | Type | Required | Description |
| string | No | Filter by engine: |
3. search_analytics
Parameter | Type | Required | Description |
| string | Yes | Site URL as verified in Search Console (e.g. |
| string | Yes | Start date in |
| string | Yes | End date in |
| string | No | Provider: |
| string | No | Comma-separated: |
| number | No | Max rows to return (default: |
| string | No | Vertical: |
| string | No |
|
| string | No | Filter queries: |
| string | No | Filter page URLs: same syntax as |
| string | No | ISO 3166-1 alpha-3 code (e.g. |
| string | No |
|
| number | No | Pagination row offset (default: |
4. inspect_url
Parameter | Type | Required | Description |
| string | Yes | Site URL as verified in Search Console |
| string | Yes | Fully qualified URL to inspect |
| string | No |
|
| string | No | Language code for localized messages (default: |
5. list_sitemaps
Parameter | Type | Required | Description |
| string | Yes | Site URL as verified in Search Console |
| string | No |
|
6. get_sitemap
Parameter | Type | Required | Description |
| string | Yes | Site URL as verified in Search Console |
| string | Yes | Full URL or path to the sitemap feed |
| string | No |
|
7. submit_urls_indexnow
Parameter | Type | Required | Description |
| string | Yes | Domain name without protocol (e.g. |
| string | Yes | Comma/newline-separated list of full URLs (or JSON array) |
| string | No | IndexNow key (optional if |
| string | No | Full URL to key file if hosted in custom location |
8. submit_urls_google
Parameter | Type | Required | Description |
| string | Yes | Comma/newline-separated full https URLs (or JSON array). Max 200 per call |
| string | No |
|
Google Indexing API note: Only pages containing
JobPostingorBroadcastEvent(inVideoObject) structured data are supported by Google. Default daily quota is 200 requests.
💬 Example AI Assistant Prompts
Once configured in Claude or Cursor, you can interact with your search data in plain English:
"Check search engine provider status to see what is connected."
"List all my verified websites across Google and Bing."
"Show me the top 20 queries for my site on Google over the last 28 days."
"Find pages that get high impressions but low click-through rates (CTR < 2%)."
"Inspect https://example.com/blog/latest-post and tell me if it has any schema errors or mobile usability issues."
"Check all submitted sitemaps for my site and report indexing health."
"I just published 5 new blog posts: [URL list]. Submit them to IndexNow immediately."
"Notify Google that these 2 job postings were updated via the Indexing API."
❓ Troubleshooting & FAQs
1. Permission error (403): User does not have sufficient permission
Cause: The service account has not been added as a user to your property in Google Search Console.
Fix: In Google Search Console, go to Settings → Users and permissions → Add user and paste the exact email of your service account.
2. Site URL not found
Cause: Search Console differentiates between domain properties (
sc-domain:example.com) and URL prefix properties (https://example.com/).Fix: Run the
list_sitestool first to view the exact property string format for your website.
3. Bing Webmaster API authentication failed (401)
Cause: Missing or invalid
BING_WEBMASTER_API_KEY.Fix: Re-generate your API key in Bing Webmaster Tools (Settings → API Access → API Key) and ensure there are no leading/trailing spaces in your config.
4. Bing URL inspection returns UNKNOWN
Explanation: Unlike Google, the Bing Webmaster Tools API does not offer URL-level live inspection. The server returns coarse crawl stats if available, and transparently marks inspection verdict as
UNKNOWNrather than fabricating data.
💻 Local Development & Contributing
Contributions are welcome! Please ensure all pull requests follow the project standards.
# Clone the repository
git clone https://github.com/itsaakashpatel/seo-webmaster-mcp.git
cd seo-webmaster-mcp
# Install dependencies
npm install
# Compile TypeScript
npm run build
# Run unit tests
npm test
# Run linter (oxlint)
npm run lint
# Check code formatting (oxfmt)
npm run format:checkPull Requests
When opening a pull request, please use the template located at .github/pull_request_template.md and adhere to the guidelines in AGENTS.md.
📄 License
MIT © Aakash Patel
Available Tools
7 toolsengine_statusA
Check the configuration and connection status of all integrated search engine providers (Google Search Console, Bing Webmaster Tools, IndexNow).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. 'Check' clearly implies a read-only, non-destructive operation, and naming the specific status scope (configuration and connection) adds useful behavioral context. It does not detail output shape or failure behavior, but for a zero-parameter status tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word adds meaning, naming the action, the resource, and the specific providers covered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description adequately covers what the tool does and which providers it inspects. It could mention expected return values or that it is non-mutating, but the scope and purpose are clear enough for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description has no parameter semantics to add. Per the baseline for zero-parameter tools, this scores a 4; the description is not penalized for omitting parameter details that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description has a clear verb ('Check') and a specific resource ('configuration and connection status of all integrated search engine providers'), and it enumerates the providers. This clearly distinguishes it from siblings like list_sites or search_analytics, which operate on site data rather than provider connection health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for diagnosing provider integration health, which is a distinct use case from the sibling tools. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sitemapB
Retrieve deep indexing and error metrics for a specific sitemap feed.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Search engine provider: 'google' or 'bing' (default: 'google') | |
| siteUrl | Yes | Site URL as verified in Search Console | |
| feedpath | Yes | Full URL or relative path to the sitemap (e.g. https://example.com/sitemap.xml) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the safety disclosure burden. 'Retrieve' implies a non-mutating read operation, which is useful, but the description does not disclose authentication requirements, rate limits, or what counts as an error metric. It is not misleading, but it is thin on behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, repetition, or structural clutter. It front-loads the verb and object, making the tool's core purpose immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does not compensate by explaining what 'deep indexing and error metrics' concretely include or how the response is shaped. Combined with absent annotations and no usage/alternative hints, the picture is incomplete for an agent that must interpret the returned metrics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters already carry semantic descriptions in the schema. The tool description adds no additional parameter-level meaning beyond restating that the feed is a sitemap, so it does not go beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Retrieve') on a specific resource ('a specific sitemap feed') and names the output domain ('deep indexing and error metrics'). It can be distinguished from siblings like list_sitemaps by the focus on a single feed, but it does not explicitly name alternatives or state exclusions, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The phrase 'specific sitemap feed' hints at the intended scope, but the description never directs the agent to list_sitemaps for enumeration, inspect_url for individual URLs, or otherwise states trade-offs between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_urlA
Inspect a URL in Google Search Console or Bing Webmaster Tools to check live indexing status, crawl info, canonical URLs, mobile usability, and rich results (schema validation).
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Search engine to inspect on: 'google' or 'bing' (default: 'google') | |
| siteUrl | Yes | Site URL as verified in Search Console (e.g. https://example.com/ or sc-domain:example.com) | |
| languageCode | No | Language code for issue messages (e.g. 'en-US') | |
| inspectionUrl | Yes | The fully qualified URL to inspect (must belong to the site property) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the responsibility for behavioral disclosure. It correctly implies a read-only inspection operation and clarifies results are live, but it omits operational details such as verification requirements, engine-specific limitations, rate limits, and the exact response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence communicates the action, platform scope, and intended checks without filler or repetition. The enumerated list is compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full parameter schema and the description's explicit list of output categories, an agent has enough context to select and invoke the tool correctly. The absence of an output schema is partially compensated by naming the checks, though a note on return format or required site verification would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no new meaning to parameters like siteUrl or languageCode; it merely frames the high-level action. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Inspect') against a specific resource ('a URL'), names both target platforms, and enumerates concrete checks (indexing status, crawl info, canonical URLs, mobile usability, rich results). It is immediately distinguishable from siblings like search_analytics or list_sitemaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'to check ...' clause defines clear use cases: when an agent needs live indexing, crawl, canonical, mobile, or schema-validation data for a single URL. It does not explicitly state when not to use it or name alternatives, but the purpose sentence supplies enough context against sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitemapsA
List all submitted sitemaps and their current status, last download date, error counts, and indexed URL counts.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Search engine provider: 'google' or 'bing' (default: 'google') | |
| siteUrl | Yes | Site URL as verified in Search Console |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are provided, the description itself must carry behavioral disclosure. Its output-field list does add useful detail, and 'List' implies a read-only operation, but it does not state prerequisites (verified siteUrl), inclusion rules, or any caveats about error counts/status. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence contains a clear action verb, resource, and a compact list of returned fields; no filler or repetition. It is appropriately front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read-only listing, the description conveys the core purpose and output fields, but with no output schema and no annotations it leaves routing and prerequisites implicit. The missing guidance around sibling tools and exact response shape keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the schema already explains siteUrl as the verified Search Console site URL and documents engine as an enum with default 'google'. The description adds no semantic value beyond referencing submitted sitemaps, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List all submitted sitemaps') and enumerates the exact fields returned (status, last download date, error counts, indexed URL counts), making its function unambiguous. The plural 'all' naturally contrasts with sibling get_sitemap, which implies a single-sitemap retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No sentence tells an agent when to choose this tool over siblings such as get_sitemap or engine_status. The only use condition is implicit in the verb 'List'; there are no exclusions or alternative routing. This leaves selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesA
List all verified sites (properties) across Google Search Console and Bing Webmaster Tools, along with permission levels.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Search engine to list properties for: 'google', 'bing', or 'all' (default: 'all') | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. 'List' indicates a read-only, non-destructive operation, but the description does not mention authentication requirements, response format, pagination, or any side-effect guarantees. It is adequate for a simple list tool but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core action and resource, then adds the permission-level output detail. Every word earns its place; no redundant filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema list tool, the description covers the essential purpose and result content. It does not describe the exact return structure or pagination, but the tool is simple enough that this omission is a minor gap rather than a blocker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'engine' is fully described in the schema with an enum and default, so schema coverage is 100%. The description adds no additional parameter-specific meaning beyond naming the two platforms, which the enum already conveys. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('verified sites/properties') across two named platforms, and includes the permission-level detail. This clearly distinguishes it from sibling tools like list_sitemaps 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context: use this tool to get all verified sites across Google Search Console and Bing Webmaster Tools. It does not explicitly name alternatives or exclusion conditions, but the scope is unambiguous enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_analyticsA
Query search performance and analytics data (clicks, impressions, CTR, average position) across Google Search Console or Bing Webmaster Tools.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Search engine provider: 'google' or 'bing' (default: 'google') | |
| endDate | Yes | End date in YYYY-MM-DD format (e.g. 2026-08-28) | |
| siteUrl | Yes | Site URL exactly as verified in Search Console (e.g. https://example.com/ or sc-domain:example.com) | |
| rowLimit | No | Max rows to return (default 100, maximum 25000) | |
| startRow | No | Zero-based row offset for pagination | |
| dataState | No | Data freshness (Google): 'all' includes fresh (recent ~2 days) data, 'final' only finalized | all |
| startDate | Yes | Start date in YYYY-MM-DD format (e.g. 2026-08-01) | |
| dimensions | No | Comma-separated dimensions to group by: query, page, country, device, searchAppearance, date. Default: 'query' | |
| pageFilter | No | Filter page URLs: plain text (contains), 'exact:url', 'regex:pattern', or '!regex:pattern' | |
| searchType | No | Search vertical: web, image, video, news, discover, googleNews (default: web) | web |
| queryFilter | No | Filter queries: plain text (contains), 'exact:keyword', 'regex:pattern', or '!regex:pattern' | |
| deviceFilter | No | Filter by device: DESKTOP, MOBILE, or TABLET | |
| countryFilter | No | Filter by ISO 3166-1 alpha-3 country code (e.g. USA, GBR, IND, DEU) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. The verb 'Query' conveys read-only intent, which is the key safety-relevant trait. However, it does not disclose provider-specific differences between GSC and Bing APIs, rate limits, or the aggregated/grouped nature of the result rows. Adequate but thin given zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 23-word sentence that is front-loaded with the action and resource, names the returned metrics, and identifies both providers. There is no filler, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex — 13 parameters, two providers, no output schema, no annotations. The schema fully documents parameters and the description names the return metrics, but the description omits provider-specific caveats, result aggregation semantics, and usage boundaries. Sufficient for basic invocation with the three required parameters, but incomplete for nuanced calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with every parameter already documented (enums, defaults, date formats, filter syntax), so the baseline is 3. The description adds marginal value by naming the computed metrics, which conceptually maps to what the tool returns, but it contributes nothing about parameter syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Query'), a specific resource ('search performance and analytics data'), enumerates the returned metrics (clicks, impressions, CTR, average position), and names both supported providers (Google Search Console, Bing Webmaster Tools). It is immediately distinguishable from siblings like inspect_url (URL-level data) or list_sitemaps (sitemap management) without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the resource it queries — aggregate search performance metrics across two engines — and the sibling names make the contrast obvious. However, the description never explicitly states when to use this tool over an alternative, nor does it mention exclusions or prerequisites, leaving the agent to infer routing from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_urls_indexnowA
Instantly notify Bing, Yandex, Seznam, and other IndexNow search engines about added, updated, or deleted URLs on your website.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | IndexNow key (optional if INDEXNOW_KEY environment variable is set) | |
| host | Yes | The domain name of your site (e.g. 'example.com') without protocol | |
| urls | Yes | Comma-separated or newline-separated list of full URLs to submit (or JSON array of URLs) | |
| keyLocation | No | Optional full URL to the key file if not at site root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It only states the core action and does not mention authentication key requirements, idempotency, rate limits, or expected response/error behavior, leaving a significant gap for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. The verb and target are immediate, and every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no annotations, and no output schema, the description is minimal. It does not explain what happens after submission or any constraints like URL limits. However, the schema fully documents parameters, so an agent can still construct a valid request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters. The description adds no extra meaning about key, host, urls, or keyLocation, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('notify') and names the exact resources (Bing, Yandex, Seznam, and other IndexNow search engines) and the event types (added, updated, or deleted URLs). This clearly distinguishes it from read-oriented sibling tools like inspect_url or list_sitemaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case: after content changes, notify IndexNow engines. However, it does not explicitly state when not to use this tool or mention alternatives like submitting via sitemaps, though the context is clear enough for an agent to infer when it applies.
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.
7 tool updates
v1.0.0- First observed
engine_status - First observed
get_sitemap - First observed
inspect_url - First observed
list_sitemaps - First observed
list_sites - First observed
search_analytics - First observed
submit_urls_indexnow
TDQS
Scored across 7 tools
Each tool targets a distinct function: status, site listing, URL inspection, analytics, sitemap listing, sitemap details, and URL submission. The only slight overlap is list_sitemaps vs get_sitemap, but the descriptions clearly separate listing all sitemaps from retrieving deep metrics for one specific sitemap.
Tool names mostly follow a consistent verb_noun pattern: engine_status, list_sites, inspect_url, search_analytics, list_sitemaps, get_sitemap, submit_urls_indexnow. Minor inconsistency: engine_status and search_analytics use noun-ish names rather than a verb, but the pattern is still readable and predictable.
Seven tools is well-scoped for an SEO/webmaster server covering multiple search engines. Each tool covers a distinct core workflow: status, site management, URL inspection, analytics, sitemaps, and IndexNow submission.
The surface covers the main SEO webmaster workflows: verification status, site listing, URL inspection, analytics, sitemap management, and IndexNow submission. Minor gaps include lack of tools for adding/removing sites, submitting sitemaps, or managing crawl settings, but agents can still accomplish core monitoring and diagnostics.
Maintenance
Related MCP Connectors
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
Google Search Console in your AI: overview, opportunities, index gaps, page checks, long history.
Turn Search Console data into SEO actions, content, publishing, indexing, and AI insights.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to query and manage Google Search Console data, including search analytics, URL indexing status, and sitemap management, for SEO and LLMO analysis directly from a conversation.154,242 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access Google Search Console search performance and index health data, including clicks, impressions, rankings, URL inspection, and sitemap management.8 npmMIT
- AlicenseAqualityCmaintenanceEnables AI assistants to analyze Google Search Console SEO data through natural language, including search analytics, URL inspection, sitemap management, and property management.21MIT
- AlicenseAqualityAmaintenanceEnables AI agents to query and analyze Google Search Console data, including search analytics, URL inspection, sitemaps, and property verification, and to perform actions like submitting sitemaps and adding properties through natural language.19229 npmMIT