Librecrawl — Technical SEO Audit MCP Server
Self-hosted technical SEO audit MCP.
Connector by adityaarsharma · GitHub account verified by the MCP Registry
Install
Pick your client. Read the repository before you give any tool access to your data.
No install instructions from the source yet. Check the repository for setup steps.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 21 read · 5 write · 2 delete · 10 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
Tools by what they do 38
Read from the source code; the running server may list different tools.
Read 21 · Look things up without changing anything.
librecrawl_auditlibrecrawl_audit_artifactslibrecrawl_audit_cancellibrecrawl_audit_force_advancelibrecrawl_audit_pauselibrecrawl_audit_pdflibrecrawl_audit_resumelibrecrawl_audit_statuslibrecrawl_external_links_auditlibrecrawl_full_audit_strictlibrecrawl_get_settingslibrecrawl_get_status
Show 9 more tools
librecrawl_list_crawlslibrecrawl_pagespeed_auditlibrecrawl_pagespeed_audit_all_crawl_pageslibrecrawl_report_contentlibrecrawl_schema_auditlibrecrawl_schema_checklibrecrawl_schema_validatelibrecrawl_site_checklibrecrawl_visualization_data
Write 5 · Create, change, send or run things.
librecrawl_append_gsc_sectionlibrecrawl_merge_gsc_datalibrecrawl_start_chunked_auditlibrecrawl_start_crawllibrecrawl_stop_crawl
Delete 2 · Delete, drop, revoke or wipe things.
librecrawl_brain_purge_auditlibrecrawl_wipe_everything
Not yet classified 10 · We could not tell from the name and description.
librecrawl_audit_confirm_savedlibrecrawl_audit_ziplibrecrawl_export_resultslibrecrawl_filter_issueslibrecrawl_generate_reportlibrecrawl_internal_links_analysislibrecrawl_pagespeedlibrecrawl_pause_crawllibrecrawl_resume_crawllibrecrawl_resume_from_crawl_id
Network hosts it talks to 14
adityaarsharma.com· found in codeagent-plugins.org· found in codeanthropic.com· found in codeastral.sh· found in codeaudit.adityaarsharma.com· found in codeconsole.cloud.google.com· found in codedevelopers.google.com· found in codedocs.docker.com· found in codegithub.com· found in codeglama.ai· found in codegoogleapis.com· found in codehuge-site.com· found in coderaw.githubusercontent.com· found in codeyoursite.com· found in code
Files it touches
/tmp/x.pdf- Your home directory (~)
Tools (38)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
librecrawl_append_gsc_sectionAppend a Google Search Console errors section to an existing MD audit report. Workflow: 1. librecrawl_audit(url) → get report_path 2. Use gsc-posi connector to pull GSC coverage/crawl errors for the domain 3. Pass both here — GSC section gets appended to the report gsc_data keys (any/all): coverage_errors — list of {url, type, last_crawled} crawl_errors — list of {url, response_code, last_crawled} search_issues — list of strings (manual actions, security issues) performance — dict {clicks, impressions, ctr, position} (or pass these keys flat at…
librecrawl_auditFull SEO / technical site audit in one call — the Screaming Frog alternative. Crawls the entire site, runs 30+ checks across 17 categories (broken links, duplicate titles, missing H1, thin content, canonical issues, redirect chains, orphan pages, image alt text, Open Graph, hreflang, analytics coverage, and more), then saves a structured Markdown report with a prioritised fix checklist. USE THIS when asked to: - "audit [site]", "run an SEO audit", "technical SEO check", "site health check" - "find broken links / 404s", "check title tags / meta descriptions" - "analyse internal linking", "fin…
librecrawl_audit_artifactsReturn the file paths of artifacts produced for a finished session (MD report + per-page.csv + sitemap-recon.csv; PDF in v1.5+). Safe to call any time after status becomes 'done'. If called earlier returns success=False with a hint to wait. Args: session_id: From librecrawl_start_chunked_audit().
librecrawl_audit_cancelTerminal stop. Upstream crawl is stopped; partial artifacts are kept where written.
librecrawl_audit_confirm_savedConfirm the audit zip was saved locally, then wipe the server copy. Pass the sha256 of the file you saved. If it matches the zip the server built, the session rows, every artifact file, the zip and the upstream LibreCrawl crawl are deleted. A mismatch deletes nothing, so you can re-save and retry. Returns success True only when every cleanup step succeeded.
librecrawl_audit_force_advanceStuck-recovery escape hatch: force-finalise from whatever pages have been crawled so far. Stops the upstream, builds the report + sidecar CSVs from the current export, marks the session 'done'. Only use when status has been 'crawling'/'throttled' for an unusually long time and recent_events shows no progress.
librecrawl_audit_pausePause a crawling session. Resume with librecrawl_audit_resume().
librecrawl_audit_pdfNEW IN v1.5 — convert a previously-generated Markdown audit report to a branded PDF. The PDF is rendered with WeasyPrint using the LibreCrawl MCP branded template (Aditya Sharma footer, accent #2563eb, sans-serif body) and written next to the input .md as <domain>-<ts>.pdf. USE THIS when: - You have an old .md report from a previous audit and want a PDF - You want to regenerate the PDF after edits to the .md - The audit's auto-PDF pass failed and you want to retry Args: report_path: Path to a .md report inside REPORTS_DIR. base_url: Optional. Audited site URL — improves the…
librecrawl_audit_resumeResume a paused or throttled session. Runner picks it back up on the next loop.
librecrawl_audit_statusPoll progress on a chunked audit. Safe to call as often as you like — reads from local SQLite state, doesn't hit the upstream every time. Returns: status — queued/crawling/throttled/paused/done/cancelled/failed pages_done — pages crawled so far total_max_pages — the cap you set current_delay_ms — current crawlDelay the controller has tuned to eta_seconds — rough estimate based on current speed (None if unknown) last_chunks — last 3 polling-window metrics (p95, err_rate, delay) recent_events — last 5 state transitions au…
librecrawl_audit_zipDownload the finished audit as a zip. v2.1. Flow for the calling agent: 1. base64-decode `content_base64` and write it to a LOCAL file named `filename`. Report the LOCAL path, never `zip_path` (that is on the remote server). 2. Compute sha256 of the saved file and call librecrawl_audit_confirm_saved(session_id, sha256). The server wipes the session, artifacts and upstream crawl only after that check passes, so a failed save never loses the only copy. Args: session_id: From librecrawl_start_chunked_audit() once status=done. auto_cleanup: False (default…
librecrawl_brain_purge_auditDelete a crawl's data from the upstream LibreCrawl database after the report has been consumed. Use this for post-audit cleanup so the DB doesn't accumulate stale crawl payloads. The Markdown report and sidecar CSV files in REPORTS_DIR are NOT touched — they live on disk independently of the DB record. `success` is True only when the crawl record is actually gone. Args: crawl_id: ID returned by librecrawl_audit / start_crawl / list_crawls.
librecrawl_export_resultsExport raw crawl JSON. For a formatted report use librecrawl_generate_report() instead. Args: crawl_id: ID from librecrawl_start_crawl (optional)
librecrawl_external_links_auditNEW IN v1.4.1 — validate every external (outbound) link from a crawl. Closes the gap LibreCrawl's upstream leaves open: the export captures every outbound URL but doesn't HEAD/GET them, so target_status sits at null. This tool fetches each unique external target with a concurrent HEAD pool (GET fallback when HEAD is blocked), follows redirects, and classifies the result Screaming-Frog-style. Output: writes <domain>-<ts>.external-links.csv next to the crawl's other artifacts. Columns: target_url, status_code, status_class, final_url, redirect_count, error_reason, content_type, response_time_m…
librecrawl_filter_issuesFilter crawl issues by exclusion patterns — useful to suppress known false positives. Pass a list of URL patterns or issue types to exclude from results. Args: patterns: List of strings to exclude (e.g. ["/wp-admin/", "cdn.example.com"])
Show 23 more tools
librecrawl_full_audit_strictSTRICT-MODE site audit — Screaming Frog parity. Same as librecrawl_audit but the response is annotated with an audit_complete flag and the run is marked incomplete if ANY of these happen: • crawl timed out before queue drained • max_pages cap was hit • upstream batch caps tripped • report file or sidecar CSV failed to write • sitemap reconciliation could not be computed Use this when you need a defensible audit certificate — every cap, sample, or partial result is surfaced loudly rather than hidden in summary counts. On success the run produces 3 files in REPORTS_DIR: • <domain>-…
librecrawl_generate_reportGenerate a full Markdown SEO audit report from a completed crawl. Runs 30+ checks (broken links, titles, metas, canonicals, images, orphan pages, redirect chains, analytics coverage, etc.) and saves as a .md file. USE THIS after librecrawl_start_crawl() finishes, or to re-generate a report from any past crawl_id via librecrawl_list_crawls(). Args: crawl_id: ID from librecrawl_start_crawl (optional — uses current crawl if omitted)
librecrawl_get_settingsGet current crawler settings (maxUrls, maxDepth, crawlDelay, JS rendering, etc). Useful to confirm settings before starting a crawl. Returns the handful of settings that shape a crawl. Pass full=True for every setting, including the long default exclusion lists (about 2,500 tokens).
librecrawl_get_statusPoll current crawl progress. Repeat until is_running=False. Returns: is_running, crawled, queued, issues, base_url
librecrawl_internal_links_analysisDeep internal linking analysis — maps internal authority distribution across the site. Answers: - Which pages get the most internal links? (= Google considers them most important) - Which pages are orphans? (zero inbound internal links — invisible to Googlebot) - Which pages have zero outgoing internal links? (dead ends — no crawl flow out) - Which pages are crawl budget hubs? (link out to the most others) - What anchor text patterns dominate? (keyword signal analysis) USE THIS when asked: - "internal linking audit", "orphan pages", "link equity distribution" - "which pages need more interna…
librecrawl_list_crawlsList all saved crawls with URL, crawl_id, and timestamp.
librecrawl_merge_gsc_dataNEW IN v1.5 — merge Google Search Console performance data into a crawl. Augments the .per-page.csv with 5 new columns (clicks_28d, impressions_28d, ctr_28d, position_28d, top_query) for every URL matched, and emits three new sidecar CSVs alongside the report: - <domain>-<ts>.gsc-winners.csv top 50 by clicks - <domain>-<ts>.gsc-losers.csv top 50 high-impressions + low CTR - <domain>-<ts>.gsc-quick-wins.csv position 11-20 + impressions > 100 GSC data shape (accepts what gsc-posi / aditya-gsc returns): { "rows": [ {"url": "https://...", "clicks": N, "impressions": …
librecrawl_pagespeedCore Web Vitals and Lighthouse scores via Google PageSpeed Insights API. Returns LCP, CLS, FCP, TBT, INP, performance/SEO/accessibility scores, and real-user CrUX field data where available. USE THIS when asked: - "Core Web Vitals", "page speed", "Lighthouse score", "CWV check" - "how fast is [page]", "LCP / CLS issues", "performance audit" Args: url: Full URL to test strategy: "mobile" (default) or "desktop"
librecrawl_pagespeed_auditBatch Core Web Vitals audit — runs PageSpeed Insights on multiple pages, ranked worst to best performance score. Identifies your slowest pages first. Throttled to 1 req/sec to stay within the free 25k/day PSI quota. USE THIS when asked: - "check CWV across all pages", "which pages are slowest", "batch page speed audit" - "performance audit for the whole site" (pass top URLs from librecrawl_audit export) Args: urls: List of URLs to test (recommend top 10–25 pages) strategy: "mobile" (default) or "desktop"
librecrawl_pagespeed_audit_all_crawl_pagesFull PageSpeed Insights audit across EVERY crawled URL from a saved crawl. Makes the performance audit explicit — no sampling, no hidden caps. Each call to Google PSI counts against your daily 25k-call quota; budget accordingly (1 strategy = 1 call per URL). Use this when you need defensible CWV coverage for the entire site, not just the top N pages from librecrawl_pagespeed_audit. Args: crawl_id: The crawl ID to pull URLs from (librecrawl_list_crawls). strategy: "mobile" (default) or "desktop". limit: Hard ceiling on URLs to audit. 0 = no limit (recommended). …
librecrawl_pause_crawlPause the currently running crawl. Resume with librecrawl_resume_crawl().
librecrawl_report_contentReturn the contents of a saved audit report file. The MCP wrapper runs on a remote VPS, so callers cannot read REPORTS_DIR over the filesystem — this tool serves the file back through MCP. Path-restricted to REPORTS_DIR for safety; anything outside returns an error. Args: report_path: Path returned by librecrawl_audit / generate_report / full_audit_strict. Accepts the .md report, the .per-page.csv, or .sitemap-recon.csv. max_chars: Max characters to return. Default 200k. Content beyond this is truncated; set higher only if your client can handle it…
librecrawl_resume_crawlResume a paused crawl in the current session.
librecrawl_resume_from_crawl_idResume a previously interrupted crawl from the database — even from a NEW MCP session, days later, after server restarts. Continues from where the crawl left off, re-using all already-crawled URLs (no duplicate work, no extra load on the target). This is the way to handle "however big, in chunks" without overloading the target: Day 1: librecrawl_audit("https://huge-site.com", max_pages=5000) — runs until time/limits or you pause it Day 2: librecrawl_list_crawls() → find your crawl_id librecrawl_resume_from_crawl_id(crawl_id) — picks up where it left off, polite…
librecrawl_schema_auditSchema.org / structured data coverage audit across multiple pages. No API key required. Identifies pages with no schema, shows schema type breakdown across the site, and flags missing rich result opportunities. NO SILENT CAPS: the whole list is processed. Internally batched in groups of `batch_size` with `batch_delay` seconds between requests to stay polite to the target server. Walks JSON-LD @graph containers (Yoast / RankMath / WPRM) so Recipe / Article / FAQPage types inside @graph are correctly extracted instead of being labelled "Unknown". USE THIS when asked: - "schema coverage across …
librecrawl_schema_checkExtract and classify all Schema.org / JSON-LD structured data from a page. No API key required — fetches and parses the live page directly. Returns schema types found, which Google rich results they unlock (FAQ accordion, star ratings, breadcrumbs, product snippets, etc.), and which high-value schema types are missing. USE THIS when asked: - "does [page] have schema markup", "check structured data", "JSON-LD audit" - "what rich results is this page eligible for", "add FAQ schema" Args: url: Full URL to check
librecrawl_schema_validateNEW IN v1.5 — validate JSON-LD structured data against schema.org spec AND Google Rich Results required fields. The existing schema_check / _audit tools EXTRACT and classify schema types. This tool goes further: for the 7 most common rich-result types (Article, Product, Recipe, FAQPage, BreadcrumbList, Event, JobPosting, VideoObject, HowTo) it checks that ALL required fields are present and surfaces specific missing-field findings. Output: writes <domain>-<ts>.schema-validation.csv alongside the report with one row per finding (url, type, severity, check, detail). USE THIS when asked: - "…
librecrawl_site_checkInstant technical SEO health check — no crawl needed, results in seconds. Checks robots.txt (rules, disallow, sitemap declaration, crawl-delay), sitemap.xml (existence, URL count, sitemap index), HTTPS redirect (http → https), and www/non-www canonicalisation. USE THIS when asked: - "check robots.txt", "is the sitemap set up", "quick site health" - "does [site] redirect http to https", "www vs non-www check" - Fast pre-audit sanity check before a full librecrawl_audit() Args: url: Site root URL (e.g. https://example.com)
librecrawl_start_chunked_auditNEW IN v1.4.0 — Start a chunked-progressive audit. Returns IMMEDIATELY with a session_id; the crawl runs in the background and survives PM2 restart. The runner polls upstream LibreCrawl every 20s, computes p95 latency + error rate per window, and re-tunes crawlDelay live (AIMD controller). Slow target → smaller per-second rate. Fast target → speeds up. Never overloads the site you're auditing. Returns: session_id — opaque id to poll librecrawl_audit_status() with status — initial state ("queued" → quickly becomes "crawling") url — echo of the input…
librecrawl_start_crawlStart an async site crawl. Returns crawl_id immediately — does NOT wait for completion. Poll librecrawl_get_status() until done, then librecrawl_generate_report(crawl_id). Prefer librecrawl_audit() for a one-call full SEO audit with auto-report. Use this tool when you need step-by-step control or want to crawl in the background. Args: url: Full URL to crawl (e.g. https://example.com) max_pages: Max pages to crawl. Default 500. 0 = unlimited, which also needs confirm_unbounded=True. confirm_unbounded: Required with max_pages=0.
librecrawl_stop_crawlStop the currently running crawl.
librecrawl_visualization_dataGet site link graph data from the current crawl — nodes (pages) and edges (links). Useful for understanding site architecture, identifying link clusters, and finding isolated sections of the site that Googlebot may not reach efficiently. Returns: nodes list (url, depth, status) and edges list (source → target links).
librecrawl_wipe_everythingNEW IN v1.9.0 — Nuke ALL audit data: every session row, every artifact file in REPORTS_DIR, every LibreCrawl upstream crawl record. Use to return the MCP to a zero-memory baseline. REQUIRES confirm=True. Default refuses to fire. `success` is True only when every step succeeded; otherwise `wiped.errors` lists what is left.
Signals
- Stars
- 43
- Forks
- 7
- Open issues
- 4
- Last commit
- Oct 22, 2026 (7 days ago)
- Last release
- Oct 22, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.adityaarsharma/librecrawl-technical-seo-audit-mcp- Version
- 2.0.5
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from adityaarsharma
Cite this page
Librecrawl — Technical SEO Audit MCP Server. Agent Mart. https://agentmart.dev/connectors/adityaarsharma-librecrawl-technical-seo-audit-mcp (last updated 2026-10-25)