Skip to main content
Glama
Firecrawl MCP Server

Firecrawl MCP Server

Firecrawl scrape

firecrawl_scrape

Scrape one URL to return its content as Markdown, HTML, links, screenshots, branding data, or schema-matched JSON for reading, summarizing, or extracting defined fields.

Instructions

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. Browser actions can change the live page when interactive actions are enabled. 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.

Input Schema

NameRequiredDescriptionDefault
urlNo
proxyNo
maxAgeNo
mobileNo
actionsNo
formatsNo
parsersNo
profileNo
timeoutNoExecution timeout in milliseconds.
waitForNo
locationNo
lockdownNo
redactPIINo
requestIdNoIdempotency key bound to one Alexandria execution payload. Generated when omitted and returned with the result.
alexandriaNoCatalogued 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.
pdfOptionsNo
toolDetailNoURL mode only: domain discovery detail, summary by default; compact returns provider/capability/description, full includes contracts. Ignored with alexandria.
domainToolsNoURL mode only: include domain-matched Alexandria tools for the page in tools on the returned document. Ignored with alexandria.
excludeTagsNo
includeTagsNo
jsonOptionsNo
queryOptionsNo
storeInCacheNo
onlyMainContentNo
screenshotOptionsNo
zeroDataRetentionNo
removeBase64ImagesNo
skipTlsVerificationNo

Output Schema

NameRequiredDescriptionDefault
dataNoAlexandria mode: per-capability results in `data.alexandria`, each with `data`, `records`, or an `error`.
htmlNoProcessed HTML of the page.
jsonNoStructured data matching the requested JSON schema or prompt.
menuNoMenu data extracted from the page.
audioNoAudio extracted from the page.
errorNoError message or error object when the call did not succeed.
linksNoLinks found on the page.
pagesNoPhysical PDF pages, when `parsers[].pages` is set.
toolsNoDomain-matched Alexandria tools for the page, when `domainTools` is set.
videoNoVideo extracted from the page.
answerNoTargeted answer to the question that was asked of the page.
blocksNoTyped PDF layout blocks, when `parsers[].blocks` is set.
imagesNoImages found on the page.
actionsNoResults of the browser actions that ran during the scrape.
messageNoGuidance that accompanies the result.
productNoProduct data extracted from the page.
rawHtmlNoUnprocessed HTML of the page.
receiptNoBilling receipt for the execution.
successNoWhether the API call succeeded.
summaryNoSummary of the page content.
warningNoNon-fatal warning about the result.
brandingNoBranding data extracted from the page.
deliveryNo`retained` when the full result stayed server-side instead of being inlined.
markdownNoPage content as markdown.
metadataNoPage metadata; authenticated responses can include `metadata.scrapeId` for scrape feedback.
nextToolNoA follow-up tool call (`{name, arguments}`) that continues or inspects this result.
requestIdNoIdentifier of this Alexandria execution.
scrape_idNoIdentifier of the underlying scrape.
attributesNoValues collected by the requested attribute selectors.
highlightsNoHighlighted passages from the page.
screenshotNoScreenshot of the page.
creditsCostNoCredits this call consumed.
workspaceIdNoWorkspace holding a retained result, for inspection through virtual Bash.
feedbackToolNoPointer to the feedback tool for reporting how this result served the task.
responseBytesNoSize of the full result in bytes.
changeTrackingNoChange-tracking comparison against the previous scrape.
idleTtlSecondsNoSeconds a retained workspace stays available while idle.
estimatedTokensNoEstimated token cost of the full result.
inlineTokenBudgetNoToken budget above which a result is retained rather than inlined.
tokenEstimateMethodNoHow `estimatedTokens` was derived.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv3.36.1
    • changedInput schema / properties / alexandria / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "capability": {
      -        "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "options": {
      -        "additionalProperties": {},
      -        "description": "Capability options as declared by its contract.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "provider": {
      -        "description": "Provider slug, e.g. \"fred\".",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "version": {
      -        "description": "Optional published workflow version. Omit to use the latest version.",
      -        "maxLength": 128,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "provider",
      -      "capability"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "capability": {
      -          "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "options": {
      -          "additionalProperties": {},
      -          "description": "Capability options as declared by its contract.",
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "provider": {
      -          "description": "Provider slug, e.g. \"fred\".",
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "version": {
      -          "description": "Optional published workflow version. Omit to use the latest version.",
      -          "maxLength": 128,
      -          "minLength": 1,
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "provider",
      -        "capability"
      -      ],
      -      "type": "object"
      -    },
      -    "maxItems": 10,
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "capability": {
      +        "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "options": {
      +        "additionalProperties": true,
      +        "description": "Capability options as declared by its contract.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "provider": {
      +        "description": "Provider slug, e.g. \"fred\".",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "version": {
      +        "description": "Optional published workflow version. Omit to use the latest version.",
      +        "maxLength": 128,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "provider",
      +      "capability"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "capability": {
      +          "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "options": {
      +          "additionalProperties": true,
      +          "description": "Capability options as declared by its contract.",
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "provider": {
      +          "description": "Provider slug, e.g. \"fred\".",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "version": {
      +          "description": "Optional published workflow version. Omit to use the latest version.",
      +          "maxLength": 128,
      +          "minLength": 1,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "provider",
      +        "capability"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 10,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / jsonOptions / properties / schema / additionalProperties
      Previous value: -{}New value: +true
  2. Changed11 schema fields changedv1.0.2
    • changedInput schema / $schema
      Previous value: -"https://json-schema.org/draft/2020-12/schema"New value: +"http://json-schema.org/draft-07/schema#"
    • removedInput schema / properties / actions / items / additionalProperties
      Removed value: -false
    • addedInput schema / properties / alexandria
      Added value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "capability": {
      +          "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "options": {
      +          "additionalProperties": {},
      +          "description": "Capability options as declared by its contract.",
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "provider": {
      +          "description": "Provider slug, e.g. \"fred\".",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "version": {
      +          "description": "Optional published workflow version. Omit to use the latest version.",
      +          "maxLength": 128,
      +          "minLength": 1,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "provider",
      +        "capability"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "items": {
      +        "properties": {
      +          "capability": {
      +            "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "options": {
      +            "additionalProperties": {},
      +            "description": "Capability options as declared by its contract.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "provider": {
      +            "description": "Provider slug, e.g. \"fred\".",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "version": {
      +            "description": "Optional published workflow version. Omit to use the latest version.",
      +            "maxLength": 128,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "provider",
      +          "capability"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 10,
      +      "minItems": 1,
      +      "type": "array"
      +    }
      +  ],
      +  "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."
      +}
    • addedInput schema / properties / domainTools
      Added value: +{
      +  "description": "URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document. Ignored with alexandria.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / formats / items / enum
      Previous value: -[
      -  "markdown",
      -  "html",
      -  "rawHtml",
      -  "screenshot",
      -  "links",
      -  "summary",
      -  "changeTracking",
      -  "branding",
      -  "json",
      -  "query",
      -  "audio"
      -]New value: +[
      +  "markdown",
      +  "html",
      +  "rawHtml",
      +  "screenshot",
      +  "links",
      +  "images",
      +  "summary",
      +  "changeTracking",
      +  "branding",
      +  "json",
      +  "query",
      +  "audio"
      +]
    • changedInput schema / properties / queryOptions / required
      Previous value: -[
      -  "prompt",
      -  "mode"
      -]New value: +[
      +  "prompt"
      +]
    • addedInput schema / properties / requestId
      Added value: +{
      +  "description": "Idempotency key bound to one Alexandria execution payload. Generated when omitted and returned with the result.",
      +  "pattern": "^[A-Za-z0-9._:-]{1,128}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / timeout
      Added value: +{
      +  "description": "Execution timeout in milliseconds.",
      +  "exclusiveMinimum": 0,
      +  "maximum": 9007199254740991,
      +  "type": "integer"
      +}
    • addedInput schema / properties / toolDetail
      Added value: +{
      +  "description": "URL mode only: domain discovery detail, summary by default; compact returns provider/capability/description, full includes contracts. Ignored with alexandria.",
      +  "enum": [
      +    "compact",
      +    "summary",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "url"
      -]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "description": "A scraped document, or the Alexandria execution envelope when `alexandria` was passed.",
      +  "properties": {
      +    "actions": {
      +      "description": "Results of the browser actions that ran during the scrape."
      +    },
      +    "answer": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Targeted answer to the question that was asked of the page."
      +    },
      +    "attributes": {
      +      "description": "Values collected by the requested attribute selectors."
      +    },
      +    "audio": {
      +      "description": "Audio extracted from the page."
      +    },
      +    "blocks": {
      +      "description": "Typed PDF layout blocks, when `parsers[].blocks` is set."
      +    },
      +    "branding": {
      +      "description": "Branding data extracted from the page."
      +    },
      +    "changeTracking": {
      +      "description": "Change-tracking comparison against the previous scrape."
      +    },
      +    "creditsCost": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Credits this call consumed."
      +    },
      +    "data": {
      +      "description": "Alexandria mode: per-capability results in `data.alexandria`, each with `data`, `records`, or an `error`."
      +    },
      +    "delivery": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "`retained` when the full result stayed server-side instead of being inlined."
      +    },
      +    "error": {
      +      "description": "Error message or error object when the call did not succeed."
      +    },
      +    "estimatedTokens": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Estimated token cost of the full result."
      +    },
      +    "feedbackTool": {
      +      "description": "Pointer to the feedback tool for reporting how this result served the task."
      +    },
      +    "highlights": {
      +      "description": "Highlighted passages from the page."
      +    },
      +    "html": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Processed HTML of the page."
      +    },
      +    "idleTtlSeconds": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Seconds a retained workspace stays available while idle."
      +    },
      +    "images": {
      +      "description": "Images found on the page."
      +    },
      +    "inlineTokenBudget": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Token budget above which a result is retained rather than inlined."
      +    },
      +    "json": {
      +      "description": "Structured data matching the requested JSON schema or prompt."
      +    },
      +    "links": {
      +      "description": "Links found on the page."
      +    },
      +    "markdown": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Page content as markdown."
      +    },
      +    "menu": {
      +      "description": "Menu data extracted from the page."
      +    },
      +    "message": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Guidance that accompanies the result."
      +    },
      +    "metadata": {
      +      "description": "Page metadata; authenticated responses can include `metadata.scrapeId` for scrape feedback."
      +    },
      +    "nextTool": {
      +      "description": "A follow-up tool call (`{name, arguments}`) that continues or inspects this result."
      +    },
      +    "pages": {
      +      "description": "Physical PDF pages, when `parsers[].pages` is set."
      +    },
      +    "product": {
      +      "description": "Product data extracted from the page."
      +    },
      +    "rawHtml": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Unprocessed HTML of the page."
      +    },
      +    "receipt": {
      +      "description": "Billing receipt for the execution."
      +    },
      +    "requestId": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Identifier of this Alexandria execution."
      +    },
      +    "responseBytes": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Size of the full result in bytes."
      +    },
      +    "scrape_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Identifier of the underlying scrape."
      +    },
      +    "screenshot": {
      +      "description": "Screenshot of the page."
      +    },
      +    "success": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Whether the API call succeeded."
      +    },
      +    "summary": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Summary of the page content."
      +    },
      +    "tokenEstimateMethod": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "How `estimatedTokens` was derived."
      +    },
      +    "tools": {
      +      "description": "Domain-matched Alexandria tools for the page, when `domainTools` is set."
      +    },
      +    "video": {
      +      "description": "Video extracted from the page."
      +    },
      +    "warning": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Non-fatal warning about the result."
      +    },
      +    "workspaceId": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Workspace holding a retained result, for inspection through virtual Bash."
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observedv1.0.1

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses non-obvious behavior: content may be recently indexed rather than live (with `maxAge: 0` as the escape hatch), success does not prove currency, interactive browser actions can mutate the live page, and alexandria calls can partially fail per-capability even when the outer response succeeds. It also flags the terms-acceptance flow and the `metadata.scrapeId` feedback hook. Nothing here contradicts readOnlyHint=false, openWorldHint=true, destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core routing and format information is front-loaded and wastes nothing, but the paragraph block grows to five paragraphs and the terms-requirement sentence is duplicated almost verbatim from the `alexandria` schema description. The section on provider discovery across `firecrawl_search`/`firecrawl_find_tools` sits awkwardly between behavioral caveats and mode switching.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the dual url/alexandria mode, staleness model, and terms flow are all covered. What is missing is scale-appropriate: for a 28-parameter tool at 18% schema coverage, most optional knobs still have no explanation anywhere, which is the main gap for an agent deciding how to configure a call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 18% across 28 parameters, so the description carries most of the burden and mostly does not. It explains `maxAge`, sketches `formats`, gestures at `actions`, and covers `alexandria`/`requestId`/`timeout`, but leaves `proxy`, `profile`, `location`, `lockdown`, `redactPII`, `storeInCache`, `onlyMainContent`, `includeTags`/`excludeTags`, `zeroDataRetention`, `waitFor`, `mobile`, `parsers`, and the `jsonOptions`/`queryOptions`/`screenshotOptions` sub-objects undocumented in either place.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource ('Scrape one URL and return its content') and enumerates the concrete output shapes (markdown default, HTML, links, screenshots, branding, targeted answer, schema-matched JSON). It then distinguishes itself from three siblings by name and condition, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit selection criteria: use it when the request identifies a page ('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'), and names `firecrawl_search`, `firecrawl_map` and `firecrawl_crawl` with the situations that select them. The alexandria paragraph adds a second routing condition (catalogued provider capability instead of a page fetch).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.