audit_url
input: { url }
Runs the full on-page audit against one URL. The page is fetched server-side over HTTP or HTTPS, redirects are followed, and the server-rendered HTML is scored. Client-side rendered content is not executed, and private, loopback and cloud-metadata addresses are refused.
- url (string, required) — The page to audit. A bare host such as example.com/pricing is treated as https.
Quota: one request per call. Makes an outbound request to the URL you pass.
Returns: A readable report — score out of 100, band, fetch summary, remaining quota, then every failing and warning check with what was measured and the specific fix — followed by a compact JSON block of the same findings for programmatic use.
list_checks
input: no arguments
Returns the catalogue: every check id, what it measures, its weight, and how the score and band are derived. Useful for explaining a report, or for deciding whether SEOAST answers a question before spending an audit on it.
Quota: one request per call. Makes no outbound request.
Returns: The catalogue as readable text, the quota line, plus the same catalogue as JSON.
site_audit
input: { url, location? }
Runs the local-business audit against one page: LocalBusiness schema, name, address and phone, location in the title and H1, opening hours, geo coordinates, a maps link and linked profiles, all read from the HTML the server returned. It does not query Google or crawl the rest of the site.
- url (string, required) — The business website page to audit. A bare host is treated as https.
- location (string, optional) — City or region for the location checks, for example "Austin, TX".
Quota: one request per call. Makes an outbound request to the URL you pass.
Returns: A readable report of the local checks with the measurement and fix for each one that does not pass, followed by a compact JSON block of the same findings.
site_scan
input: { url, maxPages? }
Crawls the site from the given URL, following internal links and the XML sitemap and respecting robots.txt, and runs the full page audit on every page it reaches. Then reports what only a whole-site view shows: broken internal links, sitemap URLs that error, redirect or are noindex, orphan pages, click depth, duplicate titles and H1s, thin pages, and page checks that repeat across a template.
- url (string, required) — The site to scan, usually its homepage. A bare host is treated as https.
- maxPages (integer, optional) — Upper bound on pages requested. Clamped to the page limit for your key tier.
Quota: one request per call. Makes an outbound request to the URL you pass.
Returns: A readable report of site-wide issues with example URLs and the checks repeated across pages, grouped by template, followed by a JSON digest of the same data.
list_site_audit_checks
input: no arguments
Returns the catalogue for the local-business audit: each check, what it measures, its weight and how the score is derived.
Quota: one request per call. Makes no outbound request.
Returns: The catalogue as readable text, the quota line, plus the same catalogue as JSON.
remediation_plan
input: { url, repository? }
Audits one URL, then turns the measured findings into a plan: the evidence, the affected path, the desired state, a fix class (AUTO-SAFE, REVIEW-REQUIRED or HUMAN-ONLY), the policy basis with its source, and tests and acceptance criteria. Written to be handed to a coding agent.
- url (string, required) — The page to audit and plan fixes for.
- repository (string, optional) — The repository that serves this URL, for example github.com/org/repo. Up to 300 characters.
Quota: one request per call. Makes an outbound request to the URL you pass.
Returns: An implementation prompt for an AI builder, an executive remediation plan, and a JSON block with the site search manifest, the indexation decision, the profile score and the policy rules cited.
publish_gate
input: { html, url, targetKeyword?, author?, datePublished?, dateModified?, ymyl?, corpus?, batch? }
Judges a draft before it is published: keyword stuffing, near-duplicates of the pages you supply, scaled or doorway patterns across a batch, unsourced statistics, author and date integrity, structured-data accuracy, hidden text, link schemes, images and directives. It reads only what you send; the server makes no outbound request.
- html (string, required) — The draft, as HTML. Up to 1,000,000 characters.
- url (string (URL), required) — Where the draft will be published.
- targetKeyword (string, optional) — The phrase the draft is written for.
- author (string, optional) — The named author.
- datePublished (string, optional) — Publication date.
- dateModified (string, optional) — Last-modified date.
- ymyl ("high" | "medium" | "low", optional) — How sensitive the topic is (health, money, safety).
- corpus (array of { url, text }, optional) — Existing pages to compare against for near-duplicates. Up to 200.
- batch (array of { url, text }, optional) — Other drafts in the same batch, to detect scaled or doorway patterns. Up to 200.
Quota: one request per call. Makes no outbound request.
Returns: A verdict of BLOCK, REVIEW or PASS with the word count and every gate that raised a concern, the quota line, and the full gate report as JSON.
create_monitored_site
input: { domain, label?, features? }
Register a new site for real-time monitoring. Returns the site ID and embed code. The snippet monitors SEO health continuously: checks schema presence, measures Core Web Vitals, detects when critical elements are removed, and triggers instant alerts. Requires a paid plan.
- domain (string, required) — Domain to monitor (e.g., example.com).
- label (string, optional) — Human-readable label for this site.
- features ({ healthCheck, coreWebVitals, autoFix, changeDetection }, optional) — Features to enable (all boolean, all default to true except autoFix).
Quota: one request per call. Makes no outbound request.
Returns: Site ID, domain, label, enabled features, and the complete embed code for <head>.
list_monitored_sites
input: no arguments
List all sites registered for real-time monitoring. Shows which sites have the SEOAST snippet embedded, when they last reported events, and what features are enabled.
Quota: one request per call. Makes no outbound request.
Returns: A list of monitored sites with their IDs, domains, labels, features, active status, and last seen timestamps.
get_site_events
input: { siteId, type?, url?, limit? }
Get recent events from a monitored site: health checks, Core Web Vitals, schema changes, and alerts. Shows what the snippet is reporting in real-time. Optionally filter by event type or URL.
- siteId (string, required) — Site ID to get events for.
- type ("health_check" | "core_web_vitals" | "schema_change" | "error" | "heartbeat", optional) — Filter by event type.
- url (string, optional) — Filter by page URL.
- limit (number, optional) — Maximum events to return (1-100, default: 20).
Quota: one request per call. Makes no outbound request.
Returns: Recent events with timestamps, URLs, types, and data payloads.
search_policy
input: { category?, claimClass? }
Reads the versioned Search Policy Registry: Google requirements and best practices quoted from Google documentation with retrieval dates, and SEOAST heuristics labelled as heuristics.
- category (string, optional) — Only rules in this category.
- claimClass ("google_requirement" | "google_best_practice" | "seoast_heuristic" | "observed_correlation" | "experimental_hypothesis", optional) — Only rules of this class.
Quota: none. No key is needed. Makes no outbound request.
Returns: The registry version and one line per matching rule, with its class, quote and source where it has one.