Web browsing superpowers for AI agents - one MCP server to scrape, crawl, extract, map, search, batch, research & monitor the web. Self-hosted, no API keys. Free Firecrawl alternative.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
- !Install pipes a remote script into a shell (curl | sh)
claude mcp add pyrecrawl -- uvx pyrecrawl{
"mcpServers": {
"pyrecrawl": {
"command": "uvx",
"args": ["pyrecrawl"]
}
}
}MCP Servers overview
# 🔥 PyreCrawl — Web Browsing Superpowers for Your AI Agent
[](https://opensource.org/licenses/MIT)
[](https://modelcontextprotocol.io/)
[](https://www.python.org/)
[](https://pypi.org/project/pyrecrawl/)
**One command gives any AI agent the whole web.** Scrape, extract, crawl, map, and search —
self-hosted, no API keys, no rate limits, no subscription.
PyreCrawl speaks **MCP** (Model Context Protocol), the standard tool interface for Claude,
Cursor, VS Code, Codex, OpenCode, Hermes, and any MCP-compatible agent.
A **smart auto-fallback ladder** always picks the cheapest method that succeeds:
```
fast HTTP
│ (403/503/Cloudflare challenge or empty body)
▼
stealth browser (real Chromium + Cloudflare solver)
│ (still blocked, or the page needs full JS rendering)
▼
deep processing (LLM-ready markdown, citations, structured extraction)
```
## ⚡ Tools exposed
| Tool | What it does |
|---|---|
| `scrape(url, prefer="auto")` | Single URL → LLM-ready markdown |
| `extract(url, schema)` | Scrape + structured extraction (JsonCss schema) |
| `map_site(root, include_pattern=None, limit=200)` | Enumerate all internal URLs |
| `crawl(root, max_pages=5, prefer="auto", include_paths=None, exclude_paths=None, max_depth=0)` | Multi-page crawl with path filters + true BFS depth |
| `document(url)` | PDF/DOCX/PPTX → markdown (no browser, optional `[docs]` extras) |
| `search(query, limit=10)` | Web search via DuckDuckGo HTML (no API key) |
| `search_papers(query, limit=8, source="arxiv", category=None)` | Academic search via arXiv + Crossref (no API key) — feed `pdf_url` into `document` |
| `batch_scrape(urls[], ...)` | Many URLs in ONE call — parallel, deduped, cache-aware |
| `deep_research(query, limit=5, scrape_top=3)` | Search → evidence pack with [n] citations (no LLM synthesis — your agent does that) |
| `monitor(url, action, css_selector=None)` | Change detection with persisted snapshots + unified diff |
| `session(session, action, ...)` | Persistent browser session (cookies kept) — login walls, multi-step flows, screenshots |
| `cache(action)` | Inspect/clear/enable/disable the HTTP response cache |
| `health()` | Versions + import sanity check |
**MCP Resources** (read-only state without a tool call):
`pyrecrawl://cache/stats` · `pyrecrawl://sessions` · `pyrecrawl://monitors`
**MCP Prompts** (ready-made playbooks): `research(topic)` · `rag_ingest(site)` · `watch_page(url)`
### Env flags
| Variable | Default | Effect |
|---|---|---|
| `PYRECRAWL_CACHE` | off | `1` = in-memory LRU (128 pages), or a directory path (reserved for disk mode) |
| `PYRECRAWL_CACHE_TTL` | `900` | Cache entry lifetime in seconds |
| `PYRECRAWL_MONITOR_DIR` | `~/.pyrecrawl/monitors` | Where monitor snapshots persist |
`prefer` options: `"auto"` (default ladder) · `"fast"` (HTTP only) · `"stealth"` (CF bypass) · `"llm"` (deep processing).
---
## 🚀 Install & Use (one-liner)
### 1. Install
#### [UV](https://docs.astral.sh/uv/) (recommended — one command, zero Python setup)
UV is a fast Python package manager that handles Python itself —
no need to install Python separately. Get it once:
```bash
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
[Learn more about UV →](https://docs.astral.sh/uv/)
Then run PyreCrawl directly — no venv, no `pip install`, no Python download:
```bash
uvx pyrecrawl@latest
```
#### Or via uv tool install (persistent, recommended for regular use)
```bash
uv tool install pyrecrawl
```
#### Or via pipx (alternative)
```bash
pipx install pyrecrawl
```
#### Or via pip into a venv
```bash
pip install pyrecrawl
```
### 2. One-time browser engines
```bash
pyrecrawl setup
```
This installs Chromium + stealth browser engines (~2 min, one-time).
### 3. Register with your AI agent
```bash
# Auto-detect installed agents and write their MCP configs
pyrecrawl install
# Or target specific agents
pyrecrawl install claude-desktop cursor
# Dry-run to preview what would change
pyrecrawl install --dry-run
```
Supported agents: `claude-desktop`, `claude-code`, `cursor`, `vscode`, `codex`, `opencode`, `hermes`.
### 4. Start chatting
After installing + registering, **restart your agent** (or start a new session). Then ask:
> *"Scrape https://example.com and summarize it."*
The tools appear as `mcp_pyrecrawl_scrape`, `mcp_pyrecrawl_extract`, `mcp_pyrecrawl_map_site`, `mcp_pyrecrawl_crawl`, `mcp_pyrecrawl_search`, `mcp_pyrecrawl_health`.
---
## 📚 Manual config (if `pyrecrawl install` doesn't match your setup)
### Claude Desktop
**Config file**
- Linux: `~/.config/Claude/claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%AppData%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"pyrecrawl": {
"command": "uvx",
"args": ["--from", "pyrecrawl", "pyrecrawl", "serve"]
}
}
}
```
### Claude Code
**Config file**: project-scoped `.mcp.json`
```json
{
"mcpServers": {
"pyrecrawl": {
"command": "uvx",
"args": ["--from", "pyrecrawl", "pyrecrawl", "serve"]
}
}
}
```
### Cursor
**Config file**: `~/.cursor/mcp.json`
```json
{
"mcpServers": {
"pyrecrawl": {
"command": "uvx",
"args": ["--from", "pyrecrawl", "pyrecrawl", "serve"]
}
}
}
```
### VS Code / Copilot
**Config file**: `.vscode/mcp.json` (project-scoped)
```json
{
"servers": {
"pyrecrawl": {
"command": "uvx",
"args": ["--from", "pyrecrawl", "pyrecrawl", "serve"],
"type": "stdio"
}
}
}
```
### Codex CLI
**Config file**: `~/.codex/config.toml`
```toml
[mcp_servers.pyrecrawl]
command = "uvx"
args = ["--from", "pyrecrawl", "pyrecrawl", "serve"]
```
### OpenCode
**Config file**: `~/.config/opencode/opencode.json`
```json
{
"mcp": {
"pyrecrawl": {
"type": "local",
"command": ["uvx", "--from", "pyrecrawl", "pyrecrawl", "serve"],
"enabled": true
}
}
}
```
### Hermes
**Config file**
- Linux/macOS: `~/.hermes/config.yaml`
- Windows: `%LocalAppData%\hermes\config.yaml`
```yaml
mcp_servers:
pyrecrawl:
command: uvx
args:
- --from
- pyrecrawl
- pyrecrawl
- serve
enabled: true
```
> **Windows note:** `uvx` must be on PATH. If not, use the full path to `uvx.exe` (e.g. `C:\Users\<you>\AppData\Local\hermes\bin\uvx.exe`).
---
## 🧠 How the ladder chooses
PyreCrawl runs each request through three tiers, stopping at the first one that returns
a complete, LLM-ready result:
| Concern | Fast tier | Stealth tier | Deep tier |
|---|---|---|---|
| Static HTML page | ✅ ~200ms | — | — |
| Cloudflare-protected | ❌ | ✅ Turnstile solver | — |
| JS-heavy SPA | ❌ | ✅ real Chromium | — |
| Live DOM data (input `.value`, JS state) | ❌ | ✅ `js` param | — |
| LLM-ready markdown + citations | — | — | ✅ BM25, fit-markdown |
| Structured extraction (CSS schema) | — | — | ✅ |
| Deep crawl (BFS/DFS/BestFirst) | — | — | ✅ adaptive |
The agent never has to pick. `prefer="auto"` does it every call.
### Live DOM data with `js` and `wait_for`
Some sites keep the data you want in a DOM *property* (e.g. an `<input>`'s `.value`)
that JS writes after an XHR — it never appears in the serialized HTML. The
`scrape` tool accepts two stealth-tier params for exactly this:
```json
{
"url": "https://temp-mail.org/id",
"prefer": "stealth",
"wait_for": "document.getElementById('mail').value.includes('@')",
"js": "document.getElementById('mail').value"
}
```
- `wait_for` — a JS **predicate expression** polled until truthy (bounded by `timeout`).
Use it instead of guessing a sleep for anything that arrives asynchronously.
- `js` — a JS **expression** evaluated once the page settles; the value comes back
in `meta.js_result`. Errors are captured in `meta.js_error` (the page result is
still returned, never a crash).
---
## 📊 Compared to Firecrawl (hosted)
| | Firecrawl | PyreCrawl |
|---|---|---|
| Cost | Free 1k/mo, then $16–333/mo | **Free, self-hosted** |
| Local LLM support | ❌ | ✅ Ollama / any LLM |
| Cloudflare bypass | ✅ (Fire-Engine, paid) | ✅ (free, built-in) |
| Markdown + BM25 | ✅ | ✅ |
| Self-host | ❌ | ✅ |
| Academic paper search | ❌ | ✅ arXiv + Crossref (`search_papers`) |
| Hosted search API | ✅ /search | ⚠️ DuckDuckGo HTML + arXiv/Crossref (no key) |
---
## 🔧 Development
```bash
git clone https://github.com/SanggonBoy/PyreCrawl.git
cd PyreCrawl
uv venv --python 3.12 .venv
source .venv/Scripts/activate # Windows; or .venv/bin/activate on macOS/Linux
uv pip install -e ".[dev]"
python -m playwright install chromium
scrapling install
```
### Run tests
```bash
python scripts/selfcheck.py # real-network smoke test
python scripts/probe_stdio.py # stdio JSON-RPC probe
```
---
## 📦 Publish
Maintainers only:
```bash
git tag v0.8.0
git push origin v0.8.0
```
GitHub Actions builds + uploads to PyPI via [trusted publishing](https://docs.pypi.org/trusted-publishers/).
---
## 🔔 Stay up to date
PyreCrawl checks PyPI on every startup and reports the latest version — your
MCP agent sees this automatically via the `health()` tool response and can
notify you inline.
To check manually:
```bash
pyrecrawl version
```
To upgrade:
```bash
pyrecrawl update # runs: uv tool upgrade pyrecrawl
```
**Get notified of new releases:** click **Watch** → **Releases only** at the
[GitHub repo](https://github.com/SanggonBoy/PyreCrawl) to receive email
notifications when a new version is published.
---
## 📜 Uninstall
```bash
# Remove from all agent configs
pyrecrawl uninstall
# Remove the package
uv tool uninstall pyrecrawl
```
---
## 🛡️ License
MIT — see [What people ask about PyreCrawl
What is SanggonBoy/PyreCrawl?
+
SanggonBoy/PyreCrawl is mcp servers for the Claude AI ecosystem. Web browsing superpowers for AI agents - one MCP server to scrape, crawl, extract, map, search, batch, research & monitor the web. Self-hosted, no API keys. Free Firecrawl alternative. It has 4 GitHub stars and its last recorded update is dated 2026-09-08.
How do I install PyreCrawl?
+
You can install PyreCrawl by cloning the repository (https://github.com/SanggonBoy/PyreCrawl) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is SanggonBoy/PyreCrawl safe to use?
+
Our security agent has analyzed SanggonBoy/PyreCrawl and assigned a Trust Score of 87/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.
Who maintains SanggonBoy/PyreCrawl?
+
SanggonBoy/PyreCrawl is maintained by SanggonBoy. The last recorded GitHub activity is dated 2026-09-08, with 0 open issues.
Are there alternatives to PyreCrawl?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy PyreCrawl to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/sanggonboy-pyrecrawl)<a href="https://claudewave.com/repo/sanggonboy-pyrecrawl"><img src="https://claudewave.com/api/badge/sanggonboy-pyrecrawl" alt="Featured on ClaudeWave: SanggonBoy/PyreCrawl" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!