JSON, not an opinion
expert_seo_audit and the other registered tools return the JSON of the function they call. The registration does not define rule ids, a severity scale, or a per-framework patch format.
Crawlers.fr exposes its audit engine as a Model Context Protocol server. Claude Code, Claude Desktop and Cursor call the tools registered on mcp-server: a GEO score, LLM visibility, an SEO audit, corrective JavaScript, and Marina reports. The names below are the ones in the server code.
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 or Authorization: Bearer — 27 registered tools (mcp-server 1.2.0): 3 with no key, 12 Pro Agency, get_audit_job authenticated and free, 4 Marina, 7 Search Console tools reserved for admins (read-only).
Audit the SEO of this URL.
claude
I’ll call expert_seo_audit. It is a registered Pro Agency tool and expects a url.
crawlers · mcpexpert_seo_audit
{ "url": "https://example.com/contact" }The tool returns the JSON produced by the audit function. This panel is an example of the call, not a measurement of example.com.
claude
To generate corrective JavaScript, the registered tool is generate_corrective_code (url, optional audit_id).
crawlers · mcpgenerate_corrective_code
{ "url": "https://example.com/contact" }Returns JavaScript corrective code for SEO/GEO fixes. Applying it in the repository is done by the agent, not by this tool.
Example dialogue using tools that are actually registered. No sample score is shown.
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.
expert_seo_audit and the other registered tools return the JSON of the function they call. The registration does not define rule ids, a severity scale, or a per-framework patch format.
Call expert_seo_audit, read the result with get_audit_job, then generate_corrective_code, then expert_seo_audit again. sync: true forces the blocking call. The comparison is between the two completed JSON payloads.
generate_corrective_code returns JavaScript. dry_run_script tests a generated script (a site_script_rules id) on the live page: JS errors, CLS and JSON-LD validity. wordpress_sync injects a fix into a connected WordPress site and requires a session JWT.
27 registered tools (mcp-server 1.2.0): 3 with no key, 12 Pro Agency, get_audit_job authenticated and free, 4 Marina, 7 Search Console tools reserved for admins (read-only). Descriptions follow the text registered with each tool.
check_geo_scoreGEO score from 0 to 100. Input: domain. Access: No key.
check_llm_visibilityDomain visibility across ChatGPT, Gemini, Perplexity and Claude. Input: domain. Access: No key.
check_ai_crawlersAI bot analysis for GPTBot, ClaudeBot and Google-Extended. Input: domain. Access: No key.
expert_seo_auditStarts a 200-point SEO audit and returns a job_id to poll with get_audit_job. sync: true forces the blocking call. Pro Agency required. Input: url, optional lang (fr, en, es). Access: Pro Agency.
strategic_ai_auditStarts a strategic AI audit (SEO, GEO and competitive) and returns a job_id to poll with get_audit_job. sync: true forces the blocking call. Pro Agency required. Input: url, optional sector and lang. Access: Pro Agency.
get_audit_jobStatus and result of an audit started by expert_seo_audit or strategic_ai_audit, limited to the owning account. Authentication required. Free, outside the DataForSEO quota. Input: job_id. Access: Key or JWT, free.
keyword_researchGoogle keyword ideas (volume and Labs difficulty from 0 to 100). France and fr by default, up to 5 seeds, 15 results by default and 25 at most. Pro Agency, read-only, 30 calls per hour. Access: Pro Agency.
serp_rankingLive Google organic SERP for a keyword, and a domain’s position when one is given. France and fr by default, depth 10 or 20 (default 10). Pro Agency, read-only, 30 calls per hour. Input: keyword. Access: Pro Agency.
backlink_snapshotSummary of a domain’s backlinks, referring domains and anchors. 10 rows by default, 20 at most for referrers and for anchors. Pro Agency, read-only, 30 calls per hour. Input: domain. Access: Pro Agency.
generate_corrective_codeGenerates JavaScript corrective code for SEO/GEO fixes. Pro Agency required. Input: url, optional audit_id. Access: Pro Agency.
dry_run_scriptSandbox-tests a corrective script (site_script_rules id) on the live page: JS errors, CLS, JSON-LD validity. Pro Agency required. Input: script_id, optional target_url. Access: Pro Agency.
calculate_cocoon_logicSemantic cocoon via TF-IDF. Pro Agency required, and a session JWT (a Marina key is not enough). Input: domain and tracked_site_id. Access: Pro Agency.
measure_audit_impactImpact at T+30, T+60 and T+90 via Search Console and GA4. Pro Agency required, and a session JWT. Input: domain, optional audit_id. Access: Pro Agency.
wordpress_syncInjects fixes into WordPress via the CMS bridge. Pro Agency required, and a session JWT. Input: tracked_site_id and script_id. Access: Pro Agency.
fetch_serp_kpisWeekly SERP KPIs: rankings, traffic, visibility. Pro Agency required. Input: domain, optional tracked_site_id. Access: Pro Agency.
calculate_iasStrategic Alignment Index (IAS). Pro Agency required. Input: domain; tracked_site_id is required when calling with a Marina key. Access: Pro Agency.
marina_create_reportLaunches a Marina SEO and GEO report (described as 40+ pages). Marina key or JWT. 5 credits, or included with active Pro Agency. Returns a job_id to poll with marina_get_report. Access: Marina key or JWT.
marina_get_reportStatus and result of a Marina job owned by the caller. Free. Access: Marina key or JWT.
marina_list_jobsLists the caller's Marina jobs, most recent first. Free. Access: Marina key or JWT.
marina_export_pdfExports a completed Marina report as PDF (signed URL valid 7 days). Free. Access: Marina key or JWT.
gsc_list_sitesLists the allowed Search Console properties of the connected Google account. Admin only. Read-only. Access: Admin, read-only.
gsc_search_analyticsClicks, impressions, CTR and position for an allowed property. Admin only. Read-only. Access: Admin, read-only.
gsc_top_queriesTop queries by clicks over 7, 28 or 90 days, with a delta. Admin only. Read-only. Access: Admin, read-only.
gsc_top_pagesTop pages by clicks over 7, 28 or 90 days, with a delta. Admin only. Read-only. Access: Admin, read-only.
gsc_position_historyDaily position series read from the database, with no Google call. Admin only. Read-only. Access: Admin, read-only.
gsc_url_inspectionURL inspection (5 URLs max per call): verdict, indexing, canonicals, rich results. Admin only. Read-only. Access: Admin, read-only.
gsc_list_sitemapsSubmitted sitemaps of an allowed property. Admin only. Read-only. Access: Admin, read-only.
| Tool | What the registration says | Access |
|---|---|---|
| check_geo_score | GEO score from 0 to 100. Input: domain. | No key |
| check_llm_visibility | Domain visibility across ChatGPT, Gemini, Perplexity and Claude. Input: domain. | No key |
| check_ai_crawlers | AI bot analysis for GPTBot, ClaudeBot and Google-Extended. Input: domain. | No key |
| expert_seo_audit | Starts a 200-point SEO audit and returns a job_id to poll with get_audit_job. sync: true forces the blocking call. Pro Agency required. Input: url, optional lang (fr, en, es). | Pro Agency |
| strategic_ai_audit | Starts a strategic AI audit (SEO, GEO and competitive) and returns a job_id to poll with get_audit_job. sync: true forces the blocking call. Pro Agency required. Input: url, optional sector and lang. | Pro Agency |
| get_audit_job | Status and result of an audit started by expert_seo_audit or strategic_ai_audit, limited to the owning account. Authentication required. Free, outside the DataForSEO quota. Input: job_id. | Key or JWT, free |
| keyword_research | Google keyword ideas (volume and Labs difficulty from 0 to 100). France and fr by default, up to 5 seeds, 15 results by default and 25 at most. Pro Agency, read-only, 30 calls per hour. | Pro Agency |
| serp_ranking | Live Google organic SERP for a keyword, and a domain’s position when one is given. France and fr by default, depth 10 or 20 (default 10). Pro Agency, read-only, 30 calls per hour. Input: keyword. | Pro Agency |
| backlink_snapshot | Summary of a domain’s backlinks, referring domains and anchors. 10 rows by default, 20 at most for referrers and for anchors. Pro Agency, read-only, 30 calls per hour. Input: domain. | Pro Agency |
| generate_corrective_code | Generates JavaScript corrective code for SEO/GEO fixes. Pro Agency required. Input: url, optional audit_id. | Pro Agency |
| dry_run_script | Sandbox-tests a corrective script (site_script_rules id) on the live page: JS errors, CLS, JSON-LD validity. Pro Agency required. Input: script_id, optional target_url. | Pro Agency |
| calculate_cocoon_logic | Semantic cocoon via TF-IDF. Pro Agency required, and a session JWT (a Marina key is not enough). Input: domain and tracked_site_id. | Pro Agency |
| measure_audit_impact | Impact at T+30, T+60 and T+90 via Search Console and GA4. Pro Agency required, and a session JWT. Input: domain, optional audit_id. | Pro Agency |
| wordpress_sync | Injects fixes into WordPress via the CMS bridge. Pro Agency required, and a session JWT. Input: tracked_site_id and script_id. | Pro Agency |
| fetch_serp_kpis | Weekly SERP KPIs: rankings, traffic, visibility. Pro Agency required. Input: domain, optional tracked_site_id. | Pro Agency |
| calculate_ias | Strategic Alignment Index (IAS). Pro Agency required. Input: domain; tracked_site_id is required when calling with a Marina key. | Pro Agency |
| marina_create_report | Launches a Marina SEO and GEO report (described as 40+ pages). Marina key or JWT. 5 credits, or included with active Pro Agency. Returns a job_id to poll with marina_get_report. | Marina key or JWT |
| marina_get_report | Status and result of a Marina job owned by the caller. Free. | Marina key or JWT |
| marina_list_jobs | Lists the caller's Marina jobs, most recent first. Free. | Marina key or JWT |
| marina_export_pdf | Exports a completed Marina report as PDF (signed URL valid 7 days). Free. | Marina key or JWT |
| gsc_list_sites | Lists the allowed Search Console properties of the connected Google account. Admin only. Read-only. | Admin, read-only |
| gsc_search_analytics | Clicks, impressions, CTR and position for an allowed property. Admin only. Read-only. | Admin, read-only |
| gsc_top_queries | Top queries by clicks over 7, 28 or 90 days, with a delta. Admin only. Read-only. | Admin, read-only |
| gsc_top_pages | Top pages by clicks over 7, 28 or 90 days, with a delta. Admin only. Read-only. | Admin, read-only |
| gsc_position_history | Daily position series read from the database, with no Google call. Admin only. Read-only. | Admin, read-only |
| gsc_url_inspection | URL inspection (5 URLs max per call): verdict, indexing, canonicals, rich results. Admin only. Read-only. | Admin, read-only |
| gsc_list_sitemaps | Submitted sitemaps of an allowed property. Admin only. Read-only. | Admin, read-only |
A second server, supabase/functions/mcp, uses OAuth 2.1. It is not the endpoint above. Its serp_ranking tool is separate from the one on mcp-server: it is always billed to the wallet.
| Tool | What the registration says |
|---|---|
| whoami | Identity of the connected user (id, email, OAuth client). |
| list_my_sites | Sites followed by the user (domain, latest audit, EEAT score). |
| get_site_audit | Latest SEO/GEO audit of a followed site, from its domain. |
| get_job | Status and result of a job started by a start_* tool or audit_page. Free. |
| get_wallet_balance | Developer wallet balance, today's MCP usage and the daily cap. |
| list_tools_pricing | Cost of each tool on this server: free, included, wallet overflow, or always paid. |
| audit_page | Starts an expert audit of one page and returns a job_id. |
| analyze_schema | Analyses the machine layer of a page (JSON-LD, markup, metadata) and returns a job_id. |
| check_indexability | Checks robot access to a page (robots, canonical, render, JavaScript shell) and returns a job_id. |
| analyze_links | Analyses internal linking of a domain (depth, cocoons, cannibalisation) and returns a job_id. |
| start_site_crawl | Starts a crawl (breadth-first, depth 3 maximum) and returns a job_id. |
| start_geo_audit | Starts the GEO score of a page (readability, citable passages, direct answers) and returns a job_id. |
| start_competitor_matrix | Compares the domain with 1 to 3 competitors and returns a job_id. |
| serp_ranking | Collects SERP positions for a keyword from several data providers. Always billed to the wallet. Returns a job_id. Input: keyword, optional domain and location. |
Each registered tool returns the JSON of the function it calls. This page does not publish rule identifiers, severity scales or stack-specific patch formats: that contract is not in the MCP registration. To compare two passes, call the same tool again and read the two payloads.
The live server implements the Model Context Protocol over Streamable HTTP. Use a client that lets you configure x-marina-key or Authorization headers.
| Client | Transport | Auth | Typical use |
|---|---|---|---|
| Claude Code | Streamable HTTP | Marina key / Bearer | Audit and fix inside the repository |
| Claude Desktop | Streamable HTTP | Marina key / Bearer | Conversational diagnosis |
| Cursor | Streamable HTTP | Marina key / Bearer | Audit while editing |
| Any conformant client | Streamable HTTP | Marina key / Bearer | Custom automation |
The developer asks for an optimisation. The agent orchestrates the loop without further instructions.
The operational endpoint isPOST https://tutlimtasnjabdfhpewu.supabase.co/functions/v1/mcp-serverover Streamable HTTP. Get your Marina key (prefixmarina_ormk_live_) from Console crawlers.fr → API → Marina. Setx-marina-key: <key>orAuthorization: Bearer <key>.27 registered tools (mcp-server 1.2.0): 3 with no key, 12 Pro Agency, get_audit_job authenticated and free, 4 Marina, 7 Search Console tools reserved for admins (read-only). 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.
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_).
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).
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 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.
The live endpoint registers 27 tools (mcp-server 1.2.0): 3 with no key, 12 for Pro Agency (including keyword_research, serp_ranking and backlink_snapshot), get_audit_job authenticated and free, 4 Marina tools, and 7 read-only Search Console tools reserved for admins. Marina reports cost 5 credits, or are included with active Pro Agency. Insufficient credits return JSON-RPC -32002 and no job is created.
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. On the OAuth server, analyze_schema reads the machine layer of a page.
Definitions of LCP, INP and CLS. dry_run_script reports CLS for a tested script.
robots.txt standard. On the OAuth server, check_indexability reads robot access.
Run the same engine your agent will call, on any URL.