Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.avansaber/seo-monster

PYPI · SEO-MONSTER

Local-first SEO MCP: track AI citations, Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX.

Available components

+15 this week 96 Trust /100

Last scanned (22 hours ago)

Scores higher than 98% of PyPI servers

Category Marketing and SEO

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 52 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to avansaber/seo-monster). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 67 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability83
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 10239 tokens (~146/item across 70 items; 70 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 70 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 1 Nov 26 0
    • Stability: 0.97 → pass security
  • 31 Oct 26 0
    • Stability: pass → 0.97 functional
  • 30 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 29 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 25 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
    • Stability: 0.97 → pass security
  • 24 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 21 Oct 26 +11
    • Provenance: unverified → pass ▲ security
    • The attested source repository moved: avansaber/seo-monster security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed pypi/seo-monster@0.9.3

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo avansaber/seo-monster
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/avansaber/seo-monster/.github/workflows/release.yml@refs/tags/v0.9.3
Rekor log index 2631377982
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:04f60b860b0878b2fc1f4fcb832ff2ce20dd7d0d5c9664c88b8c0c29c46f78bb

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 52 packages
Packages resolved 52
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 70 exposed · ~10,239 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ai_citation_readiness ~142

Score whether a page is structured to be extracted and cited by LLM answer engines (ChatGPT, Perplexity, Claude, Google AI Overviews). Leads with a render-blindness check (AI crawlers 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. Reports schema.org / FAQ as informational only -- the 2026 evidence does NOT support them as AI-citation drivers, so they are not scored. Read-only HTTP GET; does not guarantee a citation.

NameTypeReqDescription
urlstringyesAbsolute http(s) URL to assess.

No output schema declared.

No examples provided.

ai_citation_track ~254

Track brand mention + citation share-of-voice across AI answer engines (Perplexity/OpenAI/Anthropic/Gemini via their APIs, Google AI Overviews via DataForSEO) for a managed prompt set, vs competitors. Samples each prompt N times (default 7) and reports visibility with a 95% confidence interval, share-of-voice, and run-to-run volatility -- NOT an 'AI rank' (single runs are statistically meaningless). Honest bound: developer-API output differs from the logged-in consumer UI, and AIO has no API. Paid + non-deterministic; results are directional and dated, not guaranteed.

NameTypeReqDescription
brandstringyesYour brand name to detect in answers. Required.
brand_domainsarray–Your domain(s) to detect in citations, e.g. ['example.com'].
competitorsarray–Competitor brand names for share-of-voice.
enginesarray–Subset of available engines; default all configured.
promptsarrayyesManaged prompt set (freeze it across cycles). Required, 1-50.
samplesinteger–Samples per prompt per engine. Default 7 (>=7 recommended).

No output schema declared.

No examples provided.

ai_referral_overview ~217

First-party view of AI traffic: (1) referral sessions from AI apps (ChatGPT, Perplexity, Gemini, Copilot, Claude, ...) via GA4, detected by both the native ai-assistant channel and a source-host regex; and (2) AI-crawler coverage -- whether robots.txt lets GPTBot, ClaudeBot, PerplexityBot, etc. reach the site. Needs a GA4 property (for referral) and/or a site_url (for crawl coverage). Honest bound: AI referrals undercount badly (~70% land as Direct), and AI-Overview clicks count as Organic, not here.

NameTypeReqDescription
daysinteger–Lookback window for GA4 referral. Defaults to 28.
property_idstring–GA4 property (e.g. 'properties/123' or '123'). Defaults to the configured property.
site_urlstring–Any URL on the target host, for the robots crawl-coverage check. Defaults to deriving from the GSC default site.

No output schema declared.

No examples provided.

cf_bulk_redirect_upsert ~195

Create or append many redirects at once via an account-level Bulk Redirect List (for site migrations). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true AND a confirm value equal to list_name. Validates every item locally first and rejects the whole batch on any bad item (never half-applies); supports dry_run. Items are added asynchronously by Cloudflare.

NameTypeReqDescription
confirmstring–Must equal list_name to proceed (the high-blast-radius gate).
descriptionstring–Optional list description.
dry_runboolean–Validate + report what would be written, without writing (default false).
itemsarrayyesUp to 1000 redirect mappings.
list_namestringyesName of the Bulk Redirect List to create/append (also the confirm value). Letters, numbers, and underscores only (no hyphens), e.g. site_migration_2026.

No output schema declared.

No examples provided.

cf_create_redirect ~214

Create one single (dynamic) redirect at the Cloudflare edge (e.g. a 301 for a renamed/migrated URL). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. Validates the target is reachable (no redirecting to a dead URL), refuses loops and duplicates, and supports dry_run to preview the rule first.

NameTypeReqDescription
dry_runboolean–Preview the rule that would be created without writing it (default false).
preserve_query_stringboolean–Carry the original query string to the target (default true).
skip_preflightboolean–Bypass the target-reachability pre-flight (default false).
sourcestringyesAbsolute source URL to redirect FROM (exact full-URI match).
status_codeinteger–301 (default, permanent), 302/307 (temporary), or 308.
targetstringyesAbsolute target URL to redirect TO.
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_delete_redirect ~86

Delete one single (dynamic) redirect rule by its id (the rollback path for cf_create_redirect). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. Get the rule id from cf_list_redirects.

NameTypeReqDescription
rule_idstringyesThe redirect rule id (from cf_list_redirects).
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_list_dns ~79

List DNS records for a zone (read-only). Useful for verifying the canonical host, CNAME flattening, and TXT verification records during SEO migrations.

NameTypeReqDescription
typestring–Optional record type filter, e.g. 'CNAME', 'TXT', 'A'.
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_list_redirects ~96

List a zone's single (dynamic) redirect rules (source, target, status code, rule id) plus the account's Bulk Redirect lists (read-only). Call this before cf_create_redirect / cf_delete_redirect / cf_bulk_redirect_upsert so writes never clobber existing rules. Pairs with redirect_chain_audit and the migration_check prompt.

NameTypeReqDescription
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_list_zones ~29

List the Cloudflare zones the API token can see, with status, plan, and id.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

cf_managed_robots ~437

Get / configure / disable Cloudflare's managed robots.txt and Content-Signals policy on a zone (rides on the Bot Management config). action='get' reads the current state (read-only, un-gated). action='configure' enables/sets the managed robots.txt (managed_robots), the Content-Signals variant (cf_robots_variant: off / policy_only), and the AI-bot blocking levers (ai_bots_protection, content_bots_protection, crawler_protection). action='disable' turns managed robots.txt and the Content-Signals policy back off. NOTE: managed robots.txt and the Content-Signals policy are MUTUALLY EXCLUSIVE in Cloudflare - valid combinations are managed_robots=true + cf_robots_variant='off' (managed robots.txt) OR managed_robots=false + cf_robots_variant='policy_only' (the policy); the tool rejects the invalid combo locally. Writes are gated (SEO_MCP_ALLOW_DESTRUCTIVE) and need confirm=<zone>; supports dry_run. Always returns a caveat distinguishing the stated-preference signals from the levers that actually enforce at the edge.

NameTypeReqDescription
actionstringyesget (read), configure (write), or disable (write).
ai_bots_protectionstring–configure only: edge rule to block AI scrapers/crawlers (enforces).
cf_robots_variantstring–configure only: the Content-Signals / Robots Access Control License variant.
confirmstring–For writes: must equal the resolved zone hostname.
content_bots_protectionstring–configure only: edge rule to block content bots (enforces).
crawler_protectionstring–configure only: link-maze punishment for AI crawlers (enforces).
dry_runboolean–Preview the change without writing.
managed_robotsboolean–configure only: enable (true) or disable (false) Cloudflare managed robots.txt.
zonestring–Zone hostname, e.g. 'example.com'. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_purge_cache ~67

Purge specific URLs from the Cloudflare cache so crawlers refetch updated content. Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true.

NameTypeReqDescription
urlsarrayyesAbsolute URLs to purge.
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_purge_cache_all ~90

Purge the entire Cloudflare cache for a zone (affects all visitors). Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true AND a confirm value equal to the resolved zone hostname, so a full purge cannot fire ambiguously.

NameTypeReqDescription
confirmstringyesMust equal the resolved zone hostname to proceed.
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_settings_audit ~158

Audit a Cloudflare zone's settings for SEO and crawl/index safety (read-only): SSL/TLS mode, Always Use HTTPS, HSTS, Automatic HTTPS Rewrites, Brotli, and browser cache TTL. Findings are severity-graded with the reason and a benign exception each. Cloudflare cannot see the origin, so the SSL and Always-HTTPS checks are phrased as 'verify,' not 'fail,' and HSTS is never hard-failed (premature HSTS is dangerous and hard to undo). Answers 'are my edge settings silently sabotaging crawl/index?' It grades the edge layer only, not origin behavior.

NameTypeReqDescription
zonestring–Zone hostname, e.g. 'example.com'. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_settings_update ~203

Write the SEO/crawl/security Cloudflare zone settings that cf_settings_audit grades, to close the audit -> remediate loop. Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. Changing ssl_mode, or any HSTS change that raises protection, additionally requires confirm=<zone> (HSTS also requires acknowledge_hsts_risk=true). Validates locally first and supports dry_run (before/after preview). Needs the Zone Settings:Edit token scope (the audit only needs Read).

NameTypeReqDescription
acknowledge_hsts_riskboolean–Required true for any HSTS change that raises protection (HSTS is hard to undo).
confirmstring–Must equal the resolved zone for ssl_mode or HSTS-raise changes.
dry_runboolean–Preview before/after without writing (default false).
settingsobjectyesOnly the provided keys are changed.
zonestring–Zone hostname. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

cf_web_analytics ~105

Read-only Cloudflare Web Analytics (edge RUM). With no argument, lists the account's Web Analytics sites; with host_or_tag, returns one site's detail. Edge-measured traffic complements GA4 (it sees visits GA4's JS tag may miss). Create/delete are intentionally not exposed.

NameTypeReqDescription
host_or_tagstring–Optional. A hostname (contains a dot) resolves to its site; otherwise treated as a site_tag. Omit to list all sites.

No output schema declared.

No examples provided.

cf_zone_info ~51

Zone overview for a hostname: status, plan, paused, name servers, created/modified.

NameTypeReqDescription
zonestring–Zone hostname, e.g. 'example.com'. Defaults to the configured CF_ZONE.

No output schema declared.

No examples provided.

check_canonical ~74

Fetch a URL and analyse its canonical link tag: report whether it is self-referential, cross-host, protocol-mismatched, or trailing-slash drift; flag missing canonical, and follow one canonical hop to confirm it itself returns 2xx.

NameTypeReqDescription
urlstringyesAbsolute http(s) URL to inspect.

No output schema declared.

No examples provided.

content_brief_data ~230

Gather the hard evidence for a content brief: fetch the competitor pages and return their heading union, median word count (a FLOOR, not a target), schema types, and entity coverage, plus the 2026 GEO writing directives and validation rules. Pass competitor_urls (e.g. the top SERP results) for a true brief; with none it falls back to your own ranking pages via GSC (refresh-vs-new, NOT the full SERP). The host writes the brief prose from this; SEOMonster supplies rules + evidence. Read-only; no ranking guarantee. Backs the content_brief prompt.

NameTypeReqDescription
competitor_urlsarray–URLs to analyze (e.g. top SERP results). Up to 8.
daysinteger–GSC window for the own-pages fallback. Default 28.
site_urlstring–GSC property for the own-pages fallback. Defaults to the configured default site.
target_querystringyesThe primary query the content should win. Required.
topicstring–Optional working title / topic.

No output schema declared.

No examples provided.

content_opportunities ~172

Rank data-grounded content/blog topics from your own Search Console data. Fuses CTR-vs-expected gap, striking-distance position, demand volume, and momentum into a transparent opportunity score, flags cannibalization, and reports the click upside plus the score's components. Read-only. It prioritizes demand you already have; it does not do cold-start keyword research (that needs existing impressions) and does not write the content or guarantee a ranking.

NameTypeReqDescription
countinteger–Max ranked candidates to return. Defaults to 15.
daysinteger–Current window length. Momentum compares it to the equally long prior window. Defaults to 28.
impressions_mininteger–Drop low-volume noise. Defaults to 100.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

crux_history ~130

Return the last 25 weekly collection periods of Core Web Vitals at p75 (LCP, INP, CLS, etc.) for a URL or origin via the Chrome UX Report History API. Complements psi_analyze with the trend axis.

NameTypeReqDescription
form_factorstring–Form factor; omit for the combined view.
metricsarray–Subset of CrUX metric names (snake_case). Omit for all defaults.
originstring–Origin (scheme + host). Use this OR url.
urlstring–Page-level URL. Use this OR origin.

No output schema declared.

No examples provided.

crux_snapshot ~151

Return the CURRENT (latest 28-day) p75 Core Web Vitals snapshot (LCP, INP, CLS, FCP, TTFB) for a URL or origin via the Chrome UX Report queryRecord API, with each metric's GOOD/NEEDS_IMPROVEMENT/POOR category and an overall verdict. Use crux_history for the 25-week trend. Small pages/origins legitimately have no field data; that returns no_data.

NameTypeReqDescription
form_factorstring–Form factor; omit for the combined view.
originstring–Origin (scheme + host). Use this OR url.
urlstring–Page-level URL. Use this OR origin.

No output schema declared.

No examples provided.

ga4_landing_page_conversions ~128

Landing pages with their conversions / key events over the last N days, broken down by channel group and sorted by conversions descending. Filtered to organic search by default (the SEO view) so you see which entry pages actually drive organic outcomes. Convenience wrapper over ga4_run_report.

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
limitinteger–Max rows. Defaults to 50.
organic_onlyboolean–Limit to Organic Search traffic. Defaults to true.
property_idstring–Defaults to the configured property.

No output schema declared.

No examples provided.

ga4_organic_search_overview ~86

Organic-search health over the last N days: window totals (sessions, engaged sessions, engagement rate, average session duration, conversions) plus a day-by-day trend of the same metrics. Two GA4 reports under the hood.

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
property_idstring–Defaults to the configured property.

No output schema declared.

No examples provided.

ga4_run_report ~321

Run a GA4 report (Analytics Data API runReport) with arbitrary dimensions, metrics, a date range, an optional dimension filter, and ordering. The workhorse GA4 tool. Dates accept ISO (YYYY-MM-DD) or GA4 relatives like '28daysAgo' and 'today'.

NameTypeReqDescription
daysinteger–Convenience alias: derives end='today', start='Ndaysago'. Ignored when start_date is set explicitly.
dimension_filterobject–Optional filter. Simple form: {"field": "sessionDefaultChannelGroup", "value": "Organic Search", "match_type": "EXACT"} or {"field": ..., "in_list": [...]}.
dimensionsarray–GA4 dimension API names. Defaults to ["date"].
end_datestring–ISO date or 'today'. Defaults to today.
limitinteger–Alias for row_limit. row_limit wins when both are set.
metricsarray–GA4 metric API names. Defaults to ["sessions"].
order_byobject–Optional ordering: {"metric": "sessions", "desc": true} or {"dimension": "date", "desc": false}.
property_idstring–GA4 property ('properties/123' or '123'). Defaults to the configured property.
row_limitinteger–Defaults to 1000.
start_datestring–ISO date or GA4 relative. Defaults to 28daysAgo. Wins over `days` when both are set.

No output schema declared.

No examples provided.

ga4_setup_audit ~149

Audit a GA4 property's configuration for SEO-measurement readiness (read-only): is a web data stream present, are key events / conversions defined, is data retention long enough for year-over-year analysis, are content-group custom dimensions set, and (via v1alpha) is enhanced measurement on and what the Google Signals state is. Findings are severity-graded with the reason and the benign exception for each. Answers 'can this property actually measure my organic outcomes?' It checks hygiene, not whether your events are the right business events.

NameTypeReqDescription
property_idstring–GA4 property: 'properties/123456789' or bare '123456789'. Defaults to the configured default.

No output schema declared.

No examples provided.

ga4_site_search ~132

Internal site-search terms over the last N days: what visitors typed into the on-site search box (GA4 'searchTerm'), by event count and sessions. A direct content-gap signal. If the property has no site-search data (no search box, or enhanced-measurement site search is off), the tool says so honestly rather than implying zero demand. Convenience wrapper over ga4_run_report.

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
limitinteger–Max rows. Defaults to 50.
property_idstring–Defaults to the configured property.

No output schema declared.

No examples provided.

ga4_top_landing_pages ~108

Top landing pages by sessions over the last N days, with engagement rate and conversions. Filtered to organic search by default (the SEO view). Convenience wrapper over ga4_run_report.

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
limitinteger–Max rows. Defaults to 50.
organic_onlyboolean–Limit to Organic Search traffic. Defaults to true.
property_idstring–Defaults to the configured property.

No output schema declared.

No examples provided.

ga4_traffic_by_channel ~94

Sessions, engaged sessions, and conversions broken down by default channel group over the last N days. Separates organic from paid / referral / direct at a glance. Convenience wrapper over ga4_run_report.

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
limitinteger–Max rows. Defaults to 20.
property_idstring–Defaults to the configured property.

No output schema declared.

No examples provided.

gsc_batch_inspect_urls ~86

Inspect several URLs in one call (capped at 25). Returns a result per URL plus a list of per-URL failures. Rate-limit and transient errors are reported per URL without failing the whole batch.

NameTypeReqDescription
site_urlstring–Owning property. Defaults to the configured default site.
urlsarrayyesURLs to inspect (max 25).

No output schema declared.

No examples provided.

gsc_compare_periods ~499

Compare two equal-length time windows (current vs prior) and return per-key deltas in clicks, impressions, CTR, and position, plus keys present in only one window. v0.2.0: optional sort_by / sort_dir / min_delta_* filters and an anomalies_only z-score gate so the same tool covers 'biggest gainers', 'biggest losers', 'meaningful movers', and 'statistical outliers' without needing separate tools. When anomalies_only=true, the response's filters_applied.sigma_used field reports the population-stdev (sigma) actually computed from the matched rows' sort_by metric distribution; the effective z-score cutoff applied is `sigma_threshold * sigma_used`.

NameTypeReqDescription
anomalies_onlyboolean–If true, keep only rows where the sort_by metric exceeds sigma_threshold standard deviations from the matched-rows mean (statistical outliers). Default false.
current_daysinteger–Length of each window in days. Defaults to 28.
daysinteger–Alias for current_days. current_days wins when both are set.
dimensionsarray–Defaults to ["query"].
gap_daysinteger–Days between the two windows. Defaults to 0.
limitinteger–Alias for row_limit. row_limit wins when both are set.
min_delta_clicksinteger–Filter to rows with abs(delta_clicks) >= this. Defaults to 0 (no filter).
min_delta_impressionsinteger–Filter to rows with abs(delta_impressions) >= this. Defaults to 0.
min_delta_positionnumber–Filter to rows with abs(delta_position) >= this. Defaults to 0.
row_limitinteger–Rows per window query. Defaults to 1000.
sigma_thresholdnumber–Threshold for anomalies_only. Defaults to 2.0 (~95th percentile under normality).
site_urlstring–Defaults to the configured default site.
sort_bystring–Metric to sort matched rows by. Defaults to delta_clicks.
sort_dirstring–Sort direction. 'desc' for biggest gainers (default). 'asc' for biggest losers. Note: delta_position is reversed (negative = improvement), so use 'asc' to find rank gains.
topinteger–Cap the returned rows. No cap by default.

No output schema declared.

No examples provided.

gsc_coverage_audit ~141

Heuristic coverage audit. The GSC Index Coverage report is NOT exposed in the public API, so this tool takes a user-supplied URL list (typically pulled from a sitemap) and bulk-inspects each, then rolls up the verdicts (PASS / PARTIAL / FAIL plus coverage_state frequencies). Honest substitute for the Coverage UI; the AI host can use the rollup to decide which URLs to deep-inspect.

NameTypeReqDescription
site_urlstring–Defaults to the configured default site.
urlsarrayyesAbsolute URLs to audit (cap 200; chunks of 25 are inspected per GSC's URL Inspection batch limit).

No output schema declared.

No examples provided.

gsc_decaying_pages ~120

Pages whose impressions fell most over the last N days vs the prior N days. Equivalent to `gsc_compare_periods` with `dimensions=["page"]`, `sort_by="delta_impressions"`, `sort_dir="asc"`. Use this for lifecycle triage (find pages to invest in or rescue).

NameTypeReqDescription
daysinteger–Length of each window. Defaults to 28.
limitinteger–Top-N to return. Defaults to 25.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_inspect_url ~73

Inspect a single URL via the URL Inspection API: index verdict, coverage state, crawl info, canonicals, and mobile/rich-results summaries when present.

NameTypeReqDescription
site_urlstring–Owning property. Defaults to the configured default site.
urlstringyesThe URL to inspect. Required.

No output schema declared.

No examples provided.

gsc_keyword_expand ~218

Ground LLM-brainstormed keyword candidates against your own Search Console data to find net-new terms you have no current footprint on. YOU (the host) supply `candidates` -- brainstorm them from the site's winning queries first (call gsc_top_queries). For each candidate this returns a footprint verdict (covered / thin / none) and a confidence band from sibling-strength (does it share tokens with queries that already win impressions). 'none' means no VISIBLE footprint, not no demand (GSC hides ~75% of impressions); net-new terms are scored hypotheses, not facts. Read-only.

NameTypeReqDescription
candidatesarrayyesCandidate keyword/topic strings the host brainstormed. Required, 1-300.
daysinteger–Window for owned-query footprint. Defaults to 90 (wider = more footprint visible).
impressions_mininteger–Impressions at/above which an exact match counts as 'covered'. Defaults to 10.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_list_properties ~36

List every Search Console property the configured credentials can see, with each property's permission level. Use this to discover valid site_url values.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

gsc_list_sitemaps ~44

List the sitemaps Google knows about for a property, with submission and indexing status.

NameTypeReqDescription
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_new_queries ~124

Queries that have impressions in the current window but had no impressions in the prior comparison window. Useful for spotting emerging topics or pages that just started ranking.

NameTypeReqDescription
daysinteger–Current window in days. Defaults to 7.
impressions_mininteger–Minimum impressions in the current window to include. Defaults to 5.
limitinteger–Defaults to 50.
prior_daysinteger–Prior window in days. Defaults to 28 (so 7 vs 28 catches genuinely new entries).
site_urlstring––

No output schema declared.

No examples provided.

gsc_portfolio_summary ~141

Multi-property fleet view. Lists every property the credentials can see and returns a one-row summary per property (total clicks, impressions, average CTR, average position) for the last N days. The single fastest answer to 'how is the portfolio doing?' across agency or multi-brand setups. Honors the v0.2.0 alias convention (`days`) and applies the configured data_state.

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
excludearray–Optional deny-list of site_url values to skip.
includearray–Optional allow-list of site_url values to include. Defaults to all visible properties.

No output schema declared.

No examples provided.

gsc_query_gaps ~113

Queries that drive impressions but very few clicks. These are content opportunity signals: a page is being shown for the query, the click experience is not landing. Returns rows sorted by impressions desc.

NameTypeReqDescription
clicks_maxinteger–Drop queries that already convert. Defaults to 2.
daysinteger–Defaults to 28.
impressions_mininteger–Floor for inclusion. Defaults to 50.
limitinteger–Defaults to 50.
site_urlstring––

No output schema declared.

No examples provided.

gsc_query_opportunities ~172

Queries already ranking in the top N positions but with below-target CTR. These are title and meta-description optimization candidates. Returns rows sorted by impressions desc (the bigger the impression volume, the more clicks a CTR lift unlocks).

NameTypeReqDescription
ctr_maxnumber–Only include queries with CTR <= this (e.g. 0.03 = 3%). Defaults to 0.03.
daysinteger–Lookback window. Defaults to 28.
impressions_mininteger–Drop low-volume noise. Defaults to 100.
limitinteger–Max rows to return. Defaults to 50.
position_maxnumber–Only include queries with average position <= this. Defaults to 10.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_request_indexing ~166

Ask Google to (re)crawl one or more URLs via the Indexing API (URL_UPDATED). Requires the indexing scope. Available by default. Accepts a single `url` (string) or `urls` (array up to 100). A scope or disabled-API error stops the batch and is returned with remediation; per-URL errors are collected. `notify_time: null` on success is normal upstream behavior, not a failure.

NameTypeReqDescription
site_urlstring–Informational; the Indexing API is project-scoped, not property-scoped.
urlstring–Single URL convenience form. Either url or urls is required.
urlsarray–URLs to request indexing for (max 100). Either url or urls is required.

No output schema declared.

No examples provided.

gsc_search_analytics ~267

Query Search Console search analytics (clicks, impressions, CTR, position) for a property, with dimensions, a date range, optional dimension filters, and data_state. The workhorse GSC tool.

NameTypeReqDescription
data_statestring–all matches the dashboard (fresh, partial data); final lags 2-3 days. Defaults to the configured value.
daysinteger–Lookback window in days. Convenience alias: derives end=today, start=today-days. Ignored when start_date is set explicitly.
dimensionsarray–Defaults to ["query"].
end_datestring–ISO date YYYY-MM-DD. Defaults to today.
filtersarray–Optional dimension filters, ANDed together.
limitinteger–Alias for row_limit. row_limit wins when both are set.
row_limitinteger–Defaults to 1000.
search_typestring–Defaults to web.
site_urlstring–Property to query. Defaults to the configured default site.
start_datestring–ISO date YYYY-MM-DD. Defaults to 28 days ago. Wins over `days` when both are set.
start_rowinteger–Pagination offset. Defaults to 0.

No output schema declared.

No examples provided.

gsc_submit_sitemap ~178

Submit a sitemap to Search Console. Requires the writable webmasters scope. Available by default (a routine SEO task; not gated). Accepts either `sitemap_url` (preferred, friendly name) or `feedpath` (the raw API field name; kept for back-compat).

NameTypeReqDescription
feedpathstring–Alias for sitemap_url (the raw Google API field name). Either works; sitemap_url wins when both are set.
site_urlstring–Owning property. Defaults to the configured default site.
sitemap_urlstring–Full sitemap URL, e.g. https://www.example.com/sitemap.xml. Preferred.
skip_preflightboolean–Bypass the reachability pre-flight on the sitemap URL (default false). Use only when the sitemap is valid but unreachable from this machine.

No output schema declared.

No examples provided.

gsc_top_pages ~107

Convenience wrapper: top pages for a property over the last N days by clicks. Equivalent to gsc_search_analytics with dimensions=["page"]. Uses the configured data_state (default 'all'; 'final' lags 2-3 days behind the dashboard).

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
limitinteger–Max rows to return. Defaults to 50.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_top_pages_by_query ~110

Which pages rank for a specific query. The classic cannibalization audit input: if multiple pages rank for the same query, you typically want to consolidate or differentiate them. Filters search_analytics by an exact query match and returns rows by page dimension.

NameTypeReqDescription
daysinteger–Defaults to 28.
limitinteger–Defaults to 20.
querystringyesExact query string. Required.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_top_queries ~107

Convenience wrapper: top queries for a property over the last N days by clicks. Equivalent to gsc_search_analytics with dimensions=["query"]. Uses the configured data_state (default 'all'; 'final' lags 2-3 days behind the dashboard).

NameTypeReqDescription
daysinteger–Lookback window. Defaults to 28.
limitinteger–Max rows to return. Defaults to 50.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

gsc_trending_pages ~120

Pages whose impressions grew most over the last N days vs the prior N days. Equivalent to `gsc_compare_periods` with `dimensions=["page"]`, `sort_by="delta_impressions"`, `sort_dir="desc"`. Use this for lifecycle triage (find pages to invest in or rescue).

NameTypeReqDescription
daysinteger–Length of each window. Defaults to 28.
limitinteger–Top-N to return. Defaults to 25.
site_urlstring–Defaults to the configured default site.

No output schema declared.

No examples provided.

hreflang_consistency_check ~97

Validate hreflang link tags across a set of URLs. Checks: missing reciprocity, broken target URLs, duplicate hreflang on one page, missing self-link, missing x-default when there are 3+ language variants. Returns per-URL findings and a global findings list.

NameTypeReqDescription
urlsarrayyesAbsolute URLs to audit together (max 50). At least 2 needed for reciprocity to be meaningful.

No output schema declared.

No examples provided.

indexnow_bulk_submit ~93

Submit multiple URLs to IndexNow in one batched request. All URLs must share the same host (IndexNow rejects mixed-host batches with HTTP 422). Cap: 10000 URLs per call (IndexNow's documented limit).

NameTypeReqDescription
skip_preflightboolean–Bypass the key-file verification pre-flight (default false).
urlsarrayyesAbsolute URLs sharing one host (max 10000).

No output schema declared.

No examples provided.

indexnow_submit ~100

Submit a single URL to IndexNow (Bing + Yandex + Naver + Seznam + Yep). Complements gsc_request_indexing for the non-Google engines. Requires SEO_MCP_INDEXNOW_KEY plus a key-verification file at https://<host>/<key>.txt.

NameTypeReqDescription
skip_preflightboolean–Bypass the key-file verification pre-flight (default false).
urlstringyesFull absolute URL. Required.

No output schema declared.

No examples provided.

Install

How do I install the io.github.avansaber/seo-monster MCP server?

io.github.avansaber/seo-monster runs locally as a PyPI package, launched with uvx seo-monster. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · seo-monster

# add to Claude Code
claude mcp add avansaber-seo-monster -- uvx seo-monster
Common questions

What is the io.github.avansaber/seo-monster MCP server?

io.github.avansaber/seo-monster is an MCP server listed in the public MCP registry as io.github.avansaber/seo-monster. Local-first SEO MCP: track AI citations, Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX. This page covers its PyPI package (seo-monster).

Is the io.github.avansaber/seo-monster MCP server safe to use?

io.github.avansaber/seo-monster scores 96 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.avansaber/seo-monster MCP server expose?

io.github.avansaber/seo-monster exposes 70 tools: system_status, gsc_list_properties, gsc_search_analytics, gsc_top_queries, gsc_top_pages, and 65 more. Their descriptions and schemas cost roughly 10,239 tokens of context every time the server is loaded.

Is the io.github.avansaber/seo-monster MCP server still maintained?

io.github.avansaber/seo-monster is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.avansaber/seo-monster MCP server under?

io.github.avansaber/seo-monster declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.