bing-seo-mcp
<div align="center">
# π
±οΈ bing-seo-mcp
**The full Bing Webmaster Tools API for AI agents β over one MCP server.**
Sites & verification Β· URL submission Β· Sitemaps Β· Traffic & crawl stats Β· Keyword research Β· URL blocking
[](https://www.npmjs.com/package/bing-seo-mcp)
[](https://www.npmjs.com/package/bing-seo-mcp)
[](https://nodejs.org)
[](./LICENSE)
[](https://modelcontextprotocol.io)
</div>
---
A [Model Context Protocol](https://modelcontextprotocol.io) server that lets Claude (and any MCP client) drive **Bing Webmaster Tools** end to end β manage and verify sites, push URLs for indexing, submit sitemaps, pull traffic / query / crawl stats, research keywords, and block URLs. Auth is a single **API key** β paste it once and you're running.
## β¨ Highlights
- π **Sites & verification** β list, add, verify, inspect roles
- π€ **URL submission** β single, batch, full-content, with live quota
- πΊοΈ **Sitemaps** β list and submit feeds
- π **Stats** β rank & traffic, queries, pages, crawl stats & issues
- π **Keyword research** β keyword and related-keyword data
- π« **URL blocking** β block pages/directories and deep links
- π **One-key auth** β validated on save, stored locally
- π‘οΈ **Safety rails** β read-only mode and per-call confirm guards
## π¦ Installation
Run straight from npm with `npx` (no install needed), or build from source:
```bash
# from source
git clone https://github.com/skiddgoddamn/bing-seo-mcp
cd bing-seo-mcp
npm install && npm run build
```
## π Connect to your MCP client
Add to your MCP config (e.g. `~/.claude.json` or `claude_desktop_config.json`):
```json
{
"mcpServers": {
"bing-seo": {
"command": "npx",
"args": ["-y", "bing-seo-mcp"],
"env": { "BING_API_KEY": "" }
}
}
}
```
<details>
<summary>Or point at a local build</summary>
```json
{
"mcpServers": {
"bing-seo": {
"command": "node",
"args": ["F:/projects/bing-seo-mcp/build/index.js"]
}
}
}
```
</details>
## π Get your API key
1. Sign in at [Bing Webmaster Tools](https://www.bing.com/webmasters/)
2. Go to **Settings β API access β API Key**
3. Copy the key β set it via the `b_set_apikey` tool or the `BING_API_KEY` env var
## π Setup flow
| Step | Tool | What happens |
|------|------|--------------|
| 1 | `b_set_apikey` | Save your key β validated against the live API before it's stored |
| 2 | `bing_sites_get` | List your verified sites |
| β | `b_auth_status` | Check whether the key is configured and valid |
## βοΈ Environment variables
| Variable | Default | Description |
|---|---|---|
| `BING_API_KEY` | β | Fallback API key (a saved key takes precedence) |
| `BING_MCP_CONFIG_DIR` | `~/.bing-seo-mcp` | Override the config directory |
| `B_READONLY` | `false` | Block every mutating tool (`_add` `_submit` `_remove` `_block` `_verify`) |
| `B_CONFIRM` | `false` | Require a `confirm=true` argument on mutating calls |
| `B_LOG_LEVEL` | `INFO` | `DEBUG` Β· `INFO` Β· `WARNING` Β· `ERROR` |
| `B_LOG_BODIES` | `false` | Log request/response bodies to stderr (verbose) |
| `B_LOG_FILE` | β | Append log lines to a file (default: stderr only) |
See [`.env.example`](./.env.example) for a ready-to-copy template.
## π§° Tool reference
### π Auth
| Tool | Description |
|---|---|
| `b_auth_status` | Show whether an API key is configured and valid |
| `b_set_apikey` | Save and validate the Bing Webmaster API key |
### π Site management
| Tool | Description |
|---|---|
| `bing_sites_get` | List all sites for the authenticated user |
| `bing_site_add` | Add a site to the account |
| `bing_site_verify` | Trigger ownership verification for a site |
| `bing_site_roles` | Get roles/owners of a site |
### π€ URL submission
| Tool | Description |
|---|---|
| `bing_submit_url` | Submit a single URL for indexing |
| `bing_submit_url_batch` | Submit multiple URLs in one batch |
| `bing_submit_content` | Submit a URL with its full HTTP content |
| `bing_url_quota` | Daily/monthly URL submission quota |
### πΊοΈ Sitemaps
| Tool | Description |
|---|---|
| `bing_sitemaps_get` | List submitted sitemaps/feeds for a site |
| `bing_sitemap_submit` | Submit a sitemap/feed URL |
### π Stats & analytics
| Tool | Description |
|---|---|
| `bing_rank_traffic_stats` | Rank and traffic stats for a site |
| `bing_query_stats` | Search query stats for a site |
| `bing_page_stats` | Per-page traffic stats |
| `bing_page_query_stats` | Query stats for a specific page |
| `bing_crawl_stats` | Crawl stats for a site |
| `bing_crawl_issues` | Crawl issues/errors for a site |
### π Keywords
| Tool | Description |
|---|---|
| `bing_keyword_get` | Impression data for an exact keyword |
| `bing_related_keywords` | Related keywords for a query |
### π« URL blocking
| Tool | Description |
|---|---|
| `bing_blocked_urls_get` | List blocked URLs for a site |
| `bing_block_url_add` | Block a URL or directory from Bing search |
| `bing_block_url_remove` | Remove a URL block |
| `bing_deep_link_block` | Add a deep link block |
## π‘οΈ Safety rails
- **`B_READONLY=true`** β blocks every tool whose name contains `_add` `_submit` `_remove` `_block` `_verify`. Reads still work.
- **`B_CONFIRM=true`** β mutating tools return a preview and require a follow-up call with `confirm: true`.
## π License
MIT Β© [skiddgoddamn](https://github.com/skiddgoddamn)
TDQS
Scored across 24 tools
Each tool targets a specific operation (auth, site management, URL submission, sitemaps, stats, keywords, blocking) with clear boundaries. Even similar tools like submit_url, submit_url_batch, and submit_content are differentiated by their purpose and input.
Most tools follow a 'bing_<domain>_<action>' pattern, but there are minor inconsistencies: plural vs singular (bing_sites_get vs bing_site_add) and verb placement (bing_site_verify vs bing_verify? Actually consistent) but overall pattern is recognizable.
24 tools is on the higher end but justified by the broad scope of Bing Webmaster Tools (auth, sites, URLs, sitemaps, analytics, keywords, blocking). Each tool provides distinct functionality, so no obvious bloat.
The tool surface covers the full lifecycle of Bing SEO: authentication, site management (add, verify, roles), URL submission (single, batch, content), sitemaps, analytics, keywords, and blocking. Only minor gaps like site deletion or sitemap removal, but likely not supported by API.