seoclaude
Provides tools for Google Ads: list accessible accounts, retrieve keyword ideas from seeds or a URL, get search volume, trend, competition, and bid ranges for exact keywords, and run read-only GAQL queries for paid vs organic and campaign analysis.
Provides tools for interacting with Google Analytics 4: list properties, run reports on dimensions and metrics (channels, landing pages, conversions, revenue), view realtime activity, join page performance with Search Console, and analyze traffic from AI assistants.
Provides tools for accessing Google Search Console data and managing properties: list sites, run search analytics by query, page, country, device, date, or search appearance; compare periods; find SEO opportunities and detect traffic drops; inspect URL index status and canonicals; bulk inspect URLs; list and submit sitemaps.
Provides a tool to fetch PageSpeed Insights data: category scores, Core Web Vitals field data (CrUX) for page and origin, lab metrics, top opportunities, and failing SEO/accessibility audits.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@seoclaude when did search traffic drop, and which pages lost it?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| Every Search Console property you can access |
| Clicks, impressions, CTR and position by query, page, country, device, date or search appearance |
| Two date ranges side by side, with the biggest gainers and losers |
| Quick wins: low CTR for the position, queries ranking 8–20 (striking distance), keyword cannibalization |
| 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 |
| Google's index status for a URL: coverage, user vs Google canonical, last crawl, rich results |
| URL Inspection over many URLs (a list, a sitemap sample or your top pages), summarized: coverage states, canonical mismatches, crawl dates |
| Submitted sitemaps with errors, warnings and submitted/indexed counts |
| Submits or resubmits a sitemap |
Technical audits (no account needed)
Tool | What it does |
| 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, |
| Checks every sitemap URL is on one host, then audits an evenly spaced sample of pages and groups the issues |
| 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 |
| Every GA4 property you can access |
| Any GA4 dimensions and metrics: channels, landing pages, conversions, revenue… |
| Activity in the last 30 minutes |
| Search Console and GA4 joined per page; flags low CTR, low engagement, and search clicks with no GA sessions (a tracking gap) |
| 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 |
| Your Bing Webmaster Tools sites |
| Bing queries and pages, daily traffic, crawl stats and crawl issues |
| Submits a sitemap and/or URLs to Bing, returns the remaining quota |
| 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 accounts and their sites |
| Any AdSense dimensions and metrics: earnings, RPM, page views, by page, country, ad unit… |
| AdSense earnings joined with Search Console per page; flags high-RPM pages ranking 8–20 or with low CTR |
| Google Ads accounts you can access |
| Keyword Planner ideas from seed keywords or a URL: monthly searches, 12-month trend, competition, bid range |
| Search volume, trend, competition and bids for an exact keyword list |
| 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
In the Google Cloud Console, create a project (or pick one).
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)
OAuth consent screen: user type External; add your own Google account under Test users.
Credentials → Create credentials → OAuth client ID → Application type: Desktop app.
Download the JSON and save it as
~/.config/seoclaude/credentials.json(or setGSC_CLIENT_IDandGSC_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 authA 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 seoclaudeClaude 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 |
|
| Bing Webmaster Tools → Settings → API access → API key |
|
| Make one up (8–128 characters of |
|
| Not needed: without it, PageSpeed calls use your Google sign-in. Set one only if you prefer a key |
|
| See below |
|
| Your manager account ID, e.g. |
|
| The ad account tools use by default ( |
|
| Defaults to |
Restart the MCP server after changing these.
Google Ads
The ads_* tools need a developer token on top of OAuth:
Open or create a Google Ads manager account (free).
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.
Put the token (and your manager account ID) in
config.json.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_inspectcounts 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_pageandaudit_sitemapfetch 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 toolsadsense_list_accountsList AdSense accountsARead-only
AdSense accounts the signed-in Google account can access, with their sites and approval state.
Inputs: no named parameters.
adsense_reportAdSense reportCRead-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)ARead-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 volumeARead-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 accountsARead-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)BRead-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 trafficBRead-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 pageARead-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 sitemapARead-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 sitesARead-only
Lists the sites in Bing Webmaster Tools for the configured API key (BING_API_KEY).
Inputs: no named parameters.
bing_reportBing Webmaster reportARead-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 BingBIdempotent
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 inspectionARead-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 periodsBRead-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 risesARead-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 opportunitiesARead-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 propertiesARead-only
Lists every GA4 property (with its account) the signed-in Google account can access.
Inputs: no named parameters.
ga_realtimeGoogle Analytics realtimeBRead-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 reportBRead-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 IndexNowAIdempotent
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 URLBRead-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 sitemapsARead-only
Submitted sitemaps with their last download time, warnings, errors and submitted/indexed URL counts.
Inputs: siteUrl (required).
list_sitesList Search Console propertiesBRead-only
Lists every Search Console property the signed-in Google account can access.
Inputs: no named parameters.
page_performancePage performance (Search Console + GA4)ARead-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)ARead-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 InsightsARead-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 performanceBRead-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 sitemapAIdempotent
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
Scored across 28 tools
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.
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.
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.
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
Related MCP Connectors
SEO research, Search Console, GA4 and PPC tools for Claude and ChatGPT.
Read-only Google Ads, GA4 and Search Console data for Claude, with no Google Cloud setup.
SEO audits, Search Console, GA4, keyword and backlink data for Claude, ChatGPT and Cursor.
GA4, Google Ads and Search Console in Claude. Read-only OAuth, multi-account for agencies.
Related MCP Servers
- AlicenseBqualityBmaintenanceConnects 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 PyPI2,156MIT
- AlicenseNot gradedqualityDmaintenanceConnects 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
- AlicenseNot gradedqualityDmaintenanceEnables 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 npm11MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying Google Search Console data, including search analytics, indexing status, and sitemap management, through natural language conversations with Claude.155 npm6MIT