Skip to main content
Glama

seoclaude

An MCP server that gives Claude (Claude Code, Claude Desktop or any MCP client) your SEO data and the tools to act on it: Google Search Console, Google Analytics 4, Bing Webmaster Tools, IndexNow, PageSpeed Insights, AdSense and Google Ads Keyword Planner, plus live technical SEO audits of your pages.

Ask in plain language — "when did search traffic drop, and which pages lost it?", "are my canonicals and hreflang set up right?", "how much traffic comes from ChatGPT?" — and Claude pulls the numbers live and works out the answer.

Nothing is stored: every question is answered from the APIs in real time. The only things kept on disk are your Google OAuth token and any API keys you add, in ~/.config/seoclaude/.

Tools

Search Console

Tool

What it does

list_sites

Every Search Console property you can access

search_analytics

Clicks, impressions, CTR and position by query, page, country, device, date or search appearance

compare_periods

Two date ranges side by side, with the biggest gainers and losers

find_opportunities

Quick wins: low CTR for the position, queries ranking 8–20 (striking distance), keyword cannibalization

detect_drops

Finds sudden shifts in the daily series (e.g. impressions −93% from one week to the next) and lists the pages and queries behind the largest one

inspect_url

Google's index status for a URL: coverage, user vs Google canonical, last crawl, rich results

bulk_inspect

URL Inspection over many URLs (a list, a sitemap sample or your top pages), summarized: coverage states, canonical mismatches, crawl dates

list_sitemaps

Submitted sitemaps with errors, warnings and submitted/indexed counts

submit_sitemap

Submits or resubmits a sitemap

Technical audits (no account needed)

Tool

What it does

audit_page

Fetches a live page and checks redirect chain, status, noindex (meta and header), canonical (missing, multiple, other host, redirecting target), hreflang (self-reference, host, return links), title/description, lang and JSON-LD

audit_sitemap

Checks every sitemap URL is on one host, then audits an evenly spaced sample of pages and groups the issues

pagespeed

PageSpeed Insights: category scores, Core Web Vitals field data (CrUX) for page and origin, lab metrics, top opportunities, failing SEO/accessibility audits

Google Analytics 4

Tool

What it does

ga_list_properties

Every GA4 property you can access

ga_report

Any GA4 dimensions and metrics: channels, landing pages, conversions, revenue…

ga_realtime

Activity in the last 30 minutes

page_performance

Search Console and GA4 joined per page; flags low CTR, low engagement, and search clicks with no GA sessions (a tracking gap)

ai_traffic

Traffic from AI assistants (ChatGPT, Perplexity, Claude, Gemini, Copilot, DeepSeek, Grok and more), matched by source: totals, share, per-assistant breakdown, landing pages, daily trend

Bing and IndexNow

Tool

What it does

bing_list_sites

Your Bing Webmaster Tools sites

bing_report

Bing queries and pages, daily traffic, crawl stats and crawl issues

bing_submit

Submits a sitemap and/or URLs to Bing, returns the remaining quota

indexnow_submit

Sends URLs, or a whole sitemap, to IndexNow (Bing, Yandex, Seznam, Naver…), after checking the key file is live

AdSense and Google Ads

Tool

What it does

adsense_list_accounts

AdSense accounts and their sites

adsense_report

Any AdSense dimensions and metrics: earnings, RPM, page views, by page, country, ad unit…

page_revenue

AdSense earnings joined with Search Console per page; flags high-RPM pages ranking 8–20 or with low CTR

ads_list_accounts

Google Ads accounts you can access

ads_keyword_ideas

Keyword Planner ideas from seed keywords or a URL: monthly searches, 12-month trend, competition, bid range

ads_keyword_volume

Search volume, trend, competition and bids for an exact keyword list

ads_query

Read-only GAQL queries (paid vs organic, search terms, campaigns…)

The AdSense and Google Ads tools are new and have not yet been tested against live accounts. Reports are welcome.

Related MCP server: Google Search Console MCP Server

Setup

You need Node.js 20 or newer and a Google Cloud OAuth client of your own (free, about five minutes). Only the Google services you enable are used; everything else is optional.

1. Create a Google OAuth client

  1. In the Google Cloud Console, create a project (or pick one).

  2. Under APIs & Services → Library, enable the APIs you want:

    • Google Search Console API

    • Google Analytics Data API and Google Analytics Admin API

    • PageSpeed Insights API

    • AdSense Management API (optional)

    • Google Ads API (optional)

  3. OAuth consent screen: user type External; add your own Google account under Test users.

  4. Credentials → Create credentials → OAuth client ID → Application type: Desktop app.

  5. Download the JSON and save it as ~/.config/seoclaude/credentials.json (or set GSC_CLIENT_ID and GSC_CLIENT_SECRET).

While the app is in Testing, Google expires the refresh token every 7 days and you will need to sign in again. To avoid that, set the consent screen to In production; for personal use no verification is needed, you just click through a warning.

2. Sign in

npx seoclaude auth

A browser window opens; approve access with the Google account that owns your properties. It asks for read-only access to GA4 and AdSense, the openid scope PageSpeed Insights uses for quota, and full Search Console access. Google has no narrower scope that allows submitting sitemaps; seoclaude only writes to Search Console when you call submit_sitemap.

3. Connect it to Claude

Claude Code

claude mcp add seoclaude -- npx -y seoclaude

Claude Desktop: add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "seoclaude": {
      "command": "npx",
      "args": ["-y", "seoclaude"]
    }
  }
}

4. Optional: other services

Keys for non-Google services, and Google Ads settings, are read from environment variables or from ~/.config/seoclaude/config.json:

{
  "bingApiKey": "",
  "indexNowKey": "",
  "pagespeedApiKey": "",
  "googleAdsDeveloperToken": "",
  "googleAdsLoginCustomerId": "",
  "googleAdsCustomerId": "",
  "googleAdsApiVersion": ""
}

Setting

Env var

Where to get it

bingApiKey

BING_API_KEY

Bing Webmaster Tools → Settings → API access → API key

indexNowKey

INDEXNOW_KEY

Make one up (8–128 characters of a-z A-Z 0-9 -) and publish it on your site at /<key>.txt, containing only the key

pagespeedApiKey

PAGESPEED_API_KEY

Not needed: without it, PageSpeed calls use your Google sign-in. Set one only if you prefer a key

googleAdsDeveloperToken

GOOGLE_ADS_DEVELOPER_TOKEN

See below

googleAdsLoginCustomerId

GOOGLE_ADS_LOGIN_CUSTOMER_ID

Your manager account ID, e.g. 123-456-7890

googleAdsCustomerId

GOOGLE_ADS_CUSTOMER_ID

The ad account tools use by default (ads_list_accounts lists them)

googleAdsApiVersion

GOOGLE_ADS_API_VERSION

Defaults to v26; set a newer one when Google sunsets it

Restart the MCP server after changing these.

Google Ads

The ads_* tools need a developer token on top of OAuth:

  1. Open or create a Google Ads manager account (free).

  2. In the manager account, go to Admin → API Center and request a developer token. Higher access levels are needed for real data; apply from the same page if your token is limited to test accounts.

  3. Put the token (and your manager account ID) in config.json.

  4. Sign in again with Google Ads access: npx seoclaude auth --ads. Ads access is only requested when you ask for it, because Google's consent screen words it as managing your campaigns.

Example questions

  • "Which sites do I have?"

  • "Top 20 queries on example.com in the last 28 days?"

  • "When did search traffic drop, and which pages lost it?"

  • "Find quick SEO wins."

  • "Audit example.com's sitemap for technical SEO problems."

  • "Summarize the index status of my 50 most-shown pages."

  • "Is https://example.com/blog/x indexed? What canonical did Google pick?"

  • "How much traffic do ChatGPT and other AI assistants send?"

  • "Which pages show up in Google but don't get clicked, or get clicked and abandoned?"

  • "Mobile Core Web Vitals for the home page?"

  • "Resubmit the sitemap and send all its URLs to IndexNow."

  • "Monthly search volume for these keywords in Turkey?"

Notes

  • Search Console data is finalized with a ~3 day delay; by default the last 28 finalized days are used. CTR is returned as a percentage.

  • URL Inspection allows 2,000 inspections per property per day and 600 per minute; bulk_inspect counts against it.

  • Search Console has no API for the Request indexing button.

  • Google does not take part in IndexNow; for Google, sitemaps and Search Console are the route.

  • audit_page and audit_sitemap fetch pages with a plain HTTP client and don't run JavaScript, so they see the server-rendered HTML.

Development

git clone https://github.com/muhammeddilaver/seoclaude.git
cd seoclaude
npm install
npm run build
node dist/index.js auth
claude mcp add seoclaude -- node "$PWD/dist/index.js"

License

MIT

Available Tools

28 tools
adsense_list_accountsList AdSense accountsA
Read-only

AdSense accounts the signed-in Google account can access, with their sites and approval state.

Inputs: no named parameters.

adsense_reportAdSense reportC
Read-only

AdSense report with any dimensions and metrics (e.g. dimensions: DATE, MONTH, DOMAIN_NAME, PAGE_URL, COUNTRY_NAME, PLATFORM_TYPE_NAME, AD_UNIT_NAME, AD_FORMAT_NAME; metrics: ESTIMATED_EARNINGS, PAGE_VIEWS, PAGE_VIEWS_RPM, IMPRESSIONS, IMPRESSIONS_RPM, CLICKS, COST_PER_CLICK, PAGE_VIEWS_CTR, AD_REQUESTS_COVERAGE, ACTIVE_VIEW_VIEWABILITY).

Inputs: limit, account, endDate, filters, +5 more.

ads_keyword_ideasKeyword ideas (Keyword Planner)A
Read-only

Google Ads Keyword Planner ideas from seed keywords and/or a page URL: average monthly searches, 12-month trend, competition and top-of-page bid range. Shows demand for topics a site does not rank for yet, which Search Console cannot. Requires a developer token with Basic access for real volumes.

Inputs: url, limit, keywords, language, +2 more.

ads_keyword_volumeKeyword search volumeA
Read-only

Average monthly searches, 12-month trend, competition and bid range for an exact list of keywords (e.g. the queries a page already ranks for in Search Console).

Inputs: keywords (required), language, countries, customerId.

ads_list_accountsList Google Ads accountsA
Read-only

Google Ads accounts the signed-in user can access: ID, name, currency, whether it is a manager or test account.

Inputs: no named parameters.

ads_queryGoogle Ads query (GAQL)B
Read-only

Runs a read-only Google Ads Query Language query. Examples: paid vs organic for the same query (needs Ads linked to Search Console) — SELECT paid_organic_search_term_view.search_term, metrics.organic_clicks, metrics.organic_impressions, metrics.clicks, metrics.impressions FROM paid_organic_search_term_view WHERE segments.date DURING LAST_30_DAYS; search terms that triggered ads — SELECT search_term_view.search_term, metrics.clicks, metrics.cost_micros, metrics.conversions FROM search_term_view WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.clicks DESC; campaigns — SELECT campaign.name, campaign.status, metrics.clicks, metrics.cost_micros FROM campaign WHERE segments.date DURING LAST_30_DAYS. cost_micros / 1,000,000 = account currency.

Inputs: query (required), limit, customerId.

ai_trafficAI assistant trafficB
Read-only

GA4 sessions referred by AI assistants (ChatGPT, Perplexity, Claude, Gemini, Copilot, DeepSeek, Grok, Meta AI and others), matched by session source rather than GA4's channel grouping, which misses some of them. Returns totals, share of all sessions, a per-assistant breakdown, top landing pages and a daily trend.

Inputs: property (required), top, endDate, startDate.

audit_pageAudit pageA
Read-only

Fetches a live URL and checks technical SEO signals: redirect chain, status, noindex (meta and X-Robots-Tag), canonical (missing, multiple, other host, redirecting target), hreflang (self-reference, host, return links), title/description length, html lang and JSON-LD validity. Returns the parsed signals plus a list of issues.

Inputs: url (required), checkHreflang, checkCanonicalTarget.

audit_sitemapAudit sitemapA
Read-only

Reads a sitemap (or sitemap index), checks that every URL is on one host, then audits an evenly spaced sample of pages with audit_page and summarizes issues by type. Catches sitewide problems such as canonicals pointing to a redirecting host or sitemap URLs that redirect.

Inputs: sitemapUrl (required), sampleSize, checkHreflang.

bing_list_sitesList Bing Webmaster sitesA
Read-only

Lists the sites in Bing Webmaster Tools for the configured API key (BING_API_KEY).

Inputs: no named parameters.

bing_reportBing Webmaster reportA
Read-only

Bing search and crawl data: top queries or pages (clicks, impressions, CTR %, position summed over the range), daily site traffic, daily crawl stats (pages crawled, crawl errors, pages in index) or the current crawl issues. Bing's index also feeds several AI search products, so this complements Search Console.

Inputs: report (required), siteUrl (required), top, endDate, +1 more.

bing_submitSubmit to BingB
Idempotent

Submits a sitemap and/or a batch of URLs to Bing Webmaster Tools, and returns the remaining daily URL quota.

Inputs: siteUrl (required), urls, sitemapUrl.

bulk_inspectBulk URL inspectionA
Read-only

Runs URL Inspection on many URLs and summarizes Google's index status: coverage states, verdicts, user vs Google canonical mismatches and last crawl dates. URLs come from an explicit list, a sitemap (evenly sampled) or the pages with the most impressions. Quota: 2,000 inspections per property per day, 600 per minute.

Inputs: siteUrl (required), urls, limit, source, +4 more.

compare_periodsCompare two periodsB
Read-only

Compares performance between two date ranges by a dimension and returns overall totals plus the biggest gainers and losers by clicks. The previous range defaults to the equal-length period right before the current one.

Inputs: siteUrl (required), top, type, endDate, +5 more.

detect_dropsDetect traffic drops and risesA
Read-only

Scans the daily Search Console series for sudden level shifts (e.g. impressions falling 90% from one week to the next), then for the largest shift lists the pages and queries that moved most across it. Use it first when traffic looks wrong, to find when it changed and what changed.

Inputs: siteUrl (required), top, type, metric, +4 more.

find_opportunitiesFind SEO opportunitiesA
Read-only

Surfaces quick wins: page-one queries/pages with CTR far below the benchmark for their position (low_ctr), queries ranking 8–20 that could reach the top of page one (striking_distance), and queries where several pages compete for the same impressions (cannibalization).

Inputs: siteUrl (required), top, kinds, endDate, +3 more.

ga_list_propertiesList Google Analytics propertiesA
Read-only

Lists every GA4 property (with its account) the signed-in Google account can access.

Inputs: no named parameters.

ga_realtimeGoogle Analytics realtimeB
Read-only

Activity in the last 30 minutes (e.g. dimensions: unifiedScreenName, country, deviceCategory, eventName; metrics: activeUsers, screenPageViews, eventCount).

Inputs: property (required), limit, metrics, dimensions.

ga_reportGoogle Analytics reportB
Read-only

Runs a GA4 report with any GA4 Data API dimensions and metrics (e.g. dimensions: date, landingPage, pagePath, sessionDefaultChannelGroup, sessionSourceMedium, country, deviceCategory, eventName; metrics: sessions, activeUsers, newUsers, screenPageViews, engagementRate, averageSessionDuration, bounceRate, conversions, keyEvents, totalRevenue). Returns rows plus metric totals.

Inputs: property (required), limit, endDate, filters, +4 more.

indexnow_submitSubmit URLs to IndexNowA
Idempotent

Notifies IndexNow engines (Bing, Yandex, Seznam, Naver…) of new or changed URLs, from a list or a whole sitemap. Google does not use IndexNow. Needs a key (INDEXNOW_KEY or indexNowKey in config.json) served as a text file on the site, by default at /.txt; the file is checked before anything is sent.

Inputs: key, urls, sitemapUrl, keyLocation.

inspect_urlInspect URLB
Read-only

Google's index status for a URL: coverage, canonical, last crawl, mobile usability and rich results.

Inputs: url (required), siteUrl (required), languageCode.

list_sitemapsList sitemapsA
Read-only

Submitted sitemaps with their last download time, warnings, errors and submitted/indexed URL counts.

Inputs: siteUrl (required).

list_sitesList Search Console propertiesB
Read-only

Lists every Search Console property the signed-in Google account can access.

Inputs: no named parameters.

page_performancePage performance (Search Console + GA4)A
Read-only

Joins Search Console (impressions, clicks, CTR, position) with GA4 (sessions, engagement, duration, key events) per page path, and flags pages with low CTR for their position, low engagement, or search clicks but no GA sessions (often a tracking gap).

Inputs: siteUrl (required), property (required), top, endDate, +3 more.

page_revenuePage revenue (AdSense + Search Console)A
Read-only

Joins AdSense earnings per page with Search Console performance for the same URLs, and flags revenue opportunities: pages with above-median page RPM that rank 8–20 (moving up pays off most) or have low CTR for their position. Earnings cover all traffic to the page, not only search.

Inputs: siteUrl (required), top, account, endDate, +2 more.

pagespeedPageSpeed InsightsA
Read-only

Runs PageSpeed Insights (Lighthouse) for a URL: category scores, Core Web Vitals field data from CrUX for the page and origin (real users, when there is enough traffic), lab metrics, the biggest performance opportunities and failing SEO/accessibility/best-practice audits. Takes 10–40 seconds.

Inputs: url (required), strategy, categories.

search_analyticsSearch performanceB
Read-only

Clicks, impressions, CTR (%) and average position, grouped by the chosen dimensions. Omit dimensions for site totals.

Inputs: siteUrl (required), type, endDate, filters, +3 more.

submit_sitemapSubmit sitemapA
Idempotent

Submits or resubmits a sitemap to Search Console so Google re-reads it (e.g. after fixing canonical or URL problems). Note: there is no API for the 'Request indexing' button.

Inputs: siteUrl (required), sitemapUrl (required).

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 28 tools

    Disambiguation4/5

    Most tools target a distinct platform+action (e.g. ga_report vs bing_report vs adsense_report, inspect_url vs audit_page vs bulk_inspect), so selection is usually clear. Minor overlap exists among analytical tools that all flag low CTR or opportunities (find_opportunities, page_performance, page_revenue), and between ads_keyword_ideas and ads_keyword_volume, but descriptions differentiate them adequately.

    Naming Consistency4/5

    Nearly all names are snake_case and mostly verb_noun (list_sites, submit_sitemap, inspect_url, ga_report). The main deviation is inconsistent platform prefixing: some are prefixed (ga_, bing_, adsense_, ads_, indexnow_) while parallel operations like list_sites lack a prefix and pagespeed is a bare noun, but it stays readable.

    Tool Count3/5

    28 tools is heavy and sits at the upper bound of comfortable scoping, but the server legitimately spans six platforms (Search Console, GA4, PageSpeed, Bing, AdSense, Google Ads), so most tools earn their place rather than being redundant.

    Completeness4/5

    Coverage across Search Console, GA4, PageSpeed, Bing, AdSense and Ads is broad, with read/analysis plus some write (sitemap submit, IndexNow, Bing submit). Gaps are mostly external-API limits (no indexing-request API, no backlink data, no CRUD for ads), which agents can work around.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      Connects Google Search Console with Claude AI to enable SEO professionals to analyze their SEO data through natural language conversations, providing access to property information, search analytics, URL inspection, and sitemap management.
      9,955 PyPI
      2,156
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects Google Search Console with Claude AI to analyze SEO data through natural language, enabling search analytics reporting, URL inspection, indexing status checks, sitemap management, and data visualization for SEO professionals.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables Claude to access Google Search Console data including search performance, URL indexation, sitemaps, and built-in SEO analysis tools such as trending queries, cannibalization detection, and traffic drop diagnostics.
      155 npm
      11
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables querying Google Search Console data, including search analytics, indexing status, and sitemap management, through natural language conversations with Claude.
      155 npm
      6
      MIT