AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Seo Monster

mcp-avansaber-seo-monster · by avansaber

SEOMonster: a local, user-credential-driven MCP server for SEO workflows over Google Search Console, GA4, PageSpeed Insights, and Cloudflare. Read-first, open source.

No reviews yet
0 installs
22 views
0.0% view→install

Install

$ agentstack add mcp-avansaber-seo-monster

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-avansaber-seo-monster)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Seo Monster? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Don't learn another SEO dashboard. Just ask.

The open-source SEO analyst that lives inside the AI assistant you already use —working from your own Search Console, Analytics, and PageSpeed data, on your machine.

 

 


You don't open a new tool — you just ask, in plain English, inside Claude (or Cursor / Cline / Codex):

> You   "What should I write about next?" > > 🦖 SEOMonster   Pulls your Search Console and surfaces three topics you're almost ranking for — positions 8–20 with real demand — ranked by opportunity. Say the word and it drafts the brief.

| You ask … | … SEOMonster does | | :-- | :-- | | "What should I write about next?" | Surfaces near-ranking topics from your own Search Console demand | | "Is this page ready to publish?" | Runs the technical-SEO + structured-data checks before you ship | | "Get this indexed." | Nudges Google (Indexing API) and Bing / Yandex (IndexNow) | | "Did my change actually move rankings?" | Before/after attribution vs a matched control group — with a confidence interval, not a guess | | "Is ChatGPT recommending us, or our competitors?" | Tracks your brand's share of voice across the AI answer engines |

70 tools across Search Console, GA4, PageSpeed, Cloudflare, AI-citation tracking, keyword discovery, and technical SEO — every one returning the same JSON result envelope, every one driven by your own credentials. No new dashboard to learn; you chat with the assistant you already use.

> [!NOTE] > Published on PyPI as seo-monster (so the command is uvx seo-monster). The import package is seo_mcp; seo-mcp is a dev/local alias. The package ships zero secrets — every credential is resolved at runtime from your own environment or config file.

  • Your data, your machine. User-credential-driven; nothing is sent to any third party.
  • Read-first, safe by default. Reads always work; the two routine writes (sitemap submit, indexing request) are on by default; the Cloudflare write tools (cache purge, redirects, settings, managed robots.txt) are gated behind SEO_MCP_ALLOW_DESTRUCTIVE, and the riskier ones also need a per-call confirm token.
  • Lean. Standard library + the mcp SDK + the Google client libraries; PageSpeed and Cloudflare ride on urllib, no extra HTTP dependency.

Quickstart

> [!TIP] > Fastest path: the one-click install buttons above. Or add it to any MCP client by hand:

{
  "mcpServers": {
    "seomonster": { "command": "uvx", "args": ["seo-monster"] }
  }
}

Run the one-time Google sign-in once — uvx --from seo-monster seo-monster auth — then ask your assistant to call system_status to confirm what's connected. Full per-client setup and credentials are in [Install](#install) and [Auth](#auth).

How it works

flowchart LR
  U["You — plain English"] --> H["Claude · Cursor · Cline · Codex"]
  H -- "MCP · stdio" --> S["SEOMonster70 tools"]
  S --> GSC["Search Console · GA4"]
  S --> PSI["PageSpeed · CrUX"]
  S --> CF["Cloudflare · IndexNow"]
  S --> AI["AI engines · SERP(optional)"]
  S -. "your creds · your machine" .-> U

SEOMonster is a stdio MCP server: your AI host launches it, it calls Google / Cloudflare / the AI engines with your credentials, and returns a consistent JSON envelope the assistant reads back to you in plain language.

Requirements

For the .mcpb bundle path (Claude Desktop): just Claude Desktop on macOS or Windows. The bundle declares Python 3.11+ as a runtime; Claude Desktop materializes the environment for you. No prior uv install needed.

For the uvx path (Cursor, Cline, Codex, advanced Claude Desktop): Python 3.11 or newer plus uv (which provides uvx). Find the absolute path to uvx with which uvx; GUI hosts do not read your shell profile, so MCP configs need the full path.

Tools

70 tools, grouped by service. All return the same result envelope (see [Result envelope](#result-envelope)). Call system_status first if unsure what is configured. The server also publishes thirteen named [workflow prompts](#workflow-prompts).

Cross-service

  • system_status - which services are configured/reachable, the Google auth

method and scopes, whether destructive mode is on, the full tool catalog, and the list of registered prompts.

📂 Browse all 70 tools — grouped by service (GSC · GA4 · AI/GEO · keyword discovery · content · PageSpeed/CrUX · Cloudflare · IndexNow · technical · schema). Click to expand.

Google Search Console (18)

Workhorses

  • gsc_list_properties - properties the credentials can see, with permission

level and a derived writable flag (true for siteOwner / siteFullUser).

  • gsc_search_analytics - the workhorse: clicks/impressions/CTR/position by

dimensions, date range, filters, and data_state.

  • gsc_top_queries / gsc_top_pages - convenience top-N wrappers.
  • gsc_compare_periods - current vs prior window with per-key deltas.

v0.2.0 added sort_by, sort_dir, min_delta_clicks / _impressions / _position, anomalies_only + sigma_threshold, and top for one-call movers / losers / outliers reporting.

  • gsc_inspect_url - URL Inspection (index verdict, coverage, canonicals).
  • gsc_batch_inspect_urls - inspect up to 25 URLs, per-URL failures collected.
  • gsc_list_sitemaps - registered sitemaps and their status.
  • gsc_submit_sitemap - submit a sitemap (write, un-gated; needs the writable

scope). Accepts either sitemap_url (friendly) or feedpath (raw API field).

  • gsc_request_indexing - request (re)crawl via the Indexing API (write,

un-gated). Accepts singular url or urls.

Query intelligence (v0.2.0)

  • gsc_query_opportunities - queries already ranking top N with below-target

CTR. Title and meta optimization candidates.

  • gsc_query_gaps - queries that draw impressions but barely any clicks.

Content opportunity signal.

  • gsc_new_queries - queries appearing in the current window with no prior

impressions. Emerging topics.

  • gsc_top_pages_by_query - which pages rank for a specific query. The

cannibalization audit input.

Multi-property + lifecycle (v0.5.0)

  • gsc_portfolio_summary(days, include?, exclude?) - multi-property fleet

view. Per-property one-row summary (clicks, impressions, CTR, position) for the last N days, plus a portfolio-level rollup. Honors optional include / exclude filters. The single fastest answer to "how is the whole portfolio doing?" across agency or multi-brand setups.

  • gsc_trending_pages(days, limit) - pages whose impressions grew most over

the last N days vs the prior N days. Wrapper on gsc_compare_periods with dimensions=["page"], sort_by="delta_impressions", sort_dir="desc".

  • gsc_decaying_pages(days, limit) - same wrapper, ascending sort. Pages

to rescue.

  • gsc_coverage_audit(urls, site_url?) - heuristic coverage audit. The GSC

Index Coverage report is not exposed in the API; this tool takes a user- supplied URL list (typically pulled from a sitemap) and bulk-inspects each, then rolls up verdicts (PASS / PARTIAL / FAIL) and coverage_state frequencies.

Content intelligence (4)

  • content_opportunities(site_url?, days?, count?, impressions_min?) - ranks

data-grounded content topics from your own Search Console data: fuses CTR-vs-expected gap (curve self-calibrated from your own per-position CTR), striking-distance position, demand, and momentum into a transparent opportunity score; flags cannibalization. If a GA4 property is configured, it also weights each topic by the organic conversions its top page already drives (up to +50%), so topics that convert rank higher; filters_applied.ga4_value_status reports whether that ran and why (applied / no_ga4_property / ga4_unreachable / no_conversions). Prioritizes demand you already have; does not do cold-start keyword research or write the content. Pairs with the content workflow prompts below. (GA4 weighting v0.7.3) v0.9.0 adds an additive per-candidate winnability block (banded: striking-distance + topical- proximity, GSC-personalization tier; existing fields unchanged).

  • content_brief_data(target_query, competitor_urls?, topic?, site_url?, days?) -

data-wired backing for a content brief: fetches the competitor pages (or your own GSC-ranking pages as a fallback) and returns the heading union, median word-count floor, schema types, and entity coverage, plus the 2026 GEO writing directives and validation rules. The host writes the prose; SEOMonster brings rules + evidence. Backs the content_brief prompt. (v0.9.0)

  • topic_cluster_map(cluster_path | pillar_url, site_url?, days?, impressions_min?)
  • maps a content cluster from your own GSC data and surfaces missing subtopics.

Classifies each cluster query into defend / optimize / create / monitor by demand and best position; the create quadrant is your missing-subtopic list. Flags cannibalization. GSC-only; honest about the ~47% query anonymization. (v0.9.0)

  • rank_change_attribution(url | urls, change_date, query?, site_url?, pre_days?, post_days?, gap_days?, control_scope?)
  • estimates whether an on-site change moved a page's clicks via

difference-in-differences against a matched control group (never a naked before/after). Returns an estimated lift with a 95% CI, a three-state verdict (likelypositive / likelynegative / inconclusive), and a confounders block that auto-detects the 2025 GSC data-regime breaks (impression bug, num=100) and downgrades position reliability. Observational, not causal -- a server-side split test is the only true causal test. GSC-only. (v0.9.0)

AI / GEO citation (3, v0.9.0) - whether the AI answer surfaces reach and cite you.

  • ai_citation_readiness(url) - is a page structured to be extracted/cited by

LLM answer engines? Leads with a render-blindness check (GPTBot / ClaudeBot / PerplexityBot fetch but do not run JS, so a client-rendered SPA is invisible to them), then scores evidence-backed signals (statistics, quotations, cited sources, no keyword-stuffing). schema.org / FAQ / llms.txt are reported as informational only -- the 2026 evidence does not support them as AI-citation drivers, so they are not scored. Free, HTTP-only.

  • ai_referral_overview(property_id?, site_url?, days?) - first-party AI traffic:

GA4 referral sessions from AI apps (the native ai-assistant channel plus a configurable source-host regex) and AI-crawler robots coverage (GPTBot, ClaudeBot, PerplexityBot, ...). Surfaces the ~70% dark-traffic undercount and keeps AI-Overview clicks (counted as Organic) separate. Free.

  • ai_citation_track(prompts, brand, brand_domains?, competitors?, engines?, samples?)
  • sampled brand mention + citation share-of-voice across AI engines

(Perplexity / OpenAI / Anthropic / Gemini APIs + Google AI Overviews via DataForSEO) for a managed prompt set, vs competitors. N samples/prompt (default 7) with a 95% CI, share-of-voice, and run-to-run volatility -- NOT an "AI rank" (single runs are statistically meaningless). Discloses that developer-API output differs from the logged-in consumer UI and that AIO has no API. Paid + non-deterministic. Needs at least one engine key and/or DataForSEO.

Keyword discovery (3, v0.9.0) - find terms you don't already rank for.

  • gsc_keyword_expand(candidates, site_url?, days?, impressions_min?) - you

(the host) brainstorm candidate terms from your winning queries; this grounds each against your own Search Console data (footprint covered / thin / none) with a sibling-strength confidence band. "none" = no VISIBLE footprint (GSC hides ~75% of impressions), so net-new terms are scored hypotheses. Free.

  • serp_adjacency_expand(seeds, include_paa?) - expand seed terms into adjacent

terms. FREE core: Google Autocomplete (no key). Optional People-Also-Ask + related searches via DataForSEO. Returns per-seed suggestions plus the aggregated net-new terms; degrades gracefully without a key.

  • keyword_universe(target_domain?, competitors?, keywords?, limit?) - optional,

paid. Core value: the competitor keyword GAP (DataForSEO Domain Intersection; no Google equivalent). Optional search volume / difficulty / intent via a provider chain (DataForSEO, else Google Ads volume-only). External volume is a degraded directional signal -- a tiebreaker, never a gate.

Google Analytics 4 (7)

  • ga4_run_report - the workhorse: arbitrary dimensions/metrics/date range,

optional dimension filter and ordering.

  • ga4_top_landing_pages - top landing pages, organic-only by default.
  • ga4_traffic_by_channel - sessions/engagement/conversions by channel group.
  • ga4_organic_search_overview - organic totals plus a day-by-day trend.
  • ga4_setup_audit(property_id?) - read-only SEO-measurement-readiness audit:

web data stream, key events, data retention, content-group dimensions, and (v0.7.4) enhanced measurement, internal site search, and Google Signals. Severity-graded with a benign exception per finding. Uses the GA4 Admin API over REST (analytics.readonly; no extra dependency). (v0.7.0)

  • ga4_site_search(days?, limit?) - internal site-search query report (a

direct content-gap signal); honest envelope when no real search terms. (v0.7.1)

  • ga4_landing_page_conversions(days?, organic_only?, limit?) - organic

landing pages ranked by conversions. (v0.7.1)

PageSpeed Insights (2)

  • psi_analyze - Lighthouse scores, lab Core Web Vitals, and field (CrUX) Core

Web Vitals for a URL. Defaults to the mobile strategy. Field data carries a field_data_note: Google is deprecating PSI field data, so use crux_snapshot / crux_history for durable field metrics.

  • psi_opportunities(url, strategy?) - the actionable Lighthouse "opportunity"

audits (with estimated savings) plus the SEO-category audits, severity-graded. Lab data only. An on-page-basics checklist, not a ranking predictor. (v0.7.1)

Cloudflare (13)

  • cf_list_zones - zones the token can see.
  • cf_zone_info - status, plan, name servers for a zone.
  • cf_list_dns - DNS records (read-only); useful for verifying canonical host

and TXT verification records during migrations.

  • cf_web_analytics - read-only edge Web Analytics (RUM), to compare against

GA4. Cloudflare returns host: null for some sites; pass the site_tag to look those up explicitly.

  • cf_purge_cache - purge specific URLs (gated).
  • cf_purge_cache_all - purge an entire zone (gated + confirm token).
  • cf_settings_audit(zone?) - read-only audit of SEO-relevant Cloudflare zone

settings (SSL mode, Always-Use-HTTPS, HSTS, Automatic HTTPS Rewrites, Brotli, cache TTL). Severity-graded with a "verify, not fail" discipline because CF cannot see the origin; HSTS is never a hard failure. Needs Zone Settings Read on the token. Each finding carries a machine-readable fix hint (the exact cf_settings_update setting + recommended value) to chain audit -> fix. (v0.7.1)

  • cf_settings_update(settings, zone?, confirm?, acknowledge_hsts_risk?, dry_run?)
  • write the SEO/crawl/security settings the audit grades (SSL mode, Always-Use-

HTTPS, Automatic HTTPS Rewrites, Brotli, browser cache TTL, HSTS), closing the audit -> remediate loop. Gated. ssl_mode or any HSTS-raise needs confirm= (HSTS-raise also needs acknowledge_hsts_risk=true); validates locally, supports dry_run, and re-runs the audit so you see the finding clear. Needs Zone Settings:Edit (vs the audit's Read). (v0.7.10)

  • cf_list_redirects(zone?) - list a zone's single (dynamic) redirect rules

plus the account's Bulk Redirect lists (read-only). Call before any redirect write so nothing is clobbered. (v0.7.8; bulk lists added v0.7.9)

  • cf_create_redirect(source, target, status_code?, ...) - create one edge

redirect (e.g. a

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.