IndexMachine MCP server
OfficialProvides tools for checking whether a site's URLs are indexed in Google and for queuing Request indexing clicks in the user's Google Search Console, including re-indexing already indexed pages, with queue position and ETA reporting.
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., "@IndexMachine MCP serverIs my page example.com/blog/seo-tips indexed on Google yet?"
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.
IndexMachine MCP server
Check your own sites' pages on Google and request indexing, plus IndexNow, from your AI assistant.
This MCP server lets Claude Code, Cursor, VS Code, Claude Desktop and claude.ai work with the sites you connected to IndexMachine: list your sites and pages, check whether a URL is on Google, queue a Request indexing click (also a re-index of a page that is already indexed) and notify Bing and the other IndexNow engines. It calls the IndexMachine API with your key and does nothing the API does not.
How a request really travels
IndexMachine uses Request indexing in your own Google Search Console and IndexNow, no link farms. So a request is not instant, and the server says so every time:
request_indexingqueues the click. It does not reach Google by itself.The IndexMachine Chrome extension, in your Chrome and signed in to the Google account that owns the property, picks the request up when it next checks in: about every 5 minutes on extension 1.2.0 or newer, every 30 minutes on older versions. Chrome has to be running. When the extension has not checked in for 40 minutes there is no ETA, and the request waits in the queue.
The extension clicks Request indexing in your Search Console, the same button you would press.
Google takes about 10 of these requests per site per day, a day that resets at midnight Pacific. The number is observed; Google does not publish it. Requests you queue go ahead of the extension's daily work on your other pages and share the same 10. Once a site's day is used up, the ETA moves past midnight Pacific.
Google then decides whether and when it indexes the page, often days later. The ETA is for the click, never for indexing, and only
check_urlsays a page is indexed.
A re-index of a page that is already on Google (force: true) needs extension 1.2.0 or newer. IndexNow
tells Bing, Yandex and the other IndexNow engines directly; it needs the site's IndexNow key file in place,
takes 20 submissions per site a day and does not reach Google.
Related MCP server: search-console-mcp
What you need
An IndexMachine account with your sites connected: app.indexmachine.co. Signing up is free and shows which of your pages Google has not indexed. Requesting indexing needs a paid plan for the site (pricing).
The IndexMachine Chrome extension, installed and signed in, for the Request indexing clicks.
An API key (with claude.ai you can add it as a request header, see Remote server).
Create an API key
Open the IndexMachine dashboard and choose Settings from your profile menu, or go straight to app.indexmachine.co/settings.
Under API keys press Create key and give it a label, such as
Claude Code.Pick Full (it also queues and cancels requests and submits to IndexNow) or Read only (sites, pages, checks and requests).
Copy the key. It starts with
im_live_and is shown only once.
Roll or revoke a key on the same page at any time; an account holds up to 10 active keys.
Install
The package runs on your machine with npx (Node.js 20 or newer). Keep the key in your user-level
config, never in a file that lives in a repository.
Claude Code (user scope, so the key stays out of the project's .mcp.json)
claude mcp add --scope user indexmachine --env INDEXMACHINE_API_KEY=im_live_... -- npx -y indexmachine-mcpCursor (~/.cursor/mcp.json, the user-level file)
{
"mcpServers": {
"indexmachine": {
"command": "npx",
"args": ["-y", "indexmachine-mcp"],
"env": { "INDEXMACHINE_API_KEY": "im_live_..." }
}
}
}VS Code (.vscode/mcp.json): VS Code asks for the key and keeps it out of the file.
{
"inputs": [
{ "type": "promptString", "id": "indexmachine-key", "description": "IndexMachine API key", "password": true }
],
"servers": {
"indexmachine": {
"type": "stdio",
"command": "npx",
"args": ["-y", "indexmachine-mcp"],
"env": { "INDEXMACHINE_API_KEY": "${input:indexmachine-key}" }
}
}
}Claude Desktop (claude_desktop_config.json): the same block as Cursor, under mcpServers.
Other MCP clients: run npx -y indexmachine-mcp with INDEXMACHINE_API_KEY in its environment, or
use the remote server below.
Remote server
The remote server at https://mcp.indexmachine.co/mcp needs no install. Clients send the API key in a
header:
URL: https://mcp.indexmachine.co/mcp
Header: Authorization: Bearer <your key> (X-API-Key: <your key> works too)Claude Code
claude mcp add --transport http indexmachine https://mcp.indexmachine.co/mcp \
--header "Authorization: Bearer $INDEXMACHINE_API_KEY"Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"indexmachine": {
"url": "https://mcp.indexmachine.co/mcp",
"headers": { "Authorization": "Bearer im_live_..." }
}
}
}VS Code (.vscode/mcp.json)
{
"inputs": [
{ "type": "promptString", "id": "indexmachine-key", "description": "IndexMachine API key", "password": true }
],
"servers": {
"indexmachine": {
"type": "http",
"url": "https://mcp.indexmachine.co/mcp",
"headers": { "Authorization": "Bearer ${input:indexmachine-key}" }
}
}
}claude.ai: a custom connector
In claude.ai, open Customize > Connectors, press + Add, then Add custom connector.
Enter the name
IndexMachineand the URLhttps://mcp.indexmachine.co/mcp.Under Request headers add
Authorizationwith the valueBearer im_live_..., then press Add.In a chat, open +, then Connectors, and switch IndexMachine on.
IndexMachine and the Submitator connector can be on in the same chat: no tool name is shared.
Signing in with your IndexMachine account instead of a key (OAuth) is built into this server and stays off until IndexMachine's API issues sign-in tokens. Until then the server advertises no sign-in, and every client sends a key.
The remote server keeps nothing between requests: it passes the key on to the IndexMachine API and forgets it.
Tools
Tool | What it does |
| Your plan, the key's permissions and hourly budget, whether the Chrome extension is online, and today's requests per site against Google's daily quota |
| Your connected Search Console properties with page counts, whether Google indexing is on, whether a paid plan covers them and whether IndexNow is ready |
| One site: today's Request indexing quota, the median days from a first request to indexing, and 30 days of counts |
| A site's pages by status ( |
| Whether a URL is indexed, and as of when, or that it is not known yet (never inspected); |
| Queues a Request indexing click, also for a URL that is not a page of the site yet, and with |
| Follow requests: open ones with their position and ETA, closed ones with what Search Console answered |
| Takes an open request out of the queue |
| Notifies Bing, Yandex and the other IndexNow engines of up to 100 URLs of one site |
Prompt: index_url checks a URL, queues a request when it is not indexed, and reports the ETA as it is.
Keys and safety
request_indexingpreviews before it queues. It asks you before a re-index of a page that is already on Google, a URL that is not in your sitemap, or your site's last request of the day; declining queues nothing. Clients that can ask their user (MCP elicitation) show the question themselves, and your answer never passes through the model; a question that gets no answer queues nothing either. Clients that cannot ask, and on the remote server clients on an MCP protocol before 2026-07-28, get a refusal first, with the reasons and aconfirmtoken: an HMAC under your API key that fits only that request, on that day, while your site's quota stays as it was. The model cannot make one up, so a call always takes the refusal first. Whether your assistant then shows you the reasons before it sends the token back is up to the assistant and to your client's approval of tool calls; the server cannot see it.submit_indexnowdoes the same above 10 URLs, with a token for those URLs on that Pacific day.cancel_indexing_requestis marked destructive (destructiveHint: true), and no other tool is: it undoes a request. The tools that only read are marked read-only, so clients can run them without asking.The
npxpackage reads the key from its environment and sends it only tohttps://api.indexmachine.co.INDEXMACHINE_API_URLmay point it to a local development server, and nowhere else.A read-only key fits an assistant that only checks: sites, pages, URL checks and requests.
Every call carries a request id that starts with
mcp-. Revoke a key on the Settings page at any time.Report a vulnerability by email to vlad@indexmachine.co, not in a public issue (SECURITY.md).
Development
npm install
npm test # unit, contract and protocol tests (it builds dist/ first)
npm run build
npm run sync:openapi # refresh openapi/v1.json and src/v1.d.ts from https://api.indexmachine.co/v1/openapi.json
npm run check:pack # pack, install in an empty folder, run the stdio handshake
npm run release:check # what a release needs, then the publishing commandsopenapi/v1.json is the /v1 contract, and the API serves the same document at /v1/openapi.json. When
the API ships a new release, npm run sync:openapi and npm test show which new operations need a tool or
a line in EXCLUDED (src/tools/index.ts).
The remote server deploys to Vercel (vercel.json, api/) under the domain mcp.indexmachine.co.
OAuth turns on with MCP_OAUTH=1 and MCP_OAUTH_KEYS, the keys IndexMachine's API encrypts its access
tokens with.
License
MIT
Available Tools
10 toolsaccount_statusAccount and extension statusARead-onlyInspect
The plan, the key's permissions and hourly request budget, whether the user's IndexMachine Chrome extension is online (it performs every Request indexing click), and today's requests per site against Google's daily quota of about 10 per site.
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No | IANA time zone for today's counts, such as Europe/Berlin; UTC by default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely non-obvious context: that the Chrome extension is what actually executes indexing clicks, which changes how an agent should interpret a completed or failed request_indexing call. It says nothing about auth requirements or whether quota counts are cached/stale.
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 dense sentence covering the key returned fields, with the most decision-relevant facts (plan, budget, extension online) listed first. It is slightly elliptical — a fragment rather than a sentence with a verb — but no clause is padding.
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 no output schema, the description appropriately enumerates the returned data points, including the Google quota comparison an agent needs for planning. The main gap is the absence of any guidance on when to call it relative to other tools.
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% and the single optional 'tz' parameter is fully documented in the schema. The description never mentions time-zone handling, so it adds nothing over the schema here; baseline 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 enumerates the specific resources the tool reports on: plan, key permissions and hourly budget, Chrome extension online state, and today's per-site request counts vs Google's daily quota. That is concrete and clearly distinct from action-oriented siblings like request_indexing or cancel_indexing_request. It omits an explicit verb ('returns'/'reports'), but the scope is unmistakable.
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?
There is no stated when-to-use or when-not-to-use guidance, and no sibling is named. The clause about the extension performing 'every Request indexing click' hints that this tool explains why request_indexing may fail, but the agent must infer that routing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_indexing_requestCancel an indexing requestADestructiveIdempotentInspect
Takes an open indexing request out of the queue, so the extension never performs it. The page stays in IndexMachine. A closed request cannot be canceled.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The indexing request's id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true; the description adds the crucial nuance that only the queued request is destroyed while the page itself stays in IndexMachine, which meaningfully reframes the destructive flag. It also discloses the state precondition (closed requests are not cancelable). It does not describe the error behavior or return value on success.
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?
Three short sentences, zero filler, with the primary effect front-loaded and the precondition and side-effect note following in priority order.
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 single-parameter mutation with rich annotations and no output schema, the description covers effect, scope, and precondition adequately. The only meaningful gap is what happens when the request is closed (error vs no-op), which matters for a cancel operation.
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?
Only one parameter and schema coverage is 100%, so the schema already documents request_id fully; baseline 3 applies. The description adds nothing about the id format or how to obtain a valid request id (e.g., from list_indexing_requests).
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 (cancel) and resource (indexing request) plus the precise mechanism: it removes the request from the queue so the extension never performs it. That is clearly separable from the sibling read tools (get_indexing_request, list_indexing_requests) and from request_indexing.
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?
Gives a concrete applicability condition — only open requests can be canceled, a closed request cannot — which tells the agent when the call will fail. It stops short of naming alternatives (e.g., use get_indexing_request to check state first), so not a full when/when-not/alternatives treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_urlCheck a URL on GoogleARead-onlyInspect
Whether a URL of one of the user's sites is indexed on Google, and as of when: the stored Search Console inspection, its open indexing request with the ETA, and with live: true a fresh URL Inspection from Google, which uses 1 of 50 live checks per site a day. indexed is null, not known, when the URL was never inspected. When Google refuses a live check, the stored state comes back with a warning.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A whole http or https URL of one of the user's sites | |
| live | No | Ask Google now; uses 1 of the site's 50 live checks a day |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, openWorld), and the description adds substantive behavior on top: the per-site live-check quota, that indexed is null rather than false when never inspected, and that a refused live check degrades to stored state with a warning. Quota and graceful-degradation details are exactly the kind of context an agent cannot get from structured fields.
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?
Purpose is front-loaded in the first clause, then the three return components and the live/fallback caveats follow in a tight block with no filler. The first sentence is long and colon-chained, which costs a little readability, but every clause carries information.
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, so the description carries the burden of describing returns — and it does: index status, stored inspection timing, open-request ETA, live result, null-when-unknown, and the warning path. For a 2-parameter read tool this leaves nothing an agent needs missing.
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%, so the baseline is 3, and the description still adds meaning: live means 'ask Google now' and carries a concrete quota cost, and the null semantics of the indexed result are clarified. The url parameter itself is only restated, but the live flag's tradeoff is genuinely enriched.
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 — whether a URL of the user's site is indexed on Google and as of when — and enumerates what is returned (stored inspection, open request ETA, optional live check). It is not tautological and an agent can tell it apart from list_pages or get_indexing_request, though it never names those siblings explicitly.
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?
Usage is largely implied: the agent infers you call this to learn a URL's index status, and the description explains the live flag costs 1 of 50 daily checks, which is a real decision cue. However, it never states when to prefer this over get_indexing_request or list_pages, and gives no prerequisites about the URL needing to belong to a Search Console property.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indexing_requestRead an indexing requestARead-onlyInspect
One indexing request: its status, queue position and ETA in eta_text while open, and what Search Console answered once the extension performed it. A closed request with status requested means the click happened; whether Google indexed the page is check_url's answer.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The indexing request's id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, non-destructive, closed-world, so the description's added value is semantic: eta_text applies only while the request is open, and a closed request with status 'requested' means only that the click happened, not that indexing succeeded. That interpretation guidance is genuinely beyond structured fields, though it doesn't address lookup-miss behavior.
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?
Two sentences with no filler; the returned-field summary comes first and the check_url disambiguation second. Phrasing like 'once the extension performed it' is terse and assumes some context, but nothing is wasted.
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 one required parameter, no output schema, and annotations covering safety, the description is complete enough: it enumerates the meaningful return concepts and their conditions. Remaining gaps are minor—unnoted behavior for an unknown or stale request_id.
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% for the single request_id parameter, including UUID format and pattern, so the schema does the documentation work. The description adds no syntax or sourcing detail (e.g., where a request_id comes from) beyond that 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 names the resource (one indexing request) and specifies exactly what is returned: status, queue position, and ETA in eta_text while open, plus the Search Console response once performed. This separates it from check_url, which handles post-indexation questions. It doesn't explicitly contrast itself with list_indexing_requests beyond the singular 'One indexing request'.
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?
It routes a related but distinct question explicitly: 'whether Google indexed the page is check_url's answer,' telling the agent not to expect indexation truth from this tool. The condition of use (read a single request, especially an open one or a closed one with status requested) is clear, though no when-not rule or prerequisite is stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indexing_requestsList indexing requestsARead-onlyInspect
Indexing requests newest first, for one site or all of them: open ones (preparing, queued, served) with their position and ETA, or closed ones with their outcome. Closed requests are kept 90 days.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | The site: its id (a UUID) or its domain, such as example.com | |
| limit | No | Rows to return, 25 by default, 50 at most | |
| cursor | No | next_cursor from the previous page | |
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description is not carrying the safety burden. It nonetheless adds real context beyond them: newest-first ordering, that open requests expose position and ETA, that closed ones expose outcome, and the 90-day retention window for closed requests.
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?
Two sentences, no filler, and the key scoping information (ordering, site scope, open vs closed) is packed into the opening clause so an agent learns the shape of the result immediately.
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 no output schema, the description does the needed work of describing what each result mode returns (position and ETA, or outcome) plus retention. Pagination mechanics are delegated to the cursor parameter's schema description, which is a reasonable split.
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 75%, with site, limit and cursor well documented in the schema. The description adds semantics the schema lacks for status, spelling out what 'open' (preparing, queued, served) and 'closed' (outcome) actually contain, which is the one enum without a description.
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 and resource (list indexing requests) plus the ordering (newest first) and scope (one site or all). It implicitly contrasts with get_indexing_request by being a listing, but never names the sibling that returns a single request.
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 open/closed split and the 'one site or all of them' phrasing imply how to use the status and site parameters, but no sentence says when to prefer this over get_indexing_request or how to follow up on a request. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList a site's pagesARead-onlyInspect
A site's pages by path, with their status, Google's coverage state and the last crawl and request. status not_indexed is every page that is neither indexed nor excluded; q matches part of the URL. A status comes from the last stored inspection; check_url has a single URL in full.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Part of the URL | |
| site | Yes | The site: its id (a UUID) or its domain, such as example.com | |
| limit | No | Rows to return, 25 by default, 50 at most | |
| cursor | No | next_cursor from the previous page | |
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. Beyond that, the description discloses a real behavioral caveat: 'A status comes from the last stored inspection,' i.e. values may be stale, and it clarifies what not_indexed aggregates. It does not mention pagination behavior or result caps, though the schema covers those.
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?
Very compact and front-loaded: the returned fields come first, then the status caveat and the sibling pointer. The fragment style ('the last crawl and request') is slightly telegraphic and forces some inference, but nothing is wasted.
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 paginated list tool with no output schema, the description covers the returned fields, the meaning of the status filter, and the staleness caveat. Cursor/limit mechanics are left to the schema, which is acceptable; only a note on result ordering/capping would strengthen it.
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 80%, so the schema already documents q, site, limit and cursor. The description adds meaning for q ('matches part of the URL', i.e. substring not exact) and for the status values, notably the composite not_indexed bucket. Baseline 3 applies given the schema does most of the work.
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 names the resource (a site's pages), what is returned (status, Google coverage state, last crawl and request), and the path ordering. The verb is only implied via the title, and there is no explicit scoping contrast with list_sites, so it is clear but not fully self-differentiating.
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?
It gives a concrete routing rule away from this tool: 'check_url has a single URL in full,' which tells the agent to use check_url for one-URL deep inspection. It also defines the not_indexed bucket so the agent knows what that filter selects. No when-not guidance against list_sites or list_indexing_requests is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesList sitesARead-onlyInspect
Every Search Console property connected to IndexMachine, with its page counts (indexed, awaiting, rejected, needs_fix, excluded), whether Google indexing is on, whether a paid plan covers it (billable, which Request indexing needs) and whether IndexNow is ready.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the exact payload shape (five page-count buckets, indexing on/off, billable, IndexNow readiness), which matters since there is no output schema. It omits freshness/pagination but nothing contradicts the annotations.
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 dense, front-loaded sentence that leads with scope and then lists the returned attributes. Every clause carries information, though the run-on parenthetical makes it slightly harder to scan than a bulleted field list.
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 no output schema and no parameters, the description's main job is explaining what comes back, and it does that thoroughly, including the semantic meaning of the billable flag. Minor gaps remain: page-count definitions and whether results are paginated or cached.
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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-param tool applies. The description correctly implies the scope is all properties with no filtering options.
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?
Names the resource (every Search Console property connected to IndexMachine) and enumerates the returned fields, which implicitly separates it from list_pages and site_summary. It never states an explicit verb like 'returns' or 'lists' but the resource and scope are unambiguous.
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?
Usage is only implied: needing to see all connected properties. There is a useful forward reference — noting 'billable, which Request indexing needs' — that hints at the request_indexing sibling's prerequisite, but no explicit when-to-use, when-not-to-use, or named alternative such as site_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_indexingRequest indexingAInspect
Queues a Request indexing click for a URL of one of the user's sites, also one that is not a page of the site yet. The user's IndexMachine Chrome extension performs it in their own Search Console when it next checks in, within about 10 requests per site per day; the answer has the queue position and the ETA in eta_text, which is for the click and not for indexing. It previews first, and queues nothing for a page that is already indexed unless force is true, a re-index. A re-index, a URL that is not in the sitemap, or the site's last request of the day waits for the user's yes. Clients that can ask their user (MCP elicitation) get a question to confirm, and the answer does not pass through the model; with other clients the tool refuses first with a confirm token, and the call with that token stands for the user's yes.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A whole http or https URL of one of the user's sites | |
| force | No | Request a re-index of a page that is already indexed | |
| confirm | No | The confirm token from this tool's refusal, once the user agreed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: the extension queues and performs the action later, there is a ~10 requests/site/day limit, eta_text refers to the click not indexing, and confirmation works through elicitation or a refusal plus confirm token. These are exactly the operational details an agent needs.
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 front-loaded with the core action and remains information-dense, but it is a long paragraph that could be split or tightened slightly. Most sentences carry necessary behavioral detail.
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 non-idempotent, open-world mutation with no output schema, the description covers the critical unknowns: deferred execution, rate limits, preview behavior, force semantics, and the confirmation flow. Nothing essential to correct invocation appears missing.
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%, so the baseline is 3, but the description adds meaningful semantics for force (a re-index) and confirm (the token from a refusal that stands in for the user's yes), beyond what the schema descriptions alone state.
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 specific verb and resource: it queues an indexing request for a URL on one of the user's sites, including URLs not yet part of the site. This clearly distinguishes it from sibling tools like submit_indexnow, check_url, and list_indexing_requests.
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?
It explains the practical conditions well: preview first, skip already-indexed pages unless force is true, and require user confirmation for re-indexes, non-sitemap URLs, and the last request of the day. It does not explicitly name alternative tools, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_summaryRead one siteARead-onlyInspect
One site in full: page counts, today's Request indexing quota (about 10 a day, reset at midnight Pacific), the median days from a first request to indexing, and up to 30 days of counts.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | The site: its id (a UUID) or its domain, such as example.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides highly valuable behavioral context beyond annotations, including the indexing quota (approx. 10 a day), its reset schedule (midnight Pacific), and the data retention limit of up to 30 days for counts.
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 tool is defined in a single, highly packed sentence that efficiently communicates the breadth of information provided and its scope.
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 single input parameter and high schema coverage, the description is fully complete. It explains not only what data is provided but also the operational constraints, like the quota and time-window limits.
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?
With 100% schema description coverage, the schema adequately defines the single 'site' parameter. The description merely confirms the input flexibility (UUID or domain), falling back to the baseline score.
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 clearly states the function as providing a comprehensive summary ('One site in full') and lists the exact data points returned, such as page counts, quota, and median indexing days.
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?
Although it does not explicitly name siblings, the description defines its scope as a comprehensive summary, which helps the agent distinguish it from granular checks like `list_pages` or individual request checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_indexnowSubmit URLs to IndexNowAInspect
Notifies Bing, Yandex and the other IndexNow engines of up to 100 URLs of one site at once; it does not reach Google, and each engine decides when it crawls. It needs the site's IndexNow key file in place (indexnow_ready in list_sites) and takes 20 submissions per site a day. More than 10 URLs at once wait for the user's yes. Clients that can ask their user (MCP elicitation) get a question to confirm, and the answer does not pass through the model; with other clients the tool refuses first with a confirm token, and the call with that token stands for the user's yes.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | The site: its id (a UUID) or its domain, such as example.com | |
| urls | Yes | URLs of this site, 100 at most | |
| confirm | No | The confirm token from this tool's refusal, once the user agreed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that crawl timing is engine-decided (not guaranteed), that requests do not reach Google, the prerequisite key file, the per-site daily quota, and the full confirmation protocol including the elicitation path and the confirm-token fallback. No contradiction with readOnlyHint=false, openWorldHint=true, idempotentHint=false or destructiveHint=false.
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?
placeholder
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?
placeholder
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?
placeholder
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 (notifies engines), the exact resource (up to 100 URLs of one site), the target engines (Bing, Yandex, other IndexNow engines), and explicitly what it does NOT do (does not reach Google). That negative scope cleanly distinguishes it from siblings like request_indexing and check_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?
Gives concrete preconditions (IndexNow key file present, verified via indexnow_ready in list_sites) and a usage cap (20 submissions per site per day), which tells the agent when this call is viable. It implies but never explicitly names the alternative for Google coverage, so routing to a sibling is left to inference rather than stated.
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.
10 tool updates
v0.1.0- First observed
account_status - First observed
cancel_indexing_request - First observed
check_url - First observed
get_indexing_request - First observed
list_indexing_requests - First observed
list_pages - First observed
list_sites - First observed
request_indexing - First observed
site_summary - First observed
submit_indexnow
TDQS
Scored across 10 tools
Most tools are clearly separated by resource and action: list_sites vs. site_summary differ in overview vs. detail, and list_pages vs. check_url differ in bulk page status vs. single-URL inspection. The overlap is manageable, but an agent could initially hesitate between the site-level and page-level read tools.
All names use consistent snake_case and are generally readable. The pattern is mostly verb_noun, but site_summary and account_status are noun phrases rather than action-first names, a minor deviation.
Ten tools is well-scoped for an indexing-management server. Each tool earns its place by covering a distinct part of the site, page, indexing-request, and IndexNow workflow.
The surface covers the core lifecycle: listing sites and pages, checking index status, requesting and canceling indexing, viewing request details, and submitting to IndexNow. Minor gaps include no tools for adding/removing sites or managing sitemaps/IndexNow key setup, but the main agent workflows are supported.
Maintenance
Related MCP Connectors
Google Search Console for AI assistants: traffic, rankings, indexing and page checks. Read-only.
Turn Search Console data into SEO actions, content, publishing, indexing, and AI insights.
Google Search Console in your AI: overview, opportunities, index gaps, page checks, long history.
Check how crawlers see a site, send new pages to search engines and AI crawlers, see crawl receipts.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides AI agents with read-only access to Google Search Console data, including search analytics, index coverage, and sitemap status. It enables users to query clicks, impressions, and ranking performance or check URL indexing status through natural language.492 npm9MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to access Google Search Console search performance and index health data, including clicks, impressions, rankings, URL inspection, and sitemap management.19 npmMIT
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to site performance and indexing data, enabling listing of verified properties, querying organic traffic metrics, and inspecting URL indexing status.125 npm1MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to access search analytics from Google Search Console and Bing Webmaster Tools, inspect URL indexing, monitor sitemaps, and submit URLs to search engines via IndexNow.7MIT