Skip to main content
Glama
seo-mcp

seo-mcp

by patchwindow

@patchwindow/seo-mcp

npm version License: MIT Node.js >= 20

MCP server for Google Search Console, Bing Webmaster Tools, and the Google Indexing API. Give your AI assistant live access to search performance data, indexing status, keyword research, crawl health, and programmatic URL submission — directly in the chat.


Features

  • 12 SEO tools across Google Search Console, Google Indexing API, and Bing Webmaster Tools

  • Keyword research via Bing — search volume and related keywords not available in GSC

  • Traffic drop analysis — automatically compare two periods and surface the biggest drops

  • Striking distance finder — identify queries in positions 4–20 ready for quick ranking gains

  • Brand vs. non-brand split — segment traffic without leaving your AI chat

  • Dual URL inspection — inspect any URL in both Google and Bing simultaneously

  • Google Indexing API — request indexing or re-indexing for individual URLs or batches of up to 200

  • Simple auth — Bing needs one env var; GSC uses a one-time OAuth2 flow with auto-refreshing tokens

  • Config file defaults — set your site URL once, skip it on every tool call


Related MCP server: MCP by Amal Alexander

Installation

Install globally:

npm install -g @patchwindow/seo-mcp

Or run without installing:

npx @patchwindow/seo-mcp

Setup

Bing Webmaster Tools

Bing uses an API key. No OAuth required.

  1. Go to Bing Webmaster Tools

  2. Navigate to Settings → API Access

  3. Generate an API key

  4. Set the environment variable:

export BING_WEBMASTER_API_KEY="your-api-key"

That's it.


Google Search Console

GSC requires OAuth2. Service accounts do not work with the Search Console API — user credentials are required.

Step 1: Create a Google Cloud project

  1. Go to Google Cloud Console

  2. Create a new project (or select an existing one)

  3. Go to APIs & Services → Library

  4. Search for Google Search Console API and enable it

  5. Search for Web Search Indexing API and enable it (required for request_indexing and request_indexing_batch)

Step 2: Create OAuth2 credentials

  1. Go to APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID

  2. Choose Web application as the application type

  3. Under Authorized redirect URIs, add:

    http://localhost:3847/callback
  4. Copy the Client ID and Client Secret

Step 3: Authenticate (one-time)

Set your credentials as environment variables, then run the auth command:

export GSC_CLIENT_ID="your-client-id.apps.googleusercontent.com"
export GSC_CLIENT_SECRET="your-client-secret"

npx @patchwindow/seo-mcp auth gsc

A browser window opens for Google login. After approving, the token is saved to ~/.seo-mcp/gsc-token.json. You only need to do this once — the token refreshes automatically.

Re-auth required for v0.2.0: The Indexing API scope (https://www.googleapis.com/auth/indexing) was added in v0.2.0. If you authenticated with an older version, run npx @patchwindow/seo-mcp auth gsc again to grant the new scope. Your existing token will be replaced.


Config File (optional)

Create ~/.seo-mcp/config.json to set default site URLs. This lets you skip the site_url parameter on every tool call:

{
  "gsc": {
    "default_site": "sc-domain:example.com"
  },
  "bing": {
    "default_site": "https://example.com/"
  },
  "output": {
    "max_rows": 500
  }
}

GSC site URL format: Use sc-domain:example.com for domain properties or https://example.com/ for URL prefix properties. Check which type you have in Search Console under your property settings.


Claude Desktop Integration

Add the following to your claude_desktop_config.json (typically at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "seo": {
      "command": "npx",
      "args": ["@patchwindow/seo-mcp"],
      "env": {
        "BING_WEBMASTER_API_KEY": "your-bing-api-key",
        "GSC_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
        "GSC_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Cursor / Windsurf (.cursor/mcp.json or mcp.json):

{
  "seo-mcp": {
    "command": "npx",
    "args": ["@patchwindow/seo-mcp"],
    "env": {
      "BING_WEBMASTER_API_KEY": "your-bing-api-key",
      "GSC_CLIENT_ID": "your-client-id.apps.googleusercontent.com",
      "GSC_CLIENT_SECRET": "your-client-secret"
    }
  }
}

Restart your AI client after saving the config.


Tools Reference

* = not required if default_site is set in ~/.seo-mcp/config.json.

Google Search Console

Tool

Description

Required params

Optional params

gsc_search_performance

Clicks, impressions, CTR, and position. Supports grouping by query, page, country, device, or date.

start_date, end_date

site_url*, dimensions, filter_query, filter_page, filter_device, filter_country, row_limit

gsc_striking_distance

Queries in positions 4–20 sorted by impressions — best candidates for quick ranking improvements.

start_date, end_date

site_url*, min_position, max_position, min_impressions, row_limit

gsc_traffic_drop

Compare two date periods and surface pages or queries with the largest click drops.

current_start, current_end, previous_start, previous_end

site_url*, dimension, min_drop_percent, min_clicks_previous, row_limit

gsc_url_inspection

Indexing status, crawl date, canonical URL, page fetch state, rich results, and mobile usability for a specific URL.

url

site_url*

gsc_sitemap_list

All sitemaps submitted to GSC with status, URL counts, indexed counts, and error summary.

—

site_url*

gsc_brand_nonbrand

Split search traffic into branded and non-branded segments with aggregated clicks, impressions, CTR, and position.

start_date, end_date, brand_terms

site_url*, show_top_queries

request_indexing

Ask Google to index or re-index a single URL via the Indexing API. Returns confirmation and notifyTime.

url

—

request_indexing_batch

Ask Google to index or re-index a batch of URLs (max 200 — daily quota). Returns a per-URL report of successes and failures.

urls

delay_ms

Bing Webmaster Tools

Tool

Description

Required params

Optional params

bing_keyword_research

Monthly search volume and related keywords from Bing. This data is exclusive to Bing — not available in GSC.

keyword

site_url*, country, language, include_related

bing_crawl_health

Crawl statistics (total crawled, errors by type: 4xx, timeouts, DNS failures, blocked) and a list of specific crawl issues.

—

site_url*, show_issues, max_issues

bing_url_inspection

HTTP status, indexing state, crawl date, page title, internal/external link counts, and redirect target for a URL.

url

site_url*

bing_sitemap_list

Sitemaps registered in Bing Webmaster Tools with URL counts, indexed counts, errors, and last crawl time.

—

site_url*

Parameter details

Parameter

Type

Description

site_url

string

GSC site URL (sc-domain:example.com or https://example.com/)

start_date

string

Start date, YYYY-MM-DD

end_date

string

End date, YYYY-MM-DD

dimensions

array

Group by: query, page, country, device, date. Default: ["query"]

filter_query

string

Filter to queries containing this string

filter_page

string

Filter to this exact page URL

filter_device

string

DESKTOP, MOBILE, or TABLET

filter_country

string

ISO 3166-1 alpha-3 country code, e.g. USA

row_limit

number

Max rows. Default: 100. Max: 25000

Parameter

Type

Description

site_url

string

GSC site URL

start_date

string

Start date, YYYY-MM-DD

end_date

string

End date, YYYY-MM-DD

min_position

number

Min position to include. Default: 4

max_position

number

Max position to include. Default: 20

min_impressions

number

Min impressions to include. Default: 10

row_limit

number

Max results. Default: 50

Parameter

Type

Description

site_url

string

GSC site URL

current_start

string

Current period start, YYYY-MM-DD

current_end

string

Current period end, YYYY-MM-DD

previous_start

string

Previous period start, YYYY-MM-DD

previous_end

string

Previous period end, YYYY-MM-DD

dimension

string

page or query. Default: page

min_drop_percent

number

Minimum drop % to flag. Default: 20

min_clicks_previous

number

Minimum clicks in previous period. Default: 5

row_limit

number

Max results. Default: 25

Parameter

Type

Description

site_url

string

GSC site URL

start_date

string

Start date, YYYY-MM-DD

end_date

string

End date, YYYY-MM-DD

brand_terms

array

Brand terms to match, case-insensitive. E.g. ["acme", "acmecorp"]

show_top_queries

boolean

Include top 10 queries per segment. Default: true

Parameter

Type

Description

keyword

string

The keyword to research

site_url

string

Bing site URL

country

string

Two-letter country code, e.g. US. Default: US

language

string

Language code, e.g. en-US. Default: en-US

include_related

boolean

Include related keywords. Default: true

Parameter

Type

Description

site_url

string

Bing site URL

show_issues

boolean

Include specific crawl issues. Default: true

max_issues

number

Max issues to show. Default: 20

Parameter

Type

Description

url

string

The publicly accessible URL to request indexing for

Requires the https://www.googleapis.com/auth/indexing scope. If you receive a 403, re-run npx @patchwindow/seo-mcp auth gsc and ensure the Web Search Indexing API is enabled in your Google Cloud project.

Parameter

Type

Description

urls

string[]

Array of publicly accessible URLs (min 1, max 200)

delay_ms

number

Milliseconds between requests. Default: 10. Max: 10000

The Google Indexing API has a default quota of 200 URL notifications per day. The batch tool sends requests in series with the configured delay to stay within Google's recommended rate of 100 req/s.


Examples

Ask your AI assistant:

Find quick wins for content optimization:

"Show me my top striking distance queries for the last 90 days. I want queries where I'm ranking between 5 and 15 with at least 50 impressions."

Diagnose a traffic drop:

"Compare my search traffic for April 2025 vs April 2024 by page. Flag anything that dropped more than 30%."

Research a topic before writing:

"Research the keyword 'typescript performance' in Bing. Show me monthly search volume and the top related keywords."

Audit indexing:

"Inspect the URL https://example.com/blog/my-post and tell me its indexing status, canonical URL, and whether it's eligible for rich results."

Understand brand exposure:

"Split my search traffic for Q1 2025 into branded and non-branded. My brand terms are 'acme' and 'acmecorp'. Show me the top 10 queries for each segment."

Request indexing after a publish:

"I just published three new blog posts. Request indexing for https://example.com/blog/post-1, /post-2, and /post-3."

Bulk re-index after a site migration:

"Here are 150 URLs that moved during our migration. Request indexing for all of them."


Roadmap

Planned for a future release:

  • gsc_top_pages — top pages by traffic with trend comparison

  • bing_link_counts — inbound link data (not available in GSC API)

  • bing_url_submit — trigger reindexing for new or updated URLs in Bing

  • gsc_batch_url_inspection — inspect a list of URLs with rate-limit handling

  • bing_crawl_settings — read and update Bing crawl frequency settings

  • Multi-site support — switch between properties without reconfiguring


Building from Source

git clone https://github.com/patchwindow/seo-mcp
cd seo-mcp
npm install
npm run build

Contributing

Issues and pull requests are welcome. Please open an issue before starting work on a significant change.


License

MIT — Patch Window

Available Tools

10 tools
bing_crawl_healthA

Get crawl statistics and crawl issues from Bing Webmaster Tools. Shows crawl frequency, error counts by type (4xx, timeouts, DNS failures, blocked), and a list of specific crawl problems.

Inputs: site_url, show_issues, max_issues.

bing_keyword_researchA

Research keywords using Bing Webmaster Tools. Returns monthly search volume (impressions) for a keyword and a list of related keywords. This keyword data is exclusive to Bing and not available in Google Search Console.

Inputs: keyword (required), site_url, country, language, +1 more.

bing_sitemap_listA

List all sitemaps submitted to Bing Webmaster Tools for a site, including URL counts, indexed counts, errors, and last crawl time.

Inputs: site_url.

bing_url_inspectionA

Inspect a URL's indexing and crawl status in Bing Webmaster Tools. Returns HTTP status, indexing state, crawl date, page title, link counts, and whether the URL is blocked.

Inputs: url (required), site_url.

gsc_brand_nonbrandA

Split search traffic into branded and non-branded query segments. Returns aggregated clicks, impressions, CTR, and position for each segment, plus top queries.

Inputs: start_date (required), end_date (required), brand_terms (required), site_url, +1 more.

gsc_search_performanceC

Query Google Search Console search performance data. Returns clicks, impressions, CTR, and position for a site. Supports filtering by query, page, device, or country and grouping by multiple dimensions.

Inputs: start_date (required), end_date (required), site_url, dimensions, +5 more.

gsc_sitemap_listA

List all sitemaps submitted to Google Search Console for a site, including their status, URL counts, and last submission date.

Inputs: site_url.

gsc_striking_distanceA

Find queries ranking in positions 4–20 (striking distance / low-hanging fruit). These are the best candidates for quick ranking improvements. Results sorted by impressions descending.

Inputs: start_date (required), end_date (required), site_url, min_position, +3 more.

gsc_traffic_dropA

Compare two date periods and identify pages or queries with significant traffic drops. Useful for diagnosing algorithm updates, technical issues, or content decay.

Inputs: current_start (required), current_end (required), previous_start (required), previous_end (required), +5 more.

gsc_url_inspectionA

Inspect a URL's indexing status in Google Search Console. Returns crawl date, indexing verdict, canonical URL, rich results eligibility, and mobile usability status.

Inputs: url (required), site_url.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 10 tools

    Disambiguation5/5

    Tools are cleanly separated by platform (Bing vs. Google Search Console) and each has a distinct purpose within its domain, such as crawl health, keyword research, or URL inspection. There is no ambiguity or overlap between tools.

    Naming Consistency5/5

    All tools follow a consistent pattern of 'platform_descriptive_name' in snake_case (e.g., bing_crawl_health, gsc_search_performance). This makes it easy to understand the purpose of each tool at a glance.

    Tool Count5/5

    With 10 tools, the server is well-scoped for an SEO assistant covering both Bing and Google Search Console. Each tool serves a clear function, and there are neither too few nor too many for the stated purpose.

    Completeness4/5

    The tool set covers core SEO workflows for both platforms, including search performance, URL inspection, sitemap listing, keyword research, and specific analyses like striking distance and traffic drops. Minor gaps exist, such as the lack of sitemap submission or cross-platform comparison, but the essentials are well-covered.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      A lightweight, fast MCP server for Google Search Console. Query search analytics, manage sitemaps, and inspect URLs directly from your AI assistant.
      7
      Apache 2.0
    • A
      license
      Not graded
      quality
      C
      maintenance
      An MCP server that connects AI assistants to SEO platforms like Google Search Console, GA4, Bing Webmaster Tools, and Adobe Analytics, enabling natural language queries about SEO performance.
      1,377 npm
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that provides Google Analytics and Search Console data as tools for AI assistants, enabling natural language queries for web analytics, SEO performance, and site insights.
      13
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Self-hosted MCP server that connects Google Search Console to AI assistants, enabling natural language queries about search analytics, sitemaps, and URL inspection data.
      MIT