- Authenticated
firecrawl_searchalways includes Alexandria. Whensourcesis omitted it sends["web", "alexandria"]as before; when the caller passes sources withoutalexandria, such as["web"]or["news"],alexandriais added and the requested sources are kept.["alexandria"]alone is unchanged. Keyless sessions, sessions without a credential, andenterprisesearches withzdroranonare unchanged, because the API refuses provider discovery there. If the API refuses discovery the caller did not ask for, the search retries on the requested sources alone. - Search tool descriptions and instructions describe the always-on behaviour in place of the
sources: ["web"]opt-out.
firecrawl_searchrelays the API's error message for every search. Searches with explicit sources that excludedalexandria(for example["web"]) previously surfaced onlyRequest failed with status code 402, dropping the out-of-credits message and upgrade link. The fallback for an error without a message now readsFirecrawl request failed (HTTP N).
firecrawl_find_toolsacceptsincludeCosts. When it istrue, tool results carry per-capability credit prices as before, andnextToolarguments keep the flag. The server handles it locally and does not send it upstream.
- Alexandria output omits per-capability credit prices by default.
creditsCost,perRecord,billing,recordsPerUnitandzeroDataRetentionCreditsCostare dropped fromfirecrawl_find_toolsitems and related tools, fromdata.toolsinfirecrawl_searchand URL-modefirecrawl_scrape, and from each Alexandria result entry. Execution request totals such asdata.creditsCostare unchanged; the freefirecrawl_find_toolsresponse omits its zero total. - Hosted instructions say Alexandria execution is billed per capability, replacing "billed at the capability's listed price".
firecrawl-mcp/server(unstable):unstable_hooks.registerResources(registrar)lets an embedder register MCP resources after the built-in tools. Resource definitions take auri,name, optionaldescriptionandmimeType, and aload(session)that returns one or more text or blob contents, each with optionaluri,mimeTypeand_metaoverrides. TheResourceDefinition,ResourceContentandResourceRegistrartypes are exported.- Tool definitions passed to
registerExtraToolsaccepticons(src, optionalmimeType,sizes,theme), whichtools/listnow sends. Built-in tools, resources and local stdio behaviour are unchanged.
- The server no longer sends
X-Firecrawl-Agent-Hints: trueon its Firecrawl API requests and no longer relays the API's optionalagent_hintsfield.agent_hintsis removed from every tool's output schema, structured content and error payloads, andToolCallEvent(passed toonToolResult) no longer hasagentHints. The API no longer sends this field, so tool results are otherwise unchanged. firecrawl_searchno longer advertises or forwards the optionalobjectiveandclientModelinputs, on both the full and the search-only surface. Clients that still send them keep working: the values are ignored and not sent to/v2/search.firecrawl_feedbackkeeps itsobjectivefield.
- The README's
CLOUD_SERVICE=trueand search-only sections are shortened into one section. Behaviour is unchanged.
- Scrape formats accept
imagesfor page image URLs, including the shared scrape options used by search, crawl, and browser interaction. Other formats are unchanged.
- Hosted mode (
CLOUD_SERVICE=true) no longer writes per-call[MCP_ACTION]and[MCP_AGENT_HINTS]log lines or posts action-log records (FIRECRAWL_MCP_ACTION_LOG_URL,FIRECRAWL_MCP_ACTION_LOG_SECRET). These modules are now maintained with the hosted deployment. TheonToolResulthook is unchanged, so embedders can still observe tool calls. - The
/.well-known/openai-apps-challengeroute (OPENAI_APPS_CHALLENGE_TOKEN) is removed in every HTTP mode. Hosted/readyno longer checks deployment configuration: the primary HTTP listener's/readynow returns{"ok":true}in every mode, as it already did for self-hosted HTTP. The hosted search instance keeps FastMCP's own/readyresponse. - Hosted keyless admission is removed. With
CLOUD_SERVICE=true, an HTTP request without a credential is now rejected with 401 like any other missing credential, instead of being admitted as a rate-limited keyless session;KEYLESS_PROXY_SECRETis no longer read and client IPs are no longer forwarded. A request with an invalid credential on the full endpoint is still admitted and every tool call returns theCREDENTIAL_INVALIDrecovery payload. The search-only and account profiles never admitted keyless sessions and are unchanged. Local keyless stdio (noFIRECRAWL_API_KEYand noFIRECRAWL_API_URL) is unchanged. - The service image files
docker/nginx.confanddocker/entrypoint.share removed, along with the internal marker header and log line for their credential-in-path route (X-Firecrawl-Key-Transport,[MCP_LEGACY_KEY_PATH]). The standardDockerfileimage is unchanged.
CLOUD_SERVICE=trueis documented as a hardened HTTP preset: streamable HTTP bound to0.0.0.0, a credential required on every request, safe mode, and upload-only file access. The account and search-only surfaces selected byFASTMCP_ENDPOINTare unchanged, andnpm run start:cloudstill starts the preset.
-
Unstable library entry point
firecrawl-mcp/server:createFirecrawlMcpServer(options)builds a server instance for embedding in another runtime, with extension hooks underunstable_hooks(authenticate,wrapTool,onToolResult,instructions,registerExtraTools,outboundRequest,beforeKeylessRequest,toolFilter,configureHttp,oauth) and its own type declarations, so embedders do not importfastmcp. The API may change in any release. Thefirecrawl-mcpCLI is unchanged. -
firecrawl-mcp/serveralso exports the helpers the built-in tools use (credential recovery payloads, header and origin helpers, search field definitions, the search output schema, search request and Alexandria error helpers, the read-onlyKEYLESS_TOOL_NAMESset, andstructuredCompact), so embedded tools and hooks can behave like the built-in ones. They are unstable too. -
firecrawl_gov_searchqueries/v2/search/gov, an index of primary law and regulatory material from US federal, state, and local government sources (statutes, regulations, codes, court opinions, and other government publications). It takesqueryand an optionalk(1 to 100) and returns ranked results with a position, title, URL, and matched snippet. It is registered on the full surface for authenticated sessions and on the search surface (/v2/mcp-search), whose fixed tool set grows to nine. -
firecrawl_agentnow exposes the optionaleffort(low,medium,high),maxCredits, andstrictConstrainToURLsparameters thatPOST /v2/agentalready accepts, and forwards them in the request body. -
firecrawl_agentcan continue a thread: it acceptsthreadIdandmode("extract"or"chat") and forwards them toPOST /v2/agentthrough the SDK. On a follow-up, omittedmode,urlsandschemacarry over from the previous turn.firecrawl_agent_statusnow keepsmessageandsuggestionsin its structured content, next tothreadIdandthreadTurn. -
firecrawl_agentaccepts anexchangeobject that mirrors the API's (enabled,toolkits(at most 5),maxCalls,requireApproval,approve: { approvalId, callIds?, always? },decline: { approvalId },onTermsRequired) and forwards it toPOST /v2/agentthrough the SDK.exchange.onTermsRequired("skip"or"ask") controls Alexandria providers whose data terms the team has not accepted; they are never called. After an ask-mode terms offer and the user's explicit consent toterms/accept, a caller answers the offer on the same thread withexchange.approve: { approvalId }(orexchange.decline) instead of starting over.approveanddeclinerequirethreadIdand cannot be sent together, andexchange.requireApprovalrequiresmode: "chat"on the same call. There is no auto-accept.firecrawl_agent_statusnow keepsexchange(includingskippedProvidersandrequiresAction, whose providerdigestisstring | nulland always present) andpendingApprovalin its structured content. -
firecrawl_agent_statusflags a run that stopped at its credit limit. When the API reportsstatus: "failed"withstopReason: "credit_limit_reached", the text result starts with a plain notice: the run hitmaxCredits,partial(when present) is an incomplete best-effort result and whether it matches the requested schema, the agent'smessage, and how to continue (a follow-up on the samethreadId, or a new run with a highermaxCredits). Structured content keepspartial,partialSchemaValidandstopReasonand adds the samenotice. Every other status is returned unchanged.
- The
ghcr.io/firecrawl/firecrawl-mcp-servercontainer image now packages the standard server: stdio by default, Streamable HTTP withHTTP_STREAMABLE_SERVER=trueonPORT(default3000), entrypointnode dist/index.js, running as the non-rootnodeuser. Earlierlatestbuilds ran a deployment-specific image listening on port8080; if you ran that image, update your port mapping and configuration. Images are taggedlatest,v<package version>andsha-<commit sha>, and thefirecrawl-mcp-server-alphaimage is no longer published. See "Running with Docker" in the README. tools/listnow sends each tool's top-leveltitle(MCP 2025-06-18), copied fromannotations.title. The title wording is unchanged. Clients that read only the top-level field, such as Codex's tool search, now see the same display names.- The npm package now bundles the pnpm-patched fastmcp. npm does not apply pnpm patches, so
npx firecrawl-mcpinstalls were loading unpatched fastmcp from the registry, without the top-level titles or thecanListandbeforeValidatehooks. fastmcp's runtime imports (@modelcontextprotocol/sdk,fuse.js,hono,mcp-proxy,undici,uri-templates,xsschema) are now direct dependencies so they resolve under pnpm's non-hoisted layout too. - Keyless recovery messages now link to the caller's own signup link,
https://firecrawl.dev/k/<token>(a 12-character encrypted token), instead of/app/api-keys. The API issues the link (thesignup_urlof a keyless 429, orsignupUrlfrom the eligibility check, which the server now also asks for when a keyless session calls an account-only tool) and the site decrypts it to MCP keyless attribution. When the API can't give one it sends the regular keyless signup link, which is relayed as is; with no API link at all the message uses the regular MCP signup link (signin?utm_source=keyless&utm_medium=mcp). Recovery payloads carry the link assignup_url. Signed-in users who open it land on the API keys page. - The search surface (
/v2/mcp-search) now exposesfirecrawl_find_toolsandfirecrawl_scrapealongside its six search tools, so agents can execute the Alexandria providers thatfirecrawl_searchalready returns. Both carry surface-scoped descriptions that name only tools registered on that surface, and Alexandria results there omit thefirecrawl_feedbackpointer. See docs/search-profile.md.
- Hosted OAuth reuses a token's introspection answer for up to 60 seconds, capped by the token's expiry, and 10 seconds for an inactive answer. Concurrent requests with one token share a single introspection call, and failed introspections are never cached. This keeps each node under the issuer's per-IP rate limit, which was turning bursts into
Firecrawl credential validation is temporarily unavailable. A revoked token can keep working for up to 60 seconds on a pod that cached it. SetFIRECRAWL_OAUTH_INTROSPECT_CACHE_TTL_MS=0to turn the cache off.[MCP_CREDENTIAL_VALIDATION]records now includeedge_mitigation(deny,challenge,rate_limitorother) when the edge firewall blocked the introspection. firecrawl_searchon both surfaces now forwardsincludeDomainsandexcludeDomainsto/v2/searchas body fields instead of rewriting the query withsite:operators, so the API's domain enforcement applies to MCP callers.
- Alexandria discovery through
firecrawl_searchwithsources: ["alexandria"]orsources: [{ "type": "alexandria" }]. Both profiles normalize the legacyexchangesource toalexandriaand return compact tool suggestions by default indata.toolswithcreditsUsedpreserved. firecrawl_find_toolson the full surface provides category browsing, compact provider tools, selected full contracts, URL lookup andnextToolnavigation.firecrawl_scrapeexecutes one or up to ten calls usingalexandria: [{ provider, capability, options }]instead ofurl. Results are returned as{ success, scrape_id, requestId, data: { alexandria, creditsCost } }. Errors preserve their code and available charge ID. Keyless sessions receiveAlexandria requires an API key on a team with Alexandria access.- Provider terms are read and accepted through nested
firecrawl_scrapecapabilities after a blocked request. Acceptance requires the reviewed version and digest, explicit user authorization andconfirmed: true. - Successful large Alexandria results use a retained-result handoff above 20,000 estimated tokens when remote access is verified.
firecrawl_parsenow works on the remote hosted MCP server (CLOUD_SERVICE), not just local mode. Because the hosted server cannot read the caller's filesystem, hosted parse uses a two-call flow: the first call (filePath) returns a short-lived signed upload command plus anextToolCallcarrying anuploadRef; after the bytes are uploaded, the second call (uploadRef) parses the file server-side. The generated upload command never includes your Firecrawl API key, and the flow also works on the keyless remote URL.
- Added
redactPIIto scrape, parse, and nested scrape option schemas so MCP callers can request PII redaction with a single flag.
- Fix stdio transport regression introduced in 3.18.0 where every tool call
failed with
Unauthorized: API key is required when not using a self-hosted instanceeven whenFIRECRAWL_API_KEYwas set. The OAuth refactor in 3.18.0 made theauthenticatecallback unconditionally readrequest.headers, butfirecrawl-fastmcpinvokesauthenticate(undefined)for stdio (there is no HTTP request context). The resultingTypeErrorwas swallowed by FastMCP, leaving the session unauthenticated. Added a null guard so env-var credentials (FIRECRAWL_API_KEY/FIRECRAWL_OAUTH_TOKEN) are honored on stdio again.
- Refined monitor goal guidance for meaningful-change monitoring.
- Documented
isMeaningful,judgment, andmeaningfulChangesmonitor results.
- Added a simplified
firecrawl_monitor_createpath usingpageorpagesplusgoal. - Added monitor check status filtering to
firecrawl_monitor_checks.
- Updated monitor tool guidance to prefer goal-based meaningful-change monitoring and document
judgmentresults.
- Critical bugfix for stdio transport hanging issues with Python clients
- Implemented transport-aware logging that directs logs to stderr when using stdio transport
- Resolves issue #22 where Python clients would hang during initialization or tool execution
- Improves compatibility with non-JavaScript MCP clients
- Environment variable support for all configuration options
- Detailed configuration documentation in README
- Made retry and credit monitoring settings configurable via environment variables:
FIRECRAWL_RETRY_MAX_ATTEMPTSFIRECRAWL_RETRY_INITIAL_DELAYFIRECRAWL_RETRY_MAX_DELAYFIRECRAWL_RETRY_BACKOFF_FACTORFIRECRAWL_CREDIT_WARNING_THRESHOLDFIRECRAWL_CREDIT_CRITICAL_THRESHOLD
- Enhanced configuration examples with detailed comments and use cases
- Improved documentation for retry behavior and credit monitoring
- Added comprehensive configuration examples for both cloud and self-hosted setups
- Added detailed explanations of retry behavior with timing examples
- Added credit monitoring threshold explanations
- Updated Claude Desktop configuration documentation
- Removed redundant batch configuration to rely on Firecrawl library's built-in functionality
- Simplified batch processing logic by leveraging library's native implementation
- Optimized parallel processing and rate limiting handling
- Reduced code complexity and potential configuration conflicts
- Removed custom
CONFIG.batchsettings (maxParallelOperationsanddelayBetweenRequests) - Simplified batch operation processing to use library's built-in batch handling
- Updated server startup logging to remove batch configuration references
- Maintained credit usage tracking and error handling functionality
- Resolved unused interface warnings for ExtractParams and ExtractResponse
- Improved type safety in extract operations
- Fixed type casting issues in API responses
- Improved type guards for better type inference
- Enhanced error messages for configuration validation
- Implemented automatic retries with exponential backoff for rate limits
- Added queue system for batch operations with parallel processing
- Integrated credit usage monitoring with warning thresholds
- Enhanced content validation with configurable criteria
- Added comprehensive logging system for operations and errors
- New search tool (
firecrawl_search) for web search with content extraction - Support for self-hosted Firecrawl instances via optional API URL configuration
- New
FIRECRAWL_API_URLenvironment variable - Automatic fallback to cloud API
- Improved error messages for self-hosted instances
- New
- Improved error handling for HTTP errors including 404s
- Enhanced URL validation before scraping
- Updated configuration with new retry and batch processing options
- Optimized rate limiting with automatic backoff strategy
- Improved documentation with new features and examples
- Added detailed self-hosted configuration guide
- Rate limit handling in batch operations
- Error response formatting
- Type definitions for response handlers
- Test suite mock responses
- Error handling for invalid search queries
- API configuration validation
- Initial release with basic scraping functionality
- Support for batch scraping
- URL discovery and crawling capabilities
- Rate limiting implementation