Skip to main content
Glama
fairquery

fairquery-web

Official

Single-page SEO & AI-readiness audit with 0-100 score (free)

web_seo_audit
Read-onlyIdempotent

Audit one URL's on-page SEO and AI-readiness, returning scores and issues to diagnose page health and track changes.

Instructions

Full on-page audit of ONE URL: title, meta description, canonical, lang, meta robots, viewport, H1s, heading/word/link/image counts, images missing alt, Open Graph, Twitter card, JSON-LD @types, hreflang, feeds, social links, detected technologies, robots.txt/sitemap/llms.txt presence and AI-bot access, plus seo_score (0-100, deductions: high 15 / medium 8 / low 3) with seo_issues[{code, severity, message}] and ai_readiness_score (0-100). Issue codes: NO_HTTPS, MISSING_TITLE, TITLE_TOO_LONG, TITLE_TOO_SHORT, MISSING_META_DESCRIPTION, META_DESCRIPTION_TOO_LONG, MISSING_H1, MULTIPLE_H1, MISSING_CANONICAL, MISSING_LANG, MISSING_VIEWPORT, NOINDEX, MISSING_OPEN_GRAPH, MISSING_STRUCTURED_DATA, IMAGES_MISSING_ALT, THIN_CONTENT, MISSING_ROBOTS_TXT, MISSING_SITEMAP. WHEN TO USE: SEO health of a specific page, or to create a snapshot you can store and later pass to web_compare_snapshots for before/after tracking. For just one aspect use web_ai_crawler_access, web_tech_stack, web_sitemap_info or web_security_headers; for many sites use web_batch_audit. Fetching: read-only GETs from this server with User-Agent "FairqueryBot ... Fairquery-MCP", 15 s timeout per request, body capped (1.5 MB HTML), max 5 redirects; URLs resolving to private/loopback/link-local addresses are refused (SSRF guard). Free, no token, no JavaScript rendering. Makes ~5 requests (page, robots.txt, sitemap, llms.txt, llms-full.txt) unless checkRobots=false. RETURNS: one "seo_audit" snapshot object (snapshot_schema "fairquery-web-snapshot/1") with the fields above plus input, final_url, status_code, https, response_ms, html_truncated, checked_at. Errors (isError=true, JSON {error, message, retryable}): INVALID_URL, BLOCKED_PRIVATE_ADDRESS, DNS_FAILED, FETCH_FAILED, TIMEOUT, TOO_MANY_REDIRECTS. WHEN NOT TO USE: only need reachability (web_quick_check), only AI-bot rules (web_ai_crawler_access), only stack (web_tech_stack), or many sites (web_batch_audit, paid). COST: free - runs locally in this MCP server (direct HTTP GETs), no APIFY_TOKEN, no Apify billing. EXAMPLE: {"url":"https://www.python.org/about/"} -> {type:"seo_audit", seo_score:0-100, ai_readiness_score:0-100, issues:[...], ...}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesRequired. One public domain or http(s) URL, e.g. "vercel.com" or "https://www.python.org/about/". Bare domains are fetched over https; private/loopback hosts are refused.
checkRobotsNoAlso fetch robots.txt, sitemap and llms.txt for AI-bot/sitemap checks and scores (default true). false = page only, faster.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.2.1

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), but the description adds substantial context beyond them: fetching behavior, User-Agent, 15s timeout, body cap, redirect limit, SSRF guard, no JavaScript rendering, number of requests, and full error codes. This is unusually thorough behavioral disclosure for a read-only audit tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, issue codes, usage, fetching, returns, and costs, and the structure makes it easy to scan. However, some content is repeated: 'free' is stated in the title, the fetching section, and the COST section, and the EXAMPLE duplicates the URL format already in the schema, so it falls short of perfect conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, lack of output schema, and many output fields, the description is complete: it enumerates returned fields, snapshot schema, error shapes, and operational constraints. Together with annotations and the fully described input schema, an agent has everything needed to invoke and interpret the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the input schema. The description adds only a minor detail about request count when checkRobots=false; otherwise it does not extend parameter meaning beyond the schema, matching the baseline of 3 for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a full on-page audit of ONE URL, enumerating the exact fields and scores produced. It clearly distinguishes itself from sibling tools by naming the narrower alternatives and the batch alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit WHEN TO USE and WHEN NOT TO USE sections, naming each sibling (web_ai_crawler_access, web_tech_stack, web_sitemap_info, web_security_headers, web_quick_check, web_batch_audit) and the condition that selects it. It also explains the snapshot-then-compare workflow with web_compare_snapshots.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.