Skip to main content

screamingfrog-audit-mcp

CI Python 3.10+ License: MIT

Drive the Screaming Frog SEO Spider from Claude, Cursor, or any other MCP client. Crawl a site, get a ranked issue register back, ask questions of the crawl data, and render a shareable report — without opening the GUI or writing a single command.

It works on the free, unlicensed SEO Spider

That is the point of this server, and it is unusual: the other MCP servers for Screaming Frog build on its saved-crawl database, which is a licensed feature, so they need a paid install. This one drives the crawl directly and never touches that database.

The free tier caps you at 500 URLs per invocation — not per site. So full=true reads robots.txt and the sitemaps, splits the URLs into batches under the cap, runs each through list mode, and merges the exports. A 3,000-page site audits completely on a free install.

A licence removes the cap and unlocks config= for JavaScript rendering and custom extraction. Both tiers are supported and the server adapts to whichever you have.

You:  Crawl example.com and tell me what's actually broken.

→ start_crawl(url="https://example.com")
→ crawl_status()                     # 248 URLs, 51s
→ get_issues(priority="High")

Claude: Three high-priority problems. The big one: robots.txt disallows
/_next/, which hides 85 JS and CSS bundles from Google...

Install

You need two things: Python 3.10+ and the Screaming Frog SEO Spider installed on the same machine (download). The free version is fine.

Claude Code

claude mcp add screaming-frog -- \
  uvx --from git+https://github.com/mshahiddigital/screamingfrog-audit-mcp screamingfrog-audit-mcp

Claude Desktop, Cursor, or any client with a JSON config

{
  "mcpServers": {
    "screaming-frog": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/mshahiddigital/screamingfrog-audit-mcp",
        "screamingfrog-audit-mcp"
      ]
    }
  }
}

Config file locations:

Client Path
Claude Desktop (macOS) ~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows) %APPDATA%\Claude\claude_desktop_config.json
Cursor ~/.cursor/mcp.json

Restart the client after editing. uvx comes with uv.

Prefer pip

pip install git+https://github.com/mshahiddigital/screamingfrog-audit-mcp

Then use "command": "screamingfrog-audit-mcp" with "args": [].

First run

Ask your client: "check my screaming frog install". It calls check_install, which reports the binary it found, your tier, and what that tier can do.

If the server won't start

An MCP server talks over stdio, so a startup failure shows up in your client as a dead server with no reason given. Run the preflight in a terminal instead:

screamingfrog-audit-mcp --doctor

It checks your Python version, the MCP SDK, whether the SEO Spider is found and actually runs, your licence tier, and whether the audit folder is writable — then prints a client config matching how this copy was installed.

  [PASS] Python: Python 3.12.7 on Darwin
  [PASS] MCP SDK: MCP SDK 2.1.1, using MCPServer (mcp 2.x)
  [FAIL] SEO Spider: Screaming Frog SEO Spider not found
    Install it from https://www.screamingfrog.co.uk/seo-spider/ ,
    or set SCREAMING_FROG_PATH to the executable.

Running from uvx? Use uvx --from git+https://github.com/mshahiddigital/screamingfrog-audit-mcp screamingfrog-audit-mcp --doctor.

Not on PyPI yet. Once it is published, the above shortens to uvx screamingfrog-audit-mcp.

The free-tier situation

The received wisdom is that the Screaming Frog CLI needs a licence. It does not. Verified against a build reporting Licence Status: Missing:

Works unlicensed --headless, spider / list / sitemap crawl modes, every tab export, every saved report, sitemap generation
Licence-gated save/load crawl, crawl comparison, config files, JavaScript rendering, scheduling, and the GA4 / Search Console / PageSpeed / Ahrefs / Moz integrations
Capped 500 URLs per invocation — not per site

Because the cap is per invocation, start_crawl(full=true) discovers URLs from robots.txt and the sitemaps, batches them under the cap through list mode, and merges the exports back into one set. That crawls a site of any size on the free tier.

A licence removes the cap and makes full unnecessary. Everything else works the same.

Tools

Tool What it does
check_install Install status, licence status, current limits, and how to fix a failed lookup
available_filters The export names your Screaming Frog build accepts
start_crawl Background headless crawl. full beats the free cap, everything exports every table
crawl_status Poll a running crawl. Omit job_id for the most recent
cancel_crawl Stop a crawl, keep partial exports
list_crawls Crawl folders, newest first, with headline counts
get_issues The priority-ranked issue register. Start here
get_analysis What the set of URLs means: depth, link equity, sitemap accuracy, content depth, performance, indexability, duplication
list_exports The CSV exports in a crawl, with row counts
read_export Rows from one export: column-selectable, filterable, paged, capped
build_report report.md + a printable, self-contained report.html + analysis.json

Two design decisions worth knowing

Crawls are background jobs. A crawl takes minutes; an MCP call should answer in seconds. start_crawl forks a detached child and hands back a job_id. Nothing blocks unless you pass wait_seconds. The crawl survives the MCP server restarting.

Reads are capped, on purpose. A finished crawl folder is tens of megabytes of CSV. Feeding that to a model is both useless and expensive. Every read tool caps at 500 rows, lets you pick columns, and truncates long cells. Ask get_issues first — it's the whole site in about 60 lines — and reach for read_export only to answer a specific question.

Where crawls are stored

~/.screamingfrog-audit-mcp/audits/<label>/ by default. Each folder holds the raw Screaming Frog CSV exports, audit-summary.json, and whatever build_report wrote.

Override with SF_MCP_AUDIT_DIR:

{
  "mcpServers": {
    "screaming-frog": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/mshahiddigital/screamingfrog-audit-mcp",
        "screamingfrog-audit-mcp"
      ],
      "env": { "SF_MCP_AUDIT_DIR": "/Users/you/audits" }
    }
  }
}

Set SCREAMING_FROG_PATH if the Spider is installed somewhere non-standard.

Use it without MCP

The crawl pipeline is a plain module:

python -m screamingfrog_audit_mcp.runner --url https://example.com --output ./audit
python -m screamingfrog_audit_mcp.runner --url https://example.com --output ./audit --full

Gotchas found the hard way

  • One wrong filter name aborts the whole crawl. Screaming Frog renames tab filters between versions, and an unrecognised name fails the run with a Java stack trace rather than skipping it. Every name is validated against your installed binary at crawl time, so an upgrade degrades instead of breaking.
  • Its own --help output contains a poisoned entry. The binary lists a placeholder UNDEF:Unknown, and passing it back aborts the crawl with Using UNDEF as tab is not supported. It's filtered out.
  • os.kill(pid, 0) is not a liveness probe on Windows. Any signal other than CTRL_C/CTRL_BREAK routes to TerminateProcess, so the usual "does this pid exist" idiom would kill the crawl and then report it finished. Windows uses tasklist to check and taskkill to cancel, and never signals. Detaching differs too: start_new_session is POSIX-only.
  • everything mode is curated, not literal. The Spider lists ~1,150 tab filters, but 800+ are Custom Extraction / Custom Search / Custom JavaScript / AI filters that need a licence-gated config file and are permanently empty. Requesting them costs minutes and returns nothing, so those groups plus the API-dependent ones are excluded.

Development

git clone https://github.com/mshahiddigital/screamingfrog-audit-mcp
cd screamingfrog-audit-mcp
pip install -e ".[dev]"
pytest

The test suite runs on synthetic export fixtures, so it passes on a machine that has never had Screaming Frog installed.

Changelog

See CHANGELOG.md.

License

MIT. Not affiliated with or endorsed by Screaming Frog Ltd. You need your own copy of the SEO Spider; issue names, descriptions and fix guidance in the output are Screaming Frog's own.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

screamingfrog_audit_mcp-1.0.0.tar.gz (36.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

screamingfrog_audit_mcp-1.0.0-py3-none-any.whl (35.5 kB view details)

Uploaded Python 3

File details

Details for the file screamingfrog_audit_mcp-1.0.0.tar.gz.

File metadata

  • Download URL: screamingfrog_audit_mcp-1.0.0.tar.gz
  • Upload date:
  • Size: 36.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for screamingfrog_audit_mcp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 287f65bab2545bd618c76b30a46bed01dae7fbc3072ee35b11d4093ad66d2e38
MD5 890047b64a1a20be3d03af5686bf4f46
BLAKE2b-256 252fe6466b8a9c2cabcdaeb44192bcdfa7f0ff111df395c697e579e5a5865c6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamingfrog_audit_mcp-1.0.0.tar.gz:

Publisher: publish.yml on mshahiddigital/screamingfrog-audit-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screamingfrog_audit_mcp-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for screamingfrog_audit_mcp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 748157ec05a2da9f554affff5568a5c0743c98898384aba97cea1b4b26fd22b0
MD5 56223318227a8f57c704377431d7ccbc
BLAKE2b-256 af22ad35c164c530dbfb9b2555c2b35f4bd33add1a1be34dca490f6a5369b8d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for screamingfrog_audit_mcp-1.0.0-py3-none-any.whl:

Publisher: publish.yml on mshahiddigital/screamingfrog-audit-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.4.1

2 files

1.4.0

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.1

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.2

2 files

1.0.1

2 files

This release

1.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page