Scrape, crawl, and search the web via Firecrawl’s official hosted MCP.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Run web research that returns structured data when the URLs are not known or the answer spans several sites. Describe the fields you need in `prompt`, optionally pass a JSON `schema` and seed `urls`, and the research agent searches, navigates, reads pages, and returns JSON assembled across sources. Use it to research an entity plus its fields (founders, pricing, contact details), to build lists and datasets (companies, people, products, jobs, papers), and for pages that need navigation or interaction to reach the data. Optional `effort` sets the reasoning budget, `maxCredits` caps spend, and `strictConstrainToURLs` keeps the agent to the supplied `urls`. This call returns only a job ID, not the research result. Read the job with `firecrawl_agent_status` until it reaches `completed` or `failed`; a typical research run takes one to three minutes. For one known URL use `firecrawl_scrape` (with formats: ["json"] for structured output); for a plain lookup that a results page answers, use `firecrawl_search`. The job also returns a `threadId`. To continue that thread, pass it with a follow-up `prompt`; omitted `mode`, `urls`, `schema` and exchange settings carry over from the previous turn. The agent only calls Alexandria providers whose terms the team has accepted. `exchange.skippedProviders` lists gated providers. With `exchange.onTermsRequired` "ask", a terms `pendingApproval` and `exchange.requiresAction` carry the `approvalId` and provider requirements. Read terms/show through `firecrawl_scrape`. An organization admin must accept terms in the Firecrawl dashboard at the provider URL or https://www.firecrawl.dev/app/settings?tab=data-sources. Ignore any terms/accept call in the API response. Only after the admin confirms acceptance, resume with the same `threadId` and `exchange.approve: {approvalId}`; this does not accept terms. To decline, use `exchange.decline: {approvalId}`. Never infer acceptance from a data request.
"extract" (default) returns the complete structured result every turn. "chat" lets a follow-up that asks no new data get a short reply in message instead of a re-run; required for exchange.requireApproval. Omitted on a follow-up keeps the previous turn's mode.
Reasoning budget for the agent task.
Alexandria provider settings for this turn, forwarded as the request's exchange object.
Continue this thread: the threadId from an earlier firecrawl_agent or firecrawl_agent_status result. Omit to start a new thread.
Spending limit in credits for this run. Defaults to 2500 on the API.
conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call.
If true, agent will only visit URLs provided in the urls array.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http mcp-firecrawl https://nova.civai.co/mcp/agents/mcp-firecrawl
Run web research that returns structured data when the URLs are not known or the answer spans several sites. Describe the fields you need in `prompt`, optionally pass a JSON `schema` and seed `urls`, and the research agent searches, navigates, reads pages, and returns JSON assembled across sources. Use it to research an entity plus its fields (founders, pricing, contact details), to build lists and datasets (companies, people, products, jobs, papers), and for pages that need navigation or interaction to reach the data. Optional `effort` sets the reasoning budget, `maxCredits` caps spend, and `strictConstrainToURLs` keeps the agent to the supplied `urls`. This call returns only a job ID, not the research result. Read the job with `firecrawl_agent_status` until it reaches `completed` or `failed`; a typical research run takes one to three minutes. For one known URL use `firecrawl_scrape` (with formats: ["json"] for structured output); for a plain lookup that a results page answers, use `firecrawl_search`. The job also returns a `threadId`. To continue that thread, pass it with a follow-up `prompt`; omitted `mode`, `urls`, `schema` and exchange settings carry over from the previous turn. The agent only calls Alexandria providers whose terms the team has accepted. `exchange.skippedProviders` lists gated providers. With `exchange.onTermsRequired` "ask", a terms `pendingApproval` and `exchange.requiresAction` carry the `approvalId` and provider requirements. Read terms/show through `firecrawl_scrape`. An organization admin must accept terms in the Firecrawl dashboard at the provider URL or https://www.firecrawl.dev/app/settings?tab=data-sources. Ignore any terms/accept call in the API response. Only after the admin confirms acceptance, resume with the same `threadId` and `exchange.approve: {approvalId}`; this does not accept terms. To decline, use `exchange.decline: {approvalId}`. Never infer acceptance from a data request.
| Argument | Type | Description |
|---|---|---|
| mode | string | "extract" (default) returns the complete structured result every turn. "chat" lets a follow-up that asks no new data get a short reply in message instead of a re-run; required for exchange.requireApproval. Omitted on a follow-up keeps the previous turn's mode. |
| urls | array | |
| effort | string | Reasoning budget for the agent task. |
| prompt* | string | |
| schema | object | |
| exchange | object | Alexandria provider settings for this turn, forwarded as the request's exchange object. |
| threadId | string | Continue this thread: the threadId from an earlier firecrawl_agent or firecrawl_agent_status result. Omit to start a new thread. |
| maxCredits | integer | Spending limit in credits for this run. Defaults to 2500 on the API. |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| strictConstrainToURLs | boolean | If true, agent will only visit URLs provided in the urls array. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"extract",
"chat"
],
"type": "string",
"description": "\"extract\" (default) returns the complete structured result every turn. \"chat\" lets a follow-up that asks no new data get a short reply in message instead of a re-run; required for exchange.requireApproval. Omitted on a follow-up keeps the previous turn's mode."
},
"urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
"effort": {
"enum": [
"low",
"medium",
"high"
],
"type": "string",
"description": "Reasoning budget for the agent task."
},
"prompt": {
"type": "string",
"maxLength": 10000,
"minLength": 1
},
"schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"exchange": {
"type": "object",
"properties": {
"approve": {
"type": "object",
"required": [
"approvalId"
],
"properties": {
"always": {
"type": "boolean"
},
"callIds": {
"type": "array",
"items": {
"type": "string"
}
},
"approvalId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Answer yes to the pendingApproval the previous turn of this thread ended on (its id, also exchange.requiresAction.approvalId). Needs threadId. For a terms offer, send it only after an organization admin confirms acceptance in the Firecrawl dashboard; this does not accept terms. callIds and always are ignored on terms offers. For paid calls, callIds picks a subset (default all) and always stops asking for the rest of the thread.",
"additionalProperties": false
},
"decline": {
"type": "object",
"required": [
"approvalId"
],
"properties": {
"approvalId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Answer no to that pendingApproval. Needs threadId. A declined terms offer keeps those providers out of the rest of the thread.",
"additionalProperties": false
},
"enabled": {
"type": "boolean",
"description": "Let the agent call Alexandria providers. On by default."
},
"maxCalls": {
"type": "integer",
"maximum": 30,
"minimum": 1,
"description": "Most provider calls the agent may make in this turn."
},
"toolkits": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "Pin up to 5 providers the agent may use, by slug. Omitted means the whole catalog."
},
"onTermsRequired": {
"enum": [
"skip",
"ask"
],
"type": "string",
"description": "What to do when a provider the agent would use needs data terms the team has not accepted. Gated providers are never called. \"skip\" (default): answer with accepted providers and list the rest in exchange.skippedProviders. \"ask\": the same, plus a terms pendingApproval and exchange.requiresAction. Read terms with terms/show; an organization admin accepts them in the Firecrawl dashboard. There is no auto-accept. Omitted on a follow-up keeps the previous turn's value."
},
"requireApproval": {
"type": "boolean",
"description": "End the turn with a paid-call pendingApproval before any paid provider call. Requires mode \"chat\" on the same request, even on a follow-up."
}
},
"description": "Alexandria provider settings for this turn, forwarded as the request's exchange object.",
"additionalProperties": false
},
"threadId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Continue this thread: the threadId from an earlier firecrawl_agent or firecrawl_agent_status result. Omit to start a new thread."
},
"maxCredits": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Spending limit in credits for this run. Defaults to 2500 on the API.",
"exclusiveMinimum": 0
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"strictConstrainToURLs": {
"type": "boolean",
"description": "If true, agent will only visit URLs provided in the urls array."
}
},
"additionalProperties": false
}Retrieve progress or final results for a `firecrawl_agent` job ID. A `processing` response is non-terminal and does not contain the final research result. Check again after 15–30 seconds until the status is `completed` or `failed`; a typical research run takes one to three minutes and complex jobs can take longer. If the job cannot finish within the task's available time, use `firecrawl_search` and `firecrawl_scrape` to complete the requested output. Returns job status, progress information, and result data when completed.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
}
},
"additionalProperties": false
}Retrieve the current status, progress, and available results for an existing crawl ID. This only reads Firecrawl job state and does not start or modify the crawl.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
}
},
"additionalProperties": false
}Start a multi-page crawl at a website URL, poll it to a terminal state, and return the final status and collected data. Scope can be bounded with include/exclude paths, depth, page limit, subdomain/external-link controls, sitemap handling, delay, and scrape options. Crawl results can be large; use conservative limits when full-site coverage is unnecessary. Webhooks and interactive scrape actions are unavailable in safe mode. Returns the crawl ID, status, and page data.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| delay | number | |
| limit | number | |
| prompt | string | |
| sitemap | string | |
| excludePaths | array | |
| includePaths | array | |
| scrapeOptions | object | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
Get the authenticated Firecrawl team's current credit balance or its credit usage over the last 90 days. Use the current view to answer how many credits remain or to check billing-period boundaries. Use the historical view to answer what credits were spent on and when. The current view returns `remainingCredits`, `planCredits`, `billingPeriodStart`, and `billingPeriodEnd`. Extra purchased or granted credits can make `remainingCredits` greater than `planCredits`. Billing-period dates may be null when the upstream billing provider has no period metadata. The historical view returns periods sorted by start date with `startDate`, `endDate`, and `creditsUsed`, one per calendar month, or one per UTC day with `bin: "day"`. Set `byEndpoint` to split each period by the endpoint that used the credits (`endpoint`: scrape, search, crawl, map, agent, ...), or `byApiKey` to split it by API key (`apiKey`). The endpoint split also counts search usage, which the unsplit and per-key figures leave out, so its rows can add up to more. The newest period's `endDate` can be null. A `notice` means the requested split or daily periods are not available yet and the periods are monthly figures. This tool cannot attribute credits to individual jobs, URLs, or MCP clients. Each tool's own result reports what that call used (`creditsUsed`, or `metadata.creditsUsed` on scrapes), and the Usage and Logs pages of the Firecrawl dashboard list usage per job.
| Argument | Type | Description |
|---|---|---|
| bin | string | Length of each historical period: calendar month (default) or UTC day. When view is omitted, it selects the historical view; it cannot be combined with view "current". |
| view | string | Select current balance or historical usage. Defaults to current. |
| byApiKey | boolean | Break historical usage down by API key. When view is omitted, true selects the historical view; it cannot be combined with view "current". |
Search an index of public repositories, GitHub issues, merged pull requests, repository READMEs, and code documentation for programming questions that need external documentation or upstream evidence. Returns ranked results with an ID, source type, URL, title, and the matched passages in markdown.
| Argument | Type | Description |
|---|---|---|
| k | integer | Number of ranked results to return (default 10). |
| query* | string | Natural-language developer question or search phrase, including the library, error message, or API involved when relevant. |
| skills | string | Set to "only" to search only agent-skill files. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"k": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of ranked results to return (default 10)."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Natural-language developer question or search phrase, including the library, error message, or API involved when relevant."
},
"skills": {
"enum": [
"only"
],
"type": "string",
"description": "Set to \"only\" to search only agent-skill files."
}
},
"additionalProperties": false
}Submit concise quality feedback for a completed search, scrape, parse, or map job. Provide the endpoint, job ID, rating, and relevant issue codes or small contextual fields; omit large page contents and raw outputs. For an Alexandria session, set endpoint to `alexandria`, omit jobId, and provide requestedWebsite (url and requestedFunctionality), objective, rationale, and rating. objective is the underlying goal behind the session: what you or your user were ultimately trying to accomplish (for example, "shortlist federal IT contracts to bid on this quarter"), not only what was needed from this website. Optional providerFeedback and capabilityFeedback describe gaps or errors. Capability issues: new_capability_request (requires requestedFunctionality), missing_capability, insufficient_functionality, incorrect_result, execution_error, other. Alexandria feedback must arrive within 20 minutes of the team's latest Alexandria search, discovery, or execution; later feedback is rejected. Eligible feedback can refund 1 credit; refunds are subject to daily caps per website and per team. Returns submission status, feedback ID, and accounting fields.
| Argument | Type | Description |
|---|---|---|
| url | string | |
| note | string | |
| tags | array | |
| jobId | string | |
| issues | array | |
| rating* | string | |
| endpoint |
Browse Alexandria data providers and workflows or read a selected contract. Alexandria covers companies, people, jobs, finance and filings, public records and government spending, real estate, places and restaurants, retail and prices, package registries and developer data, news, research, and more: typed, sourced records through published contracts. Prefer normal firecrawl_search for a data task; it already returns matching providers. Use this tool when the contract you need was not returned in full, to browse a category when search found nothing, or before scraping the same fields from several pages. Discovery is free. Use query for semantic discovery or urls to find providers for a website. With no arguments, browse categories, then providers and tools. Contracts describe the inputs and outputs for execution through firecrawl_scrape. nextTool identifies further discovery or pagination. Discovery does not execute providers. Use firecrawl_search when you also need web results.
| Argument | Type | Description |
|---|---|---|
| urls | array | |
| level | string | Usually omit: it follows the arguments (tools for query, urls, providers, capabilities or groups; providers for categories; categories with none). Set providers or groups to list those within a category or url scope instead of tools. query, or a non-empty expand with any other argument, returns tools. |
| limit | integer | |
| query | string | Semantic lookup of tools for the data you need. Selectors constrain the search. |
| expand | array | Use ["options", "response"] for inputs and output shape without example payloads; [] keeps results compact. Omit for full contracts on selected capabilities. |
Search US federal, state, and local statutes, regulations, codes, court opinions, and other government publications for legal or regulatory questions that need primary text. Clarify a missing jurisdiction or ambiguous as-of date before identifying the governing rule. Optional filters narrow results by jurisdiction, court, court type, cited law or case, and site. Filters keep only pages the index has labeled, so a filtered search can leave out relevant pages, and no results does not mean none exist. Court labels are most complete for federal courts and case-law collections. Returns ranked results with a position, title, URL, and matched snippet. Results may include historical versions, bill text, agency guidance, and third-party reproductions. Verify the issuer, jurisdiction, enacted/effective status, and version before citing current governing law. Read a known URL or additional page context with firecrawl_scrape. Use general search for non-US questions or missing coverage; no hits does not establish that no applicable law exists.
| Argument | Type | Description |
|---|---|---|
| k | integer | Number of ranked results to return (default 10). |
| cites | string | Keep only pages that cite one law or case, as a printed citation such as "42 U.S.C. § 1983" or "5 U.S. 137", or a citation id such as "us:usc:42:1983". |
| court | string | Keep only pages labeled for one court, by CourtListener court id, such as "scotus", "ca9" or "nysd". |
| query* | string | Natural-language legal or regulatory question or search phrase, including the jurisdiction, agency, or citation when relevant. |
| domain | string |
Open or reuse a live browser session to navigate a page, click controls, fill fields, or run browser code. Provide either `url` or `scrapeId`, and either a natural-language `prompt` or executable `code`; code can run as Bash, Python, or Node with a bounded timeout. This acts on the live site, so actions such as form submission can create persistent external side effects. Returns execution output, stdout/stderr, exit status, and session viewing URLs.
| Argument | Type | Description |
|---|---|---|
| url | string | |
| code | string | |
| prompt | string | |
| timeout | number | |
| language | string | |
| scrapeId | string | |
| scrapeOptions | object | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"code": {
"type": "string",
"minLength": 1
},
"prompt": {
"type": "string",
"minLength": 1
},
"timeout": {
"type": "number",
"maximum": 300,
"minimum": 1
},
"language": {
"enum": [
"bash",
"python",
"node"
],
"type": "string"
},
"scrapeId": {
"type": "string",
"minLength": 1
},
"scrapeOptions": {
"type": "object",
"properties": {
"proxy": {
"enum": [
"basic",
"stealth",
"enhanced",
"auto"
],
"type": "string"
},
"maxAge": {
"type": "number"
},
"mobile": {
"type": "boolean"
},
"formats": {
"type": "array",
"items": {
"enum": [
"markdown",
"html",
"rawHtml",
"screenshot",
"links",
"images",
"summary",
"changeTracking",
"branding",
"json",
"query",
"audio"
],
"type": "string"
}
},
"parsers": {
"type": "array",
"items": {
"enum": [
"pdf"
],
"type": "string"
}
},
"profile": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"saveChanges": {
"type": "boolean"
}
},
"additionalProperties": false
},
"waitFor": {
"type": "number"
},
"location": {
"type": "object",
"properties": {
"country": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"lockdown": {
"type": "boolean"
},
"redactPII": {
"type": "boolean"
},
"pdfOptions": {
"type": "object",
"properties": {
"maxPages": {
"type": "integer",
"maximum": 10000,
"minimum": 1
}
},
"additionalProperties": false
},
"excludeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"includeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"jsonOptions": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
},
"queryOptions": {
"type": "object",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"directQuote",
"freeform"
],
"type": "string",
"default": "freeform"
},
"prompt": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
},
"storeInCache": {
"type": "boolean"
},
"onlyMainContent": {
"type": "boolean"
},
"screenshotOptions": {
"type": "object",
"properties": {
"quality": {
"type": "number"
},
"fullPage": {
"type": "boolean"
},
"viewport": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"zeroDataRetention": {
"type": "boolean"
},
"removeBase64Images": {
"type": "boolean"
},
"skipTlsVerification": {
"type": "boolean"
}
},
"additionalProperties": false
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
}
},
"additionalProperties": false
}Stop the live interact session associated with a `scrapeId` and release its resources. Returns a success confirmation.
| Argument | Type | Description |
|---|---|---|
| scrapeId* | string | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"scrapeId"
],
"properties": {
"scrapeId": {
"type": "string"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
}
},
"additionalProperties": false
}Enumerate URLs indexed under one website through Firecrawl without fetching each page's content. Use this when the request asks for a site's URL inventory, when several relevant pages must be located, or when the desired page URL is unknown. An optional `search` term narrows the URL list, while sitemap, subdomain, query-parameter, and result-limit options control coverage. Returns matching URLs rather than page bodies. Retrieve one page with `firecrawl_scrape`; collect content across multiple pages with `firecrawl_crawl`. Authenticated responses can include an `id` for optional map feedback.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| limit | number | |
| search | string | |
| sitemap | string | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| includeSubdomains | boolean | |
| ignoreQueryParameters | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"limit": {
"type": "number"
},
"search": {
"type": "string"
},
"sitemap": {
"enum": [
"include",
"skip",
"only"
],
"type": "string"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"includeSubdomains": {
"type": "boolean"
},
"ignoreQueryParameters": {
"type": "boolean"
}
},
"additionalProperties": false
}Retrieve one monitor check and its page-level results, optionally filtered by page status. Pages report `same`, `new`, `changed`, `removed`, or `error`; configured goal judging can add a meaningful-change decision. Markdown tracking returns a unified text diff, JSON tracking returns field paths with previous/current values and a current snapshot, and mixed tracking returns both. Returns one page of results plus a `next` URL when more pages exist.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| skip | integer | |
| limit | integer | |
| checkId* | string | |
| pageStatus | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"checkId"
],
"properties": {
"id": {
"type": "string"
},
"skip": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"checkId": {
"type": "string"
},
"pageStatus": {
"enum": [
"same",
"new",
"changed",
"removed",
"error"
],
"type": "string"
}
},
"additionalProperties": false
}List historical checks for a monitor, optionally filtered by status and bounded by a result limit. Returns one page of check summaries and pagination metadata.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| limit | integer | |
| offset | integer | |
| status | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"status": {
"enum": [
"queued",
"running",
"completed",
"failed",
"partial",
"skipped_overlap"
],
"type": "string"
}
},
"additionalProperties": false
}Create a recurring scrape, crawl, or search monitor that compares each check with its retained predecessor. The simple form accepts `page`/`pages` or `queries` plus a plain-language `goal`; the advanced `body` form controls targets, schedule, change-tracking formats, judging, retention, webhook, and notifications. In the simple form, a `goal` is required. If `queries` contains one or more non-empty values and is supplied with `page`/`pages`, `queries` create the search target and page targets are ignored. A monitor schedules future network checks and can send configured email or webhook notifications. Returns the created monitor.
| Argument | Type | Description |
|---|---|---|
| body | object | |
| goal | string | |
| name | string | |
| page | string | |
| string | ||
| pages | array | |
| queries | array | |
| timezone | string | |
| maxResults | integer | |
| webhookUrl |
Permanently delete a monitor by ID and stop its future schedule. This operation cannot be undone and returns deletion status.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Retrieve one monitor by ID, including its configuration and current state. This does not run or modify the monitor.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}List monitors for the authenticated account with optional pagination controls. Returns one page of monitor records and pagination metadata.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| offset | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
},
"additionalProperties": false
}Queue an immediate check for a monitor outside its normal schedule. This starts network work for the monitor's configured targets and returns the queued check.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Patch an existing monitor by ID. The body can change its name, active/paused status, schedule, targets, goal, judging, webhook, notifications, or retention; these changes affect future scheduled checks. Returns the updated monitor.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| body* | object |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"body"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
}Parse one supported document into markdown, HTML, links, summary, targeted answers, or JSON matching a schema. Supported inputs include common HTML, PDF, Word, RTF, OpenDocument, and spreadsheet files; PDF parsing can be bounded with `pdfOptions.maxPages`. Local MCP reads `filePath` from the server filesystem. Hosted MCP uses two calls: first provide `filePath` to receive upload instructions, upload locally, then call again with the returned `uploadRef`; do not send both fields together. Remote web URLs belong in `firecrawl_scrape`. Set `redactPII` to request redaction of personally identifiable information in the returned content. `zeroDataRetention` requires an eligible authenticated account; omit it for anonymous keyless use. Returns upload instructions for hosted phase one or parsed document content for the final call. Authenticated final responses can include a `data.metadata.scrapeId` for optional parse feedback.
| Argument | Type | Description |
|---|---|---|
| proxy | string | |
| maxAge | number | Ignored: parse never reuses or stores indexed content. |
| formats | array | |
| parsers | array | |
| filePath | string | Phase 1 only: path to the local file on the caller/harness machine. Hosted MCP will not read or stat this path; it is used only to produce upload instructions. |
| redactPII | boolean | |
| uploadRef |
List every Alexandria data provider, or every provider in one category, in a single call; with limit, only the first providers in catalogue order. Used by the Firecrawl sidebar; free, and it executes no provider. Use firecrawl_find_tools to browse or read contracts.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Return only the first providers, in one catalogue page. |
| category | string | Category ID from the firecrawl_find_tools category index. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Return only the first providers, in one catalogue page."
},
"category": {
"type": "string",
"minLength": 1,
"description": "Category ID from the firecrawl_find_tools category index."
}
},
"additionalProperties": false
}List data providers recommended for the connected team from its own Firecrawl activity in the last 30 days, each with the reason it was picked. Used by the Firecrawl sidebar; free, and it executes no provider.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}Retrieve canonical metadata for one paper ID, such as an arXiv, PMC, PMID, or DOI identifier. Returns the title, abstract, authors, categories, source IDs, and dates as markdown.
| Argument | Type | Description |
|---|---|---|
| paperId* | string | Canonical paperId or primaryId such as `arxiv:1706.03762`, `pmcid:PMC12530322`, `pmid:40953549`, or `doi:10.1016/j.neunet.2025.108095`. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"paperId"
],
"properties": {
"paperId": {
"type": "string",
"minLength": 1,
"description": "Canonical paperId or primaryId such as `arxiv:1706.03762`, `pmcid:PMC12530322`, `pmid:40953549`, or `doi:10.1016/j.neunet.2025.108095`."
}
},
"additionalProperties": false
}Retrieve in-body passages from one paper that are relevant to a specific question. Full text is available only for indexed papers; `k` controls the number of passages. Returns matching passages or a notice when full text is unavailable.
| Argument | Type | Description |
|---|---|---|
| k | integer | Number of passages to return (default 4). |
| paperId* | string | Canonical paperId or primaryId such as `arxiv:1706.03762`, `pmcid:PMC12530322`, `pmid:40953549`, or `doi:10.1016/j.neunet.2025.108095`. |
| question* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"paperId",
"question"
],
"properties": {
"k": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of passages to return (default 4)."
},
"paperId": {
"type": "string",
"minLength": 1,
"description": "Canonical paperId or primaryId such as `arxiv:1706.03762`, `pmcid:PMC12530322`, `pmid:40953549`, or `doi:10.1016/j.neunet.2025.108095`."
},
"question": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}Find citation-graph candidates from one to ten `seed_ids`; the first ID is the primary seed and later IDs are anchors. `mode` defaults to `similar` (co-citation/bibliographic coupling); `citers` returns papers citing a seed and `references` papers cited by a seed. `intent` ranks candidates. Returns ranked candidates and the evaluated pool size.
| Argument | Type | Description |
|---|---|---|
| k | integer | |
| mode | string | |
| intent* | string | |
| rerank | boolean | Apply an additional rerank over the fused candidates. |
| seed_ids* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"seed_ids",
"intent"
],
"properties": {
"k": {
"type": "integer",
"maximum": 500,
"minimum": 1
},
"mode": {
"enum": [
"similar",
"citers",
"references"
],
"type": "string"
},
"intent": {
"type": "string",
"minLength": 1
},
"rerank": {
"type": "boolean",
"description": "Apply an additional rerank over the fused candidates."
},
"seed_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1
}
},
"additionalProperties": false
}Search paper metadata and abstracts with a natural-language query across the indexed corpus, which spans biomedical, life-science, and clinical literature (PubMed, bioRxiv, medRxiv) alongside arXiv and other scientific sources. Optional author, category, and date filters constrain results. Several distinct framings of the same question surface different papers than a single query does. Returns ranked papers with canonical IDs, titles, authors, and abstracts.
| Argument | Type | Description |
|---|---|---|
| k | integer | Number of ranked papers to return (default 40). |
| to | string | Inclusive upper bound on created/updated date (`YYYY-MM-DD`). |
| from | string | Inclusive lower bound on created/updated date (`YYYY-MM-DD`). |
| query* | string | Natural-language research topic or question, including methods, systems, conditions, populations, interventions, or outcomes when relevant. |
| authors | array | Author substring filter(s); ALL must match (case-insensitive). |
| categories | array | Paper category filter(s) (e.g. `cs.LG`); ALL provided values must match. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"k": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Number of ranked papers to return (default 40)."
},
"to": {
"type": "string",
"description": "Inclusive upper bound on created/updated date (`YYYY-MM-DD`)."
},
"from": {
"type": "string",
"description": "Inclusive lower bound on created/updated date (`YYYY-MM-DD`)."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Natural-language research topic or question, including methods, systems, conditions, populations, interventions, or outcomes when relevant."
},
"authors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Author substring filter(s); ALL must match (case-insensitive)."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "Paper category filter(s) (e.g. `cs.LG`); ALL provided values must match."
}
},
"additionalProperties": false
}Scrape one URL and return its content: markdown by default, or HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema. Use it when the request identifies a page and needs its content or defined fields: the user gives a URL or names a page or PDF and wants it read or summarized, or wants prices, specs, contact details or a table from it. Use `firecrawl_search` when additional web sources are needed; on an authenticated session, `firecrawl_map` lists a site's URLs and `firecrawl_crawl` collects a set of pages. Firecrawl may serve recently indexed content; set `maxAge: 0` for a live fetch or a smaller `maxAge` to bound staleness. A successful response does not by itself confirm the page is still current. A named browser profile loads saved session data without saving changes to it. Authenticated responses can include a `metadata.scrapeId` for optional scrape feedback. On an authenticated session, `firecrawl_search` and `firecrawl_find_tools` can discover providers for the same fields across several pages; a matching provider returns typed records in one call. With `alexandria` in place of `url`, the tool runs catalogued provider capabilities instead of fetching a page. Some providers require accepted terms; when a response reports a terms requirement, direct the user to the Firecrawl dashboard URL in that response.
| Argument | Type | Description |
|---|---|---|
| url | string | |
| proxy | string | |
| maxAge | number | |
| mobile | boolean | |
| formats | array | |
| parsers |
Search web, news, or image sources and return ranked results with query-relevant highlights. Use it for current information, or to list businesses, people, products, jobs or events with websites, prices or contacts. Each web result is a title, URL, and description; use `firecrawl_scrape` on a result URL when the excerpt is not enough. Authenticated search also returns matching Alexandria data providers in data.tools (companies, people, jobs, finance and filings, public records and government spending, real estate, places and restaurants, retail and prices, package registries and developer data, news, research, and more). Prefer a provider over scraping pages when the task needs the same fields across several entities, exact figures or timestamps, provenance, or many records; use web results when they already answer the question. Authenticated searches always add alexandria to the sources, so sources: ["web"] also returns providers; domainTools: false turns off website-matched tools only. On an authenticated session, tool matches describe available capabilities; `firecrawl_find_tools` returns their contracts and `firecrawl_scrape` with an `alexandria` body executes a selected capability. Keyless sessions get no Alexandria matches in data.tools. For a programming question, add `categories: ["developer"]`; its hits return in `data.web` with `category: "developer"`. For a legal or regulatory question, `categories: ["gov"]` returns hits in `data.web` with `category: "gov"` and cannot be combined with other categories; authenticated sessions also have `firecrawl_gov_search` as the dedicated tool. Verify gov results' issuer, jurisdiction, status, and version before citing current law. `categories: ["research"]` restricts web results to research-affiliated websites; the `firecrawl_research_*` tools are a separate surface over paper abstracts and full text (PubMed, bioRxiv, medRxiv, arXiv). Returns source-type result groups and usage metadata. Authenticated responses can include an `id` for optional search feedback.
| Argument | Type | Description |
|---|---|---|
| tbs | string | |
| limit | integer |
Records schema-validated quality feedback for a prior `firecrawl_search` UUID `searchId`. A `good` rating requires a valuable result or a valuable source, `partial` either of those or at least one `missingContent` entry, and `bad` at least one `missingContent` entry or a query suggestion; caps are 50 `valuableResults`, 50 `valuableSources`, and 20 `missingContent` entries. Eligibility is limited to successful searches within the feedback age window. The record is idempotent per search ID. Eligible first feedback for a search can refund 1 credit; refunds are subject to the team's daily cap. The response reports whether a refund was applied, along with submission and daily-cap status. Mark useful returned results in `valuableResults` as `{"source", "position"}` copied off the result. Groups are numbered from 1 independently, so `{"source":"web","position":1}` and `{"source":"news","position":1}` are different results. Be exhaustive — results you do not list are treated as not useful. Reserve `valuableSources` for useful URLs that were NOT among the returned results; never report one result in both fields.
| Argument | Type | Description |
|---|---|---|
| rating* | string | |
| searchId* | string | |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| missingContent | array | Array of specific pieces of content the agent expected to find but did not. One entry per distinct topic. Each entry has a short `topic` and optional longer `description`. |
Open the Firecrawl sidebar to browse Alexandria providers, attach tool context to a conversation, and view account credits and monthly usage. Requires a connected Firecrawl account. Use firecrawl_credit_usage for data-only reporting.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| maxConcurrency | number |
| allowSubdomains | boolean |
| crawlEntireDomain | boolean |
| maxDiscoveryDepth | number |
| allowExternalLinks | boolean |
| ignoreQueryParameters | boolean |
| deduplicateSimilarURLs | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"delay": {
"type": "number"
},
"limit": {
"type": "number"
},
"prompt": {
"type": "string"
},
"sitemap": {
"enum": [
"skip",
"include",
"only"
],
"type": "string"
},
"excludePaths": {
"type": "array",
"items": {
"type": "string"
}
},
"includePaths": {
"type": "array",
"items": {
"type": "string"
}
},
"scrapeOptions": {
"type": "object",
"properties": {
"proxy": {
"enum": [
"basic",
"stealth",
"enhanced",
"auto"
],
"type": "string"
},
"maxAge": {
"type": "number"
},
"mobile": {
"type": "boolean"
},
"formats": {
"type": "array",
"items": {
"enum": [
"markdown",
"html",
"rawHtml",
"screenshot",
"links",
"images",
"summary",
"changeTracking",
"branding",
"json",
"query",
"audio"
],
"type": "string"
}
},
"parsers": {
"type": "array",
"items": {
"enum": [
"pdf"
],
"type": "string"
}
},
"profile": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"saveChanges": {
"type": "boolean"
}
},
"additionalProperties": false
},
"waitFor": {
"type": "number"
},
"location": {
"type": "object",
"properties": {
"country": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"lockdown": {
"type": "boolean"
},
"redactPII": {
"type": "boolean"
},
"pdfOptions": {
"type": "object",
"properties": {
"maxPages": {
"type": "integer",
"maximum": 10000,
"minimum": 1
}
},
"additionalProperties": false
},
"excludeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"includeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"jsonOptions": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
},
"queryOptions": {
"type": "object",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"directQuote",
"freeform"
],
"type": "string",
"default": "freeform"
},
"prompt": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
},
"storeInCache": {
"type": "boolean"
},
"onlyMainContent": {
"type": "boolean"
},
"screenshotOptions": {
"type": "object",
"properties": {
"quality": {
"type": "number"
},
"fullPage": {
"type": "boolean"
},
"viewport": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"zeroDataRetention": {
"type": "boolean"
},
"removeBase64Images": {
"type": "boolean"
},
"skipTlsVerification": {
"type": "boolean"
}
},
"additionalProperties": false
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"maxConcurrency": {
"type": "number"
},
"allowSubdomains": {
"type": "boolean"
},
"crawlEntireDomain": {
"type": "boolean"
},
"maxDiscoveryDepth": {
"type": "number"
},
"allowExternalLinks": {
"type": "boolean"
},
"ignoreQueryParameters": {
"type": "boolean"
},
"deduplicateSimilarURLs": {
"type": "boolean"
}
},
"additionalProperties": false
}| byEndpoint | boolean | Break historical usage down by endpoint (scrape, search, crawl, map, agent, ...). When view is omitted, true selects the historical view; it cannot be combined with view "current" or byApiKey. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bin": {
"enum": [
"month",
"day"
],
"type": "string",
"description": "Length of each historical period: calendar month (default) or UTC day. When view is omitted, it selects the historical view; it cannot be combined with view \"current\"."
},
"view": {
"enum": [
"current",
"historical"
],
"type": "string",
"description": "Select current balance or historical usage. Defaults to current."
},
"byApiKey": {
"type": "boolean",
"description": "Break historical usage down by API key. When view is omitted, true selects the historical view; it cannot be combined with view \"current\"."
},
"byEndpoint": {
"type": "boolean",
"description": "Break historical usage down by endpoint (scrape, search, crawl, map, agent, ...). When view is omitted, true selects the historical view; it cannot be combined with view \"current\" or byApiKey."
}
},
"additionalProperties": false
}| string |
| metadata | object |
| objective | string |
| rationale | string |
| pageNumbers | array |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| missingContent | array |
| valuableSources | array |
| providerFeedback | array |
| querySuggestions | string |
| requestedWebsite | object |
| capabilityFeedback | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"endpoint",
"rating"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"note": {
"type": "string",
"maxLength": 4000
},
"tags": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 80,
"minLength": 1
},
"maxItems": 20
},
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"issues": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$",
"maxLength": 80,
"minLength": 1
},
"maxItems": 20
},
"rating": {
"enum": [
"good",
"bad",
"partial"
],
"type": "string"
},
"endpoint": {
"enum": [
"search",
"scrape",
"parse",
"map",
"alexandria"
],
"type": "string"
},
"metadata": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"objective": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"rationale": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"pageNumbers": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"missingContent": {
"type": "array",
"items": {
"type": "object",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 2000
}
}
},
"maxItems": 50
},
"valuableSources": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"reason": {
"type": "string",
"maxLength": 1000
}
}
},
"maxItems": 50
},
"providerFeedback": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"issue",
"why"
],
"properties": {
"why": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"issue": {
"enum": [
"missing_provider",
"insufficient_coverage",
"provider_unavailable",
"other"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 20
},
"querySuggestions": {
"type": "string",
"maxLength": 2000
},
"requestedWebsite": {
"type": "object",
"required": [
"url",
"requestedFunctionality"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"requestedFunctionality": {
"type": "string",
"maxLength": 2000,
"minLength": 1
}
},
"additionalProperties": false
},
"capabilityFeedback": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"provider",
"issue",
"why"
],
"properties": {
"why": {
"type": "string",
"maxLength": 2000,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"issue": {
"enum": [
"new_capability_request",
"missing_capability",
"insufficient_functionality",
"incorrect_result",
"execution_error",
"other"
],
"type": "string"
},
"provider": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"requestedFunctionality": {
"type": "string",
"maxLength": 2000,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 20
}
},
"additionalProperties": false
}| groups | array | Optional group IDs for explicit group browsing. |
| offset | integer |
| objective* | string | The user's underlying goal for this call, in one sentence: what they are ultimately trying to accomplish, not a restatement of the URL or query. Reuse it across related calls. Avoid sensitive information. |
| providers | array | Values from each listed tool's `provider` field (e.g. "apps-apple-com"). Alone, lists that provider's compact tools; with capabilities, scopes them. |
| categories | array | Category IDs returned by an empty call. Lists providers by default. |
| capabilities | array | Values from each listed tool's `capability` field (e.g. "apps/app"). Put the provider in `providers`: {"providers": ["apps-apple-com"], "capabilities": ["apps/app"]}. A selected capability expands its complete contract by default. |
| includeCosts | boolean | Include per-capability credit prices (creditsCost, perRecord) in tool results. |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"objective"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string",
"pattern": "^https?:\\/\\/"
},
"maxItems": 100,
"minItems": 1
},
"level": {
"enum": [
"categories",
"providers",
"groups",
"tools"
],
"type": "string",
"description": "Usually omit: it follows the arguments (tools for query, urls, providers, capabilities or groups; providers for categories; categories with none). Set providers or groups to list those within a category or url scope instead of tools. query, or a non-empty expand with any other argument, returns tools."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Semantic lookup of tools for the data you need. Selectors constrain the search."
},
"expand": {
"type": "array",
"items": {
"enum": [
"options",
"response",
"examples"
],
"type": "string"
},
"description": "Use [\"options\", \"response\"] for inputs and output shape without example payloads; [] keeps results compact. Omit for full contracts on selected capabilities."
},
"groups": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Optional group IDs for explicit group browsing."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"objective": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "The user's underlying goal for this call, in one sentence: what they are ultimately trying to accomplish, not a restatement of the URL or query. Reuse it across related calls. Avoid sensitive information."
},
"providers": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Values from each listed tool's `provider` field (e.g. \"apps-apple-com\"). Alone, lists that provider's compact tools; with capabilities, scopes them."
},
"categories": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Category IDs returned by an empty call. Lists providers by default."
},
"capabilities": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50,
"minItems": 1,
"description": "Values from each listed tool's `capability` field (e.g. \"apps/app\"). Put the provider in `providers`: {\"providers\": [\"apps-apple-com\"], \"capabilities\": [\"apps/app\"]}. A selected capability expands its complete contract by default."
},
"includeCosts": {
"type": "boolean",
"description": "Include per-capability credit prices (creditsCost, perRecord) in tool results."
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
}
},
"additionalProperties": false
}| Keep only pages from one site, such as "irs.gov". |
| courtType | string | Keep only pages from one type of court: federal-supreme, federal-appellate, federal-district, federal-bankruptcy, federal-special, military, state-supreme, state-appellate, state-trial, state-special, state-attorney-general. |
| jurisdiction | string | Keep only pages of one jurisdiction: "us" for federal, or "us-" plus a two-letter state or territory code, such as "us-ca" or "us-dc". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"k": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of ranked results to return (default 10)."
},
"cites": {
"type": "string",
"minLength": 1,
"description": "Keep only pages that cite one law or case, as a printed citation such as \"42 U.S.C. § 1983\" or \"5 U.S. 137\", or a citation id such as \"us:usc:42:1983\"."
},
"court": {
"type": "string",
"minLength": 1,
"description": "Keep only pages labeled for one court, by CourtListener court id, such as \"scotus\", \"ca9\" or \"nysd\"."
},
"query": {
"type": "string",
"minLength": 1,
"description": "Natural-language legal or regulatory question or search phrase, including the jurisdiction, agency, or citation when relevant."
},
"domain": {
"type": "string",
"minLength": 1,
"description": "Keep only pages from one site, such as \"irs.gov\"."
},
"courtType": {
"enum": [
"federal-supreme",
"federal-appellate",
"federal-district",
"federal-bankruptcy",
"federal-special",
"military",
"state-supreme",
"state-appellate",
"state-trial",
"state-special",
"state-attorney-general"
],
"type": "string",
"description": "Keep only pages from one type of court: federal-supreme, federal-appellate, federal-district, federal-bankruptcy, federal-special, military, state-supreme, state-appellate, state-trial, state-special, state-attorney-general."
},
"jurisdiction": {
"type": "string",
"pattern": "^us(-[a-z]{2})?$",
"description": "Keep only pages of one jurisdiction: \"us\" for federal, or \"us-\" plus a two-letter state or territory code, such as \"us-ca\" or \"us-dc\"."
}
},
"additionalProperties": false
}| string |
| includeDiffs | boolean |
| scheduleText | string |
| searchWindow | string |
| excludeDomains | array |
| includeDomains | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"body": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"goal": {
"type": "string"
},
"name": {
"type": "string"
},
"page": {
"type": "string"
},
"email": {
"type": "string"
},
"pages": {
"type": "array",
"items": {
"type": "string"
}
},
"queries": {
"type": "array",
"items": {
"type": "string"
}
},
"timezone": {
"type": "string"
},
"maxResults": {
"type": "integer",
"maximum": 50,
"minimum": 1
},
"webhookUrl": {
"type": "string"
},
"includeDiffs": {
"type": "boolean"
},
"scheduleText": {
"type": "string"
},
"searchWindow": {
"enum": [
"5m",
"15m",
"1h",
"6h",
"24h",
"7d"
],
"type": "string"
},
"excludeDomains": {
"type": "array",
"items": {
"type": "string"
}
},
"includeDomains": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}| string |
| Phase 2 only: short-lived upload reference returned by phase 1 after the local PUT upload completes. |
| pdfOptions | object |
| contentType | string | Phase 1 MIME type override. If omitted, the server infers it from the file extension without reading the file. |
| excludeTags | array |
| includeTags | array |
| jsonOptions | object |
| queryOptions | object |
| storeInCache | boolean |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| onlyMainContent | boolean |
| declaredSizeBytes | integer | Optional phase 1 size declaration. Hosted MCP does not stat the file; provide this only if the caller already knows it. |
| zeroDataRetention | boolean |
| removeBase64Images | boolean |
| skipTlsVerification | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"proxy": {
"enum": [
"basic",
"auto"
],
"type": "string"
},
"maxAge": {
"type": "number",
"description": "Ignored: parse never reuses or stores indexed content."
},
"formats": {
"type": "array",
"items": {
"enum": [
"markdown",
"html",
"rawHtml",
"links",
"summary",
"json",
"query"
],
"type": "string"
}
},
"parsers": {
"type": "array",
"items": {
"enum": [
"pdf"
],
"type": "string"
}
},
"filePath": {
"type": "string",
"minLength": 1,
"description": "Phase 1 only: path to the local file on the caller/harness machine. Hosted MCP will not read or stat this path; it is used only to produce upload instructions."
},
"redactPII": {
"type": "boolean"
},
"uploadRef": {
"type": "string",
"minLength": 1,
"description": "Phase 2 only: short-lived upload reference returned by phase 1 after the local PUT upload completes."
},
"pdfOptions": {
"type": "object",
"properties": {
"maxPages": {
"type": "integer",
"maximum": 10000,
"minimum": 1
}
},
"additionalProperties": false
},
"contentType": {
"type": "string",
"description": "Phase 1 MIME type override. If omitted, the server infers it from the file extension without reading the file."
},
"excludeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"includeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"jsonOptions": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
},
"queryOptions": {
"type": "object",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"directQuote",
"freeform"
],
"type": "string",
"default": "freeform"
},
"prompt": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
},
"storeInCache": {
"type": "boolean"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"onlyMainContent": {
"type": "boolean"
},
"declaredSizeBytes": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Optional phase 1 size declaration. Hosted MCP does not stat the file; provide this only if the caller already knows it.",
"exclusiveMinimum": 0
},
"zeroDataRetention": {
"type": "boolean"
},
"removeBase64Images": {
"type": "boolean"
},
"skipTlsVerification": {
"type": "boolean"
}
},
"additionalProperties": false
}| array |
| profile | object | Loads a saved browser profile without saving changes to it. |
| timeout | integer | Execution timeout in milliseconds. |
| waitFor | number |
| location | object |
| lockdown | boolean |
| objective* | string | The user's underlying goal for this call, in one sentence: what they are ultimately trying to accomplish, not a restatement of the URL or query. Reuse it across related calls. Avoid sensitive information. |
| redactPII | boolean |
| requestId | string | Idempotency key bound to one Alexandria execution payload. Generated when omitted and returned with the result. |
| alexandria | any | Catalogued Alexandria capability invocation, mutually exclusive with url. One {provider, capability, options} object or an array of 1-10, with contracts available through firecrawl_search or firecrawl_find_tools. Each call may include version to pin a published workflow; omitting it uses latest. Only requestId and timeout are supported alongside alexandria. The selected contract marks required inputs and any requiresOneOf groups (at least one member per group); it may include example.request/example.response and a key field under response (which may differ from records). Where pagination is declared, its fields govern paging with the same filters; catalogue next is separate from provider pagination. Returns per-capability results in data.alexandria with data, records, or an error with a code; individual capabilities can fail even when the outer response succeeds. Some providers require accepted terms; when a response reports a terms requirement, direct the user to the Firecrawl dashboard URL in that response. |
| pdfOptions | object |
| toolDetail | string | URL mode only: domain discovery detail, summary by default; compact returns provider/capability/description, full includes contracts. Ignored with alexandria. |
| domainTools | boolean | URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document. Ignored with alexandria. |
| excludeTags | array |
| includeTags | array |
| jsonOptions | object |
| queryOptions | object |
| storeInCache | boolean |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| onlyMainContent | boolean |
| screenshotOptions | object |
| zeroDataRetention | boolean |
| removeBase64Images | boolean |
| skipTlsVerification | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"objective"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"proxy": {
"enum": [
"basic",
"stealth",
"enhanced",
"auto"
],
"type": "string"
},
"maxAge": {
"type": "number"
},
"mobile": {
"type": "boolean"
},
"formats": {
"type": "array",
"items": {
"enum": [
"markdown",
"html",
"rawHtml",
"screenshot",
"links",
"images",
"summary",
"changeTracking",
"branding",
"json",
"query",
"audio"
],
"type": "string"
}
},
"parsers": {
"type": "array",
"items": {
"enum": [
"pdf"
],
"type": "string"
}
},
"profile": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
},
"description": "Loads a saved browser profile without saving changes to it.",
"additionalProperties": false
},
"timeout": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Execution timeout in milliseconds.",
"exclusiveMinimum": 0
},
"waitFor": {
"type": "number"
},
"location": {
"type": "object",
"properties": {
"country": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"lockdown": {
"type": "boolean"
},
"objective": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "The user's underlying goal for this call, in one sentence: what they are ultimately trying to accomplish, not a restatement of the URL or query. Reuse it across related calls. Avoid sensitive information."
},
"redactPII": {
"type": "boolean"
},
"requestId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,128}$",
"description": "Idempotency key bound to one Alexandria execution payload. Generated when omitted and returned with the result."
},
"alexandria": {
"anyOf": [
{
"type": "object",
"required": [
"provider",
"capability"
],
"properties": {
"options": {
"type": "object",
"description": "Capability options as declared by its contract.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"version": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Optional published workflow version. Omit to use the latest version."
},
"provider": {
"type": "string",
"minLength": 1,
"description": "Provider slug, e.g. \"fred\"."
},
"capability": {
"type": "string",
"minLength": 1,
"description": "Capability address as returned by search or discover, e.g. \"series/observations\"."
}
}
},
{
"type": "array",
"items": {
"type": "object",
"required": [
"provider",
"capability"
],
"properties": {
"options": {
"type": "object",
"description": "Capability options as declared by its contract.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"version": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Optional published workflow version. Omit to use the latest version."
},
"provider": {
"type": "string",
"minLength": 1,
"description": "Provider slug, e.g. \"fred\"."
},
"capability": {
"type": "string",
"minLength": 1,
"description": "Capability address as returned by search or discover, e.g. \"series/observations\"."
}
}
},
"maxItems": 10,
"minItems": 1
}
],
"description": "Catalogued Alexandria capability invocation, mutually exclusive with url. One {provider, capability, options} object or an array of 1-10, with contracts available through firecrawl_search or firecrawl_find_tools. Each call may include version to pin a published workflow; omitting it uses latest. Only requestId and timeout are supported alongside alexandria. The selected contract marks required inputs and any requiresOneOf groups (at least one member per group); it may include example.request/example.response and a key field under response (which may differ from records). Where pagination is declared, its fields govern paging with the same filters; catalogue next is separate from provider pagination. Returns per-capability results in data.alexandria with data, records, or an error with a code; individual capabilities can fail even when the outer response succeeds. Some providers require accepted terms; when a response reports a terms requirement, direct the user to the Firecrawl dashboard URL in that response."
},
"pdfOptions": {
"type": "object",
"properties": {
"maxPages": {
"type": "integer",
"maximum": 10000,
"minimum": 1
}
},
"additionalProperties": false
},
"toolDetail": {
"enum": [
"compact",
"summary",
"full"
],
"type": "string",
"description": "URL mode only: domain discovery detail, summary by default; compact returns provider/capability/description, full includes contracts. Ignored with alexandria."
},
"domainTools": {
"type": "boolean",
"description": "URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document. Ignored with alexandria."
},
"excludeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"includeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"jsonOptions": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
},
"queryOptions": {
"type": "object",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"directQuote",
"freeform"
],
"type": "string",
"default": "freeform"
},
"prompt": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
},
"storeInCache": {
"type": "boolean"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"onlyMainContent": {
"type": "boolean"
},
"screenshotOptions": {
"type": "object",
"properties": {
"quality": {
"type": "number"
},
"fullPage": {
"type": "boolean"
},
"viewport": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"zeroDataRetention": {
"type": "boolean"
},
"removeBase64Images": {
"type": "boolean"
},
"skipTlsVerification": {
"type": "boolean"
}
},
"additionalProperties": false
}| query* | string | Query for web and semantic tool discovery. Operators include quoted phrases, `-term`, `site:host`, `inurl:term`, `intitle:term`, and `related:host`; the set is non-exhaustive. Catalogue browsing is available through firecrawl_find_tools. |
| filter | string |
| sources | array | Search sources; authenticated sessions default to web + alexandria, keyless sessions to web only. Authenticated searches always add alexandria to the sources, so sources: ["web"] also returns providers; domainTools: false turns off website-matched tools only. enterprise zdr or anon searches do not add it. Use ["alexandria"] alone for provider discovery without web results. |
| location | string |
| objective* | string | The user's underlying goal for this call, in one sentence: what they are ultimately trying to accomplish, not a restatement of the URL or query. Reuse it across related calls. Avoid sensitive information. |
| categories | array | Limit results to specific source types. `research` restricts ordinary web results to research-affiliated websites and returns page snippets, which is separate from the `firecrawl_research_*` tools that search paper abstracts and full text across biomedical (PubMed, bioRxiv, medRxiv) and arXiv literature; `pdf` searches PDF results; `developer` searches an index built for coding agents over public repositories, GitHub issues, merged pull requests, repository READMEs, and code documentation; `gov` searches the Government Index of US federal, state, and local legal and regulatory sources, the index behind firecrawl_gov_search, and cannot be combined with other categories; gov hits can include historical versions, bill text, agency guidance, and third-party reproductions, so verify the issuer, jurisdiction, enacted/effective status, and version before citing current governing law, clarify a missing jurisdiction or ambiguous as-of date, and use general search for non-US questions or missing coverage (no hits does not establish that no applicable law exists). `developer` and `gov` return hits in `data.web` with `category` set to their name; the other categories also filter `data.web`. |
| enterprise | array |
| highlights | boolean | Return query-relevant page excerpts for web and news results when available (default). Highlights appear in web `description` and news `snippet`; otherwise, original snippets are returned. Set to false to keep the original search snippets. |
| toolDetail | string | Compact by default. Compact returns only provider, capability and description; full includes contracts. Inspect selected compact tools with firecrawl_find_tools providers and capabilities. |
| domainTools | boolean | Include domain-matched tools for result URLs. Defaults to true when Alexandria is combined with web, news or images; semantic-only search leaves domain matching off. |
| scrapeOptions | object | Fetches the full page of every web result in the same call, and each fetched result is billed as a scrape. Leave it unset unless the task needs the full text of a few results: highlights usually answer, and firecrawl_scrape can fetch only the URLs you need. These fetches ignore maxAge, so use firecrawl_scrape for a live fetch. scrapeOptions fetches web pages, never Alexandria provider tools. |
| conversationId | string | conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call. |
| excludeDomains | array | Hostnames to leave out of results. Mutually exclusive with includeDomains. |
| includeDomains | array | Hostnames to restrict results to. Mutually exclusive with excludeDomains. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query",
"objective"
],
"properties": {
"tbs": {
"type": "string"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"minLength": 1,
"description": "Query for web and semantic tool discovery. Operators include quoted phrases, `-term`, `site:host`, `inurl:term`, `intitle:term`, and `related:host`; the set is non-exhaustive. Catalogue browsing is available through firecrawl_find_tools."
},
"filter": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"anyOf": [
{
"enum": [
"web",
"images",
"news",
"alexandria",
"exchange"
],
"type": "string"
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"web",
"images",
"news",
"alexandria",
"exchange"
],
"type": "string"
}
},
"additionalProperties": false
}
]
},
"description": "Search sources; authenticated sessions default to web + alexandria, keyless sessions to web only. Authenticated searches always add alexandria to the sources, so sources: [\"web\"] also returns providers; domainTools: false turns off website-matched tools only. enterprise zdr or anon searches do not add it. Use [\"alexandria\"] alone for provider discovery without web results."
},
"location": {
"type": "string"
},
"objective": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "The user's underlying goal for this call, in one sentence: what they are ultimately trying to accomplish, not a restatement of the URL or query. Reuse it across related calls. Avoid sensitive information."
},
"categories": {
"type": "array",
"items": {
"enum": [
"research",
"pdf",
"developer",
"gov"
],
"type": "string"
},
"description": "Limit results to specific source types. `research` restricts ordinary web results to research-affiliated websites and returns page snippets, which is separate from the `firecrawl_research_*` tools that search paper abstracts and full text across biomedical (PubMed, bioRxiv, medRxiv) and arXiv literature; `pdf` searches PDF results; `developer` searches an index built for coding agents over public repositories, GitHub issues, merged pull requests, repository READMEs, and code documentation; `gov` searches the Government Index of US federal, state, and local legal and regulatory sources, the index behind firecrawl_gov_search, and cannot be combined with other categories; gov hits can include historical versions, bill text, agency guidance, and third-party reproductions, so verify the issuer, jurisdiction, enacted/effective status, and version before citing current governing law, clarify a missing jurisdiction or ambiguous as-of date, and use general search for non-US questions or missing coverage (no hits does not establish that no applicable law exists). `developer` and `gov` return hits in `data.web` with `category` set to their name; the other categories also filter `data.web`."
},
"enterprise": {
"type": "array",
"items": {
"enum": [
"default",
"anon",
"zdr"
],
"type": "string"
}
},
"highlights": {
"type": "boolean",
"description": "Return query-relevant page excerpts for web and news results when available (default). Highlights appear in web `description` and news `snippet`; otherwise, original snippets are returned. Set to false to keep the original search snippets."
},
"toolDetail": {
"enum": [
"compact",
"summary",
"full"
],
"type": "string",
"description": "Compact by default. Compact returns only provider, capability and description; full includes contracts. Inspect selected compact tools with firecrawl_find_tools providers and capabilities."
},
"domainTools": {
"type": "boolean",
"description": "Include domain-matched tools for result URLs. Defaults to true when Alexandria is combined with web, news or images; semantic-only search leaves domain matching off."
},
"scrapeOptions": {
"type": "object",
"properties": {
"proxy": {
"enum": [
"basic",
"stealth",
"enhanced",
"auto"
],
"type": "string"
},
"maxAge": {
"type": "number"
},
"mobile": {
"type": "boolean"
},
"formats": {
"type": "array",
"items": {
"enum": [
"markdown",
"html",
"rawHtml",
"screenshot",
"links",
"images",
"summary",
"changeTracking",
"branding",
"json",
"query",
"audio"
],
"type": "string"
}
},
"parsers": {
"type": "array",
"items": {
"enum": [
"pdf"
],
"type": "string"
}
},
"profile": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
},
"description": "Loads a saved browser profile without saving changes to it.",
"additionalProperties": false
},
"waitFor": {
"type": "number"
},
"location": {
"type": "object",
"properties": {
"country": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"lockdown": {
"type": "boolean"
},
"redactPII": {
"type": "boolean"
},
"pdfOptions": {
"type": "object",
"properties": {
"maxPages": {
"type": "integer",
"maximum": 10000,
"minimum": 1
}
},
"additionalProperties": false
},
"excludeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"includeTags": {
"type": "array",
"items": {
"type": "string"
}
},
"jsonOptions": {
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
},
"queryOptions": {
"type": "object",
"required": [
"prompt"
],
"properties": {
"mode": {
"enum": [
"directQuote",
"freeform"
],
"type": "string",
"default": "freeform"
},
"prompt": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
},
"storeInCache": {
"type": "boolean"
},
"onlyMainContent": {
"type": "boolean"
},
"screenshotOptions": {
"type": "object",
"properties": {
"quality": {
"type": "number"
},
"fullPage": {
"type": "boolean"
},
"viewport": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "number"
},
"height": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"zeroDataRetention": {
"type": "boolean"
},
"removeBase64Images": {
"type": "boolean"
},
"skipTlsVerification": {
"type": "boolean"
}
},
"description": "Fetches the full page of every web result in the same call, and each fetched result is billed as a scrape. Leave it unset unless the task needs the full text of a few results: highlights usually answer, and firecrawl_scrape can fetch only the URLs you need. These fetches ignore maxAge, so use firecrawl_scrape for a live fetch. scrapeOptions fetches web pages, never Alexandria provider tools.",
"additionalProperties": false
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"excludeDomains": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$",
"maxLength": 253,
"minLength": 1
},
"description": "Hostnames to leave out of results. Mutually exclusive with includeDomains."
},
"includeDomains": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$",
"maxLength": 253,
"minLength": 1
},
"description": "Hostnames to restrict results to. Mutually exclusive with excludeDomains."
}
},
"additionalProperties": false
}| valuableResults | array | Every result that was actually useful, copied from the `source` and `position` stamped on each result. Each group is numbered from 1 independently, so the source is required — `{"source":"web","position":1}` and `{"source":"news","position":1}` are different results. Be exhaustive — unlisted results are treated as not useful. Do not also list the same results in valuableSources. |
| valuableSources | array |
| querySuggestions | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"searchId",
"rating"
],
"properties": {
"rating": {
"enum": [
"good",
"bad",
"partial"
],
"type": "string"
},
"searchId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"conversationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "conversationId from any earlier Firecrawl tool result in this conversation; after parallel calls, any one of theirs. Omit only on the first call of a conversation; the result returns one to pass on every later call."
},
"missingContent": {
"type": "array",
"items": {
"type": "object",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 2000
}
}
},
"maxItems": 20,
"description": "Array of specific pieces of content the agent expected to find but did not. One entry per distinct topic. Each entry has a short `topic` and optional longer `description`."
},
"valuableResults": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"position"
],
"properties": {
"reason": {
"type": "string",
"maxLength": 1000
},
"source": {
"enum": [
"web",
"images",
"news"
],
"type": "string"
},
"position": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
}
},
"maxItems": 50,
"description": "Every result that was actually useful, copied from the `source` and `position` stamped on each result. Each group is numbered from 1 independently, so the source is required — `{\"source\":\"web\",\"position\":1}` and `{\"source\":\"news\",\"position\":1}` are different results. Be exhaustive — unlisted results are treated as not useful. Do not also list the same results in valuableSources."
},
"valuableSources": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"reason": {
"type": "string",
"maxLength": 1000
}
}
},
"maxItems": 50
},
"querySuggestions": {
"type": "string",
"maxLength": 2000
}
},
"additionalProperties": false
}