Skip to main content
Glama
AdvaitR7

Firecrawl MCP Multiple Keys

by AdvaitR7

Firecrawl MCP Multiple Keys

A Firecrawl MCP server with built-in support for multiple API keys. It exposes Firecrawl's web search, scraping, crawling, extraction, browser interaction, monitoring, and research tools to OpenCode and other MCP clients.

This fork is useful when you want one local Firecrawl MCP server that rotates across a pool of API keys instead of configuring several separate MCP server entries.

Highlights

  • Local stdio MCP server by default

  • Optional Streamable HTTP transport for hosted or local HTTP usage

  • Multi-key rotation with FIRECRAWL_API_KEYS

  • Single-key fallback with FIRECRAWL_API_KEY

  • Process-local round-robin key selection

  • Retry/failover across pooled keys for retryable Firecrawl errors where safe

  • Firecrawl cloud and self-hosted API support

  • TypeScript source bundled with tsup

Related MCP server: WebSearch

Requirements

  • Node.js 22 or newer

  • pnpm

  • One or more Firecrawl API keys

  • OpenCode or another MCP-compatible client

Install

git clone https://github.com/AdvaitR7/firecrawl-mcp-multiple-keys.git
cd firecrawl-mcp-multiple-keys
pnpm install
pnpm run build

The build creates dist/index.js. MCP clients should run that file with Node.

Configure API Keys

For multiple keys, set FIRECRAWL_API_KEYS as a comma-separated or whitespace-separated list:

FIRECRAWL_API_KEYS=firecrawl_key_1,firecrawl_key_2

For a single key, set FIRECRAWL_API_KEY:

FIRECRAWL_API_KEY=firecrawl_key_1

FIRECRAWL_API_KEYS takes precedence over FIRECRAWL_API_KEY unless FIRECRAWL_OAUTH_TOKEN is set.

Key Rotation Behavior

At startup, the server loads FIRECRAWL_API_KEYS into a process-local key pool. Each request that uses the pool starts with the next key in sequence.

request 1 -> key 1
request 2 -> key 2
request 3 -> key 1
request 4 -> key 2

For retryable failures such as 429, 5xx, timeout, or network errors, supported read-style operations can try remaining keys in the current cycle. Mutating operations are more conservative to avoid duplicate jobs.

Header credentials and FIRECRAWL_OAUTH_TOKEN bypass the environment key pool.

OpenCode Setup

Build the project first:

pnpm install
pnpm run build

Add a local MCP entry to your OpenCode config. Use an absolute path to dist/index.js.

Multi-key configuration:

{
  "mcp": {
    "firecrawl": {
      "type": "local",
      "command": ["node", "/absolute/path/to/firecrawl-mcp-multiple-keys/dist/index.js"],
      "enabled": true,
      "timeout": 30000,
      "environment": {
        "FIRECRAWL_API_KEYS": "firecrawl_key_1,firecrawl_key_2"
      }
    }
  }
}

Single-key configuration:

{
  "mcp": {
    "firecrawl": {
      "type": "local",
      "command": ["node", "/absolute/path/to/firecrawl-mcp-multiple-keys/dist/index.js"],
      "enabled": true,
      "timeout": 30000,
      "environment": {
        "FIRECRAWL_API_KEY": "firecrawl_key_1"
      }
    }
  }
}

Restart OpenCode after changing MCP configuration.

Environment Variables

Variable

Required

Description

FIRECRAWL_API_KEYS

No

Comma- or whitespace-separated API keys for round-robin rotation

FIRECRAWL_API_KEY

No

Single Firecrawl API key fallback

FIRECRAWL_OAUTH_TOKEN

No

Static Firecrawl OAuth access token for stdio usage

FIRECRAWL_API_URL

No

Custom Firecrawl API URL for self-hosted instances

HTTP_STREAMABLE_SERVER

No

Set to true to use Streamable HTTP transport

SSE_LOCAL

No

Set to true to use local HTTP stream behavior

CLOUD_SERVICE

No

Set to true for hosted cloud-service behavior

PORT

No

HTTP transport port, default 3000

HOST

No

HTTP transport host, default localhost outside cloud mode

Transport Modes

By default, the server starts on stdio:

FIRECRAWL_API_KEYS=firecrawl_key_1,firecrawl_key_2 node dist/index.js

For local Streamable HTTP transport:

HTTP_STREAMABLE_SERVER=true FIRECRAWL_API_KEY=firecrawl_key_1 node dist/index.js

Direct terminal execution of the stdio server will wait for MCP protocol input. For normal usage, run it through OpenCode or another MCP client.

Tools

Core Firecrawl Tools

Tool

Description

firecrawl_scrape

Scrape a single URL with markdown, JSON, HTML, screenshots, or other formats

firecrawl_map

Discover URLs on a website

firecrawl_search

Search the web, news, images, GitHub, research, or PDFs

firecrawl_search_feedback

Send feedback for a previous Firecrawl search result

firecrawl_feedback

Send generic endpoint feedback for scrape, parse, map, or search jobs

firecrawl_crawl

Crawl multiple pages from a site or section

firecrawl_check_crawl_status

Check an existing crawl job status

firecrawl_extract

Extract structured data from one or more URLs

firecrawl_agent

Start an autonomous web research agent job

firecrawl_agent_status

Poll an agent job until completion

firecrawl_interact

Interact with a web page in a browser session

firecrawl_interact_stop

Stop an interaction session

firecrawl_parse

Parse uploaded or local documents, including PDFs

Monitor Tools

Tool

Description

firecrawl_monitor_create

Create a recurring monitor for pages or searches

firecrawl_monitor_list

List monitors

firecrawl_monitor_get

Get one monitor by ID

firecrawl_monitor_update

Update monitor settings

firecrawl_monitor_delete

Delete a monitor

firecrawl_monitor_run

Trigger a monitor check immediately

firecrawl_monitor_checks

List historical monitor checks

firecrawl_monitor_check

Inspect one monitor check and its page diffs

Research Tools

Tool

Description

firecrawl_research_search_papers

Search research papers by topic

firecrawl_research_inspect_paper

Fetch metadata for one paper

firecrawl_research_related_papers

Expand from seed papers through citation graph similarity

firecrawl_research_read_paper

Read relevant full-text passages for one paper

firecrawl_research_search_github

Search GitHub issues, pull requests, and readmes

Development

Install dependencies:

pnpm install

Build:

pnpm run build

Test:

pnpm test

Lint:

pnpm run lint

Format:

pnpm run format

Run the compiled stdio server:

FIRECRAWL_API_KEYS=firecrawl_key_1,firecrawl_key_2 pnpm start

Security

Never put real Firecrawl API keys in source files, README examples, screenshots, issues, or commits. Keep keys in your MCP client environment config, shell environment, or a local .env file that is not committed.

If a key is exposed, revoke it in Firecrawl and create a replacement key.

License

MIT

Available Tools

26 tools
firecrawl_agentA

Autonomous web research agent. This is a separate AI agent layer that independently browses the internet, searches for information, navigates through pages, and extracts structured data based on your query. You describe what you need, and the agent figures out where to find it.

How it works: The agent performs web searches, follows links, reads pages, and gathers data autonomously. This runs asynchronously - it returns a job ID immediately, and you poll firecrawl_agent_status to check when complete and retrieve results.

IMPORTANT - Async workflow with patient polling:

  1. Call firecrawl_agent with your prompt/schema → returns job ID immediately

  2. Poll firecrawl_agent_status with the job ID to check progress

  3. Keep polling for at least 2-3 minutes - agent research typically takes 1-5 minutes for complex queries

  4. Poll every 15-30 seconds until status is "completed" or "failed"

  5. Do NOT give up after just a few polling attempts - the agent needs time to research

Expected wait times:

  • Simple queries with provided URLs: 30 seconds - 1 minute

  • Complex research across multiple sites: 2-5 minutes

  • Deep research tasks: 5+ minutes

Best for: Complex research tasks where you don't know the exact URLs; multi-source data gathering; finding information scattered across the web; extracting data from JavaScript-heavy SPAs that fail with regular scrape. Not recommended for:

  • Single-page extraction when you have a URL (use firecrawl_scrape, faster and cheaper)

  • Web search (use firecrawl_search first)

  • Interactive page tasks like clicking, filling forms, login, or navigating JS-heavy SPAs (use firecrawl_scrape + firecrawl_interact)

  • Extracting specific data from a known page (use firecrawl_scrape with JSON format)

Arguments:

  • prompt: Natural language description of the data you want (required, max 10,000 characters)

  • urls: Optional array of URLs to focus the agent on specific pages

  • schema: Optional JSON schema for structured output

Prompt Example: "Find the founders of Firecrawl and their backgrounds" Usage Example (start agent, then poll patiently for results):

{
  "name": "firecrawl_agent",
  "arguments": {
    "prompt": "Find the top 5 AI startups founded in 2024 and their funding amounts",
    "schema": {
      "type": "object",
      "properties": {
        "startups": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "funding": { "type": "string" },
              "founded": { "type": "string" }
            }
          }
        }
      }
    }
  }
}

Then poll with firecrawl_agent_status every 15-30 seconds for at least 2-3 minutes.

Usage Example (with URLs - agent focuses on specific pages):

{
  "name": "firecrawl_agent",
  "arguments": {
    "urls": ["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
    "prompt": "Compare the features and pricing information from these pages"
  }
}

Returns: Job ID for status checking. Use firecrawl_agent_status to poll for results.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsNo
promptYes
schemaNo

TDQS

A4.9/5.0
Behavior5/5

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

Describes async behavior, polling workflow, and expected wait times. Annotations provide readOnlyHint=false and openWorldHint=true; description adds context on how the agent navigates and extracts data without contradiction.

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?

Description is verbose but well-structured with sections (How it works, Important, etc.). Every sentence adds value; could be slightly trimmed but remains clear.

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

Completeness5/5

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

Covers async workflow, polling, when to use, examples, and return value. References sibling status tool. Complete for a complex async tool without output schema.

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

Parameters5/5

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

Despite 0% schema coverage, the description explains each parameter: prompt (natural language, max length), urls (optional focus), schema (structured output). Provides examples and usage.

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 description clearly states 'Autonomous web research agent' and explains it browses the internet to find and extract structured data. It distinguishes from siblings like firecrawl_scrape (single page extraction) and firecrawl_search (web search).

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?

Explicitly recommends for complex research tasks and multi-source data gathering. Lists not-recommended scenarios with alternative tools (firecrawl_scrape, firecrawl_search, firecrawl_interact).

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

firecrawl_agent_statusA
Read-only

Check the status of an agent job and retrieve results when complete. Use this to poll for results after starting an agent with firecrawl_agent.

IMPORTANT - Be patient with polling:

  • Poll every 15-30 seconds

  • Keep polling for at least 2-3 minutes before considering the request failed

  • Complex research can take 5+ minutes - do not give up early

  • Only stop polling when status is "completed" or "failed"

Usage Example:

{
  "name": "firecrawl_agent_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

Possible statuses:

  • processing: Agent is still researching - keep polling, do not give up

  • completed: Research finished - response includes the extracted data

  • failed: An error occurred (only stop polling on this status)

Returns: Status, progress, and results (if completed) of the agent job.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, which the description does not contradict. The description adds critical behavioral context: polling behavior, expected duration, and when to stop polling. It also describes return values (status, progress, results). This goes beyond annotations to fully inform the agent.

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

Conciseness5/5

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

The description is well-structured: first sentence states the purpose, then polling guidance in bullet points, a code example, status list, and return summary. It is front-loaded with essential information and each sentence adds value. No unnecessary verbosity.

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?

The tool has one parameter and no output schema. The description explains the statuses and that results are returned when completed. However, it does not detail the structure of the result data (e.g., fields or format). Since there is no output schema, more detail on the return format would be beneficial, but the description is still sufficient for an agent to use the tool correctly.

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

Parameters4/5

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

The input schema has one parameter 'id' (string, required) with no description (0% coverage). The description compensates by including a usage example showing a UUID and stating it is the agent job ID. However, it does not explicitly define the parameter format or constraints beyond the example. Still, the meaning is clear enough for correct invocation.

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 description clearly states it checks the status of an agent job and retrieves results when complete. It distinguishes from sibling tools like firecrawl_agent (which starts the agent) and firecrawl_check_crawl_status (different job type). The verb 'Check' and resource 'status of an agent job' are specific.

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?

Explicit guidance on when to use: 'after starting an agent with firecrawl_agent'. Provides specific polling intervals (15-30 seconds), patience advice (2-3 minutes minimum), and conditions to stop polling (completed or failed). Lists possible statuses with interpretations. This is exemplary usage guidance.

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

firecrawl_check_crawl_statusB
Read-only

Check the status of a crawl job.

Usage Example:

{
  "name": "firecrawl_check_crawl_status",
  "arguments": {
    "id": "550e8400-e29b-41d4-a716-446655440000"
  }
}

Returns: Status and progress of the crawl job, including results if available.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it returns status/progress and results, but does not discuss error handling, rate limits, or behavior for invalid IDs.

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 description is short and front-loaded with the purpose. The usage example and return note are useful but add length. Could be slightly more concise, but overall efficient.

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

Completeness2/5

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

Missing context about how to obtain the crawl job ID, possible status values, and error scenarios. For a tool with 1 parameter and no output schema, it should explain these details for reliable agent use.

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?

Only parameter 'id' has no description in schema (0% coverage). The description does not explain what 'id' refers to (the crawl job ID) or how to obtain it. The usage example shows a UUID but provides no context.

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?

Clearly states 'Check the status of a crawl job' with a specific verb and resource. Distinguishes from siblings like firecrawl_crawl (starts a crawl) and firecrawl_agent_status (checks agent status).

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance. Does not mention that it should be used after starting a crawl with firecrawl_crawl or differentiate from other status tools like firecrawl_agent_status.

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

firecrawl_crawlA

Starts a crawl job on a website, polls until it reaches a terminal state, and returns the final crawl status/data.

Best for: Extracting content from multiple related pages, when you need comprehensive coverage. Not recommended for: Extracting content from a single page (use scrape); when token limits are a concern (use map + scrape for tighter control); when you need fast results (crawling can be slow). Warning: Crawl responses can be very large and may exceed token limits. Limit the crawl depth and number of pages, or use map + scrape for tighter control. Common mistakes: Setting limit or maxDiscoveryDepth too high (causes token overflow) or too low (causes missing pages); using crawl for a single page (use scrape instead). Using a /* wildcard is not recommended. Prompt Example: "Get all blog posts from the first two levels of example.com/blog." Usage Example:

{
  "name": "firecrawl_crawl",
  "arguments": {
    "url": "https://example.com/blog/*",
    "maxDiscoveryDepth": 5,
    "limit": 20,
    "allowExternalLinks": false,
    "deduplicateSimilarURLs": true,
    "sitemap": "include"
  }
}

Returns: Final crawl status and data after internal polling, including the crawl id. Use firecrawl_check_crawl_status only when you need to re-check an existing crawl ID later.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
delayNo
limitNo
promptNo
sitemapNo
webhookNo
excludePathsNo
includePathsNo
scrapeOptionsNo
maxConcurrencyNo
webhookHeadersNo
allowSubdomainsNo
crawlEntireDomainNo
maxDiscoveryDepthNo
allowExternalLinksNo
ignoreQueryParametersNo
deduplicateSimilarURLsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false and destructiveHint=false, but description adds key behavioral context: polling until terminal state, large response warnings, token limit concerns, and relationship to check_crawl_status. However, details on failure behavior or polling mechanism are missing.

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?

Well-structured with clear sections (Best for, Not recommended, etc.) and front-loaded main action. Slightly verbose with example and prompts, but mostly efficient. Could reduce repetition of token limit warnings.

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

Completeness3/5

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

For a complex tool with 17 parameters and nested objects, the description provides high-level guidance and distinguishes from siblings, but lacks detailed parameter descriptions. No output schema; return type is vaguely described as 'final crawl status/data'. Adequate but not complete.

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 0%, and the description only mentions a few parameters in the usage example and common mistakes (limit, maxDiscoveryDepth, url). Most parameters (e.g., delay, webhook, scrapeOptions) are not explained, leaving agents to rely solely on schema names.

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 description clearly states the tool starts a crawl job, polls until terminal state, and returns status/data. It specifically distinguishes from siblings like firecrawl_scrape (single page) and firecrawl_map, making the purpose unambiguous.

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?

Explicitly lists best use cases (multiple related pages), not recommended cases (single page, token concerns, speed), and provides alternatives (scrape, map + scrape). Includes common mistakes and a prompt example, offering comprehensive guidance.

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

firecrawl_extractA
Read-only

Extract structured information from web pages using LLM capabilities. Supports both cloud AI and self-hosted LLM extraction.

Best for: Extracting specific structured data like prices, names, details from web pages. Not recommended for: When you need the full content of a page (use scrape); when you're not looking for specific structured data. Arguments:

  • urls: Array of URLs to extract information from

  • prompt: Custom prompt for the LLM extraction

  • schema: JSON schema for structured data extraction

  • allowExternalLinks: Allow extraction from external links

  • enableWebSearch: Enable web search for additional context

  • includeSubdomains: Include subdomains in extraction Prompt Example: "Extract the product name, price, and description from these product pages." Usage Example:

{
  "name": "firecrawl_extract",
  "arguments": {
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "prompt": "Extract product information including name, price, and description",
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "price": { "type": "number" },
        "description": { "type": "string" }
      },
      "required": ["name", "price"]
    },
    "allowExternalLinks": false,
    "enableWebSearch": false,
    "includeSubdomains": false
  }
}

Returns: Extracted structured data as defined by your schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes
promptNo
schemaNo
enableWebSearchNo
includeSubdomainsNo
allowExternalLinksNo

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety profile is covered. Description adds LLM method support (cloud/self-hosted) but no additional behavioral traits like rate limits, error handling, or authorization needs.

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

Conciseness5/5

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

Well-structured with clear sections: purpose, best/not recommended, argument list, prompt example, usage example, return description. No fluff; every sentence adds value.

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?

Covers purpose, usage, all parameters with examples. Lacks details on error handling or authentication, but given annotations cover safety and output depends on user-provided schema, it is reasonably complete.

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

Parameters4/5

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

Schema description coverage is 0%, so description must compensate. It provides argument descriptions, a prompt example, and a full usage example with schema. While terse, it adds meaning beyond bare parameter names.

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?

Clearly states the verb (Extract), resource (structured information from web pages), and method (using LLM capabilities). Explicitly distinguishes from sibling tools like scrape and crawl with 'Not recommended for' sections.

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?

Explicitly states when to use ('Best for: extracting specific structured data') and when not to use ('Not recommended for: full content, use scrape'). Provides clear alternatives and context.

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

firecrawl_feedbackA

Send structured feedback for a completed Firecrawl v2 job. Use this for endpoint-level feedback on scrape, parse, map, or search jobs when the job result was useful, partially useful, or failed to meet expectations.

For search-result quality specifically, prefer firecrawl_search_feedback when available because it has search-focused guidance. This generic tool posts to /v2/feedback and accepts endpoint-wide signals:

  • endpoint — one of search, scrape, parse, or map.

  • jobId — the id returned by that endpoint.

  • rating — overall result quality: good, partial, or bad.

  • issues — stable lowercase issue codes such as missing_markdown, bad_pdf_parse, or wrong_links.

  • tags — optional lowercase tags for grouping feedback.

  • note — short human-readable context. Do not include huge page contents or raw scrape results.

  • url, pageNumbers, and metadata — small contextual fields that identify what the feedback refers to.

Do not store multi-MB outputs in feedback. Use concise notes, issue codes, URLs, and page numbers.

Returns: { success, feedbackId, creditsRefunded, creditsRefundedToday?, dailyRefundCap?, dailyCapReached?, alreadySubmitted?, warning? } JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
noteNo
tagsNo
jobIdYes
issuesNo
ratingYes
endpointYes
metadataNo
pageNumbersNo
missingContentNo
valuableSourcesNo
querySuggestionsNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations (`readOnlyHint: false`, `destructiveHint: false`) indicate a write operation, and the description confirms it sends feedback. It warns against storing large outputs and describes the return format including credits refunded. Slightly more context could be given about side effects like credit deduction, but overall good.

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 description is well-structured with a clear purpose first, then parameter explanations, and return format. It is somewhat lengthy but each sentence adds value. Could be slightly more concise by consolidating repeated guidance.

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

Completeness5/5

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

Given the tool has 12 parameters, nested objects, no output schema, and no schema descriptions, the description covers the purpose, usage context, all parameter meanings, return value structure, and constraints. It is fully complete for an AI agent to use correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantics for each parameter: endpoint enum, jobId format, rating enum, issues tags, note, url, pageNumbers, metadata, and even undocumented parameters like missingContent, valuableSources, querySuggestions. It explains constraints (e.g., 'Do not include huge page contents').

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 description clearly states it is for sending structured feedback on completed Firecrawl v2 jobs, specifically for endpoint-level feedback on scrape, parse, map, or search. It distinguishes from the sibling `firecrawl_search_feedback` by noting that tool has search-focused guidance.

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?

Explicitly tells when to use this tool vs. alternatives: 'For search-result quality specifically, prefer `firecrawl_search_feedback` when available because it has search-focused guidance.' Also specifies that it accepts endpoint-wide signals for specific endpoints.

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

firecrawl_interactA

Interact with a page in a live browser session: click buttons, fill forms, extract dynamic content, or navigate deeper.

Best for: Multi-step workflows on a single page — searching a site, clicking through results, filling forms, extracting data that requires interaction. Two ways to target a page:

  • Pass a url to interact directly. The session is opened for you in one call (use this for a fresh page).

  • Pass a scrapeId from a previous firecrawl_scrape to reuse that already-loaded page (cheaper when you just scraped it).

Arguments:

  • url: Page to interact with; opens a session for you (use this OR scrapeId)

  • scrapeId: Scrape job ID from a previous scrape, found in its metadata (use this OR url)

  • prompt: Natural language instruction describing the action to take (use this OR code)

  • code: Code to execute in the browser session (use this OR prompt)

  • language: "bash", "python", or "node" (optional, defaults to "node", only used with code)

  • timeout: Interact execution timeout in seconds, 1-300 (optional, defaults to 30)

  • scrapeOptions: Optional scrape controls used only with url mode, such as waitFor, maxAge, proxy, or zeroDataRetention

Usage Example (prompt, direct via url):

{
  "name": "firecrawl_interact",
  "arguments": {
    "url": "https://example.com/products",
    "prompt": "Click on the first product and tell me its price"
  }
}

Usage Example (code):

{
  "name": "firecrawl_interact",
  "arguments": {
    "scrapeId": "scrape-id-from-previous-scrape",
    "code": "agent-browser click @e5",
    "language": "bash"
  }
}

Returns: Execution result including output, stdout, stderr, exit code, and live view URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
codeNo
promptNo
timeoutNo
languageNo
scrapeIdNo
scrapeOptionsNo

TDQS

A4.2/5.0
Behavior4/5

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

The description mentions opening a live session, reuse option, and return types (output, stdout, stderr, exit code, live view URLs). Annotations indicate readOnlyHint=false and openWorldHint=true, and the description aligns with this. It adds context about cost savings when reusing scrapeId. However, it does not disclose session lifecycle or cleanup details.

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 description is organized with clear sections and bullet-like arguments, making it easy to scan. It is somewhat lengthy but every sentence adds value. The front-loading of purpose and best-for is effective. Examples are useful.

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

Completeness3/5

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

Given the complexity (7 params, nested scrapeOptions, no output schema), the description covers core functionality well but omits details on error handling, session persistence, and the exact structure of the return object beyond a brief mention. The sibling tool 'firecrawl_interact_stop' suggests a stop capability not referenced here.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining each parameter's purpose and constraints (e.g., url vs scrapeId mutual exclusivity, prompt vs code alternatives, timeout range, language defaults). It also gives examples. However, scrapeOptions is only partially described with examples, not fully covering all nested properties.

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 description clearly states it interacts with a page in a live browser session using verbs like click, fill, extract. It distinguishes from siblings by specifically mentioning reuse of scrapeId from previous scrape, which is a key differentiator from tools like firecrawl_scrape.

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

Usage Guidelines4/5

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

The description explicitly labels 'Best for: Multi-step workflows' and explains two targeting methods (url vs scrapeId). However, it does not explicitly contrast with similar sibling tools like firecrawl_agent or firecrawl_scrape, leaving some ambiguity for the agent to infer.

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

firecrawl_interact_stopA
Destructive

Stop an interact session for a scraped page. Call this when you are done interacting to free resources.

Usage Example:

{
  "name": "firecrawl_interact_stop",
  "arguments": {
    "scrapeId": "scrape-id-here"
  }
}

Returns: Success confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
scrapeIdYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations include destructiveHint: true, and the description mentions 'free resources', which aligns. However, description adds minimal extra detail beyond the annotation hint.

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

Conciseness5/5

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

Very concise, includes a usage example and return info. No unnecessary words.

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

Completeness3/5

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

Adequate for a simple stop tool, but no output schema and minimal return info (just 'Success confirmation'). Could mention error cases.

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?

The parameter 'scrapeId' is not explained beyond its name, and schema description coverage is 0%. The description lacks any additional context about the parameter's purpose or format.

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 description clearly states the verb 'stop' and the resource 'interact session', and it distinguishes from sibling tools like firecrawl_interact which starts a session.

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

Usage Guidelines4/5

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

Provides explicit when-to-use advice ('Call this when you are done interacting to free resources'), but does not elaborate on scenarios where it should not be used or mention alternatives.

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

firecrawl_mapA
Read-only

Map a website to discover all indexed URLs on the site.

Best for: Discovering URLs on a website before deciding what to scrape; finding specific sections or pages within a large site; locating the correct page when scrape returns empty or incomplete results. Not recommended for: When you already know which specific URL you need (use scrape); when you need the content of the pages (use scrape after mapping). Common mistakes: Using crawl to discover URLs instead of map; jumping straight to firecrawl_agent when scrape fails instead of using map first to find the right page.

IMPORTANT - Use map before agent: If firecrawl_scrape returns empty, minimal, or irrelevant content, use firecrawl_map with the search parameter to find the specific page URL containing your target content. This is faster and cheaper than using firecrawl_agent. Only use the agent as a last resort after map+scrape fails.

Prompt Example: "Find the webhook documentation page on this API docs site." Usage Example (discover all URLs):

{
  "name": "firecrawl_map",
  "arguments": {
    "url": "https://example.com"
  }
}

Usage Example (search for specific content - RECOMMENDED when scrape fails):

{
  "name": "firecrawl_map",
  "arguments": {
    "url": "https://docs.example.com/api",
    "search": "webhook events"
  }
}

Returns: Array of URLs found on the site, filtered by search query if provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
limitNo
searchNo
sitemapNo
includeSubdomainsNo
ignoreQueryParametersNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true. Description further clarifies the tool discovers URLs, uses the 'search' parameter for filtering, and returns an array of URLs. No contradictions.

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?

Well-structured with clear sections, examples, and formatting. At moderate length, every section adds value. Minor redundancy in 'IMPORTANT' section could be condensed.

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?

No output schema, but description states returns 'Array of URLs'. Covers key usage scenarios and examples. However, missing parameter details slightly reduces completeness for a 6-parameter tool.

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 coverage is 0%, so description must compensate. It explains the 'url' and 'search' parameters via examples and description, but does not detail 'limit', 'sitemap', 'includeSubdomains', or 'ignoreQueryParameters', leaving gaps.

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 description clearly states the tool maps a website to discover URLs, and distinguishes it from siblings like scrape, crawl, and agent through explicit comparisons and usage guidance.

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?

Provides explicit 'Best for', 'Not recommended for', 'Common mistakes' sections, and specific workflow guidance to use map before agent when scrape fails.

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

firecrawl_monitor_checkA
Read-only

Get a single check with page-level diff results. Filter pageStatus to surface only the pages that changed (or were new, removed, etc.).

Each entry in data.pages[] has url, status (same | new | changed | removed | error), optional judgment when goal-based judging ran, and — when changed — a diff and possibly a snapshot. The shape of diff depends on the monitor's formats configuration:

  • Markdown mode (default). diff.text is the unified markdown diff; diff.json is a parse-diff AST ({ files: [...] }). No snapshot.

  • JSON mode (changeTracking with modes: ["json"]). diff.json is a per-field map keyed by JSON path into the extraction, e.g. plans[0].price, with each value being { previous, current }. snapshot.json is the full current extraction. No diff.text.

  • Mixed mode (modes: ["json", "git-diff"]). Both diff.text (markdown sidecar) AND diff.json (per-field map) are present, plus snapshot.json.

Example JSON-mode response pages[] entry:

{
  "url": "https://example.com/pricing",
  "status": "changed",
  "diff": {
    "json": {
      "plans[0].price":       { "previous": "$19/mo",        "current": "$24/mo" },
      "plans[1].features[2]": { "previous": "10 GB storage", "current": "25 GB storage" }
    }
  },
  "snapshot": { "json": { "plans": [/* current full extraction matching the monitor's schema */] } },
  "judgment": {
    "meaningful": true,
    "confidence": "high",
    "reason": "The pricing changed, which matches the monitor goal.",
    "meaningfulChanges": [
      {
        "type": "changed",
        "before": "$19/mo",
        "after": "$24/mo",
        "reason": "The tracked plan price changed."
      }
    ]
  }
}

When summarizing a check for the user, prefer diff.json paths (e.g. "plans[0].price changed from $19/mo to $24/mo") over re-printing the markdown diff — it's more concise and grounded in the schema fields they asked for.

When judgment is present, use it to decide what to surface. judgment.meaningful: false means the change was classified as noise for the monitor's goal. When judgment.meaningfulChanges is present, prefer those goal-relevant changes over raw diff hunks; each item includes type, before, after, and reason.

The endpoint paginates via a top-level next URL; this tool returns one page at a time. Increase limit (max 100) to fetch fewer pages.

Usage Example:

{
  "name": "firecrawl_monitor_check",
  "arguments": {
    "id": "mon_abc123",
    "checkId": "chk_xyz",
    "pageStatus": "changed"
  }
}
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
skipNo
limitNo
checkIdYes
pageStatusNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already state readOnlyHint=true and destructiveHint=false. Description adds extensive behavioral details: pagination via next URL, limit max 100, response shape for different formats, and when judgment is present. No contradictions.

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?

Description is long but well-structured with subheadings and a usage example. Front-loaded with purpose. Slightly verbose but earns its length through detail.

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

Completeness5/5

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

No output schema exists, so description fully explains return values with rich examples for markdown, JSON, and mixed modes. Covers pagination, filter, and judgment. Complete for a single check retrieval tool.

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

Parameters5/5

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

Schema has 0% description coverage, so description carries full burden. It explains pageStatus enum values, limit's role in pagination, and implies id/checkId as identifiers. 'skip' is not explained but compensated by pagination guidance.

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?

Description opens with 'Get a single check with page-level diff results,' clearly stating the verb and resource. It distinguishes from siblings like firecrawl_monitor_checks (which lists checks) by specifying depth and diff details.

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

Usage Guidelines4/5

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

Provides explicit filter guidance ('Filter pageStatus to surface only pages that changed'), example usage, and pagination advice. Does not explicitly contrast with all alternatives but context implies single vs list difference.

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

firecrawl_monitor_checksA
Read-only

List historical checks for a monitor.

Usage Example:

{ "name": "firecrawl_monitor_checks", "arguments": { "id": "mon_abc123", "limit": 10, "status": "completed" } }
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNo
offsetNo
statusNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds 'historical checks,' implying non-real-time data but does not disclose pagination behavior, error handling, or rate limits. It adds minimal behavioral context beyond the annotations.

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 description is concise with a single sentence and a usage example. It is front-loaded and efficient, though the example could be formatted as a bullet list for clarity. No redundant information.

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

Completeness3/5

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

The description covers the basic purpose but lacks details on ordering, offset/limit behavior, and the meaning of 'historical checks.' With no output schema and 4 parameters, it is adequate but not fully informative for an agent to use confidently.

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 0%, so the description must compensate. However, it only provides a usage example showing id, limit, and status, without explaining offset or parameter meanings. The schema provides enum values and constraints, but the description adds no new semantic value.

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 description clearly states 'List historical checks for a monitor,' specifying the verb 'list' and the resource 'checks' in the context of a monitor. This distinguishes it from siblings like firecrawl_monitor_check (single check) and firecrawl_monitor_list (list monitors).

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives like firecrawl_monitor_check or firecrawl_monitor_list. The usage example implies typical parameters but no guidance on context or exclusions.

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

firecrawl_monitor_createA

Create a Firecrawl monitor — a recurring scrape, crawl, or search that diffs each result against the last retained snapshot.

Prefer the simple path: pass page or pages plus goal to monitor specific URLs, OR pass queries plus goal to monitor web search results for new/changed hits. The tool will create the monitor with a 30-minute schedule and meaningful-change judging enabled by the API. Use body only for advanced requests such as crawl targets, JSON change tracking, custom retention, or manual judgeEnabled control.

Meaningful-change judge: set goal to a plain-language description of what the user actually cares about. judgeEnabled defaults to true when goal is set, so providing goal is enough. Page webhooks expose isMeaningful and judgment on monitor.page events.

Simple fields:

  • page: one page URL to monitor.

  • pages: multiple page URLs to monitor.

  • queries: one or more search queries (1-12) to monitor instead of fixed URLs. Each check runs the searches and diffs the result set, so you get alerted when new or changed results appear. Mutually exclusive with page/pages in the simple path.

  • searchWindow: optional recency window for search targets — one of 5m, 15m, 1h, 6h, 24h, 7d (default 24h).

  • maxResults: optional max results per search, 1-50 (default 10).

  • includeDomains / excludeDomains: optional domain allow/deny lists for search targets.

  • goal: plain-English instruction for what changes matter. Required for the simple path (and always required when queries are set — web monitors must have a goal).

  • scheduleText: optional natural-language schedule, default every 30 minutes.

  • email: optional email recipient for summaries.

  • webhookUrl: optional webhook URL. Configures monitor.page and monitor.check.completed.

Search-mode example:

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "queries": ["new LLM release", "frontier model launch"],
    "goal": "Notify me about major new LLM model releases.",
    "searchWindow": "24h",
    "maxResults": 10
  }
}

Goal guidance:

  • Expand the user's one-line monitoring intent into a concise 2-3 sentence monitor goal.

  • State what should trigger an alert, restate any scope the user gave, and include intent-specific exclusions only when obvious from the user's request.

  • Generic noise such as whitespace, formatting-only changes, request IDs, tracking params, generic metadata, and unrelated page chrome is already handled by the judge; do not repeat it in every goal.

  • If the user is vague, keep the goal broad rather than guessing exclusions. If the user asks for broad monitoring or "any change", preserve that and do not add exclusions that hide changes.

  • If the user says they do not care about something, include that explicitly. It is okay to ask whether they want to ignore specific noise when it is likely to matter.

  • Do not invent page-specific sections, thresholds, entities, or business rules unless the user mentioned them.

Query guidance (web monitors): queries control recall (what search retrieves) and goal controls precision (which results alert) — tune both.

  • Write keywords, not sentences: OpenAI new model release, not tell me when OpenAI releases a new model.

  • Quote multi-word entities ("Llama 4"); group synonyms with OR (launch OR release OR announcement).

  • Keep each query tight (~2-6 terms). One broad query usually beats several narrow ones — extra queries split the maxResults budget. Use one query per distinct entity; do not emit one per facet of a single subject.

  • Keep site: operators out of queries — use includeDomains / excludeDomains.

  • A healthy web monitor mostly returns new: 0 and alerts only on genuinely new, on-goal results. Many ignored results ⇒ queries too broad (tighten them); nothing for long stretches ⇒ queries too narrow or window too tight (broaden); dismissed alerts ⇒ goal too broad (add an intent-specific Ignore). Aim for high precision with enough recall.

Full body requests require: name, schedule (with cron or text), and targets (one or more { type: 'scrape', urls: [...] }, { type: 'crawl', url: '...' }, or { type: 'search', queries: [...], searchWindow?, maxResults?, includeDomains?, excludeDomains? }). Optional: goal (required when any search target is present), judgeEnabled, webhook, notification, retentionDays.

Markdown-mode (default): Each check produces a unified text diff of the page's markdown. No extra configuration needed.

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "page": "https://example.com/blog",
    "goal": "Alert when a new blog post is published or an existing headline changes.",
    "email": "alerts@example.com"
  }
}

Multiple pages:

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "pages": ["https://example.com/pricing", "https://example.com/changelog"],
    "goal": "Alert when pricing, packaging, or launch messaging changes.",
    "webhookUrl": "https://example.com/webhooks/firecrawl"
  }
}

JSON-mode change tracking: To detect changes in specific structured fields (price, headline, in-stock flag, list items) instead of the whole page, add a changeTracking format with modes: ["json"] and a JSON schema to the target's scrapeOptions.formats. The check response will then carry a per-field diff (keyed by JSON path, e.g. plans[0].price) and a snapshot.json with the full current extraction. See firecrawl_monitor_check for the response shape.

{
  "name": "firecrawl_monitor_create",
  "arguments": {
    "body": {
      "name": "Pricing watch",
      "schedule": { "text": "hourly", "timezone": "UTC" },
      "goal": "Alert when a pricing tier, price, billing period, limit, or headline feature changes. Ignore unrelated marketing copy unless it changes the pricing offer.",
      "targets": [{
        "type": "scrape",
        "urls": ["https://example.com/pricing"],
        "scrapeOptions": {
          "formats": [{
            "type": "changeTracking",
            "modes": ["json"],
            "prompt": "Extract pricing tiers and headline features for each plan.",
            "schema": {
              "type": "object",
              "properties": {
                "plans": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name":     { "type": "string" },
                      "price":    { "type": "string" },
                      "features": { "type": "array", "items": { "type": "string" } }
                    }
                  }
                }
              }
            }
          }]
        }
      }]
    }
  }
}

Mixed mode (JSON + git-diff): Use modes: ["json", "git-diff"] to get both per-field diffs and a markdown sidecar. The page is marked changed whenever either surface changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
goalNo
nameNo
pageNo
emailNo
pagesNo
queriesNo
timezoneNo
maxResultsNo
webhookUrlNo
includeDiffsNo
scheduleTextNo
searchWindowNo
excludeDomainsNo
includeDomainsNo

TDQS

A4.8/5.0
Behavior5/5

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

Discloses that the tool creates a monitor with a 30-minute schedule, meaningful-change judging, and diff-based detection. Describes webhook events and snapshot behavior. Annotations already indicate non-read-only and non-destructive, and the description adds specific behavioral details without contradiction.

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 description is lengthy but well-structured with sections, headings, and multiple examples. Every sentence adds value, though it could be slightly trimmed for brevity without losing clarity. Given the tool's complexity, the length is acceptable.

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

Completeness5/5

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

Despite no output schema, the description covers all key aspects: creation, scheduling, diffing, webhook events, goal tuning, and advanced body requests. It provides comprehensive guidance for both simple and complex use cases, making the tool fully understandable.

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

Parameters4/5

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

Schema description coverage is 0%, but the description extensively explains parameters like page, pages, queries, goal, searchWindow, maxResults, includeDomains, excludeDomains, scheduleText, email, webhookUrl, and body. However, some parameters like timezone and includeDiffs are only briefly mentioned, leaving minor gaps.

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 description clearly states it creates a Firecrawl monitor for recurring scrape, crawl, or search with diffs. It distinguishes from sibling tools like firecrawl_monitor_list, firecrawl_monitor_delete, etc., by focusing on creation and setup.

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?

Provides explicit guidance on when to use simple path (page/pages + goal or queries + goal) vs body for advanced requests. Includes examples and caveats (e.g., mutually exclusive fields). Clearly differentiates from other monitor tools.

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

firecrawl_monitor_deleteA
Destructive

Permanently delete a monitor and stop its schedule. This cannot be undone.

Usage Example:

{ "name": "firecrawl_monitor_delete", "arguments": { "id": "mon_abc123" } }
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already set destructiveHint=true, so the description reinforces permanence and adds 'stop its schedule' context. No contradictions. However, it does not disclose what happens to related data (e.g., checks).

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

Conciseness5/5

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

Two sentences plus a usage example. No redundant text; every sentence adds value. Front-loaded with the purpose and permanence.

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

Completeness5/5

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

Given the tool's simplicity (one required parameter, no output schema) and annotations covering destructiveness, the description is complete. It explains the action, permanence, and provides an example.

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 has one parameter 'id' with no description (0% coverage). Description only shows it in an example without explaining its format or how to obtain it. Does not add meaningful semantics beyond the schema.

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?

Description clearly states 'permanently delete a monitor and stop its schedule', specifying the verb (delete) and resource (monitor). It distinguishes from sibling tools like create, update, get, and list.

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

Usage Guidelines2/5

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

Description includes a warning that deletion cannot be undone, but provides no guidance on when to use this tool versus alternatives (e.g., update to disable, or list to find monitors). No explicit when/when-not or alternative tool names.

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

firecrawl_monitor_getA
Read-only

Get a single monitor by ID.

Usage Example:

{ "name": "firecrawl_monitor_get", "arguments": { "id": "mon_abc123" } }
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.8/5.0
Behavior3/5

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

The description aligns with annotations (readOnlyHint: true, destructiveHint: false) but adds no additional behavioral details such as rate limits, authorization, or return format.

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

Conciseness5/5

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

The description is concise: one sentence plus a usage example. No wasted words, well-structured for quick parsing.

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

Completeness3/5

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

For a simple get operation with one parameter, the description is adequate but lacks return value details (e.g., what fields the monitor contains). No output schema increases the need for such information.

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?

With 0% schema description coverage, the description only says 'by ID' and provides an example value. It does not explain what the ID represents or constraints beyond being a string.

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 description 'Get a single monitor by ID' clearly states the verb (Get), resource (monitor), and method (by ID), distinguishing it from sibling tools like list, create, delete.

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

Usage Guidelines4/5

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

The description includes a usage example showing the required 'id' parameter, implying use when you have a specific monitor ID. However, it doesn't explicitly state when not to use or mention alternatives.

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

firecrawl_monitor_listC
Read-only

List all Firecrawl monitors for the authenticated account.

Usage Example:

{ "name": "firecrawl_monitor_list", "arguments": { "limit": 20 } }
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description confirms a read operation but adds no additional behavioral context (e.g., pagination, data freshness). No contradiction with annotations.

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 description is very short (one line plus example) and to the point, but the example is valuable. Could be more efficient if parameter details were in the schema.

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

Completeness2/5

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

For a list tool with two optional parameters and no output schema, the description is incomplete. It omits pagination details, default ordering, and what the response contains. The usage example partially compensates but isn't sufficient.

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

Parameters1/5

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

Schema coverage is 0%, and the description does not explain the 'limit' and 'offset' parameters beyond the example. The agent gains no understanding of their meaning or constraints from the description.

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

Purpose4/5

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

The description clearly states the action ('list') and resource ('monitors'), and implies scope ('all'). It differentiates from sibling tools like firecrawl_monitor_get by implying a list operation, but does not explicitly distinguish from similar verbs (e.g., firecrawl_monitor_check).

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

Usage Guidelines2/5

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

The description provides a usage example but no guidance on when to use this tool versus alternatives such as firecrawl_monitor_get or firecrawl_monitor_create. There is no mention of prerequisites or context.

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

firecrawl_monitor_runB

Trigger a monitor check immediately, outside its normal schedule. Returns the queued check.

Usage Example:

{ "name": "firecrawl_monitor_run", "arguments": { "id": "mon_abc123" } }
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate non-readOnly (mutation) and non-destructive. The description adds that it returns the queued check. However, there is no mention of permissions, rate limits, or other side effects beyond the normal schedule alteration.

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

Conciseness5/5

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

The description is two succinct sentences plus a JSON usage example. Every element serves a purpose, and the key information is front-loaded.

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

Completeness3/5

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

For a simple tool with one parameter and no output schema, the description covers the purpose and return. However, missing parameter explanation and lack of error/disclaimer info leave it slightly incomplete.

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?

The single required parameter 'id' has no description in the schema (0% coverage). The description does not explain its meaning; only the usage example shows a hypothetical value ('mon_abc123'). This leaves semantic ambiguity.

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

Purpose4/5

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

The description clearly states the tool triggers a monitor check immediately outside its normal schedule. It uses specific verb and resource ('firecrawl_monitor_run'), but does not explicitly differentiate from sibling tools like firecrawl_monitor_check.

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

Usage Guidelines3/5

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

The description implies usage for forcing an immediate check, but provides no when-not-to-use guidance or alternatives. Context from sibling names might suggest firecrawl_monitor_check for checking status, but this is not explicit.

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

firecrawl_monitor_updateA
Destructive

Update a monitor. Pass any subset of fields to patch: name, status ("active" | "paused"), schedule, targets, goal, judgeEnabled, webhook, notification, retentionDays.

Usage Example:

{
  "name": "firecrawl_monitor_update",
  "arguments": {
    "id": "mon_abc123",
    "body": { "status": "paused" }
  }
}
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool as destructive (mutating). The description adds context by listing the specific fields that can be patched and noting the partial update behavior. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise: two sentences plus a code block. Every sentence adds value. The usage example is appropriately placed and helpful.

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 simple update tool with 2 parameters and no output schema, the description is fairly complete. It explains the body parameter well and gives an example. However, it could mention that the monitor ID must exist and what the response looks like (though no output schema is defined).

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden. It explicitly lists the allowed fields for the `body` parameter (name, status, schedule, etc.) and provides a usage example showing how to pass id and body. This adds essential meaning beyond the schema.

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 description clearly states 'Update a monitor' with a specific verb and resource. It distinguishes from sibling tools like create, delete, get, and list by being the update operation. The list of patchable fields further clarifies scope.

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

Usage Guidelines4/5

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

The description implies usage when modifying an existing monitor. The usage example provides concrete guidance. However, it does not explicitly state when not to use it (e.g., for creating or deleting) or mention prerequisites like needing the monitor ID to be valid.

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

firecrawl_parseA
Read-only

Parse a file using Firecrawl's /v2/parse endpoint.

In local/non-cloud MCP mode, this tool reads filePath from the MCP server filesystem and posts multipart data to the configured self-hosted FIRECRAWL_API_URL, preserving the existing direct-read behavior.

In hosted CLOUD_SERVICE mode, this tool is a two-call flow because hosted MCP cannot read your local filesystem:

  1. Call with filePath, contentType, parse options, and optional declaredSizeBytes. The hosted server mints a short-lived upload URL and returns a safe local curl PUT command plus nextToolCall.

  2. Run the returned curl command locally, then call firecrawl_parse again with uploadRef and the desired parse options. The hosted server calls /v2/parse server-side with your session credential.

Best for: Extracting content from a local document (PDF, Word, Excel, HTML, etc.); pulling structured data out of a file with JSON format; converting binary documents into markdown for downstream reasoning. Not recommended for: Remote URLs (use firecrawl_scrape); multiple files at once (call parse multiple times); documents that require interactive actions, screenshots, or change tracking — those aren't supported by the parse endpoint. Common mistakes: In hosted mode, do not pass both filePath and uploadRef. Phase 1 uses filePath only to generate upload instructions; phase 2 uses uploadRef only to parse server-side.

Supported file types: .html, .htm, .xhtml, .pdf, .docx, .doc, .odt, .rtf, .xlsx, .xls Unsupported options: actions, screenshot/branding/changeTracking formats, waitFor > 0, location, mobile, proxy values other than "auto" or "basic". Privacy: Set redactPII: true to return content with personally identifiable information redacted.

CRITICAL - Format Selection (same rules as firecrawl_scrape): When the user asks for SPECIFIC data points from a document, you MUST use JSON format with a schema. Only use markdown when the user needs the ENTIRE document content.

Handling PDFs: Add "parsers": ["pdf"] (optionally with pdfOptions.maxPages) when parsing a PDF so the PDF engine is invoked explicitly. For very long documents, cap maxPages to keep the response within token limits.

Hosted phase 1 example:

{
  "name": "firecrawl_parse",
  "arguments": {
    "filePath": "/absolute/path/to/document.pdf",
    "contentType": "application/pdf",
    "formats": ["markdown"],
    "parsers": ["pdf"],
    "zeroDataRetention": true
  }
}

Hosted phase 2 example:

{
  "name": "firecrawl_parse",
  "arguments": {
    "uploadRef": "upload-ref-from-phase-1",
    "formats": ["markdown"],
    "parsers": ["pdf"],
    "zeroDataRetention": true
  }
}

Returns: Phase 1 hosted upload instructions or a parsed document with markdown, html, links, summary, json, or query results depending on the requested formats.

ParametersJSON Schema
NameRequiredDescriptionDefault
proxyNo
maxAgeNo
formatsNo
parsersNo
filePathYes
redactPIINo
pdfOptionsNo
contentTypeNo
excludeTagsNo
includeTagsNo
jsonOptionsNo
queryOptionsNo
storeInCacheNo
onlyMainContentNo
zeroDataRetentionNo
removeBase64ImagesNo
skipTlsVerificationNo

TDQS

A4.8/5.0
Behavior5/5

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

The description explains the two operating modes (local vs. hosted), the two-call flow in hosted mode, privacy via redactPII, and unsupported options. Annotations already indicate readOnlyHint=true, and the description adds significant behavioral context without contradiction.

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 description is long but well-structured with sections for modes, best use, common mistakes, supported types, and examples. It is front-loaded with the main purpose, and each section provides relevant information without unnecessary repetition. Could be slightly more concise but is effectively organized.

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

Completeness5/5

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

Given the tool's complexity (17 parameters, no output schema, two modes), the description is remarkably complete. It covers usage guidelines, edge cases (hosted mode), common mistakes, supported file types, privacy, and provides detailed examples. The only gap is some less common parameters are not explained, but the core functionality is fully addressed.

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

Parameters4/5

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

Although schema description coverage is 0%, the description adds semantic meaning for many key parameters (filePath, contentType, formats, parsers, redactPII, pdfOptions, jsonOptions, queryOptions) and explains their roles in context. Some parameters (proxy, maxAge, excludeTags, etc.) are not covered, but the most critical ones are well-described.

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 description clearly states it parses a file using Firecrawl's /v2/parse endpoint and distinguishes it from sibling tools like firecrawl_scrape (for remote URLs). It specifies the tool is for local documents and structured data extraction, making its purpose unambiguous.

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?

The description explicitly provides when to use (local documents) and when not to (remote URLs, multiple files, interactive actions), including alternatives (firecrawl_scrape for URLs). It also covers common mistakes (e.g., mixing filePath and uploadRef) and provides usage examples for both local and hosted modes.

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

firecrawl_research_inspect_paperA
Read-only

Fetch canonical metadata for one paper by primaryId or canonical paperId. Use this after search/related results when you need the full title, abstract, authors, categories, source ids, and dates rendered as markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
paperIdYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the description's safety profile is established. The description adds value by specifying the output is rendered as markdown and listing the fields included (title, abstract, authors, etc.) – beyond what annotations provide. No contradiction.

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

Conciseness5/5

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

Two sentences, no wasted words. The first sentence states the core function, and the second provides usage guidance. Front-loaded and efficient.

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

Completeness5/5

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

Given the tool's low complexity (1 parameter, no output schema, no nested objects), the description is complete. It specifies the input, the use case, and the output format (markdown with listed fields). Siblings like read_paper exist, so the description correctly positions inspect_paper as a metadata-fetching step.

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

Parameters4/5

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

With 0% schema description coverage, the description bears full burden. It clarifies the paperId parameter can be a primaryId or canonical paperId, which adds meaning beyond the basic string validation. It also describes what the output contains, effectively compensating for the lack of schema documentation.

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 description clearly states the tool fetches canonical metadata for a paper by primaryId or paperId, distinguishing it from siblings like firecrawl_research_read_paper (likely full content) and firecrawl_research_related_papers. The verb 'fetch' and resource 'paper metadata' is specific.

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

Usage Guidelines4/5

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

The description provides explicit usage context: 'Use this after search/related results when you need the full title, abstract, authors, categories, source ids, and dates rendered as markdown.' It tells the agent when to use the tool and what to expect, but does not mention when not to use it or list alternatives beyond the implied search/related context.

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

firecrawl_research_read_paperA
Read-only

Read the most relevant in-body (full-text) passages of ONE specific paper for a question. Use this to VERIFY whether a candidate actually satisfies a constraint before you include or reject it (e.g. 'does this paper actually use technique X / report a score on benchmark Y'). Returns the best-matching passages, or a notice if the paper's full text is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNo
paperIdYes
questionYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds context: it reads in-body passages, returns best-matching passages, and handles unavailability. This complements the annotations without contradiction.

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

Conciseness5/5

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

The description is two sentences long, with the action front-loaded. Every sentence adds value: the first states the core function, the second provides purpose and expected outcomes. No redundant or vague phrasing.

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

Completeness3/5

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

The tool has three parameters, no output schema, and no enums. The description covers main behavior and one parameter (question) but omits details on 'k' and output format. With no output schema, it should at least describe the structure of returned passages. It is adequate but not fully complete.

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 0%, so the description must compensate. It explains 'question' as a relevance driver but does not define 'paperId' or 'k.' The meaning of 'k' as the number of passages is missing, leaving ambiguity. This is a significant gap for a three-parameter tool.

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 description clearly states the verb 'Read' and the resource 'most relevant in-body passages of ONE specific paper for a question.' It also specifies the use case: verifying whether a candidate satisfies a constraint. This distinguishes it from sibling tools like 'firecrawl_research_search_papers' that search multiple papers.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this to VERIFY whether a candidate actually satisfies a constraint before you include or reject it,' providing a clear when-to-use directive. It does not explicitly mention when not to use or compare with alternatives like 'firecrawl_research_inspect_paper,' but the positive guidance is strong and sufficient.

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

firecrawl_research_search_githubA
Read-only

Search GitHub issue/PR history and repository readmes. Returns ranked matches with repo, url, a short snippet, and (when available) the full matched content in markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNo
queryYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds value by detailing the return format: 'ranked matches with repo, url, a short snippet, and (when available) the full matched content in markdown.' This goes beyond annotations and helps the agent understand what to expect.

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

Conciseness5/5

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

Two concise sentences with clear front-loading of purpose. Every word adds value; no fluff.

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

Completeness3/5

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

With no output schema and 0% parameter coverage, the description provides minimal but functional context: it states the search scope and return fields. However, it omits parameter details and edge cases (e.g., rate limits, authentication). Adequate for a simple tool but could be more complete.

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 has 2 parameters with 0% description coverage. The description only implicitly covers 'query' by stating what is searched. The 'k' parameter (number of results) is not mentioned, leaving the agent without semantic guidance for that parameter.

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 description clearly states the tool searches 'GitHub issue/PR history and repository readmes,' specifying both the resource and action. This distinguishes it from sibling tools like firecrawl_search (general web search) and firecrawl_research_search_papers (academic papers).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., firecrawl_search), nor any conditions for use or exclusions. The agent must infer usage from the name and description alone.

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

firecrawl_research_search_papersA
Read-only

Primary entry point for finding research papers by topic across AI/ML, computer science, math, physics, biomedical, life sciences, and clinical literature. Semantic (HyDE) search over indexed paper metadata and abstracts; returns ranked papers with paper id, title, authors, and abstract. The query should be a natural-language research topic or question. Run SEVERAL distinct framings of the question (sibling domains, rival methods, dataset or benchmark names, conditions, populations, interventions, or outcomes) rather than one query — recall improves markedly with diverse framings.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNo
toNo
fromNo
queryYes
authorsNo
categoriesNo

TDQS

A4/5.0
Behavior4/5

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

The description complements the annotations (readOnlyHint, openWorldHint) by explaining the semantic search behavior and the benefit of diverse query framings. It does not contradict annotations. While rate limits or other behaviors are not mentioned, the description adds useful context beyond the structured fields.

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

Conciseness5/5

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

The description is very concise at two sentences. The first sentence immediately conveys the purpose and scope, and the second provides actionable usage advice. Every sentence adds value with no wasted words.

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

Completeness3/5

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

While the description explains the core functionality, it lacks detail on parameters other than 'query' and does not describe the output schema (which is absent). For a tool with 6 parameters and no schema descriptions, more information about filtering (by date, authors, categories) would improve completeness.

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?

The input schema has 0% description coverage, meaning no parameter descriptions are provided. The tool description only explains the 'query' parameter (natural-language topic) but does not clarify the purpose of `k`, `to`, `from`, `authors`, or `categories`. This leaves the agent guessing about the other five parameters.

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 description clearly states the tool's purpose as the primary entry point for finding research papers by topic across multiple fields. It specifies the search method (semantic HyDE search), the return fields (paper id, title, authors, abstract), and the query type (natural-language). This distinguishes it from sibling tools like general web search (firecrawl_search) and other research tools.

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

Usage Guidelines4/5

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

The description explicitly advises when to use this tool (for research paper search) and provides concrete guidance to run several distinct framings of the question for better recall. It does not explicitly state when not to use it, but the context implies it is for paper discovery, not other types of searches.

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

firecrawl_scrapeA

Scrape content from a single URL with advanced options. This is the most powerful, fastest and most reliable scraper tool, if available you should always default to using this tool for any web scraping needs.

Best for: Single page content extraction, when you know exactly which page contains the information. Not recommended for: Multiple pages (call scrape multiple times or use crawl), unknown page location (use search). Common mistakes: Using markdown format when extracting specific data points (use JSON instead). Other Features: Use 'branding' format to extract brand identity (colors, fonts, typography, spacing, UI components) for design analysis or style replication.

CRITICAL - Format Selection (you MUST follow this): When the user asks for SPECIFIC data points, you MUST use JSON format with a schema. Only use markdown when the user needs the ENTIRE page content.

Use JSON format when user asks for:

  • Parameters, fields, or specifications (e.g., "get the header parameters", "what are the required fields")

  • Prices, numbers, or structured data (e.g., "extract the pricing", "get the product details")

  • API details, endpoints, or technical specs (e.g., "find the authentication endpoint")

  • Lists of items or properties (e.g., "list the features", "get all the options")

  • Any specific piece of information from a page

Use markdown format ONLY when:

  • User wants to read/summarize an entire article or blog post

  • User needs to see all content on a page without specific extraction

  • User explicitly asks for the full page content

Handling JavaScript-rendered pages (SPAs): If JSON extraction returns empty, minimal, or just navigation content, the page is likely JavaScript-rendered or the content is on a different URL. Try these steps IN ORDER:

  1. Add waitFor parameter: Set waitFor: 5000 to waitFor: 10000 to allow JavaScript to render before extraction

  2. Try a different URL: If the URL has a hash fragment (#section), try the base URL or look for a direct page URL

  3. Use firecrawl_map to find the correct page: Large documentation sites or SPAs often spread content across multiple URLs. Use firecrawl_map with a search parameter to discover the specific page containing your target content, then scrape that URL directly. Example: If scraping "https://docs.example.com/reference" fails to find webhook parameters, use firecrawl_map with {"url": "https://docs.example.com/reference", "search": "webhook"} to find URLs like "/reference/webhook-events", then scrape that specific page.

  4. Use firecrawl_agent: As a last resort for heavily dynamic pages where map+scrape still fails, use the agent which can autonomously navigate and research

Usage Example (JSON format - REQUIRED for specific data extraction):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com/api-docs",
    "formats": ["json"],
    "jsonOptions": {
      "prompt": "Extract the header parameters for the authentication endpoint",
      "schema": {
        "type": "object",
        "properties": {
          "parameters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": { "type": "string" },
                "type": { "type": "string" },
                "required": { "type": "boolean" },
                "description": { "type": "string" }
              }
            }
          }
        }
      }
    }
  }
}

Prefer markdown format by default. You can read and reason over the full page content directly — no need for an intermediate query step. Use markdown for questions about page content, factual lookups, and any task where you need to understand the page.

Use JSON format when user needs:

  • Structured data with specific fields (extract all products with name, price, description)

  • Data in a specific schema for downstream processing

Use query format only when:

  • The page is extremely long and you need a single targeted answer without processing the full content

  • You want a quick factual answer and don't need to retain the page content

  • Set queryOptions.mode to "directQuote" when you need verbatim page text; otherwise it defaults to "freeform"

Usage Example (markdown format - default for most tasks):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com/article",
    "formats": ["markdown"],
    "onlyMainContent": true
  }
}

Usage Example (branding format - extract brand identity):

{
  "name": "firecrawl_scrape",
  "arguments": {
    "url": "https://example.com",
    "formats": ["branding"]
  }
}

Branding format: Extracts comprehensive brand identity (colors, fonts, typography, spacing, logo, UI components) for design analysis or style replication. Performance: Add maxAge parameter for 500% faster scrapes using cached data. Lockdown mode: Set lockdown: true to serve the request only from the existing index/cache without any outbound network request. For air-gapped or compliance-constrained use where the request URL itself is considered sensitive. Errors on cache miss. Billed at 5 credits. Privacy: Set redactPII: true to return content with personally identifiable information redacted. Returns: JSON structured data, markdown, branding profile, or other formats as specified.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
proxyNo
maxAgeNo
mobileNo
actionsNo
formatsNo
parsersNo
profileNo
waitForNo
locationNo
lockdownNo
redactPIINo
pdfOptionsNo
excludeTagsNo
includeTagsNo
jsonOptionsNo
queryOptionsNo
storeInCacheNo
onlyMainContentNo
screenshotOptionsNo
zeroDataRetentionNo
removeBase64ImagesNo
skipTlsVerificationNo

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses behavioral traits such as JavaScript rendering handling, caching (maxAge), privacy (redactPII), lockdown mode, and branding extraction. Annotations (readOnlyHint=false, destructiveHint=false) are not contradicted; the description adds rich context beyond them.

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 description is lengthy but well-structured with headings, bullet points, and examples. It front-loads essential information. While slightly verbose, the depth is justified by the tool's complexity (23 parameters, many nuanced choices).

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

Completeness5/5

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

Given the tool's complexity (23 parameters, 1 required, no output schema, nested objects), the description is highly complete. It covers JavaScript rendering troubleshooting, format selection rules, performance, privacy, lockdown, branding, and provides step-by-step troubleshooting.

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

Parameters5/5

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

With 0% schema description coverage, the description compensates by explaining key parameters like formats, jsonOptions, queryOptions, waitFor, maxAge, lockdown, redactPII, and provides usage examples. It adds significant meaning beyond the schema's property names.

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 description clearly states it scrapes content from a single URL with advanced options. It distinguishes from siblings like firecrawl_crawl (multiple pages), firecrawl_search (unknown location), and firecrawl_map, making its purpose specific and unambiguous.

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?

The description provides explicit when-to-use and when-not-to-use guidance, including format selection (JSON vs markdown), alternatives like firecrawl_map and firecrawl_agent for JavaScript-rendered pages, and performance tips (maxAge). It covers common mistakes and best practices comprehensively.

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

firecrawl_search_feedbackA

Send structured feedback on a previous firecrawl_search result. Call this immediately after a search where you used the results so we can improve search quality and refund 1 credit (search costs 2).

Pass the searchId returned by firecrawl_search (the id field on the response) and tell us:

  • rating — overall result quality: good, partial, or bad.

  • valuableSources — which result URLs were actually useful, and a short reason why.

  • missingContentthe most important field. An ARRAY of specific pieces of content you expected to find but didn't. One entry per missing piece, each with a short topic and an optional longer description. Examples: {"topic":"enterprise pricing","description":"no pricing tier table for the Enterprise plan was returned"}, {"topic":"API rate limits"}, {"topic":"comparison vs competitors"}. Be specific — these aggregate across teams and tell us what to index next. Do not pack multiple topics into one entry.

  • querySuggestions — how the query or response shape could be improved (e.g. "would have liked official docs first", "should boost github.com").

Substantive-feedback requirement (zero-effort feedback is rejected with HTTP 400):

  • good — must include at least one valuableSources entry

  • partial — must include valuableSources or at least one missingContent entry

  • bad — must include at least one missingContent entry or querySuggestions

Time window: Feedback must be submitted within ~2 minutes of the search. Beyond that, the call returns HTTP 409 with feedbackErrorCode: "FEEDBACK_WINDOW_EXPIRED" — do not retry, just move on. Same goes for any 4xx response: do not retry-loop.

Behaviors:

  • Idempotent per searchId. Re-submitting for the same id returns alreadySubmitted: true with creditsRefunded: 0.

  • Refund only applies to billable searches; preview teams are blocked.

  • Failed searches cannot receive feedback (the search itself already returned an error you can act on).

  • Daily refund cap (per team, per UTC day, default 100 credits). Once a team's creditsRefundedToday reaches dailyRefundCap, the response returns dailyCapReached: true with creditsRefunded: 0. The feedback is still recorded for search-quality improvement — only the credit refund is gated. Stop calling this tool for the rest of the UTC day when you see dailyCapReached: true.

When to call: Right after processing a search result. If the result didn't help, send rating bad with a clear missingContent — that is just as valuable as a good rating.

Usage Example (good rating with valuable sources + missing content):

{
  "name": "firecrawl_search_feedback",
  "arguments": {
    "searchId": "0193f6c5-1234-7890-abcd-1234567890ab",
    "rating": "good",
    "valuableSources": [
      { "url": "https://docs.firecrawl.dev/features/search", "reason": "Most up-to-date description of /search." }
    ],
    "missingContent": [
      { "topic": "Pricing for the search endpoint", "description": "No pricing tier table for /search specifically." },
      { "topic": "Rate limits", "description": "Per-team RPS for /search not documented." }
    ],
    "querySuggestions": "Boost docs.firecrawl.dev for queries that mention 'firecrawl'"
  }
}

Usage Example (bad rating, what was missing):

{
  "name": "firecrawl_search_feedback",
  "arguments": {
    "searchId": "0193f6c5-1234-7890-abcd-1234567890ab",
    "rating": "bad",
    "missingContent": [
      { "topic": "Recent benchmarks", "description": "All results were >12 months old." },
      { "topic": "Comparison vs Algolia" }
    ]
  }
}

Returns: { success, feedbackId, creditsRefunded, creditsRefundedToday, dailyRefundCap, dailyCapReached?, alreadySubmitted?, warning? } JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratingYes
searchIdYes
missingContentNo
valuableSourcesNo
querySuggestionsNo

TDQS

A4.9/5.0
Behavior5/5

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

Extensively covers behavioral details: idempotency per searchId, refund conditions, daily cap, time window with specific HTTP errors, and restrictions. These go far beyond the annotations (readOnlyHint false, destructiveHint false, openWorldHint true) to fully inform the agent.

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 description is well-structured with sections, headings, and examples, making it easy to parse. It could be slightly more concise by trimming some redundant explanations, but overall it's clear and front-loaded.

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

Completeness5/5

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

Given the complex input schema and no output schema, the description provides complete context: return value format, error handling (time window, cap, idempotency), and edge cases. No gaps remain for an agent to operate correctly.

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

Parameters5/5

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

With schema coverage at 0%, the description fully compensates by explaining each parameter in detail, including constraints (e.g., maxItems, length limits) and inter-field dependencies (e.g., rating requirements for valuableSources and missingContent). Examples further clarify usage.

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 description clearly states the tool sends structured feedback on a previous firecrawl_search result, specifying the action, resource, and context. It distinguishes from other sibling tools like firecrawl_feedback by focusing on search results.

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?

Provides explicit usage guidance: call immediately after a search, within a 2-minute window, and details per-rating requirements. Also explains when not to call (e.g., after cap reached, failed searches) and non-retry behavior for 4xx errors.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 26 tool updatesv3.22.3
    • First observedfirecrawl_agent
    • First observedfirecrawl_agent_status
    • First observedfirecrawl_check_crawl_status
    • First observedfirecrawl_crawl
    • First observedfirecrawl_extract
    • First observedfirecrawl_feedback
    • First observedfirecrawl_interact
    • First observedfirecrawl_interact_stop
    • First observedfirecrawl_map
    • First observedfirecrawl_monitor_check
    • First observedfirecrawl_monitor_checks
    • First observedfirecrawl_monitor_create
    • First observedfirecrawl_monitor_delete
    • First observedfirecrawl_monitor_get
    • First observedfirecrawl_monitor_list
    • First observedfirecrawl_monitor_run
    • First observedfirecrawl_monitor_update
    • First observedfirecrawl_parse
    • First observedfirecrawl_research_inspect_paper
    • First observedfirecrawl_research_read_paper
    • First observedfirecrawl_research_related_papers
    • First observedfirecrawl_research_search_github
    • First observedfirecrawl_research_search_papers
    • First observedfirecrawl_scrape
    • First observedfirecrawl_search
    • First observedfirecrawl_search_feedback

TDQS

A3.7/5.0

Scored across 26 tools

Disambiguation4/5

Tool purposes are mostly distinct, but some overlap exists between scrape/extract/parse and search/agent. Detailed descriptions help differentiate, but agents may occasionally misselect between search and agent for similar queries.

Naming Consistency5/5

All tools follow the firecrawl_verb_noun pattern consistently. No mixed casing or irregular naming. The prefix is uniform and the verb+noun structure makes the purpose clear.

Tool Count3/5

26 tools is high for a single server. While each tool has a unique role, the research-related tools (5 for papers/GitHub) and monitoring CRUD (7 tools) could be consolidated. The count feels slightly bloated for the core purpose of web scraping.

Completeness4/5

The tool surface covers a comprehensive range: scraping, crawling, mapping, search, extraction, monitoring, interaction, and feedback. Minor gaps exist (e.g., no batch operations or site structure analysis), but core workflows are well-supported.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    A server that provides web scraping and intelligent content searching capabilities using the Firecrawl API, enabling AI agents to extract structured data from websites and perform content searches.
    5
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that enables web scraping, crawling, and content extraction capabilities through integration with Firecrawl.
    8
    30,339 npm
    2
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    A production-ready Model Context Protocol (MCP) server that integrates with the Firecrawl API to give AI assistants the power to scrape, crawl, and search the web.
    3
    -