Skip to main content
Glama

Connect your agent without installing anything: hosted Octocrawl is one MCP URL, https://mcp.octocrawl.dev/mcp, and one REST API, https://api.octocrawl.dev, with no key needed to start (Quick start). Or try one page in the browser at octocrawl.dev: the web preview reads one page at a time, five a day, and besides Markdown returns the page's links and metadata, and up to 20 fields read without a model (how it is deployed).

If Octocrawl is useful to you, star the repository; it helps other people find it.

Why Octocrawl?

  • In your agent in one line: a hosted MCP server for Claude Code, Cursor, OpenCode and Codex. No key is needed to start.

  • Failure is a result: a page comes back blocked, failed or empty_verified with a reason, never as an empty success. An error page keeps its status and Markdown as evidence (details).

  • Five false-success checks: challenge text, wrong-page content, missing facts, truncation and too little content.

  • An Evidence Record on every page: final URL, redirects, fetch time, status, lane, robots.txt decision, hashes and field evidence, described by a versioned JSON Schema (reference). An unknown value is null, not zero.

  • Escalates only when it must: HTTP first, then a browser, then your login or a proxy. Each attempt is traced and the task's cost is counted.

  • Measured against ground truth: a 56-case fixture suite (soft 404s, challenge pages, SPAs, timeouts, zip bombs, tables) measures the false-success rate.

  • Open source, runs anywhere: the server, CLI and MCP server are AGPL-3.0; the TypeScript, Python and Vercel AI SDK clients are MIT. Run it with npx, self-host it with Docker Compose, or move over from Firecrawl with the shim.

Related MCP server: crw-mcp

Quick start

Connect your agent to hosted Octocrawl. No key is needed to start (steps for Claude Code, Cursor, OpenCode and Codex):

claude mcp add --transport http octocrawl https://mcp.octocrawl.dev/mcp

Without a key it reads 20 pages a day over HTTP. For more, sign in and make a key: an account gets 1,000 credits a month and the browser lane. The key goes in a header, never in the URL:

claude mcp add --transport http octocrawl https://mcp.octocrawl.dev/mcp --header "Authorization: Bearer oc_…"

Or run it on your own computer. You need Node.js 22.13+ or 24+:

npx octocrawl scrape https://example.com --markdown
pip install 'octocrawl-client[pandas]'   # the Python client of a running API (npx octocrawl serve); [pandas] for to_pandas()
npm install @octocrawl/sdk        # the TypeScript client; @octocrawl/mcp is the MCP server
npm install @octocrawl/ai-sdk     # scrape and map as Vercel AI SDK tools, on hosted Octocrawl by default

Pages are read over HTTP first. For pages that only appear in a browser, install Chromium once with npx playwright install chromium; until then such a page comes back with a browser_not_installed warning that names the command.

To give your agent every tool, with no daily limit, run the API locally and connect the MCP server to it:

npx octocrawl serve                                  # keep it running: the API on 127.0.0.1:8787
claude mcp add octocrawl -- npx -y @octocrawl/mcp    # the published stdio server, a client of that API

The hosted service offers scrape and map. The local server adds crawl, batch, the Amazon.sg product tool and the Monitor tools. To serve other machines yourself, npx octocrawl serve --hosted --token <token> refuses private addresses, robots overrides and saved logins as the hosted service does. Running Octocrawl covers all three; Docker Compose runs one on your own server. An agent installing Octocrawl for you (Cline, for one) can follow llms-install.md.

What a failure looks like

The test page below answers HTTP 200 but shows a Cloudflare check instead of content (fixture block-challenge-200). A crawler that trusts the status code counts it as a success. Octocrawl tries plain HTTP, then a browser, and reports the page as blocked, with what to do next:

npx octocrawl scrape http://127.0.0.1:8799/block/challenge-200
{
  "status": "blocked",
  "blockReason": "cloudflare_challenge",
  "channelsTried": ["http", "browser_local"],
  "markdown": null,
  "snapshot": { "httpStatus": 200, "artifacts": [] },
  "usage": { "wallMs": 1079, "bytesWire": null, "externalCostUsd": 0 },
  "agentHints": [
    "127.0.0.1 gates automated access on the lanes tried (http, browser_local); … a proxy or session you own is the supported route, or, on your own machine, getting through the check yourself in your own Chrome: handoff: true on a scrape (octocrawl scrape --handoff) …"
  ],
  "evidenceRecord": { "schemaVersion": "w2l.evidence/1", "status": "blocked", "reason": "cloudflare_challenge", "lane": "browser_local", "…": "…" }
}

This is real output of octocrawl 0.4.1, trimmed (…) and rounded, against the repository's fixture server (FIXTURE_PORT=8799 node --import tsx packages/fixtures/src/cli.ts). bytesWire: null means wire bytes were not measured; artifacts: [] means no screenshot or DOM snapshot was made.

Documentation

The site's docs at octocrawl.dev/docs cover MCP setup for four clients, task guides and limits. They are built from apps/public-web/content.

The full reference lives in docs/:

Topic

Page

The octocrawl command

Command line

Hosted, local and self-hosted servers, ports, tokens, proxies, robots.txt

Running Octocrawl

Options for a scrape and what a result carries

Scrape options and results

Many URLs, whole sites, site maps, webhooks

Batches, crawls and maps

Structured data from a JSON Schema

JSON extraction

PDF, CSV, XLSX, ZIP and JSON URLs

Files

Your login, enhanced access, handoff, your own Chrome

Access

Scheduled re-reads and HTTPS events

Monitors

Moving from Firecrawl

Firecrawl shim

Walkthroughs of real runs are on the blog: Claude Code web scraping with MCP, Web scraping for RAG, Find all pages on a website, Scrape a website with login, in your own Chrome, Extract structured data without an LLM, Scrape a list of URLs and keep every failure.

For researchers, two guides walk through a real run: From a URL list to a CSV with evidence and Citing web data in a paper.

For the Monitor → result → HTTPS event → restart workflow, follow the onboarding guide.

Work on the code

You need Node.js 22.13+ or 24+ and npm. The PDF engine, pdf.js, needs 22.13 or later.

git clone https://github.com/77777R7/Octocrawl.git
cd Octocrawl
npm ci
npx playwright install chromium
npm run typecheck
npm test
npm run scrape -- https://example.com --markdown
npm run crawl -- https://example.com --max-pages 20

The packages are published from this repository. Each week the Install check workflow runs the npx line from an empty cache on macOS, Windows and Linux.

Names: Octocrawl and w2l

The product is called Octocrawl. Its earlier working name was W2L (Web-to-LLM).

Some identifiers still use the old name. They stay until a change renames them on purpose, because renaming them breaks existing setups and records:

  • environment variables such as W2L_API_PORT and W2L_TASK_ROOT;

  • the data directory .w2l/;

  • the internal workspace packages @w2l/* and the checkout's w2l command (npm run w2l);

  • the SDK classes W2L and W2LError;

  • the Evidence Record version w2l.evidence/1;

  • the research identity w2l-research, which sites' robots.txt can name.

The published packages already use the new name: octocrawl, @octocrawl/* and octocrawl-client. The full list is in AGENTS.md.

Benchmark

Run the fixture suite against the bare HTTP baseline:

npm run bench

The bare HTTP baseline has a high false-success rate on purpose. It has no content extraction, challenge detection or redirect handling. Benchmarks shows the expected output and the throughput and crash-recovery run.

Repository structure

packages/
  contracts/       TypeScript types and ground-truth schema (MIT)
  fixtures/        HTTP server with 56 ground-truth test cases
  http-core/       robots.txt parser (ReDoS-resistant)
  extract-tf/      Content extraction, HTML → Markdown, PDF text
  runtime/         TaskStore, frontier, bounded crawl orchestrator
  bench/           Benchmark runner, ladder CLI (w2l-ladder), scoring
  cli/             octocrawl: scrape, crawl, batch, map, serve (AGPL)
  api/             REST server (AGPL)
  sdk/             TypeScript client (MIT)
  ai-sdk/          scrape and map as Vercel AI SDK tools (MIT)
  mcp/             stdio and restricted Streamable HTTP MCP server (AGPL)
  public-preview/  Server for the public preview at octocrawl.dev

apps/public-web/   The octocrawl.dev site and its docs pages
python/            Python client octocrawl-client (MIT)
examples/          Runnable Monitor + Delivery workflow and webhook receiver
docs/              Reference, guides, ADRs and dated records (index: docs/README.md)
ROADMAP.md         The current phase and what is paused
CHANGELOG.md       Release notes

Roadmap

ROADMAP.md starts with a summary of the current phase. The earlier milestone checklist is in docs/roadmap/milestones.md.

Contributing

We use the Developer Certificate of Origin (DCO) instead of a CLA. Every commit needs a Signed-off-by line:

git commit -s -m "Your commit message"

See CONTRIBUTING.md for details, including how to write docs.

License

Server-side code, the CLI (@octocrawl/cli, octocrawl) and the MCP server (@octocrawl/mcp): AGPL-3.0
Client libraries: MIT: the TypeScript SDK (@octocrawl/sdk, which includes the workspace's @w2l/contracts, also MIT), the AI SDK tools (@octocrawl/ai-sdk, which include the SDK) and the Python client (octocrawl-client)

See PHASE1_ENGINEERING_NOTES.md §1.3 for the rationale.

Why AGPL?

AGPL requires network-deployed modifications to remain open. Anyone can fork, modify, and host Octocrawl — as long as they share those modifications. The real differentiator is the name (trademark) and the hosted service, not the license lock.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Web content extraction for AI agents. 10 tools: scrape, crawl, map, batch, extract, summarize, diff, brand, search, research. Uses TLS fingerprinting to bypass anti-bot without a headless browser. Outputs LLM-optimized markdown with 67% fewer tokens than raw HTML.
    10
    2,380
    AGPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Web scraping, crawling, and structured data extraction for AI agents. 5 tools: scrape (clean markdown from any URL), crawl (entire sites), map (discover URLs), extract (structured JSON), and search. 833ms avg latency, single binary, self-hostable.
    8
    1,129
    AGPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables LLM agents to read any website by scraping and crawling into clean Markdown, automatically bypassing bot detection with residential proxies.
    3
    28 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to crawl and scrape websites, converting HTML to clean Markdown and structured metadata with support for JavaScript rendering, bot evasion, and SSRF protection.
    185
    MIT