audit_page, audit_canonical, check_robots, check_sitemap, check_technical and score_ai_overview_eligibility all describe themselves as rule-based with no model involved, and score_ai_overview_eligibility adds that the same URL returns the same score — which is what makes a before-and-after comparison mean anything. rewrite_geo, extract_entities and score_test_citation sit on the other side of that line: their primary path is MCP sampling, so the host model does the work and the output moves with it. Nothing here publishes: llms_txt_generate and pricing_generate return file content as a string and state outright that hosting the file is the caller's job, and the rewrite tools return text rather than touching the source URL.
An AI-SEO audit and rewriting server with 20 tools covering page and site audits, robots and sitemap checks, AI-Overview and citation scoring, llms.txt and pricing.md generation, entity extraction and Markdown report output.
- Audits at three scopes: audit_page fetches a URL once and runs every sub-audit against that one response, returning categorised findings with severity and fix instructions plus a 0-100 composite score and per-dimension subscores; audit_site runs the homepage audit, robots, sitemap and schema checks in parallel for an A-F grade and the top-5 highest-impact fixes; audit_sitemap samples URLs by deterministic uniform stride and returns a score distribution with the worst pages and most common findings.
- Focused checks for when the full audit is more than you need: audit_schema validates JSON-LD from a url or from a raw schema_json with no network at all, audit_canonical covers self-reference, cross-domain mismatch, trailing-slash hygiene and og:url consistency, check_technical inspects the HEAD section only, check_robots reports per-crawler allow and disallow posture for named AI crawlers including GPTBot, CCBot, Anthropic-AI and Google-Extended, and check_sitemap validates presence, URL count, lastmod freshness and sitemap-index handling.
- Scoring aimed at answer engines: score_ai_overview_eligibility returns a 0-100 score plus six factor subscores — semantic completeness, structured data, E-E-A-T signals, entity density, freshness and technical hygiene; score_citation_worthiness adds an extractability_score and per-section chunk_analysis for how cleanly an answer can be lifted from each heading; score_agentic_browsing scores llms.txt presence, WebMCP integration, accessibility-tree integrity and layout stability into a grade.
- The files engines look for, returned as strings: llms_txt_generate reads a sitemap and samples up to max_pages into a grouped, sectioned summary, llms_txt_validate checks structure, section ordering and link format with optional broken-link detection, and pricing_generate extracts named tiers and price lines into a machine-readable pricing file. None of them write to disk or upload anywhere.
- Rewriting that runs on the host model: rewrite_aeo adds a bottom-line-up-front opening, FAQ structure and question-shaped headings within a max_words budget, and rewrite_geo produces entity-rich, comparison-ready copy by delegating the rewrite to the calling model through MCP sampling. Neither writes back to the source URL.
- Head-to-head and entity work: diff_pages runs audit_page on your URL and a competitor's and diffs the dimension scores and findings, extract_entities combines body-text recognition with JSON-LD @type and sameAs walking and falls back to a deterministic extractor, and score_test_citation role-plays a named engine and returns a cite or no-cite verdict with the verbatim excerpt it would surface plus ranked improvements.
- Somewhere to put the result: report_save renders an audit_page or audit_site result as a Markdown report under MCP_WORKSPACE_ROOT.
No credentials are configured on the server, and the audit tools are documented as needing no auth and no third-party APIs. report_save writes under MCP_WORKSPACE_ROOT, which defaults to the working directory, so that path has to be writable.
One command — npx -y @automatelab/ai-seo-mcp
