Crawl websites and extract clean structured data optimized for AI applications and automation. Collect content from the web at scale while maintaining high-quality outputs.
The official MCP SDK for TypeScript lets Node and edge services call MCP servers directly, with an API key for headless auth.
This guide connects Firecrawl to TypeScript through MewCP, so TypeScript can use Firecrawl's 19 tools, like scrape_url, batch_scrape_urls and get_batch_scrape_status, without your Firecrawl credentials ever reaching the app.
Your Firecrawl API key is stored encrypted and injected only at call time. Your agent never holds it, so it can never leak it, log it or paste it into a prompt.
More apps
Extract structured data from websites and public web pages. Fetch content, parse information and transform online data into formats that can be consumed by applications, agents and workflows.
TinyFish MCP for running AI-driven browser automation tasks, deep web research, persistent browser login profiles, remote CDP browser sessions, and agentic wallet payments.
Scrape, extract, and understand the web, plus identify any company from a domain, email, name, or transaction string. This MCP server exposes Context.dev's API for web scraping in multiple formats (raw HTML, Markdown, screenshots, images, sitemaps, and web search), schema-driven structured data extraction, design-system extraction (styleguides and fonts), and brand intelligence lookups. It's built for AI agents that read, summarize, or monitor web content, for enriching CRM, KYC, or fintech pipelines with company and brand data, and for extracting a competitor's design system or structured product and pricing data at scale.
Google Maps provides location intelligence and place discovery through geocoding, nearby searches, place details, directions, and route calculations. Find businesses and points of interest, retrieve addresses and coordinates, compare travel routes, and explore geographic information using Google Maps data.
Other clients
Firecrawl works the same way in every client below. Pick yours for its own guide.
Free to start.
Scope access to the exact Firecrawl tools and accounts you allow, work and personal side by side. Anything outside that scope is refused at call time, even when the model asks for it.
Each call is logged: what ran, on which account, and whether it worked. Failures come back structured, so the agent knows whether to retry instead of guessing.
Every app sits behind one secure MCP URL, and there is no server for you to deploy or keep running. Add an integration in the dashboard and it is live on the next call, with no config to change and no new credentials to wire up. Tools load only when a task needs them, so your agent stays fast and focused however many apps you connect.
SDK clients sign in with an API key. Create one in your dashboard and replace API_KEY in the code below.
SDK clients run without a browser, so they sign in with your API key. Needs Node 18+ as an ES module (for example npx tsx script.ts).
Scrapes a single URL and returns its content in the requested formats. Returns the page as markdown, HTML, screenshot, links, or a summary. For public document URLs (PDF, DOCX) Firecrawl auto-detects and parses them. The response includes `data.metadata.scrapeId` which can be passed to `browser_interact` to continue interacting with the same live browser session.
Starts an async batch scrape job for a list of URLs. Returns a job ID immediately. Use `get_batch_scrape_status` to poll for completion and retrieve scraped content. Ideal for scraping 5–1000 URLs in parallel without blocking.
Polls the status of a batch scrape job started by `batch_scrape_urls`. Returns status (scraping/completed/failed), progress counters, and scraped pages when done. If `data.next` is present in the response, call again with the same job_id to get the next page of results.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Stops a running batch scrape job. All in-progress scraping is terminated and any unfinished results are permanently lost — this cannot be undone. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly which batch scrape job will be cancelled and that unfinished results will be permanently lost, and wait for their explicit written confirmation before proceeding.
Starts an async crawl job from a seed URL, following internal links up to the specified depth and page limit. Returns a job ID immediately. Use `get_crawl_status` to poll for progress and results. Use `include_paths`/`exclude_paths` regex patterns to control which URLs are visited. Ideal for extracting all content from a site, documentation, or blog.
Polls the status of a crawl job started by `crawl_url`. Returns status (scraping/completed/failed/cancelled), progress counters, and crawled pages. If `data.next` is present, call again to retrieve the next page of results.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Stops a running crawl job. All in-progress crawling is terminated and any unfinished pages are permanently lost — this cannot be undone. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user which crawl job will be cancelled and that unfinished pages will be permanently lost, and wait for their explicit written confirmation before proceeding.
Discovers all URLs on a website without scraping their content. Returns a list of links with title and description. Use before `crawl_url` to understand site structure, or pass `search` to filter URLs by relevance to a topic. Much faster and cheaper than crawling when you only need the URL list.
Searches the web and optionally scrapes the full content of each result. Returns web pages, images, or news depending on `sources`. Set `scrape_formats` to ['markdown'] to get full page content alongside each result — omit to get only title, description, and URL. Supports operator syntax: site:, filetype:, intitle:, -exclude, "exact phrase".
Parses a local or private document (PDF, DOCX, XLSX, HTML, and more) into clean markdown or structured data. Use when the file is not publicly accessible by URL — for public URLs use `scrape_url` instead. The file must be provided as base64-encoded bytes, making this suitable for workflow chains where a previous step fetches and encodes the file content.
Starts an autonomous web research agent that searches, navigates, and extracts data based on a natural language prompt. No URLs required — the agent finds them. Use `schema` to get structured JSON output. Returns a job ID; use `get_agent_status` to poll. Use `spark-1-mini` (default, 60% cheaper) for most tasks; `spark-1-pro` for complex multi-domain research. Set `max_credits` to cap spending — the job fails without charges if the limit is hit.
Polls the status of an agent job started by `run_agent`. Returns status (processing/completed/failed/cancelled), extracted data when done, and credit usage. Poll every 15–30 seconds; jobs typically complete in 1–5 minutes.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Requests cancellation of a running agent job. Any in-progress reasoning steps complete before the job transitions to cancelled — credits for completed steps may still be charged and cannot be recovered. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user which agent job will be cancelled and the credit implications, and wait for their explicit written confirmation before proceeding.
Executes code or a natural language prompt in the live browser session bound to a previous scrape job. The `scrape_id` comes from `data.metadata.scrapeId` in a `scrape_url` response. First call creates the browser session at the same page state as the scrape. Subsequent calls on the same `scrape_id` reuse the live session. Provide either `code` (Playwright/Node/Python/Bash to run) or `prompt_text` (AI-driven navigation), not both. Returns CDP URL, live view URL, stdout, and AI output. Call `browser_close` when done to release the session.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Destroys the browser session attached to a scrape job. All browser state, cookies, and session data are permanently lost and the session cannot be resumed — this cannot be undone. Always call this when done interacting to avoid leaking browser resources and credits. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, confirm with the user that the browser session is no longer needed, and wait for their explicit written confirmation before proceeding.
Searches Firecrawl's academic research index by topic, method, benchmark, or author. Returns ranked papers with paperId, title, abstract, and relevance score. Use `paperId` from results to call `get_paper` or `find_related_papers`. Supports filtering by author name substring, category (e.g. 'cs.LG'), and date range.
Retrieves full details for a specific research paper by its ID. Returns title, abstract, authors, categories, and dates. The `paper_id` can be a canonical paperId (e.g. '2014215642691656232') or a source-prefixed ID (e.g. 'arxiv:2105.05233') from `search_papers` results.
Finds papers related to a seed paper, ranked by semantic relevance to an intent. Use `mode` to choose expansion strategy: 'similar' (semantically close), 'citers' (papers that cite the seed), 'references' (papers cited by the seed). Returns ranked results with relevance scores. Ideal for literature review workflows: search_papers → find_related_papers → get_paper.
Searches GitHub issue history, pull requests, discussions, and repository READMEs using natural language. Returns matched content with repository metadata, URLs, and markdown snippets. Useful for researching how a bug was fixed, what a library's maintainers have said, or finding prior art in open source projects.