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 分