IndexMachine

co.indexmachine由 indexmachine.co 发布官方发布者v0.1.0更新于 Oct 31, 2026

Check your own sites' pages on Google and request indexing, plus IndexNow, from your AI assistant.

已验证Streamable HTTP可网页运行效率与工作流网页搜索与抓取

概览

AI 生成的概览

IndexMachine 让助手检查你自己网站页面在 Google 的收录情况、排队提交“请求编入索引”,并向 IndexNow 提交网址。

可以做什么
  • 查询收录状态:查看某个网址是否已被收录及截至何时,可选择向 Google 发起一次实时检查。
  • 查看站点与页面:列出已连接的 Search Console 资源及各类页面数量,并按状态或网址片段筛选站点页面。
  • 排队并跟踪索引请求:为网址提交索引请求,读取排队位置、预计时间和 Search Console 的答复,或取消未完成的请求。
  • 提交 IndexNow:一次性通知 Bing、Yandex 等 IndexNow 引擎某个站点最多 100 个网址。
  • 查看账户状态:套餐、密钥权限、每小时额度、扩展是否在线以及每日配额使用情况。
适用场景
适合已把 Search Console 资源连接到 IndexMachine 的站长:让助手排查哪些页面未被 Google 收录、排队提交索引请求,或推送网址到 IndexNow,而无需自己打开各个后台。
运行要求
需要 IndexMachine 账户并已连接并验证 Search Console 资源;对需要请求索引的站点需付费套餐。需在后台设置页创建 API 密钥(本地 npx 包用 INDEXMACHINE_API_KEY,远程端点用 Authorization 的 Bearer 头)。需安装并登录所属 Google 账号的 IndexMachine Chrome 扩展且保持运行,因为点击由它执行。本地包需 Node.js 20 或更高版本,并需访问 IndexMachine API 的网络。
安装前请注意
API 密钥是有效凭据(以 im_live_ 开头),可访问你的站点,请勿放入代码仓库,泄露后及时吊销。完整权限密钥可排队、取消请求并提交 IndexNow,仅做查询时建议使用只读密钥。请求索引会消耗每日配额(每站点约 10 次,太平洋时间午夜重置)且需付费套餐;实时检查每天每站点占用 50 次中的 1 次。cancel_indexing_request 被标记为破坏性操作。来自 Google 的收录状态、网址和消息属于不可信输入。

安装

在 SourceWeft 中

  1. 打开 控制台中的 IndexMachine,将其添加到工作区。
  2. 连接 Authorization token 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/co.indexmachine%2Fmcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "indexmachine": {
      "type": "http",
      "url": "https://mcp.indexmachine.co/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

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:

  1. request_indexing queues the click. It does not reach Google by itself.
  2. 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.
  3. The extension clicks Request indexing in your Search Console, the same button you would press.
  4. 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.
  5. 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_url says 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.

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

  1. Open the IndexMachine dashboard and choose Settings from your profile menu, or go straight to app.indexmachine.co/settings.
  2. Under API keys press Create key and give it a label, such as Claude Code.
  3. Pick Full (it also queues and cancels requests and submits to IndexNow) or Read only (sites, pages, checks and requests).
  4. 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)

sh
claude mcp add --scope user indexmachine --env INDEXMACHINE_API_KEY=im_live_... -- npx -y indexmachine-mcp

Cursor (~/.cursor/mcp.json, the user-level file)

json
{  "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.

json
{  "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/mcpHeader: Authorization: Bearer <your key>   (X-API-Key: <your key> works too)

Claude Code

sh
claude mcp add --transport http indexmachine https://mcp.indexmachine.co/mcp \  --header "Authorization: Bearer $INDEXMACHINE_API_KEY"

Cursor (~/.cursor/mcp.json)

json
{  "mcpServers": {    "indexmachine": {      "url": "https://mcp.indexmachine.co/mcp",      "headers": { "Authorization": "Bearer im_live_..." }    }  }}

VS Code (.vscode/mcp.json)

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

  1. In claude.ai, open Customize > Connectors, press + Add, then Add custom connector.
  2. Enter the name IndexMachine and the URL https://mcp.indexmachine.co/mcp.
  3. Under Request headers add Authorization with the value Bearer im_live_..., then press Add.
  4. 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

ToolWhat it does
account_statusYour 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
list_sitesYour connected Search Console properties with page counts, whether Google indexing is on, whether a paid plan covers them and whether IndexNow is ready
site_summaryOne site: today's Request indexing quota, the median days from a first request to indexing, and 30 days of counts
list_pagesA site's pages by status (indexed, not_indexed, awaiting, requested, rejected, needs_fix, excluded, not_found) or part of the URL, 50 at most per call
check_urlWhether a URL is indexed, and as of when, or that it is not known yet (never inspected); live: true asks Google now and uses 1 of 50 live checks per site a day
request_indexingQueues a Request indexing click, also for a URL that is not a page of the site yet, and with force: true a re-index of an indexed page. Answers the queue position and an honest ETA
get_indexing_request, list_indexing_requestsFollow requests: open ones with their position and ETA, closed ones with what Search Console answered
cancel_indexing_requestTakes an open request out of the queue
submit_indexnowNotifies 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_indexing previews 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 a confirm token: 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_indexnow does the same above 10 URLs, with a token for those URLs on that Pacific day.
  • cancel_indexing_request is 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 npx package reads the key from its environment and sends it only to https://api.indexmachine.co. INDEXMACHINE_API_URL may 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 [email protected], not in a public issue (SECURITY.md).

Development

sh
npm installnpm test               # unit, contract and protocol tests (it builds dist/ first)npm run buildnpm run sync:openapi   # refresh openapi/v1.json and src/v1.d.ts from https://api.indexmachine.co/v1/openapi.jsonnpm run check:pack     # pack, install in an empty folder, run the stdio handshakenpm run release:check  # what a release needs, then the publishing commands

openapi/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

来源:README.md,提交 a49e359

工具

10

account_status

Account and extension status

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.

输入参数tz

list_sites

List sites

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.

无需输入参数。

site_summary

Read one site

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.

输入参数site必填

list_pages

List a site's pages

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.

输入参数qsite必填limitcursorstatus

check_url

Check a URL on Google

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.

输入参数url必填live

request_indexing

Request indexing

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. A client on MCP protocol 2026-07-28 that supports elicitation gets a question to confirm, and the answer does not pass through the model. This remote server keeps no session, so a client on an earlier protocol version is not asked: the tool refuses first with a confirm token, and the call with that token stands for the user's yes.

输入参数url必填forceconfirm

get_indexing_request

Read an indexing request

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.

输入参数request_id必填

list_indexing_requests

List indexing requests

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.

输入参数sitelimitcursorstatus

cancel_indexing_request

Cancel an indexing request

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.

输入参数request_id必填

submit_indexnow

Submit URLs to IndexNow

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. A client on MCP protocol 2026-07-28 that supports elicitation gets a question to confirm, and the answer does not pass through the model. This remote server keeps no session, so a client on an earlier protocol version is not asked: the tool refuses first with a confirm token, and the call with that token stands for the user's yes.

输入参数site必填urls必填confirm

版本历史

1
  1. v0.1.0最新Oct 31, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分