SEO MCP server: give your coding agent a real audit engine

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://tutlimtasnjabdfhpewu.supabase.co/functions/v1/mcp-server · Streamable HTTP · x-marina-key: <key> or Authorization: Bearer <key> — 16 tools (3 free + 9 Pro + 4 Marina)

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

  • highSEO-CANON-002Missing canonical
  • highSEO-H1-001No h1 in served HTML
  • mediumSEO-META-007Meta description too short

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.

Why agents need a measurement layer

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.

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.

A verifiable loop

Audit, fix, re-audit. The finding id is stable, so its disappearance is the proof. No re-measurement means no proof, only a claim.

Root cause before symptoms

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.

Tools exposed by the server

Tool availability depends on your plan and wallet. Long-running work is asynchronous: the agent starts a job, then reads the result.

  • crawl_site

    Starts an asynchronous crawl of a domain and returns a job id. Poll get_job for progress and results.

  • audit_page

    Audits a single URL: HTTP status, canonical, headings, metadata, structured data, render-shell detection, extracted text.

  • audit_site

    Runs a full technical and generative-visibility audit across a crawled domain.

  • list_findings

    Returns normalised findings with a stable rule id, severity, evidence and whether a fix is available.

  • get_fix

    Returns the correction for a finding, adapted to your stack: plain HTML, WordPress, Next.js or TanStack Start.

  • check_indexability

    Checks robots.txt, meta robots, canonical target and HTTP chain for a given URL.

  • analyze_schema

    Validates JSON-LD against the visible content and reports mismatches, not just syntax errors.

  • analyze_links

    Internal link graph for a page or a site: inbound links, click depth, orphan detection, broken link verdicts.

  • ai_visibility

    Queries the major generative engines on a generated question set and reports observed brand citations.

  • get_job

    Reads the status and payload of any asynchronous job. Free of charge.

Crawlers MCP tools: returned data, execution mode and billing class.
ToolReturnsExecutionBilling
audit_pageHTTP status, canonical, headings, metadata, JSON-LD, extracted text, render-shell verdictSynchronousMetered
audit_siteSite-wide technical and generative-visibility findings, grouped by severityAsynchronousMetered
crawl_siteJob id, then crawled URLs with status and click depthAsynchronousMetered
list_findingsNormalised findings: rule id, severity, evidence, fix availabilitySynchronousFree
get_fixStack-specific patch: HTML, WordPress, Next.js, TanStack StartSynchronousMetered
check_indexabilityrobots.txt, meta robots, canonical target, redirect chainSynchronousMetered
analyze_schemaMismatches between JSON-LD and visible contentSynchronousMetered
analyze_linksInbound links, click depth, orphan pages, broken-link verdictsSynchronousMetered
ai_visibilityObserved brand citations per engine across a generated question setAsynchronousMetered
get_jobStatus and payload of any asynchronous jobSynchronousFree
Crawlers MCP tools: returned data, execution mode and billing class.

Anatomy of a finding

A finding is a stable unit, which is exactly what makes verification possible. Without a stable rule id, re-auditing compares nothing.

Rule id

A code such as SEO-H1-001, invariant across audits. Its disappearance after a patch is the proof the fix worked.

Evidence

The measured value, the excerpt and the URL. A finding with no evidence is never handed to the agent.

Severity and fix availability

Severity reflects expected impact, not rule order. Fix availability lists the stacks a patch exists for, so the agent knows whether it can act.

Sample normalised findings with severity, typical evidence and covered stacks.
Finding idRuleSeverityTypical evidenceCovered stacks
SEO-H1-001Exactly one h1CriticalNo h1 in served HTMLHTML, WordPress, Next.js
SEO-CANON-002Canonical present and consistentCriticalNo canonical tag, duplicate on /?ref=HTML, WordPress, Next.js
SEO-META-007Useful meta descriptionMedium62 characters, below display thresholdHTML, WordPress, Next.js
SEO-RENDER-005Content served without JavaScriptCriticalExtracted text under 200 characters before hydrationNext.js, TanStack Start
GEO-ANSWER-001Citable direct answerCriticalNo standalone 2-4 sentence passageHTML, WordPress, Next.js
Sample normalised findings with severity, typical evidence and covered stacks.

MCP client compatibility

The live server implements the Model Context Protocol over Streamable HTTP. Use a client that lets you configure x-marina-key or Authorization headers.

Compatibility of MCP clients with the Crawlers audit server.
ClientTransportAuthTypical use
Claude CodeStreamable HTTPMarina key / BearerAudit and fix inside the repository
Claude DesktopStreamable HTTPMarina key / BearerConversational diagnosis
CursorStreamable HTTPMarina key / BearerAudit while editing
Any conformant clientStreamable HTTPMarina key / BearerCustom automation
Compatibility of MCP clients with the Crawlers audit server.

A typical session in Claude Code

The developer asks for an optimisation. The agent orchestrates the loop without further instructions.

  1. audit_page on the route being edited.
  2. list_findings returns a missing canonical, a short description, absent JSON-LD.
  3. get_fix for each finding, scoped to the detected framework.
  4. The agent edits the files in the repository.
  5. audit_page again: the resolved findings are gone, the remaining ones are listed.

Connecting and billing

The operational endpoint is POST https://tutlimtasnjabdfhpewu.supabase.co/functions/v1/mcp-server over Streamable HTTP. Get your Marina key (prefix marina_ or mk_live_) from Console crawlers.fr → API → Marina. Set x-marina-key: <key> or Authorization: Bearer <key>. There are 16 tools: 3 free + 9 Pro + 4 Marina. A key belonging to an active Pro Agency account unlocks Pro access; calculate_cocoon_logic, wordpress_sync and measure_audit_impact still require a session JWT. Marina costs 5 credits per report, or is included with active Pro Agency.

Marina tools over MCP

Endpoint: https://tutlimtasnjabdfhpewu.supabase.co/functions/v1/mcp-server. Header: x-marina-key: <key> or Authorization: Bearer <key> (Console crawlers.fr → API → Marina; prefixes marina_ and mk_live_).

  • marina_create_report: starts an SEO and GEO report, returns a job_id.
  • marina_get_report: progress, then the report link.
  • marina_list_jobs: your recent reports.
  • marina_export_pdf: report PDF, link valid for 7 days.

5 credits per report, or included with an active Pro Agency subscription. Without enough credits: JSON-RPC -32002, no job created. Without a key, only check_geo_score, check_llm_visibility and check_ai_crawlers are free; Marina returns JSON-RPC -32001. The future proxy https://crawlers.fr/functions/v1/mcp-server is not live: coming via Cloudflare (not deployed).

Frequently asked questions

What is an SEO MCP server?+

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.

Which clients are supported?+

Any MCP client supporting Streamable HTTP and configurable authentication headers, including Claude Desktop, Claude Code and Cursor. The live endpoint accepts a Marina key, not an OAuth connection flow.

How is it billed?+

The live endpoint exposes 3 free tools without a key, 9 Pro tools and 4 Marina tools. Marina reports cost 5 credits, or are included with active Pro Agency. Insufficient credits return JSON-RPC -32002 and no job is created.

Does the agent change my site?+

No. Crawlers returns findings and proposed corrections. Your agent applies them in your repository or through your connected CMS.

Is generative visibility included?+

Yes. Alongside classic technical SEO, the server measures whether generative engines such as ChatGPT, Gemini, Perplexity and Claude cite your pages.

Why not let the model audit the page itself?+

A language model cannot measure served HTML, HTTP status or render behaviour. Without a crawl it produces plausible guesses instead of verifiable findings.

Sources and references

Related pages

Free audit, no credit card, 90 seconds

Try the audit engine first

Run the same engine your agent will call, on any URL.