Skip to main content
Glama

firecrawl-mcp

Firecrawl scrape

firecrawl_scrape
Read-only

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. 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 with Alexandria access, firecrawl_search with sources unset and firecrawl_find_tools can discover providers for the same fields across several pages; a matching provider returns typed records in one call. Keyless sessions have no provider matches.

Alexandria mode, on an authenticated session with Alexandria access: alexandria selects catalogued capability execution and is mutually exclusive with url.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNo
proxyNo
maxAgeNo
mobileNo
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 response.key (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. Requires an API key on a team with Alexandria enabled. Some providers require accepted terms; blocked requests return the applicable requirements.
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

TableJSON 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.
agent_hintsNoOptional response guidance from the Firecrawl API.
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. Changed1 schema field changed
    • addedOutput schema / properties / agent_hints
      Added value: +{
      +  "description": "Optional response guidance from the Firecrawl API.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / alexandria / description
      Previous value: -"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 response.key (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. nextTool identifies access to retained results without repeating a successful provider call. Requires an API key on a team with Alexandria enabled. THIRD_PARTY_DATA_TERMS_REQUIRED (403) means execution is blocked by provider terms, with requiresAction.url for review by an organization admin. Through this tool, terms/show displays the agreement and terms/accept records acceptance; acceptance requires explicit user authorization for the reviewed version and digest and confirmed:true. A data request does not authorize acceptance. Provider execution remains blocked until acceptance is confirmed."New value: +"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 response.key (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. Requires an API key on a team with Alexandria enabled. Some providers require accepted terms; blocked requests return the applicable requirements."
    • changedInput schema / properties / requestId / description
      Previous value: -"Identifies one logical Alexandria execution; generated when omitted and returned with the result. Repeated attempts of the identical payload require the same ID. A new ID cannot reconcile a pending or uncertain execution. A caller-supplied ID supports recovery if no response is received. Errors relay a code and may include chargeId. request_in_flight (409) means the execution is pending; request_unresolved (503) requires reconciliation under the same ID; duplicate_request (409) means the ID belongs to a different payload; unknown_provider (404), insufficient_credits (402) and billing_unavailable (503) mean nothing executed."New value: +"Idempotency key bound to one Alexandria execution payload. Generated when omitted and returned with the result."
    • changedOutput schema / properties / requestId / description
      Previous value: -"Identifier of this logical execution; reuse it only for a retry of the identical payload."New value: +"Identifier of this Alexandria execution."
  3. Changed2 schema fields changed
    • changedInput schema / properties / domainTools / description
      Previous value: -"URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document."New value: +"URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document. Ignored with alexandria."
    • changedInput schema / properties / toolDetail / description
      Previous value: -"URL domain discovery detail: summary by default, compact returns provider/capability/description, full includes contracts."New value: +"URL mode only: domain discovery detail, summary by default; compact returns provider/capability/description, full includes contracts. Ignored with alexandria."
  4. Changed2 schema fields changed
    • changedInput schema / properties / alexandria / description
      Previous value: -"Execute catalogued Alexandria capabilities instead of scraping a URL. Exactly one of url or alexandria. One {provider, capability, options} object or an array of 1-10, found through firecrawl_search or firecrawl_find_tools. Each call may include version to pin a published workflow; omitting it uses latest. Only timeout also applies at the top level. Read the selected contract before executing: required inputs and requiresOneOf groups (at least one member per group), example.request/example.response when present, and response.key (do not assume records is the result key). Follow the declared pagination input and response cursor, preserving filters; catalogue next is separate from provider pagination. Returns per-capability results in data.alexandria with data, records, or an error with a code; check each item even when the outer response succeeds. If a response provides nextTool, follow it to read a large result instead of repeating a successful provider call. Needs an API key on a team with Alexandria enabled. A terms-gated provider returns THIRD_PARTY_DATA_TERMS_REQUIRED (403) with requiresAction.url: follow the returned terms/show and terms/accept calls through this tool, accepting only after explicit user authorization for the reviewed version and digest; an organization admin can instead accept at the dashboard URL. Retry only after confirmed acceptance."New value: +"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 response.key (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. nextTool identifies access to retained results without repeating a successful provider call. Requires an API key on a team with Alexandria enabled. THIRD_PARTY_DATA_TERMS_REQUIRED (403) means execution is blocked by provider terms, with requiresAction.url for review by an organization admin. Through this tool, terms/show displays the agreement and terms/accept records acceptance; acceptance requires explicit user authorization for the reviewed version and digest and confirmed:true. A data request does not authorize acceptance. Provider execution remains blocked until acceptance is confirmed."
    • changedInput schema / properties / requestId / description
      Previous value: -"Alexandria execution ID. Reuse the returned ID for retries of the identical payload, never a new ID to bypass pending or uncertain execution; generated when omitted. For potentially large workflow results, supply and preserve one before execution. Errors relay a code and chargeId: request_in_flight (409) retry the same requestId later; request_unresolved (503) keep the requestId for reconciliation, never mint a new one; duplicate_request (409) the requestId belongs to a different payload; unknown_provider (404), insufficient_credits (402) and billing_unavailable (503) mean nothing executed."New value: +"Identifies one logical Alexandria execution; generated when omitted and returned with the result. Repeated attempts of the identical payload require the same ID. A new ID cannot reconcile a pending or uncertain execution. A caller-supplied ID supports recovery if no response is received. Errors relay a code and may include chargeId. request_in_flight (409) means the execution is pending; request_unresolved (503) requires reconciliation under the same ID; duplicate_request (409) means the ID belongs to a different payload; unknown_provider (404), insufficient_credits (402) and billing_unavailable (503) mean nothing executed."
  5. Changed1 schema field changed
    • 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 logical execution; reuse it only for a retry of the identical payload."
      +    },
      +    "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"
      +}
  6. Changed2 schema fields changed
    • changedInput schema / properties / alexandria / description
      Previous value: -"Execute catalogued Alexandria capabilities instead of scraping a URL. Exactly one of url or alexandria."New value: +"Execute catalogued Alexandria capabilities instead of scraping a URL. Exactly one of url or alexandria. One {provider, capability, options} object or an array of 1-10, found through firecrawl_search or firecrawl_find_tools. Each call may include version to pin a published workflow; omitting it uses latest. Only timeout also applies at the top level. Read the selected contract before executing: required inputs and requiresOneOf groups (at least one member per group), example.request/example.response when present, and response.key (do not assume records is the result key). Follow the declared pagination input and response cursor, preserving filters; catalogue next is separate from provider pagination. Returns per-capability results in data.alexandria with data, records, or an error with a code; check each item even when the outer response succeeds. If a response provides nextTool, follow it to read a large result instead of repeating a successful provider call. Needs an API key on a team with Alexandria enabled. A terms-gated provider returns THIRD_PARTY_DATA_TERMS_REQUIRED (403) with requiresAction.url: follow the returned terms/show and terms/accept calls through this tool, accepting only after explicit user authorization for the reviewed version and digest; an organization admin can instead accept at the dashboard URL. Retry only after confirmed acceptance."
    • changedInput schema / properties / requestId / description
      Previous value: -"Alexandria execution ID. Reuse for retries of the identical payload; generated when omitted and returned with the result."New value: +"Alexandria execution ID. Reuse the returned ID for retries of the identical payload, never a new ID to bypass pending or uncertain execution; generated when omitted. For potentially large workflow results, supply and preserve one before execution. Errors relay a code and chargeId: request_in_flight (409) retry the same requestId later; request_unresolved (503) keep the requestId for reconciliation, never mint a new one; duplicate_request (409) the requestId belongs to a different payload; unknown_provider (404), insufficient_credits (402) and billing_unavailable (503) mean nothing executed."
  7. Changed6 schema fields changed
    • 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": "Execute catalogued Alexandria capabilities instead of scraping a URL. Exactly one of url or alexandria."
      +}
    • addedInput schema / properties / domainTools
      Added value: +{
      +  "description": "URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / requestId
      Added value: +{
      +  "description": "Alexandria execution ID. Reuse for retries of the identical 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 domain discovery detail: summary by default, compact returns provider/capability/description, full includes contracts.",
      +  "enum": [
      +    "compact",
      +    "summary",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "url"
      -]
  8. Changed1 schema field changed
    • changedInput schema / properties / queryOptions / required
      Previous value: -[
      -  "prompt",
      -  "mode"
      -]New value: +[
      +  "prompt"
      +]
  9. Changed2 schema fields changed
    • changedInput schema / $schema
      Previous value: -"https://json-schema.org/draft/2020-12/schema"New value: +"http://json-schema.org/draft-07/schema#"
    • changedInput schema / properties / jsonOptions / properties / schema / additionalProperties
      Previous value: -{}New value: +false
  10. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the read-only annotations, the description discloses non-obvious behavior: Firecrawl may serve recently indexed content, maxAge controls staleness, a successful response does not confirm freshness, and browser actions can mutate the live page. It also notes the authenticated-only scrapeId and the Alexandria API-key/terms requirements.

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

Conciseness4/5

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

The core capability and routing guidance are front-loaded and every paragraph carries information, but the third and fourth paragraphs (Alexandria provider discovery, catalogue paging) are dense and overlap with what the alexandria schema description already states.

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?

For a complex open-world tool with a rich output schema and strong annotations, the description covers mode selection, auth prerequisites, and freshness caveats well. The remaining gap is the large set of undocumented behavior-tuning parameters, which an agent would have to infer from names alone.

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

Parameters3/5

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

Schema description coverage is only 19% across 27 parameters, so the description has to compensate and only partly does: it explains maxAge semantics, the formats enumeration, and the alexandria/url exclusivity and payload shape. Parameters like proxy, mobile, parsers, profile, waitFor, location, lockdown, redactPII, screenshotOptions, and jsonOptions/queryOptions remain unexplained anywhere.

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 first sentence states a specific verb and resource ('Scrape one URL and return its content') and enumerates the output formats, so an agent knows exactly what comes back. It also explicitly distinguishes itself from firecrawl_search, firecrawl_map, and firecrawl_crawl, which is what separates it from siblings.

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 states the selecting condition clearly ('Use it when the request identifies a page and needs its content or defined fields') and names alternatives with their triggering conditions ('Use firecrawl_search when additional web sources are needed'), plus the map/crawl split. Alexandria mode's mutual exclusivity with url is also spelled out.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources