XML sitemap discovery and URL listing (free, paged)
web_sitemap_infoDiscover a site's XML sitemap and inspect its URLs with lastmod dates. List indexed pages, filter by substring, sort by recency, and page through results without crawling.
Instructions
Find a site's XML sitemap (robots.txt Sitemap: lines, then /sitemap.xml, /sitemap_index.xml, or an explicit sitemapUrl), report whether it is a sitemap index, list child sitemaps, and page through the contained URLs with lastmod. For an index, the first maxChildSitemaps children are expanded. WHEN TO USE: count/inspect indexed pages, find recently modified URLs (filter with contains / sort), feed URLs into web_seo_audit. Not a crawler: only what the sitemap lists. 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. Sitemap files are capped at 10 MB each (meta.truncated=true when cut). RETURNS: {count, total, offset, hasMore, nextOffset, meta{origin, sitemap_url, declared_in_robots, is_index, child_sitemap_count, child_sitemaps[], expanded_child_sitemaps[], truncated}, items[{type:"url", loc, lastmod, sitemap}]}. Errors: SITEMAP_NOT_FOUND plus INVALID_URL, BLOCKED_PRIVATE_ADDRESS, DNS_FAILED, FETCH_FAILED, TIMEOUT, TOO_MANY_REDIRECTS. WHEN NOT TO USE: not a crawler and does not audit pages - pass selected URLs to web_seo_audit; for AI-bot robots.txt rules use web_ai_crawler_access. COST: free - runs locally in this MCP server (direct HTTP GETs), no APIFY_TOKEN, no Apify billing. EXAMPLE: {"url":"python.org","contains":"/blog/","sort":"lastmod_desc","limit":10} -> paged url rows with loc and lastmod.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Required. 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. | |
| sort | No | "sitemap" = file order (default); "lastmod_desc" = most recently modified first | |
| limit | No | Optional page size: number of items to return, integer 1-1000 (default 100) | |
| offset | No | Zero-based offset into the full result list (default 0); use nextOffset from the previous page | |
| contains | No | Only URLs containing this substring, e.g. "/blog/" | |
| sitemapUrl | No | Explicit sitemap URL to use instead of auto-discovery | |
| maxChildSitemaps | No | For sitemap indexes: how many child sitemaps to fetch and list URLs from (default 3, max 20; 0 = list children only) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| meta | No | Tool-specific context (company, source_url, ...) | |
| count | Yes | Number of items in this page | |
| items | Yes | Result rows for this page | |
| total | Yes | Total items matching the filters (before paging) | |
| offset | Yes | Offset of the first item in this page | |
| hasMore | Yes | True if more items exist after this page | |
| nextOffset | Yes | Offset to pass for the next page, or null |