indexing-mcp
by mrzuch
README.md
# indexing-mcp
**Ask your AI assistant "which of my pages are not indexed, and why?" and get an answer, with a fix.**
One [MCP](https://modelcontextprotocol.io) server for **Google Search Console**, **Bing Webmaster Tools** and **IndexNow**. Works with Claude Desktop, Claude Code, Cursor, Windsurf and any other MCP client.
Built and maintained by [Sellignite](https://sellignite.com). MIT licensed.
## What it does
| Tool | What you can ask |
|---|---|
| `list_sites` | "Which sites do I have in Search Console and Bing?" |
| `indexing_report` | "Which pages on example.com are not indexed, and why?" Reads your sitemaps, inspects URLs in Google (newest first) and returns every non-indexed URL with Google's reason, plus sitemap errors and Bing crawl issues. |
| `inspect_url` | "Is example.com/pricing indexed?" Google URL Inspection + what Bing knows. |
| `submit_urls` | "Push these URLs to Bing and IndexNow." Uses the Bing URL Submission API (within your daily quota) and IndexNow (Bing, Yandex, Seznam, Naver…). |
| `resubmit_sitemaps` | "Resubmit my sitemaps." To Google and Bing in one go. |
| `search_performance` | "Top queries / pages for example.com in the last 28 days." |
A typical prompt: *"Run an indexing report for example.com, explain each problem in plain words, then submit the fixable URLs to Bing and IndexNow."*
> Google has no public API to request indexing for normal pages (its Indexing API only covers job postings and livestreams). For Google, the server resubmits sitemaps and gives you the direct Search Console link for each URL, so "Request indexing" is one click.
## Install
Add this to your MCP client config (Claude Desktop: *Settings → Developer → Edit config*):
```json
{
"mcpServers": {
"indexing": {
"command": "npx",
"args": ["-y", "indexing-mcp"],
"env": {
"GSC_SERVICE_ACCOUNT_JSON": "/absolute/path/to/service-account.json",
"BING_API_KEY": "your-bing-api-key",
"INDEXNOW_KEY": "your-indexnow-key"
}
}
}
}
```
Claude Code: `claude mcp add indexing -e GSC_SERVICE_ACCOUNT_JSON=/path/key.json -e BING_API_KEY=... -- npx -y indexing-mcp`
Every credential is optional. Configure only the engines you use.
## Credentials (about 10 minutes, once)
### Google Search Console
1. In [Google Cloud Console](https://console.cloud.google.com/), create a project, enable the **Google Search Console API**.
2. *IAM & Admin → Service accounts → Create*, then *Keys → Add key → JSON*. Save the file.
3. In [Search Console](https://search.google.com/search-console), for each site: *Settings → Users and permissions → Add user*, paste the service account email (`…@….iam.gserviceaccount.com`), permission **Full** (needed to resubmit sitemaps).
4. Set `GSC_SERVICE_ACCOUNT_JSON` to the file path (or to the JSON itself). `GOOGLE_APPLICATION_CREDENTIALS` also works.
New site later? Just add the same email to it. `list_sites` shows the email to use.
### Bing Webmaster Tools
[Bing Webmaster Tools](https://www.bing.com/webmasters) → *Settings (gear) → API access → API key*. Set `BING_API_KEY`.
### IndexNow (optional)
1. Pick a key (8–128 characters, `a-z A-Z 0-9 -`), e.g. from [bing.com/indexnow/getstarted](https://www.bing.com/indexnow/getstarted).
2. Host it as a text file at `https://your-site.com/<key>.txt` containing the key.
3. Set `INDEXNOW_KEY`, or `INDEXNOW_KEYS='{"site-a.com":"key1","site-b.com":"key2"}'` for different keys per site.
## Quotas to know
- Google URL Inspection: 2,000 requests/day and 600/minute per property. `indexing_report` inspects 50 URLs by default (`limit` up to 2,000).
- Bing URL submission: daily quota per site (often 10–10,000, shown in the report). `submit_urls` never goes over it.
- IndexNow: up to 10,000 URLs per call.
## Privacy
Runs locally on your machine. Credentials and data go only to Google, Bing and IndexNow. No telemetry.
## Development
```bash
npm install
npm test
npx @modelcontextprotocol/inspector node src/index.js
```
Issues and PRs welcome.
---
Need more than indexing? [Sellignite](https://sellignite.com) builds AI agents for sales and marketing teams.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo recent community issues