Findings, not opinions
Every issue comes back as a structured unit: rule id, severity, evidence, explanation, and whether a fix exists for your framework. That structure is what makes it actionable by code.
Crawlers.fr exposes its crawl and audit engine as a Model Context Protocol server. Claude Code, Claude Desktop and Cursor can call it to audit a URL, receive normalised findings, request a stack-specific fix, apply it, then re-audit to prove the problem is gone.
Claude Code — Crawlers MCP server
Connect the Crawlers.fr MCP server
claude
Connecting to the Crawlers MCP server.
https://crawlers.fr/mcp · Streamable HTTP · OAuth 2.1 — connected: 14 tools, 3 resources
Audit the SEO of /contact.
claude
I’ll use the audit_page tool to analyse the page.
crawlers · mcpaudit_page
{ "url": "https://example.com/contact" }Results — audit_page
61/100
SEO score
3
Findings
2
Critical
3/3
Fixes available
claude
Want me to export these findings, or fix the two critical ones with get_fix?
Fix the critical ones for Next.js.
crawlers · mcpget_fix
{ "finding_ids": ["SEO-CANON-002", "SEO-H1-001"], "framework": "nextjs" }patch: metadata.alternates.canonical in app/contact/page.tsx patch: promote section title to h1 files touched: 1
claude
Patches applied. Re-auditing to confirm the findings are gone.
Verification — audit_page (comparison)
61 → 94
SEO score
Resolved
SEO-CANON-002
Resolved
SEO-H1-001
Open
SEO-META-007
Typographic reproduction of a real session: audit, fix, re-audit.
Ask an AI agent to “improve this page for SEO” and it will rewrite text it can see. It cannot see the HTML actually served to crawlers, the HTTP chain, the render behaviour, or whether a generative engine cites you. An MCP audit server closes that gap: the agent stops guessing and starts measuring.
Every issue comes back as a structured unit: rule id, severity, evidence, explanation, and whether a fix exists for your framework. That structure is what makes it actionable by code.
Audit, fix, re-audit. The finding id is stable, so its disappearance is the proof. No re-measurement means no proof, only a claim.
A page whose text only exists after JavaScript execution is reported as a rendering shell, not as thin content. Fixing the wrong layer wastes an entire sprint.
Tool availability depends on your plan and wallet. Long-running work is asynchronous: the agent starts a job, then reads the result.
crawl_siteStarts an asynchronous crawl of a domain and returns a job id. Poll get_job for progress and results.
audit_pageAudits a single URL: HTTP status, canonical, headings, metadata, structured data, render-shell detection, extracted text.
audit_siteRuns a full technical and generative-visibility audit across a crawled domain.
list_findingsReturns normalised findings with a stable rule id, severity, evidence and whether a fix is available.
get_fixReturns the correction for a finding, adapted to your stack: plain HTML, WordPress, Next.js or TanStack Start.
check_indexabilityChecks robots.txt, meta robots, canonical target and HTTP chain for a given URL.
analyze_schemaValidates JSON-LD against the visible content and reports mismatches, not just syntax errors.
analyze_linksInternal link graph for a page or a site: inbound links, click depth, orphan detection, broken link verdicts.
ai_visibilityQueries the major generative engines on a generated question set and reports observed brand citations.
get_jobReads the status and payload of any asynchronous job. Free of charge.
| Tool | Returns | Execution | Billing |
|---|---|---|---|
| audit_page | HTTP status, canonical, headings, metadata, JSON-LD, extracted text, render-shell verdict | Synchronous | Metered |
| audit_site | Site-wide technical and generative-visibility findings, grouped by severity | Asynchronous | Metered |
| crawl_site | Job id, then crawled URLs with status and click depth | Asynchronous | Metered |
| list_findings | Normalised findings: rule id, severity, evidence, fix availability | Synchronous | Free |
| get_fix | Stack-specific patch: HTML, WordPress, Next.js, TanStack Start | Synchronous | Metered |
| check_indexability | robots.txt, meta robots, canonical target, redirect chain | Synchronous | Metered |
| analyze_schema | Mismatches between JSON-LD and visible content | Synchronous | Metered |
| analyze_links | Inbound links, click depth, orphan pages, broken-link verdicts | Synchronous | Metered |
| ai_visibility | Observed brand citations per engine across a generated question set | Asynchronous | Metered |
| get_job | Status and payload of any asynchronous job | Synchronous | Free |
A finding is a stable unit, which is exactly what makes verification possible. Without a stable rule id, re-auditing compares nothing.
A code such as SEO-H1-001, invariant across audits. Its disappearance after a patch is the proof the fix worked.
The measured value, the excerpt and the URL. A finding with no evidence is never handed to the agent.
Severity reflects expected impact, not rule order. Fix availability lists the stacks a patch exists for, so the agent knows whether it can act.
| Finding id | Rule | Severity | Typical evidence | Covered stacks |
|---|---|---|---|---|
| SEO-H1-001 | Exactly one h1 | Critical | No h1 in served HTML | HTML, WordPress, Next.js |
| SEO-CANON-002 | Canonical present and consistent | Critical | No canonical tag, duplicate on /?ref= | HTML, WordPress, Next.js |
| SEO-META-007 | Useful meta description | Medium | 62 characters, below display threshold | HTML, WordPress, Next.js |
| SEO-RENDER-005 | Content served without JavaScript | Critical | Extracted text under 200 characters before hydration | Next.js, TanStack Start |
| GEO-ANSWER-001 | Citable direct answer | Critical | No standalone 2-4 sentence passage | HTML, WordPress, Next.js |
The server implements the Model Context Protocol over Streamable HTTP with OAuth 2.1, so any conformant client can call it.
| Client | Transport | Auth | Typical use |
|---|---|---|---|
| Claude Code | Streamable HTTP | OAuth 2.1 | Audit and fix inside the repository |
| Claude Desktop | Streamable HTTP | OAuth 2.1 | Conversational diagnosis |
| Cursor | Streamable HTTP | OAuth 2.1 | Audit while editing |
| Any conformant client | Streamable HTTP | OAuth 2.1 | Custom automation |
The developer asks for an optimisation. The agent orchestrates the loop without further instructions.
The server uses Streamable HTTP with OAuth 2.1. You add it to your MCP client, authorise your Crawlers.fr account, and the tools appear in the conversation. Free calls cover reads and job status; billed calls draw on your plan quota and then on your pay-as-you-go wallet, with a daily cap that protects you against runaway agent loops.
A Model Context Protocol server that exposes SEO measurement as callable tools, so an AI coding agent can audit a page, read structured findings, apply a fix and re-audit to verify the result.
Any MCP client speaking Streamable HTTP with OAuth 2.1 authentication, including Claude Desktop, Claude Code and Cursor.
Reads and job status calls are free. Tools that trigger a crawl or a computation consume your plan quota first, then your pay-as-you-go developer wallet. Every billed call is logged with its cost.
No. Crawlers returns findings and proposed corrections. Your agent applies them in your repository or through your connected CMS.
Yes. Alongside classic technical SEO, the server measures whether generative engines such as ChatGPT, Gemini, Perplexity and Claude cite your pages.
A language model cannot measure served HTML, HTTP status or render behaviour. Without a crawl it produces plausible guesses instead of verifiable findings.
Streamable HTTP transport, tools, resources and prompts.
Adding an MCP server to Claude Desktop and Claude Code.
Official guidance on canonicals, indexing and rendering.
Structured-data vocabulary validated by analyze_schema.
LCP, INP and CLS thresholds used in performance scoring.
robots.txt standard applied by check_indexability.
Run the same engine your agent will call, on any URL.