Firecrawl

Lightweight, dependency-free, in-memory fake of the Firecrawl API v1 for testing scraping/crawling integrations. Scrape output is deterministically derived from the requested URL — the same URL always yields the same markdown/html/metadata. Zero runtime dependencies (Node builtins only); state is in-memory and ephemeral.

Default port: 4885

Quick start

import { FirecrawlServer } from "./services/firecrawl/src/server.js";

const server = new FirecrawlServer(4885);
await server.start();
// ... run your app/tests ...
await server.stop();

Authenticate with Authorization: Bearer fc-<key> (any non-empty bearer accepted):

curl -H "Authorization: Bearer fc-parlel" -H "Content-Type: application/json" \
     -d '{"url":"https://parlel.dev"}' \
     http://127.0.0.1:4885/v1/scrape

Access via MCP / preview URL

The service is registered in the parlel pool and reachable through the parlel MCP server and its generated preview URL. Set FIRECRAWL_API_KEY=fc-parlel and FIRECRAWL_BASE_URL=http://127.0.0.1:4885, then call scrape/crawl/map. The MCP server proxies the endpoints below so an agent can exercise scraping flows without hitting the network or a real Firecrawl account.

Implemented operations

All /v1/* routes require Authorization: Bearer <key> (any non-empty bearer accepted).

Service & inspection operations (parlel extensions)

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

FeatureStatus
Scrape (deterministic markdown/html/metadata)✅ Supported
Crawl start + status (synchronous completion)✅ Supported
Map (link list)✅ Supported
Real network fetching / JS rendering / screenshots✓ By design — Intentional for a local, zero-cost test emulator
Async crawl progression (scrapingcompleted)◐ Completes immediately
extract / search / structured-data (LLM) endpoints⟳ Roadmap
Webhooks / batch scrape⟳ Roadmap
formats option (screenshot, links, rawHtml)◐ Always returns markdown + html
API key validity / credit accounting✓ By design — Intentional for a local, zero-cost test emulator

Manifest

See services/firecrawl/manifest.json:

<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

FIRECRAWL_API_KEY=fc-parlel
FIRECRAWL_BASE_URL=http://parlel-bridge:4885
<!-- parlel:testenv:end -->