SEOMonster
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CF_ZONE | No | Default Cloudflare zone hostname. | |
| PSI_API_KEY | No | PageSpeed Insights API key (optional, but strongly recommended to avoid rate limiting). | |
| CF_API_TOKEN | No | Cloudflare API token. | |
| SEO_MCP_CONFIG | No | Path to TOML config file. Environment variables override. | |
| SEO_MCP_DATA_STATE | No | GSC data state: 'all' (default) or 'final'. | all |
| SEO_MCP_GOOGLE_TOKEN | No | Writable path for cached OAuth token. Required for OAuth authentication. | |
| SEO_MCP_INDEXNOW_KEY | No | IndexNow key (sensitive). Any 8-128 hex string. | |
| SEO_MCP_GA4_PROPERTY_ID | No | Default Google Analytics 4 property ID, e.g., 'properties/123456789'. | |
| SEO_MCP_GSC_DEFAULT_SITE | No | Default Google Search Console property, e.g., 'sc-domain:example.com'. | |
| SEO_MCP_ALLOW_DESTRUCTIVE | No | Set 'true' to enable cache-purge tools. Defaults to 'false'. | false |
| SEO_MCP_GOOGLE_CREDENTIALS | No | Path to Google service account JSON key file. Alternative to OAuth. | |
| SEO_MCP_GOOGLE_OAUTH_CLIENT | No | Path to Google OAuth client-secrets JSON file (desktop app type). Required for OAuth authentication. | |
| SEO_MCP_INDEXNOW_KEY_LOCATION | No | Override default IndexNow key file URL. | |
| GOOGLE_APPLICATION_CREDENTIALS | No | Standard Google service account key path fallback. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| system_statusA | 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). |
| gsc_list_propertiesA | List every Search Console property the configured credentials can see, with each property's permission level. Use this to discover valid site_url values. |
| gsc_search_analyticsA | 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. |
| gsc_top_queriesA | 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). |
| gsc_top_pagesA | 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). |
| gsc_compare_periodsA | 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 |
| gsc_inspect_urlA | Inspect a single URL via the URL Inspection API: index verdict, coverage state, crawl info, canonicals, and mobile/rich-results summaries when present. |
| gsc_batch_inspect_urlsA | 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. |
| gsc_list_sitemapsA | List the sitemaps Google knows about for a property, with submission and indexing status. |
| gsc_submit_sitemapA | Submit a sitemap to Search Console. Requires the writable webmasters scope. Available by default (a routine SEO task; not gated). Accepts either |
| gsc_request_indexingA | 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 |
| gsc_query_opportunitiesA | 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). |
| gsc_query_gapsA | 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. |
| gsc_new_queriesA | 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. |
| gsc_top_pages_by_queryA | 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. |
| gsc_portfolio_summaryA | 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 ( |
| gsc_trending_pagesA | Pages whose impressions grew most over the last N days vs the prior N days. Equivalent to |
| gsc_decaying_pagesA | Pages whose impressions fell most over the last N days vs the prior N days. Equivalent to |
| gsc_coverage_auditA | 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. |
| ga4_run_reportA | 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'. |
| ga4_top_landing_pagesA | 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. |
| ga4_traffic_by_channelA | 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. |
| ga4_organic_search_overviewA | 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. |
| ga4_setup_auditA | 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. |
| ga4_site_searchA | 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. |
| ga4_landing_page_conversionsA | 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. |
| psi_analyzeA | 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). |
| psi_opportunitiesA | 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. |
| cf_list_zonesA | List the Cloudflare zones the API token can see, with status, plan, and id. |
| cf_zone_infoA | Zone overview for a hostname: status, plan, paused, name servers, created/modified. |
| cf_list_dnsA | List DNS records for a zone (read-only). Useful for verifying the canonical host, CNAME flattening, and TXT verification records during SEO migrations. |
| cf_web_analyticsA | 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. |
| cf_purge_cacheA | Purge specific URLs from the Cloudflare cache so crawlers refetch updated content. Gated: requires SEO_MCP_ALLOW_DESTRUCTIVE=true. |
| cf_purge_cache_allA | 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. |
| cf_settings_auditA | 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. |
| cf_list_redirectsA | 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. |
| cf_create_redirectA | 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. |
| cf_delete_redirectA | 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. |
| cf_bulk_redirect_upsertA | 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. |
| cf_settings_updateA | 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= (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). |
| cf_managed_robotsA | 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=; supports dry_run. Always returns a caveat distinguishing the stated-preference signals from the levers that actually enforce at the edge. |
| indexnow_submitA | 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:///.txt. |
| indexnow_bulk_submitA | 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). |
| inspect_metaA | 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. |
| check_canonicalA | 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. |
| mixed_content_checkA | 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'). |
| redirect_chain_auditA | 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. |
| robots_txt_validateA | 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. |
| robots_ai_postureA | 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. |
| sitemap_validateA | Fetch a sitemap or sitemap-index URL, validate its XML structure, count entries, and flag oversize (>50,000 URLs or >50 MiB), missing , and entries whose host does not match the sitemap host. Handles .gz transparently. |
| sitemap_healthA | 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. |
| crux_historyA | 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. |
| crux_snapshotA | 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. |
| inspect_schemaA | 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. |
| validate_schemaA | 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. |
| hreflang_consistency_checkA | 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. |
| internal_link_graphA | 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. |
| lighthouse_budgetA | 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. |
| content_opportunitiesA | 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. |
| ai_citation_readinessA | 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. |
| ai_referral_overviewA | 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. |
| gsc_keyword_expandA | 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 |
| internal_link_recommendA | 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. |
| rank_change_attributionA | 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. |
| topic_cluster_mapA | 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. |
| content_brief_dataA | 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. |
| serp_adjacency_expandA | 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 |
| keyword_universeA | 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. |
| onpage_serp_gapA | 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. |
| ai_citation_trackA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| post_deploy_verify | After deploying or publishing content, fan out the verification across CF cache purge, GSC indexing request, IndexNow notification, and a PSI baseline. Replaces a tail of manual tool calls. |
| weekly_review | Weekly SEO summary across the configured GSC property: biggest gainers, biggest losers, CTR opportunities, content gaps, and the GA4 organic engagement context. |
| content_audit | Cannibalization audit for the configured GSC property. Finds queries where multiple pages compete, surfaces the competing pages, and recommends consolidate / differentiate / accept. |
| migration_check | Pre/post migration validation. For each URL, check Google's current indexed status, canonical agreement, and last crawl. Flag URLs needing remediation. |
| technical_seo_audit | Single-URL technical-SEO sweep (one page, deep). Chains inspect_meta, check_canonical, redirect_chain_audit, mixed_content_check, and robots_txt_validate for the URL, then sitemap_health for its host root. Produces a triage list ranked by severity. For a batch deploy gate use pre_deploy_check; for Rich Results use structured_data_audit; for account/infra configuration use seo_setup_audit. |
| structured_data_audit | Structured-data + cross-site sweep (the Rich Results lane). For each URL: inspect_schema to see what JSON-LD is present, then validate_schema to verdict the Rich Results required fields. If 2+ URLs are passed, also run hreflang_consistency_check across the set. Produces a per-URL findings list plus a global reciprocity-and-target report. For a full single-page technical sweep use technical_seo_audit; for a deploy gate use pre_deploy_check. |
| pre_deploy_check | Deploy-gate workflow. For each URL: inspect_meta, check_canonical, validate_schema, redirect_chain_audit, mixed_content_check. Plus robots_txt_validate for the site. The recognizable label SEO teams reach for before pushing a production deploy. Complements technical_seo_audit (which audits one URL deeply) and structured_data_audit (which focuses on Rich Results). Use this for the broad batch check. |
| content_brief | Build an evidence-based content brief for a topic. Pulls the current top rankers from GSC, inspects their meta + schema (and your existing page if any), then synthesizes a brief with a calibrated word-count target, heading structure, schema type, internal-link targets, competitor gaps, and target queries. SEOMonster brings the rules and the competitor evidence; the LLM brings the writing. No ranking guarantee: this structures the work. |
| content_outline | Turn a content brief into a validated H2/H3 outline. States the structural rules the outline must pass (>= 5 H2 sections, >= 70% of the brief's target queries referenced, H1 carries the primary keyword, intro -> body -> conclusion flow, HowTo schema requires structured steps). SEOMonster supplies the structure rules; the LLM writes the outline. |
| content_article | Draft the full article from an outline + brief, then self-validate against the brief's rules: word count within +/-15% of target, per-section minimum length, sensible keyword density, internal-link suggestions, an inline JSON-LD schema hint, no em-dashes, no filler. The LLM writes the prose; SEOMonster supplies the validation checklist. |
| content_workflow | End-to-end content pipeline orchestration: surface an opportunity with content_opportunities, then chain content_brief -> content_outline -> content_article, gate the draft URL with pre_deploy_check, notify search engines via gsc_request_indexing + indexnow_submit, and schedule a content_performance check. SEOMonster sequences the chain; the LLM does the writing at each step. |
| content_performance | Layer-5 measurement of published content. Compares the URL's ranking + clicks before and after publish (gsc_compare_periods + gsc_search_analytics filtered to the URL/queries) ~4 to 8 weeks post-publish and outputs a before/after table. Honest framing: it measures the outcome, it does not guarantee it. |
| seo_setup_audit | Whole-stack configuration audit: is your stack set up so SEO can even work? Chains ga4_setup_audit (measurement), cf_settings_audit (CDN/TLS), psi_opportunities (Lighthouse SEO basics on a representative URL), and robots_txt_validate (crawl access), then produces one severity-ranked report. Audits configuration hygiene and removes known blockers; it does not predict ranking. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/avansaber/seo-monster'
If you have feedback or need assistance with the MCP directory API, please join our Discord server