io.github.avansaber/seo-monster
PYPI · SEO-MONSTER
Local-first SEO MCP: track AI citations, Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX.
Available components
Last scanned (2 hours ago)
Scores higher than 99% of PyPI servers
Category Marketing and SEO
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 68 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
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
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 5 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 →
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 →
inspect_meta ~67
Fetch a single URL and return its on-page SEO surface: title, meta description, meta robots, canonical, Open Graph + Twitter Card tags, hreflang list, and the H1 count. Read-only HTTP GET.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Absolute http(s) URL to inspect. |
No output schema declared.
No examples provided.
inspect_schema ~66
Extract every JSON-LD block from a page and report the schema.org @type counts plus a sample entity per type. Discovery tool: tells you what structured data exists. Pair with validate_schema to check required-field compliance.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Absolute http(s) URL to inspect. |
No output schema declared.
No examples provided.
internal_link_graph ~136
Small BFS crawl from a starting URL within the same host. Returns per-page in-degree + out-degree, orphan pages (zero in-degree), broken internal links (4xx/5xx), and depth distribution. Hard caps: max_depth ≤ 4, max_pages ≤ 200. Not a replacement for a full crawler; sized for in-session triage.
| Name | Type | Req | Description |
|---|---|---|---|
| max_depth | integer | – | Max BFS depth. Default 2, ceiling 4. |
| max_pages | integer | – | Max pages to fetch. Default 50, ceiling 200. |
| start_url | string | yes | Absolute http(s) URL to crawl from. |
No output schema declared.
No examples provided.
internal_link_recommend ~282
Recommend specific internal links (source page -> target page, with anchor text) from high-authority pages to striking-distance pages. Crawls from start_url for the internal link graph (authority + existing links) and uses GSC to find striking-distance targets (default position 8-20 with real impressions). Ranks sources by lexical relevance to the target query + internal in-degree, skips pages that already link the target, balances anchor text, and never suggests nofollow. Free; read-only; does not guarantee a ranking change.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | GSC window. Defaults to 28. |
| impressions_min | integer | – | Min impressions for a target query. Default 30. |
| limit | integer | – | Max recommendations. Default 25. |
| max_pages | integer | – | Max pages to crawl. Default 50, ceiling 200. |
| position_max | number | – | Striking-distance upper bound (default 20). |
| position_min | number | – | Striking-distance lower bound (default 8). |
| relevance_floor | number | – | Min source/target query lexical overlap (0-1). Default 0.34. |
| site_url | string | – | GSC property for target selection. Defaults to the configured default site. |
| start_url | string | yes | Absolute http(s) URL to crawl from for the link graph. |
No output schema declared.
No examples provided.
keyword_universe ~193
External keyword data (optional, paid). Its core value is the COMPETITOR keyword GAP: keywords competitors rank for that you don't (DataForSEO Domain Intersection; no Google equivalent). Optionally returns search volume/difficulty/intent for a keyword list via a provider chain (DataForSEO, else Google Ads volume-only). Requires DataForSEO and/or Google Ads to be configured. External volume is a degraded directional signal in 2026 -- never let a low/missing volume drop a high-intent term.
| Name | Type | Req | Description |
|---|---|---|---|
| competitors | array | – | Competitor domains for the gap. Up to 5. |
| keywords | array | – | Keywords to look up volume/difficulty/intent for. |
| limit | integer | – | Max gap keywords to return. Default 100. |
| target_domain | string | – | Your domain (for the competitor gap), e.g. 'example.com' or 'sc-domain:example.com'. |
No output schema declared.
No examples provided.
lighthouse_budget ~268
Run PageSpeed Insights on a URL and verdict the results against a performance budget. Valid budget keys: higher-is-better Lighthouse scores on a 0-100 scale ('performance', 'accessibility', 'best-practices', 'seo'); lower-is-better latency in milliseconds ('LCP_ms', 'FCP_ms', 'TBT_ms', 'TTI_ms', 'speed_index_ms'); lower-is-better unitless shift score ('CLS'). Unknown keys are surfaced as a non-fatal finding with a 'did you mean' hint; the metric is NOT silently ignored. Returns per-metric verdict and an overall pass/fail. Useful as a CI / pre-deploy gate.
| Name | Type | Req | Description |
|---|---|---|---|
| budget | object | yes | Budget dict. Lighthouse scores on the 0-100 scale (performance=80 means a score of 80, not 0.8); latency metrics in milliseconds (LCP_ms=2500 means 2.5 s); CLS is unitless (CLS=0.1 means a 0.1 layout… |
| strategy | string | – | Defaults to mobile. |
| url | string | yes | Page URL to analyze. Required. |
No output schema declared.
No examples provided.
mixed_content_check ~75
Fetch an HTTPS page and report any sub-resource references that use plain http:// (img/script/iframe/form action/anchor href). Mixed content blocks browsers from running scripts and triggers warnings on user-facing pages. No-op for http:// pages (returns 'not_https').
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Absolute https:// URL to inspect. |
No output schema declared.
No examples provided.
onpage_serp_gap ~199
Find the headings, entities and schema the top SERP results have that a target page lacks, and turn them into on-page actions. Pass competitor_urls (free), or a query with DataForSEO configured to auto-fetch the SERP. When the SERP is auto-fetched, also returns winnability signals (AI-Overview presence, UGC/forum dominance = zero-click risk) and, with Open PageRank, competitor domain authority. Surfaces information-gain (add something novel), not just parity. Read-only; does not guarantee a ranking.
| Name | Type | Req | Description |
|---|---|---|---|
| competitor_urls | array | – | Competitor URLs to compare against. Up to 6. |
| max_competitors | integer | – | Cap competitors analyzed. Default 5. |
| query | string | – | Query to auto-fetch the SERP for (needs DataForSEO) when competitor_urls is omitted. |
| target_url | string | yes | The page to analyze. Required. |
No output schema declared.
No examples provided.
psi_analyze ~96
Run PageSpeed Insights on a URL and return Lighthouse category scores, lab Core Web Vitals (synthetic), and field Core Web Vitals (real-user CrUX) when available. Defaults to the mobile strategy (Google ranks on mobile).
| Name | Type | Req | Description |
|---|---|---|---|
| categories | array | – | Lighthouse categories to run. Defaults to all four. |
| strategy | string | – | Defaults to mobile. |
| url | string | yes | Page URL to analyze. Required. |
No output schema declared.
No examples provided.
psi_opportunities ~98
Run PageSpeed Insights and return the actionable Lighthouse opportunity audits (estimated load-time savings) plus the Lighthouse SEO-category audits graded by severity (critical/high/medium/low). Lab data only; does not use field/CrUX data (use crux_snapshot / crux_history for real-user metrics). Defaults to the mobile strategy.
| Name | Type | Req | Description |
|---|---|---|---|
| strategy | string | – | Defaults to mobile. |
| url | string | yes | Page URL to analyze. Required. |
No output schema declared.
No examples provided.
rank_change_attribution ~291
Estimate whether an on-site change moved a page's clicks, using difference-in-differences against a control group of untouched pages (never a naked before/after). Returns an estimated lift with a 95% confidence interval and a three-state verdict (likely_positive / likely_negative / inconclusive), plus a confounders block (algo-update proximity, GSC data-regime breaks, control quality, sample sizes). Clicks-based (position/CTR were corrupted by the 2025 GSC bugs). Observational, not proof of causation -- a server-side split test is the only true causal test.
| Name | Type | Req | Description |
|---|---|---|---|
| change_date | string | yes | Date the change shipped, ISO YYYY-MM-DD. Required. |
| control_scope | string | – | Control pool: same path section, or whole site. Default section. |
| gap_days | integer | – | Washout gap after the change for recrawl/re-rank. Default 7. |
| post_days | integer | – | Post-window length. Default 28. |
| pre_days | integer | – | Pre-window length. Default 56 (>=2x post, per CausalImpact). |
| query | string | – | Optional: restrict to one query. |
| site_url | string | – | Defaults to the configured default site. |
| url | string | – | The changed page URL (or use `urls`). |
| urls | array | – | Multiple changed page URLs. |
No output schema declared.
No examples provided.
redirect_chain_audit ~107
Walk the redirect chain for a URL without auto-following 3xx. Returns every hop (status, location, elapsed_ms) and flags issues: chain longer than 1, mixed-protocol hops (https -> http), loops, or non-2xx terminus. Cap defaults to 10 hops.
| Name | Type | Req | Description |
|---|---|---|---|
| max_redirects | integer | – | Maximum hops to follow before flagging the chain as too long. |
| url | string | yes | Absolute http(s) URL to audit. |
No output schema declared.
No examples provided.
robots_ai_posture ~152
Recommend a Content-Signals posture (search / ai-input / ai-train) from a business goal and emit a ready-to-apply artifact: the Content-Signal directive line plus a full suggested robots.txt. Read-only, offline, deterministic - no network, no writes. Always returns the trade-off alternatives and the mandatory caveat that Content-Signal is honored only by adopting crawlers, is ignored by Googlebot, and is not a ranking factor.
| Name | Type | Req | Description |
|---|---|---|---|
| goal | string | – | Business goal driving the recommendation. One of content_authority, maximize_visibility, protect_ip. Defaults to content_authority when omitted. |
| sitemap_url | string | – | Optional sitemap URL embedded into the generated robots.txt artifact. |
No output schema declared.
No examples provided.
robots_txt_validate ~115
Fetch /robots.txt for a site, parse user-agent groups + Allow/Disallow + Crawl-delay + Sitemap, and return the structured ruleset. Optionally probe a list of (user_agent, url) pairs and return per-probe allow/deny verdicts using RFC 9309 longest-match.
| Name | Type | Req | Description |
|---|---|---|---|
| probes | array | – | Optional list of (user_agent, url) pairs to verdict against the rules. |
| site_url | string | yes | Any URL on the target host; /robots.txt is fetched relative to it. |
No output schema declared.
No examples provided.
serp_adjacency_expand ~163
Expand seed terms into adjacent terms from SERP signals. FREE core: Google Autocomplete (no key). Optional PAA + related-searches via DataForSEO if configured. Pass your winning queries as `seeds` (seed from gsc_top_queries). Returns per-seed suggestions plus the aggregated net-new terms (suggestions you didn't seed). Degrades gracefully: autocomplete-only without a DataForSEO key. Read-only. Note: the autocomplete endpoint is undocumented and may change.
| Name | Type | Req | Description |
|---|---|---|---|
| include_paa | boolean | – | Also fetch People-Also-Ask + related searches via DataForSEO (if configured). Default true when DataForSEO is set. |
| seeds | array | yes | Seed terms (your winning queries). Required, 1-15. |
No output schema declared.
No examples provided.
sitemap_health ~84
Sample N URLs from a sitemap (or one level deep in a sitemap index) and HEAD-check each. Aggregates a status-code histogram and lists the first few non-2xx URLs so you can triage broken entries fast.
| Name | Type | Req | Description |
|---|---|---|---|
| sample_size | integer | – | Number of URLs to HEAD-check. |
| sitemap_url | string | yes | Absolute URL of the sitemap or sitemap index. |
No output schema declared.
No examples provided.
sitemap_validate ~77
Fetch a sitemap or sitemap-index URL, validate its XML structure, count entries, and flag oversize (>50,000 URLs or >50 MiB), missing <lastmod>, and entries whose host does not match the sitemap host. Handles .gz transparently.
| Name | Type | Req | Description |
|---|---|---|---|
| sitemap_url | string | yes | Absolute URL of the sitemap or sitemap index. |
No output schema declared.
No examples provided.
system_status ~100
Report which SEO services are configured and reachable, the Google auth method and scopes, whether destructive mode is enabled, and the full catalog of available tools grouped by service. Call this first if unsure what is set up. Pass probe=true to confirm credentials work via one cheap live call per configured service (default false: config-only).
| Name | Type | Req | Description |
|---|---|---|---|
| probe | boolean | – | If true, make one cheap live call per configured service to confirm the credentials actually work. Default false. |
No output schema declared.
No examples provided.
topic_cluster_map ~249
Map a content cluster from your own Search Console data and surface missing subtopics. Define the cluster by cluster_path (a URL path prefix) or pillar_url. For each query the cluster's pages show for, classifies it into defend / optimize / create / monitor by demand and best position, flags cannibalization, and lists the create-quadrant queries (high demand, weak position) as missing-subtopic candidates for you to group into named subtopics. Free, GSC-only. 'create' = no VISIBLE strong coverage (GSC hides ~47% of queries); no external volume.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_path | string | – | URL path prefix defining the cluster, e.g. '/blog/widgets/'. |
| days | integer | – | Window. Default 90 (wider surfaces more). |
| impressions_min | integer | – | Demand threshold: at/above this is 'high demand'. Default 50. |
| limit | integer | – | Max queries listed per quadrant. Default 50. |
| pillar_url | string | – | Pillar page URL; the cluster path is derived from its directory if cluster_path is omitted. |
| site_url | string | – | Defaults to the configured default site. |
No output schema declared.
No examples provided.
validate_schema ~111
Validate every JSON-LD block on a page against the Google Rich Results required-field set. Per-entity verdict (pass/fail) and a list of missing required + recommended fields. Covers Article, NewsArticle, BlogPosting, Product, FAQPage, BreadcrumbList, Organization, LocalBusiness, Event, Review, Recipe.
| Name | Type | Req | Description |
|---|---|---|---|
| types | array | – | Optional: restrict checks to these schema.org @types. Default: validate every recognized type. |
| url | string | yes | Absolute http(s) URL to validate. |
No output schema declared.
No examples provided.
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
claude mcp add avansaber-seo-monster -- uvx seo-monster
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 5 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 5 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.