SEOMonster

SEO analysis from your own Search Console, GA4, PageSpeed and Cloudflare accounts

By AvanSaber Inc Python Local · stdio Data and analyticsCloud platforms

51 popularity score ★ 501 ↓ 826/mo

Connect your client

Local (PyPI)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
uvx seo-monster setup
uvx seo-monster auth
Claude CodeTerminal
claude mcp add seomonster -- uvx seo-monster
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "seomonster": {
      "command": "uvx",
      "args": [
        "seo-monster"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "seomonster": {
      "command": "uvx",
      "args": [
        "seo-monster"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "seomonster": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "seo-monster"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.seomonster]
command = "uvx"
args = ["seo-monster"]
Gemini CLITerminal
gemini mcp add --scope user seomonster uvx -- seo-monster

Settings 12

SEO_MCP_GOOGLE_OAUTH_CLIENT Optional: Path to the Google Desktop-app OAuth client-secrets JSON; needed for the Search Console and GA4 tools.
SEO_MCP_GOOGLE_TOKEN Optional: Writable path where the Google token from `seo-monster auth` is cached.
SEO_MCP_GOOGLE_CREDENTIALS Optional: Service-account key path, an alternative to OAuth (GOOGLE_APPLICATION_CREDENTIALS also read).
SEO_MCP_GSC_DEFAULT_SITE Optional: Default Search Console property, e.g. sc-domain:example.com.
SEO_MCP_GA4_PROPERTY_ID Optional: Default GA4 property, e.g. properties/123456789.
PSI_API_KEY Optional: PageSpeed Insights key; also used for CrUX. Optional but the anonymous quota is often exhausted.
CF_API_TOKEN Optional: Cloudflare API token for the cf_ tools.
CF_ZONE Optional: Default Cloudflare zone hostname.
SEO_MCP_INDEXNOW_KEY Optional: IndexNow key; the matching file must be served at https://<host>/<key>.txt.
SEO_MCP_ALLOW_DESTRUCTIVE Optional: Set true to enable Cloudflare purge, redirect and settings writes; off by default.
DATAFORSEO_LOGIN Optional: DataForSEO login (with DATAFORSEO_PASSWORD) for SERP, keyword and AI Overview data; paid.
SEO_MCP_CONFIG Optional: Path to the TOML config file; default ~/.config/seo-mcp/config.toml.

What it does

SEOMonster is a local Python server, published on PyPI as seo-monster, that puts a site's own search data within reach of an assistant. It reads Google Search Console and Google Analytics 4 with your Google sign-in, PageSpeed Insights and the Chrome UX Report, and Cloudflare zones with an API token, and can push URLs to Google's Indexing API and to IndexNow engines such as Bing and Yandex.

On top of the raw reports it adds analysis: near-ranking topics to write about, pages gaining or losing impressions, cannibalization checks, and a before-and-after estimate of whether a change moved clicks, measured against a control group. A set of technical checks (meta tags, canonicals, redirects, robots.txt, sitemaps, JSON-LD, hreflang, internal links) works on any public URL with no credentials. Optional paid keys add keyword volumes and competitor gaps through DataForSEO and tracking of how often AI engines mention a brand.

Version 0.9.3 registers 70 tools in server.py, plus thirteen workflow prompts. Its own install section still says the server exposes 52 tools, which is out of date. The ai_citation_track tool takes at most 50 prompts per call and runs 7 samples per prompt by default, up to 20 (ai_citation_tools.py); its README gives the default but not these caps.

What it needs

RuntimePython 3.11+

Python 3.11 or newer and uv (for uvx); GUI clients need the absolute path to uvx. For the Google tools: a Google Cloud project with the Search Console, Indexing and Analytics Data APIs enabled, a Desktop-app OAuth client, and a one-time `seo-monster auth` run from a terminal; the Google account must have access to the properties. Cloudflare tools need an API token; IndexNow needs a key and a verification file on your host. Claude Desktop users can install a .mcpb bundle instead.

Limits

Each service is optional: a tool for an unconfigured service returns AUTH_MISSING. The server never opens a browser, so Google sign-in must be done beforehand from a terminal. PageSpeed without PSI_API_KEY shares an anonymous quota that its docs say is often exhausted. internal_link_graph stays on one host, depth 2 and 50 pages by default, capped at 4 and 200. indexnow_bulk_submit takes one host per call. ai_citation_track and keyword_universe need paid third-party keys and the docs call AI results non-deterministic. The docs say the service-account path is not tested against a live project.

Who it suits

Suits site owners, SEO consultants and agencies who already use Search Console and GA4 and want to ask about their own data from an assistant, including across many properties, and those who run sites behind Cloudflare. The technical checks are useful with no setup at all. The Google setup (Cloud project, OAuth client, terminal sign-in) is real work, so someone wanting a quick keyword tool without their own site data will find little here beyond the paid DataForSEO tools. It is a community project, not made by Google or Cloudflare.

Tools 60 of 70

system_status
Reports which services are configured and reachable, the Google auth method, destructive-mode state and the tool list; optional live probe
gsc_list_properties
Lists Search Console properties the credentials can see, with permission level
gsc_search_analytics
Queries Search Console clicks, impressions, CTR and position by dimension, date range and filter
gsc_compare_periods
Compares a period with the prior one, with per-key deltas, sorting and anomaly filtering
gsc_inspect_url
Runs URL Inspection: index verdict, coverage state, canonicals
gsc_batch_inspect_urls
Inspects up to 25 URLs in one call
gsc_list_sitemaps
Lists the sitemaps registered for a property and their status
gsc_submit_sitemap
Submits a sitemap to Search Console (write, not gated)
gsc_request_indexing
Asks Google to crawl one or more URLs through the Indexing API (write, not gated)
gsc_query_opportunities
Finds queries ranking well whose CTR is below target
gsc_query_gaps
Finds queries with impressions but few clicks
gsc_new_queries
Finds queries that had no impressions in the prior window
gsc_top_pages_by_query
Shows which pages rank for a given query, for cannibalization checks
gsc_portfolio_summary
One-row summary per property plus a rollup across all properties
gsc_trending_pages
Pages whose impressions grew most against the prior period
gsc_decaying_pages
Pages whose impressions fell most against the prior period
gsc_coverage_audit
Bulk-inspects a supplied URL list and rolls up index verdicts
content_opportunities
Scores content topics from your Search Console data, optionally weighted by GA4 conversions
content_brief_data
Gathers headings, word counts, schema and entities from competitor pages for a content brief
topic_cluster_map
Maps a content cluster from Search Console queries and flags missing subtopics
rank_change_attribution
Estimates whether a site change moved clicks, using a matched control group and a 95% interval
ai_citation_readiness
Scores how well a page can be read and cited by AI answer engines, starting with a no-JavaScript check
ai_referral_overview
Reports GA4 sessions referred by AI apps and AI-crawler coverage in robots.txt
ai_citation_track
Samples brand mentions and citations across AI engine APIs for a prompt set, against competitors (paid keys)
gsc_keyword_expand
Checks candidate keywords against your existing Search Console footprint
serp_adjacency_expand
Expands seed terms through Google Autocomplete, plus People-Also-Ask with DataForSEO
keyword_universe
Finds competitor keyword gaps and volumes through DataForSEO or Google Ads (paid)
ga4_run_report
Runs a GA4 report with any dimensions, metrics, dates, filter and ordering
ga4_top_landing_pages
Top GA4 landing pages, organic only by default
ga4_traffic_by_channel
Sessions, engagement and conversions by channel group
ga4_setup_audit
Read-only audit of a GA4 property's measurement setup for SEO
ga4_landing_page_conversions
Ranks organic landing pages by conversions
psi_analyze
Runs PageSpeed Insights: Lighthouse scores plus lab and field Core Web Vitals, mobile by default
psi_opportunities
Lists Lighthouse improvement and SEO audits for a URL, graded by severity
cf_list_dns
Lists a zone's DNS records (read-only)
cf_web_analytics
Reads Cloudflare Web Analytics (RUM) data
cf_purge_cache
Purges given URLs from Cloudflare's cache (needs destructive mode)
cf_purge_cache_all
Purges a whole zone's cache (needs destructive mode and a confirm value)
cf_settings_audit
Audits SEO-relevant zone settings such as SSL mode, HSTS and Brotli
cf_settings_update
Changes those zone settings, with dry run and confirm checks (needs destructive mode)
cf_list_redirects
Lists a zone's single redirect rules and the account's bulk redirect lists
cf_create_redirect
Creates one edge redirect after checking the target (needs destructive mode)
cf_delete_redirect
Deletes a single redirect rule by id (needs destructive mode)
cf_bulk_redirect_upsert
Adds many redirects through a bulk redirect list; rejects the batch on any bad item (needs destructive mode)
cf_managed_robots
Reads or changes Cloudflare's managed robots.txt and AI-bot settings; changes need destructive mode
indexnow_submit
Sends one URL to IndexNow engines such as Bing and Yandex
indexnow_bulk_submit
Sends up to 10,000 same-host URLs to IndexNow in one request
inspect_meta
Reads a page's title, meta tags, canonical, Open Graph, hreflang and H1 count
check_canonical
Audits a page's canonical link for host, protocol and slash problems
redirect_chain_audit
Follows a redirect chain hop by hop and flags loops and downgrades
robots_txt_validate
Parses robots.txt, tests user-agent and URL pairs, and spots stale edge copies
sitemap_validate
Validates a sitemap or sitemap index and counts entries
robots_ai_posture
Suggests Content-Signal robots.txt lines for a business goal, offline
crux_history
Returns 25 weeks of Chrome UX Report Core Web Vitals
inspect_schema
Extracts the JSON-LD blocks on a page and counts schema.org types
validate_schema
Checks JSON-LD entities against Google rich-result required fields
hreflang_consistency_check
Checks hreflang reciprocity and targets across a set of URLs
internal_link_graph
Crawls one host to map internal links, orphans and broken links
internal_link_recommend
Suggests internal links to pages ranking in positions 8-20, with anchor text
onpage_serp_gap
Compares a page with top-ranking pages for missing headings, entities and schema

Similar servers