The split is worth knowing before you pick a call: search finds pages, scrape reads one, crawl walks a site under a depth and page cap, and extract takes a list of URLs plus an instruction and returns only the fields you asked for. Extraction is the one that saves the most context, because the filtering happens before the content reaches the model. Everything runs against your own Firecrawl key.
An MCP server that puts Firecrawl behind an assistant. Four operations cover the range from find me pages, to read this one, to walk this site, to pull these specific fields out of these URLs using an instruction written in plain language.
- Search: a query string in, results as JSON out
- Extraction driven by an instruction rather than a selector — pass `urls` and a `prompt`, with `enableWebSearch` to supplement and `showSources` to keep the references
- Crawl a site from a starting `url`, bounded by `maxDepth` and a page `limit`, returned as markdown or HTML
- Scrape a single page, with screenshots optional
Python 3.8 or higher, the `uv` package manager, and a Firecrawl API key as `FIRECRAWL_API_KEY`; `OPENAI_API_KEY` is listed as optional, for the AI-powered features. Clone the repository, `uv venv`, `uv sync`, and put the keys in a `.env` at the project root. The documented client entry runs `uv` with `--directory`, your absolute checkout path, `run` and `main.py` — so the config points at a checkout rather than a published package. Usage is billed by Firecrawl.
