{
  "data": {
    "a": {
      "slug": "brave-search-mcp",
      "name": "Brave Search API + MCP",
      "vendor": "Brave",
      "vendorUrl": "https://brave.com/search/api/",
      "kind": "http-api",
      "category": "search",
      "summary": "REST API over Brave's independent index with web, news, image, video and local search, an LLM Context endpoint with pre-extracted page content and an Answers endpoint with citations.",
      "url": "https://www.anchorterminal.com/tools/brave-search-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/brave-search-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/brave-search-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/brave-search-mcp.json",
      "repo": "https://github.com/brave/brave-search-mcp-server",
      "license": "MIT",
      "transports": [
        "stdio",
        "streamable-http",
        "http"
      ],
      "remoteUrl": "https://api.search.brave.com/res/v1/web/search",
      "packages": [
        {
          "registry": "npm",
          "name": "@brave/brave-search-mcp-server"
        },
        {
          "registry": "oci",
          "name": "mcp/brave-search"
        }
      ],
      "auth": "mixed",
      "authNotes": "API key in the `X-Subscription-Token` header. The x402 proxy at search.agent.s.brave.app takes a signed payment instead of a key. An `Api-Version` header pins dated response versions. MCP server: BRAVE_API_KEY (or BRAVE_API_KEY_FILE) environment variable.",
      "pricing": "usage",
      "pricingNotes": "Search plan $5 per 1,000 requests with $5 free credit a month, 50 QPS. Answers plan $4 per 1,000 requests plus $5 per million tokens, $5 free credit a month, 2 QPS. A card is required for the free credit. Storing results needs an Enterprise plan with storage rights. Enterprise custom (https://brave.com/search/api/).",
      "priceSummary": "$5 / 1k req",
      "where": "both",
      "x402": {
        "level": "partial",
        "evidence": "Brave's docs link a pay-per-request proxy at search.agent.s.brave.app. Web, LLM Context, news, video, image and local paths cost $0.005 in USDC on Base. Answers, Suggest and Spellcheck aren't sold. An unpaid web search returned 402 with a PAYMENT-REQUIRED header on 2026-09-30 (https://api-dashboard.search.brave.com/documentation/guides/agent-payments)",
        "endpoints": [
          {
            "url": "https://search.agent.s.brave.app/res/v1/web/search",
            "priceUsd": 0.005,
            "network": "eip155:8453"
          },
          {
            "url": "https://search.agent.s.brave.app/res/v1/llm/context",
            "priceUsd": 0.005,
            "network": "eip155:8453"
          }
        ]
      },
      "toolCount": 8,
      "popularity": {
        "githubStars": 1400,
        "npmWeekly": 22398,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://api-dashboard.search.brave.com/documentation",
      "llmsTxt": "https://api-dashboard.search.brave.com/llms.txt",
      "registryName": "io.github.brave/brave-search-mcp-server",
      "capabilities": [
        "web.search",
        "web.extract",
        "search.answer",
        "search.news",
        "search.images"
      ],
      "tags": [
        "official",
        "local",
        "open-source",
        "usage-priced",
        "hosted",
        "card-required",
        "x402",
        "llms-txt",
        "enterprise",
        "mcp"
      ],
      "lastRelease": "2026-09-17",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 68.1,
        "grade": "B",
        "agentReady": false,
        "rank": 132,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 5,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 72,
          "maintenance": 87,
          "payments": 70,
          "reliability": 55,
          "schema": 72,
          "security": 58,
          "transparency": 82
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "x402 proxy sells web, LLM Context, news, video, image and local search at $0.005 a call, and a failed search isn't charged. The status page marks the Search API \"not monitored\" and shows no incident history.",
        "strengths": [
          "x402 proxy sells web, LLM Context, news, video, image and local search at $0.005 a call, and a failed search isn't charged",
          "$5 per 1,000 searches at 50 QPS on the self-serve Search plan",
          "SOC 2 Type II, a HackerOne bounty and a valid security.txt",
          "Dated response versions through the `Api-Version` header",
          "MIT MCP server with five releases since July, tests in CI and a GitHub-verified registry entry"
        ],
        "weaknesses": [
          "The status page marks the Search API \"not monitored\" and shows no incident history",
          "A card is required even for the $5 monthly credit",
          "No public OpenAPI for the keyed API and no API changelog",
          "No SLA on self-serve plans, and Answers is limited to 2 QPS",
          "No prompt-injection guidance, though LLM Context returns raw page text"
        ],
        "agentNotes": [
          "Call /res/v1/llm/context when you need page text rather than links. It saves a separate fetch",
          "Treat \"No web results found\" from the MCP server as an empty result, not an outage",
          "On 429, wait for `X-RateLimit-Reset` seconds. There's no `Retry-After` header",
          "Skip `brave_summarizer`. The Summarizer is deprecated and the x402 proxy doesn't sell it",
          "Pin `Api-Version` to a date, since requests without it get the latest version"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 68.1
          }
        ],
        "editorialScores": {
          "ergonomics": 72,
          "maintenance": 87,
          "payments": 70,
          "reliability": 55,
          "schema": 72,
          "security": 58,
          "transparency": 63
        },
        "provenanceScore": 100
      },
      "connect": {
        "http": "curl \"https://api.search.brave.com/res/v1/web/search?q=brave+search\u0026count=5\" \\\n  -H \"Accept: application/json\" -H \"X-Subscription-Token: $BRAVE_API_KEY\"",
        "claudeCode": "claude mcp add brave-search -e BRAVE_API_KEY=${BRAVE_API_KEY} -- npx -y @brave/brave-search-mcp-server",
        "config": {
          "mcpServers": {
            "brave-search": {
              "args": [
                "-y",
                "@brave/brave-search-mcp-server"
              ],
              "command": "npx",
              "env": {
                "BRAVE_API_KEY": "${BRAVE_API_KEY}"
              }
            }
          }
        },
        "x402": "purl --max-amount 5000 'https://search.agent.s.brave.app/res/v1/web/search?q=rust'\n# unpaid requests get HTTP 402 with a PAYMENT-REQUIRED header, USDC on eip155:8453"
      },
      "letme": {
        "capability": "https://letme.dev/web.search",
        "tool": "https://letme.dev/brave-search-mcp"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Search plan",
          "unit": "1k-requests",
          "usd": 5
        },
        {
          "item": "Answers plan",
          "unit": "1k-requests",
          "usd": 4,
          "note": "plus $5 per million tokens"
        },
        {
          "item": "x402 search, per call",
          "unit": "call",
          "usd": 0.005,
          "note": "USDC on Base, no account"
        }
      ],
      "provenance": {
        "legalEntity": "Brave Software, Inc.",
        "domain": "brave.com",
        "domainRegistered": "1995-09-18",
        "domainNote": "brave.com was registered in 1995, before Brave bought it.",
        "endpointOnVendorDomain": true,
        "terms": "https://api-dashboard.search.brave.com/terms-of-service",
        "privacy": "https://api-dashboard.search.brave.com/privacy-policy",
        "statusPage": "https://status.brave.app",
        "changelog": "https://github.com/brave/brave-search-mcp-server/releases",
        "securityTxt": "valid",
        "checked": "2026-10-01",
        "notes": [
          "The x402 proxy runs on search.agent.s.brave.app, not brave.com. Brave's API docs link it as official.",
          "status.brave.app lists the Brave Search API but marks it \"not monitored\" and shows no incident history. The API docs keep a separate status log whose last entry is 27 March 2025 (https://api-dashboard.search.brave.com/documentation/resources/status-updates/)."
        ],
        "score": 100
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/brave-search-mcp.json",
      "live": {
        "slug": "brave-search-mcp",
        "probe": {
          "target": "https://api.search.brave.com/res/v1/web/search",
          "method": "get",
          "lastAt": "2026-10-04T23:48:05.752231641Z",
          "lastOk": true,
          "lastStatus": 422,
          "lastMs": 392,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 395,
          "p95ms24h": 420,
          "samples24h": 272,
          "samples30d": 1100,
          "days": [
            {
              "date": "2026-09-30",
              "probes": 35,
              "ok": 35
            },
            {
              "date": "2026-10-01",
              "probes": 276,
              "ok": 276
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 270,
              "ok": 270
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.brave.app",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:39:52.323054222Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "brave/brave-search-mcp-server",
            "version": "v2.1.4",
            "released": "2026-09-17",
            "seenAt": "2026-10-04T16:22:44.217062681Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.brave/brave-search-mcp-server",
            "version": "2.1.3",
            "seenAt": "2026-10-04T23:42:40.113054682Z"
          },
          {
            "registry": "npm",
            "name": "@brave/brave-search-mcp-server",
            "version": "2.1.4",
            "seenAt": "2026-10-04T16:22:43.730484655Z"
          }
        ],
        "githubStars": 1484,
        "npmWeekly": 30874,
        "securityTxt": {
          "url": "https://brave.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-10-04T15:15:38.826160997Z"
        },
        "llmsTxt": {
          "url": "https://api-dashboard.search.brave.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:21.910433141Z"
        },
        "domain": {
          "domain": "brave.com",
          "registered": "1995-09-18",
          "source": "https://rdap.verisign.com/com/v1/domain/brave.com",
          "checkedAt": "2026-10-04T13:07:28.958526087Z"
        },
        "pages": [
          {
            "url": "https://api-dashboard.search.brave.com/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:41:09.246937639Z",
            "changedAt": "2026-09-30T13:09:37.196019706Z",
            "fingerprint": "8c41a50b5a60"
          },
          {
            "url": "https://api-dashboard.search.brave.com/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:41:11.393064605Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e74eb26bd7c7"
          }
        ],
        "updatedAt": "2026-10-04T23:48:05.752231641Z"
      }
    },
    "b": {
      "slug": "firecrawl-mcp",
      "name": "Firecrawl MCP",
      "vendor": "Firecrawl (Mendable)",
      "vendorUrl": "https://www.firecrawl.dev",
      "kind": "mcp",
      "category": "web-scrapers",
      "summary": "Official Firecrawl server for scraping pages to markdown/JSON, mapping and crawling sites, web search, browser interaction, monitoring and an autonomous research agent.",
      "url": "https://www.anchorterminal.com/tools/firecrawl-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/firecrawl-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/firecrawl-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/firecrawl-mcp.json",
      "repo": "https://github.com/firecrawl/firecrawl-mcp-server",
      "license": "MIT",
      "transports": [
        "stdio",
        "streamable-http",
        "sse"
      ],
      "remoteUrl": "https://mcp.firecrawl.dev/v2/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "firecrawl-mcp"
        }
      ],
      "auth": "mixed",
      "authNotes": "Hosted endpoints take OAuth (`https://mcp.firecrawl.dev/v2/mcp-oauth`) or `Authorization: Bearer \u003cFIRECRAWL_API_KEY\u003e` on `https://mcp.firecrawl.dev/v2/mcp`. The same URL with no credential is the keyless tier (scrape, search, parse, rate-limited per IP). The search-only endpoint `/v2/mcp-search` has its own OAuth identity. Locally, FIRECRAWL_API_KEY or FIRECRAWL_OAUTH_TOKEN, or FIRECRAWL_API_URL for self-hosted. The README says never to put a key in the server URL. Endpoint- and format-locked keys are Enterprise only.",
      "pricing": "freemium",
      "pricingNotes": "Free 1,000 credits a month, no card. Hobby $19 a month or $16 billed yearly (5,000 credits), Standard $99 or $83 (100,000), Growth $399 or $333 (500,000), Scale $749 or $599 (1 million). Scrape, crawl and map cost 1 credit a page, search 2 per 10 results, interact 2 per browser-minute, monitor 1 per page per check, and JSON, question or highlight formats add 4 a page. $5 top-ups on paid plans only. A scrape with no result isn't charged, but a page returning 403 or 404 costs 1 credit (https://www.firecrawl.dev/pricing).",
      "priceSummary": "$19 / mo",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402 support in README, docs or pricing (checked 2026-09-25).",
        "endpoints": []
      },
      "toolCount": 26,
      "popularity": {
        "githubStars": 7500,
        "npmWeekly": 28853,
        "pypiWeekly": null,
        "asOf": "2026-09-26"
      },
      "docsUrl": "https://github.com/firecrawl/firecrawl-mcp-server#readme",
      "llmsTxt": "https://docs.firecrawl.dev/llms.txt",
      "openapi": "https://docs.firecrawl.dev/api-reference/v2-openapi.json",
      "registryName": "io.github.firecrawl/firecrawl-mcp-server",
      "capabilities": [
        "web.search",
        "web.fetch",
        "web.crawl",
        "web.extract"
      ],
      "tags": [
        "official",
        "hosted",
        "local",
        "open-source",
        "freemium",
        "llms-txt"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 75.5,
        "grade": "BB",
        "agentReady": true,
        "rank": 34,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 2,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 92,
          "maintenance": 87,
          "payments": 50,
          "reliability": 70,
          "schema": 88,
          "security": 67,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "high",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Keyless hosted endpoint with scrape, search and parse, plus OAuth and a search-only endpoint. No x402 or other machine payment.",
        "strengths": [
          "Keyless hosted endpoint with scrape, search and parse, plus OAuth and a search-only endpoint",
          "Four incidents since July 2026, the longest 56 minutes",
          "Rate limits published per plan and per endpoint",
          "Public v2 OpenAPI, llms.txt and readOnly or destructive hints on every tool",
          "firecrawl-mcp 3.27.2 on 1 October 2026, after more than 20 releases since July"
        ],
        "weaknesses": [
          "No x402 or other machine payment",
          "No prompt-injection guidance for scraped pages outside retained Alexandria results",
          "403 and 404 responses cost a credit",
          "Open issues report 132 undescribed parameters and a schema mismatch",
          "Privacy policy last revised December 2024, with no retention period for scraped content"
        ],
        "agentNotes": [
          "Use `firecrawl_map` to list URLs, then scrape the few you need instead of crawling a whole site",
          "On the keyless endpoint only scrape, search and parse work. A 429 carries a `signup_url` for the human",
          "Ask for markdown only. JSON, question and highlight formats add 4 credits a page",
          "Poll `firecrawl_check_crawl_status` rather than waiting on a long crawl inside one call",
          "Check the URL before scraping. Dead pages still cost a credit"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "high",
            "grade": "BB",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 75.5
          }
        ],
        "editorialScores": {
          "ergonomics": 92,
          "maintenance": 87,
          "payments": 50,
          "reliability": 70,
          "schema": 88,
          "security": 67,
          "transparency": 60
        },
        "provenanceScore": 92
      },
      "connect": {
        "claudeCode": "claude mcp add --transport http firecrawl https://mcp.firecrawl.dev/v2/mcp",
        "config": {
          "mcpServers": {
            "firecrawl": {
              "args": [
                "-y",
                "firecrawl-mcp"
              ],
              "command": "npx",
              "env": {
                "FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/web.search",
        "tool": "https://letme.dev/firecrawl-mcp"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Hobby plan",
          "unit": "month",
          "usd": 19,
          "note": "5,000 credits. $16 a month billed yearly"
        },
        {
          "item": "Standard plan",
          "unit": "month",
          "usd": 99,
          "note": "100,000 credits. $83 a month billed yearly"
        },
        {
          "item": "Extra credits on Hobby",
          "unit": "1k-pages",
          "usd": 5,
          "note": "one credit scrapes one page"
        }
      ],
      "provenance": {
        "legalEntity": "SideGuide Technologies, Inc. (d/b/a Firecrawl)",
        "domain": "firecrawl.dev",
        "domainRegistered": "2024-04-08",
        "endpointOnVendorDomain": true,
        "terms": "https://firecrawl.dev/terms-of-service",
        "privacy": "https://firecrawl.dev/privacy-policy",
        "statusPage": "https://status.firecrawl.dev",
        "changelog": "https://firecrawl.dev/changelog",
        "securityTxt": "valid",
        "checked": "2026-09-26",
        "score": 92
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/firecrawl-mcp.json",
      "live": {
        "slug": "firecrawl-mcp",
        "probe": {
          "target": "https://mcp.firecrawl.dev/v2/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-10-04T23:48:08.465133723Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 245,
          "lastNote": "initialize answered",
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 252,
          "p95ms24h": 290,
          "samples24h": 272,
          "samples30d": 2054,
          "days": [
            {
              "date": "2026-09-27",
              "probes": 132,
              "ok": 132
            },
            {
              "date": "2026-09-28",
              "probes": 285,
              "ok": 285
            },
            {
              "date": "2026-09-29",
              "probes": 286,
              "ok": 286
            },
            {
              "date": "2026-09-30",
              "probes": 286,
              "ok": 286
            },
            {
              "date": "2026-10-01",
              "probes": 276,
              "ok": 276
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 270,
              "ok": 270
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.firecrawl.dev",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:01.76749658Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "firecrawl/firecrawl-mcp-server",
            "version": "v3.2.1",
            "released": "2025-09-26",
            "seenAt": "2026-10-04T16:27:08.694881485Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.firecrawl/firecrawl-mcp-server",
            "version": "3.27.3",
            "seenAt": "2026-10-04T23:42:40.113054682Z"
          },
          {
            "registry": "npm",
            "name": "firecrawl-mcp",
            "version": "3.27.3",
            "seenAt": "2026-10-04T16:27:07.836823407Z"
          }
        ],
        "githubStars": 7550,
        "npmWeekly": 189581,
        "securityTxt": {
          "url": "https://firecrawl.dev/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-06-10T00:00:00.000Z",
          "checkedAt": "2026-10-04T15:15:38.390602548Z"
        },
        "llmsTxt": {
          "url": "https://docs.firecrawl.dev/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:45.993583711Z"
        },
        "domain": {
          "domain": "firecrawl.dev",
          "registered": "2024-04-08",
          "source": "https://pubapi.registry.google/rdap/domain/firecrawl.dev",
          "checkedAt": "2026-10-04T13:08:05.084729774Z"
        },
        "pages": [
          {
            "url": "https://firecrawl.dev/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:44:43.44271991Z",
            "changedAt": "2026-10-04T15:44:43.44271991Z",
            "fingerprint": "f365a314c8cc"
          },
          {
            "url": "https://www.firecrawl.dev/pricing",
            "kind": "deprecations",
            "status": 200,
            "checkedAt": "2026-10-04T15:50:17.215694523Z",
            "changedAt": "2026-10-04T15:50:17.215694523Z",
            "fingerprint": "59c60c10f7e3"
          },
          {
            "url": "https://firecrawl.dev/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:44:47.075047354Z",
            "changedAt": "2026-10-04T15:44:47.075047354Z",
            "fingerprint": "c8532b5714ba"
          },
          {
            "url": "https://firecrawl.dev/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:44:47.948137801Z",
            "changedAt": "2026-10-04T15:44:47.948137801Z",
            "fingerprint": "c54c86b53a0b"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.firecrawl.dev/v2/mcp",
          "checkedAt": "2026-10-04T22:19:41.267062117Z",
          "status": "ok",
          "protocol": "2025-11-25",
          "tools": [
            {
              "name": "firecrawl_scrape",
              "title": "Firecrawl scrape",
              "description": "\nScrape one URL and return its content: markdown by default, or HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema. Use it when the request identifies a page and needs its content or defined fields. Use `firecrawl_search` when additional web sources are needed; on an authenticated session, `firecrawl_map` lists a site's URLs and `firecrawl_crawl` collects a set of pages.\n\nFirecrawl may serve recently indexed content; set `maxAge: 0` for a live fetch or a smaller `maxAge` to bound staleness. A successful response does not by itself confirm the page is still current. Browser actions can change the live page when interactive actions are enabled. Authenticated responses can include a `metadata.scrapeId` for optional scrape feedback.\n\nOn an authenticated session with Alexandria access, `firecrawl_search` with `sources` unset and `firecrawl_find_tools` can discover providers for the same fields across several pages; a matching provider returns typed records in one call. Keyless sessions have no provider matches.\n\nAlexandria mode, on an authenticated session with Alexandria access: `alexandria` selects catalogued capability execution and is mutually exclusive with `url`.\n",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "alexandria": {
                    "anyOf": [
                      {
                        "properties": {
                          "capability": {
                            "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
                            "minLength": 1,
                            "type": "string"
                          },
                          "options": {
                            "additionalProperties": {},
                            "description": "Capability options as declared by its contract.",
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "provider": {
                            "description": "Provider slug, e.g. \"fred\".",
                            "minLength": 1,
                            "type": "string"
                          },
                          "version": {
                            "description": "Optional published workflow version. Omit to use the latest version.",
                            "maxLength": 128,
                            "minLength": 1,
                            "type": "string"
                          }
                        },
                        "required": [
                          "provider",
                          "capability"
                        ],
                        "type": "object"
                      },
                      {
                        "items": {
                          "properties": {
                            "capability": {
                              "description": "Capability address as returned by search or discover, e.g. \"series/observations\".",
                              "minLength": 1,
                              "type": "string"
                            },
                            "options": {
                              "additionalProperties": {},
                              "description": "Capability options as declared by its contract.",
                              "propertyNames": {
                                "type": "string"
                              },
                              "type": "object"
                            },
                            "provider": {
                              "description": "Provider slug, e.g. \"fred\".",
                              "minLength": 1,
                              "type": "string"
                            },
                            "version": {
                              "description": "Optional published workflow version. Omit to use the latest version.",
                              "maxLength": 128,
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "provider",
                            "capability"
                          ],
                          "type": "object"
                        },
                        "maxItems": 10,
                        "minItems": 1,
                        "type": "array"
                      }
                    ],
                    "description": "Catalogued Alexandria capability invocation, mutually exclusive with url. One {provider, capability, options} object or an array of 1-10, with contracts available through firecrawl_search or firecrawl_find_tools. Each call may include version to pin a published workflow; omitting it uses latest. Only requestId and timeout are supported alongside alexandria. The selected contract marks required inputs and any requiresOneOf groups (at least one member per group); it may include example.request/example.response and response.key (which may differ from records). Where pagination is declared, its fields govern paging with the same filters; catalogue next is separate from provider pagination. Returns per-capability results in data.alexandria with data, records, or an error with a code; individual capabilities can fail even when the outer response succeeds. Requires an API key on a team with Alexandria enabled. Some providers require accepted terms; blocked requests return the applicable requirements."
                  },
                  "domainTools": {
                    "description": "URL mode only: include domain-matched Alexandria tools for the page in tools on the returned document. Ignored with alexandria.",
                    "type": "boolean"
                  },
                  "excludeTags": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "formats": {
                    "items": {
                      "enum": [
                        "markdown",
                        "html",
                        "rawHtml",
                        "screenshot",
                        "links",
                        "summary",
                        "changeTracking",
                        "branding",
                        "json",
                        "query",
                        "audio"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "includeTags": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "jsonOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "prompt": {
                        "type": "string"
                      },
                      "schema": {
                        "additionalProperties": false,
                        "propertyNames": {
                          "type": "string"
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "location": {
                    "additionalProperties": false,
                    "properties": {
                      "country": {
                        "type": "string"
                      },
                      "languages": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "lockdown": {
                    "type": "boolean"
                  },
                  "maxAge": {
                    "type": "number"
                  },
                  "mobile": {
                    "type": "boolean"
                  },
                  "onlyMainContent": {
                    "type": "boolean"
                  },
                  "parsers": {
                    "items": {
                      "enum": [
                        "pdf"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "pdfOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "maxPages": {
                        "maximum": 10000,
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "profile": {
                    "additionalProperties": false,
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "saveChanges": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object"
                  },
                  "proxy": {
                    "enum": [
                      "basic",
                      "stealth",
                      "enhanced",
                      "auto"
                    ],
                    "type": "string"
                  },
                  "queryOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "default": "freeform",
                        "enum": [
                          "directQuote",
                          "freeform"
                        ],
                        "type": "string"
                      },
                      "prompt": {
                        "maxLength": 10000,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  },
                  "redactPII": {
                    "type": "boolean"
                  },
                  "removeBase64Images": {
                    "type": "boolean"
                  },
                  "requestId": {
                    "description": "Idempotency key bound to one Alexandria execution payload. Generated when omitted and returned with the result.",
                    "pattern": "^[A-Za-z0-9._:-]{1,128}$",
                    "type": "string"
                  },
                  "screenshotOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "fullPage": {
                        "type": "boolean"
                      },
                      "quality": {
                        "type": "number"
                      },
                      "viewport": {
                        "additionalProperties": false,
                        "properties": {
                          "height": {
                            "type": "number"
                          },
                          "width": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "width",
                          "height"
                        ],
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "skipTlsVerification": {
                    "type": "boolean"
                  },
                  "storeInCache": {
                    "type": "boolean"
                  },
                  "timeout": {
                    "description": "Execution timeout in milliseconds.",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "toolDetail": {
                    "description": "URL mode only: domain discovery detail, summary by default; compact returns provider/capability/description, full includes contracts. Ignored with alexandria.",
                    "enum": [
                      "compact",
                      "summary",
                      "full"
                    ],
                    "type": "string"
                  },
                  "url": {
                    "format": "uri",
                    "type": "string"
                  },
                  "waitFor": {
                    "type": "number"
                  },
                  "zeroDataRetention": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "description": "A scraped document, or the Alexandria execution envelope when `alexandria` was passed.",
                "properties": {
                  "actions": {
                    "description": "Results of the browser actions that ran during the scrape."
                  },
                  "agent_hints": {
                    "description": "Optional response guidance from the Firecrawl API.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "answer": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Targeted answer to the question that was asked of the page."
                  },
                  "attributes": {
                    "description": "Values collected by the requested attribute selectors."
                  },
                  "audio": {
                    "description": "Audio extracted from the page."
                  },
                  "blocks": {
                    "description": "Typed PDF layout blocks, when `parsers[].blocks` is set."
                  },
                  "branding": {
                    "description": "Branding data extracted from the page."
                  },
                  "changeTracking": {
                    "description": "Change-tracking comparison against the previous scrape."
                  },
                  "creditsCost": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Credits this call consumed."
                  },
                  "data": {
                    "description": "Alexandria mode: per-capability results in `data.alexandria`, each with `data`, `records`, or an `error`."
                  },
                  "delivery": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "`retained` when the full result stayed server-side instead of being inlined."
                  },
                  "error": {
                    "description": "Error message or error object when the call did not succeed."
                  },
                  "estimatedTokens": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Estimated token cost of the full result."
                  },
                  "feedbackTool": {
                    "description": "Pointer to the feedback tool for reporting how this result served the task."
                  },
                  "highlights": {
                    "description": "Highlighted passages from the page."
                  },
                  "html": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Processed HTML of the page."
                  },
                  "idleTtlSeconds": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Seconds a retained workspace stays available while idle."
                  },
                  "images": {
                    "description": "Images found on the page."
                  },
                  "inlineTokenBudget": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Token budget above which a result is retained rather than inlined."
                  },
                  "json": {
                    "description": "Structured data matching the requested JSON schema or prompt."
                  },
                  "links": {
                    "description": "Links found on the page."
                  },
                  "markdown": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Page content as markdown."
                  },
                  "menu": {
                    "description": "Menu data extracted from the page."
                  },
                  "message": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Guidance that accompanies the result."
                  },
                  "metadata": {
                    "description": "Page metadata; authenticated responses can include `metadata.scrapeId` for scrape feedback."
                  },
                  "nextTool": {
                    "description": "A follow-up tool call (`{name, arguments}`) that continues or inspects this result."
                  },
                  "pages": {
                    "description": "Physical PDF pages, when `parsers[].pages` is set."
                  },
                  "product": {
                    "description": "Product data extracted from the page."
                  },
                  "rawHtml": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Unprocessed HTML of the page."
                  },
                  "receipt": {
                    "description": "Billing receipt for the execution."
                  },
                  "requestId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Identifier of this Alexandria execution."
                  },
                  "responseBytes": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Size of the full result in bytes."
                  },
                  "scrape_id": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Identifier of the underlying scrape."
                  },
                  "screenshot": {
                    "description": "Screenshot of the page."
                  },
                  "success": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Whether the API call succeeded."
                  },
                  "summary": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Summary of the page content."
                  },
                  "tokenEstimateMethod": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "How `estimatedTokens` was derived."
                  },
                  "tools": {
                    "description": "Domain-matched Alexandria tools for the page, when `domainTools` is set."
                  },
                  "video": {
                    "description": "Video extracted from the page."
                  },
                  "warning": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Non-fatal warning about the result."
                  },
                  "workspaceId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Workspace holding a retained result, for inspection through virtual Bash."
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": true,
                "title": "Firecrawl scrape"
              }
            },
            {
              "name": "firecrawl_search",
              "title": "Firecrawl web search",
              "description": "\nSearch web, news, or image sources and return ranked results with query-relevant highlights. Each web result is a title, URL, and description; use `firecrawl_scrape` on a result URL when the excerpt is not enough.\n\nAuthenticated search also returns matching Alexandria data providers in data.tools (companies, people, jobs, finance and filings, public records and government spending, real estate, places and restaurants, retail and prices, package registries and developer data, news, research, and more). Prefer a provider over scraping pages when the task needs the same fields across several entities, exact figures or timestamps, provenance, or many records; use web results when they already answer the question. A search with sources: [\"web\"] omits semantic provider discovery; domainTools: true can still return website-matched tools. Web-only results use domainTools: false.\n\nOn an authenticated session, tool matches describe available capabilities; `firecrawl_find_tools` returns their contracts and `firecrawl_scrape` with an `alexandria` body executes a selected capability. Keyless sessions get no Alexandria matches in data.tools.\n\nFor a programming question, add `categories: [\"developer\"]`; its hits return in `data.web` with `category: \"developer\"`. `categories: [\"research\"]` restricts web results to research-affiliated websites; the `firecrawl_research_*` tools are a separate surface over paper abstracts and full text (PubMed, bioRxiv, medRxiv, arXiv). Query operators, domain filters, `categories`, `toolDetail` and `scrapeOptions` are described on their parameters. Returns source-type result groups and usage metadata. Authenticated responses can include an `id` for optional search feedback.\n",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "categories": {
                    "description": "Limit results to specific source types. `research` restricts ordinary web results to research-affiliated websites and returns page snippets, which is separate from the `firecrawl_research_*` tools that search paper abstracts and full text across biomedical (PubMed, bioRxiv, medRxiv) and arXiv literature; `pdf` searches PDF results; `developer` searches an index built for coding agents over public repositories, GitHub issues, merged pull requests, repository READMEs, and code documentation. `developer` returns hits in `data.web` with `category: \"developer\"`; the other categories also filter `data.web`.",
                    "items": {
                      "enum": [
                        "research",
                        "pdf",
                        "developer"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "clientModel": {
                    "description": "Optional model identifier, if known.",
                    "maxLength": 128,
                    "minLength": 1,
                    "type": "string"
                  },
                  "domainTools": {
                    "description": "Include domain-matched tools for result URLs. Defaults to true when Alexandria is combined with web, news or images; semantic-only search leaves domain matching off.",
                    "type": "boolean"
                  },
                  "enterprise": {
                    "items": {
                      "enum": [
                        "default",
                        "anon",
                        "zdr"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "excludeDomains": {
                    "description": "Hostnames to leave out of results. Mutually exclusive with includeDomains.",
                    "items": {
                      "maxLength": 253,
                      "minLength": 1,
                      "pattern": "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$",
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "filter": {
                    "type": "string"
                  },
                  "highlights": {
                    "description": "Return query-relevant page excerpts for web and news results when available (default). Highlights appear in web `description` and news `snippet`; otherwise, original snippets are returned. Set to false to keep the original search snippets.",
                    "type": "boolean"
                  },
                  "includeDomains": {
                    "description": "Hostnames to restrict results to. Mutually exclusive with excludeDomains.",
                    "items": {
                      "maxLength": 253,
                      "minLength": 1,
                      "pattern": "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$",
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "limit": {
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "location": {
                    "type": "string"
                  },
                  "objective": {
                    "description": "Optional broader goal for this search, if known. Avoid sensitive information.",
                    "maxLength": 5000,
                    "minLength": 1,
                    "type": "string"
                  },
                  "query": {
                    "description": "Query for web and semantic tool discovery. Operators include quoted phrases, `-term`, `site:host`, `inurl:term`, `intitle:term`, and `related:host`; the set is non-exhaustive. Catalogue browsing is available through firecrawl_find_tools.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "additionalProperties": false,
                    "description": "Attach page content for web results in the same call. These fetches ignore maxAge, so use firecrawl_scrape when you need a live fetch. scrapeOptions fetches web pages, never Alexandria provider tools.",
                    "properties": {
                      "excludeTags": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "formats": {
                        "items": {
                          "enum": [
                            "markdown",
                            "html",
                            "rawHtml",
                            "screenshot",
                            "links",
                            "summary",
                            "changeTracking",
                            "branding",
                            "json",
                            "query",
                            "audio"
                          ],
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "includeTags": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "jsonOptions": {
                        "additionalProperties": false,
                        "properties": {
                          "prompt": {
                            "type": "string"
                          },
                          "schema": {
                            "additionalProperties": false,
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "location": {
                        "additionalProperties": false,
                        "properties": {
                          "country": {
                            "type": "string"
                          },
                          "languages": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "type": "object"
                      },
                      "lockdown": {
                        "type": "boolean"
                      },
                      "maxAge": {
                        "type": "number"
                      },
                      "mobile": {
                        "type": "boolean"
                      },
                      "onlyMainContent": {
                        "type": "boolean"
                      },
                      "parsers": {
                        "items": {
                          "enum": [
                            "pdf"
                          ],
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "pdfOptions": {
                        "additionalProperties": false,
                        "properties": {
                          "maxPages": {
                            "maximum": 10000,
                            "minimum": 1,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "profile": {
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "saveChanges": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "name"
                        ],
                        "type": "object"
                      },
                      "proxy": {
                        "enum": [
                          "basic",
                          "stealth",
                          "enhanced",
                          "auto"
                        ],
                        "type": "string"
                      },
                      "queryOptions": {
                        "additionalProperties": false,
                        "properties": {
                          "mode": {
                            "default": "freeform",
                            "enum": [
                              "directQuote",
                              "freeform"
                            ],
                            "type": "string"
                          },
                          "prompt": {
                            "maxLength": 10000,
                            "type": "string"
                          }
                        },
                        "required": [
                          "prompt"
                        ],
                        "type": "object"
                      },
                      "redactPII": {
                        "type": "boolean"
                      },
                      "removeBase64Images": {
                        "type": "boolean"
                      },
                      "screenshotOptions": {
                        "additionalProperties": false,
                        "properties": {
                          "fullPage": {
                            "type": "boolean"
                          },
                          "quality": {
                            "type": "number"
                          },
                          "viewport": {
                            "additionalProperties": false,
                            "properties": {
                              "height": {
                                "type": "number"
                              },
                              "width": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "width",
                              "height"
                            ],
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "skipTlsVerification": {
                        "type": "boolean"
                      },
                      "storeInCache": {
                        "type": "boolean"
                      },
                      "waitFor": {
                        "type": "number"
                      },
                      "zeroDataRetention": {
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "sources": {
                    "description": "Search sources; authenticated sessions default to web + alexandria, keyless sessions to web only. A search with sources: [\"web\"] omits semantic provider discovery; domainTools: true can still return website-matched tools. Web-only results use domainTools: false. Use [\"alexandria\"] alone for provider discovery without web results.",
                    "items": {
                      "anyOf": [
                        {
                          "enum": [
                            "web",
                            "images",
                            "news",
                            "alexandria",
                            "exchange"
                          ],
                          "type": "string"
                        },
                        {
                          "additionalProperties": false,
                          "properties": {
                            "type": {
                              "enum": [
                                "web",
                                "images",
                                "news",
                                "alexandria",
                                "exchange"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "tbs": {
                    "type": "string"
                  },
                  "toolDetail": {
                    "description": "Compact by default. Compact returns only provider, capability and description; full includes contracts. Inspect selected compact tools with firecrawl_find_tools providers and capabilities.",
                    "enum": [
                      "compact",
                      "summary",
                      "full"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "description": "Ranked search results grouped by source.",
                "properties": {
                  "agent_hints": {
                    "description": "Optional response guidance from the Firecrawl API.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "creditsUsed": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Credits this search consumed."
                  },
                  "data": {
                    "description": "Ranked results grouped by source, such as `web`, `news`, `images`, and `alexandria`."
                  },
                  "error": {
                    "description": "Error message or error object when the call did not succeed."
                  },
                  "feedbackTool": {
                    "description": "Pointer to the feedback tool for this search."
                  },
                  "id": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Search identifier, for optional `firecrawl_search_feedback`."
                  },
                  "nextTool": {
                    "description": "A follow-up tool call that continues this search."
                  },
                  "success": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Whether the API call succeeded."
                  },
                  "tools": {
                    "description": "Domain-matched Alexandria tools for the results."
                  },
                  "warning": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Non-fatal warning about the result."
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": true,
                "title": "Firecrawl web search"
              }
            },
            {
              "name": "firecrawl_parse",
              "title": "Firecrawl file parsing",
              "description": "\nParse one supported document into markdown, HTML, links, summary, targeted answers, or JSON matching a schema. Supported inputs include common HTML, PDF, Word, RTF, OpenDocument, and spreadsheet files; PDF parsing can be bounded with `pdfOptions.maxPages`.\n\nLocal MCP reads `filePath` from the server filesystem. Hosted MCP uses two calls: first provide `filePath` to receive upload instructions, upload locally, then call again with the returned `uploadRef`; do not send both fields together. Remote web URLs belong in `firecrawl_scrape`.\n\nSet `redactPII` to request redaction of personally identifiable information in the returned content. `zeroDataRetention` requires an eligible authenticated account; omit it for anonymous keyless use. Returns upload instructions for hosted phase one or parsed document content for the final call. Authenticated final responses can include a `data.metadata.scrapeId` for optional parse feedback.\n",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "properties": {
                  "contentType": {
                    "description": "Phase 1 MIME type override. If omitted, the server infers it from the file extension without reading the file.",
                    "type": "string"
                  },
                  "declaredSizeBytes": {
                    "description": "Optional phase 1 size declaration. Hosted MCP does not stat the file; provide this only if the caller already knows it.",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "excludeTags": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "filePath": {
                    "description": "Phase 1 only: path to the local file on the caller/harness machine. Hosted MCP will not read or stat this path; it is used only to produce upload instructions.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "formats": {
                    "items": {
                      "enum": [
                        "markdown",
                        "html",
                        "rawHtml",
                        "links",
                        "summary",
                        "json",
                        "query"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "includeTags": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "jsonOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "prompt": {
                        "type": "string"
                      },
                      "schema": {
                        "additionalProperties": false,
                        "propertyNames": {
                          "type": "string"
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "maxAge": {
                    "description": "Ignored: parse never reuses or stores indexed content.",
                    "type": "number"
                  },
                  "onlyMainContent": {
                    "type": "boolean"
                  },
                  "parsers": {
                    "items": {
                      "enum": [
                        "pdf"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "pdfOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "maxPages": {
                        "maximum": 10000,
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "proxy": {
                    "enum": [
                      "basic",
                      "auto"
                    ],
                    "type": "string"
                  },
                  "queryOptions": {
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "default": "freeform",
                        "enum": [
                          "directQuote",
                          "freeform"
                        ],
                        "type": "string"
                      },
                      "prompt": {
                        "maxLength": 10000,
                        "type": "string"
                      }
                    },
                    "required": [
                      "prompt"
                    ],
                    "type": "object"
                  },
                  "redactPII": {
                    "type": "boolean"
                  },
                  "removeBase64Images": {
                    "type": "boolean"
                  },
                  "skipTlsVerification": {
                    "type": "boolean"
                  },
                  "storeInCache": {
                    "type": "boolean"
                  },
                  "uploadRef": {
                    "description": "Phase 2 only: short-lived upload reference returned by phase 1 after the local PUT upload completes.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "zeroDataRetention": {
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "additionalProperties": false,
                "description": "Parsed document content, or the upload instructions for the hosted two-call flow.",
                "properties": {
                  "agent_hints": {
                    "description": "Optional response guidance from the Firecrawl API.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "data": {
                    "description": "Parsed document content; can include `data.metadata.scrapeId` for parse feedback."
                  },
                  "error": {
                    "description": "Error message or error object when the call did not succeed."
                  },
                  "message": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Guidance for the next call."
                  },
                  "mode": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Which phase of the hosted flow produced this response."
                  },
                  "nextToolCall": {
                    "description": "Hosted phase one: the second `firecrawl_parse` call to make once the upload succeeds, as `{name, arguments}`."
                  },
                  "notes": {
                    "anyOf": [
                      {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Hosted phase one: constraints on completing the upload flow."
                  },
                  "raw": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Response body when it was not JSON."
                  },
                  "success": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Whether the API call succeeded."
                  },
                  "upload": {
                    "additionalProperties": false,
                    "description": "Hosted phase one: how to upload the local file.",
                    "properties": {
                      "command": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Local command that performs the upload. It carries no Firecrawl API key."
                      },
                      "expiresAt": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "When the upload URL expires."
                      },
                      "fields": {
                        "description": "Form fields the upload request must send, for a POST upload."
                      },
                      "headers": {
                        "description": "Headers the upload request must send."
                      },
                      "maxSizeBytes": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Largest file the upload URL accepts."
                      },
                      "method": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "HTTP method for the upload."
                      },
                      "uploadRef": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Reference to pass back on the second call."
                      },
                      "uploadUrl": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "URL to upload the local file to."
                      }
                    },
                    "type": "object"
                  },
                  "warning": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Non-fatal warning about the result."
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Firecrawl file parsing"
              }
            }
          ],
          "schemaTokens": 6347,
          "changedAt": "2026-09-28T21:55:47.203996335Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 6347,
            "counts": {
              "error": 0,
              "note": 0,
              "warn": 5
            },
            "findings": [
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "firecrawl_parse",
                "message": "none of its 19 parameters has a description",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "firecrawl_scrape",
                "message": "none of its 27 parameters has a description",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "firecrawl_search",
                "message": "none of its 16 parameters has a description",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "firecrawl_scrape",
                "message": "the definition is about 2,695 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "firecrawl_search",
                "message": "the definition is about 2,231 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              }
            ]
          }
        },
        "updatedAt": "2026-10-04T23:48:08.465133723Z"
      }
    },
    "summary": "Firecrawl MCP has a score of 75.5 (BB) against Brave Search API + MCP's 68.1 (B). Both do web search. The largest gap is agent ergonomics, 20 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-firecrawl-mcp",
    "json": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-firecrawl-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-firecrawl-mcp.md",
    "slim": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-firecrawl-mcp.min.md"
  },
  "markdown": "Firecrawl MCP has a score of 75.5 (BB) against Brave Search API + MCP's 68.1 (B). Both do web search. The largest gap is agent ergonomics, 20 points.\n\n- Brave Search API + MCP: grade B, 68.1/100, rank #132 of 452. Markdown https://www.anchorterminal.com/tools/brave-search-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/brave-search-mcp.json\n- Firecrawl MCP: grade BB, 75.5/100, rank #34 of 452. Markdown https://www.anchorterminal.com/tools/firecrawl-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/firecrawl-mcp.json\n\n## Which one, for what\n\nPick Brave Search API + MCP for payments \u0026 pricing (+20), transparency \u0026 trust (+6).\n\nPick Firecrawl MCP for reliability (+15), schema \u0026 documentation (+16), agent ergonomics (+20), security \u0026 auth (+9).\n\n## Score by category\n\n| Category | Weight | Brave Search API + MCP | Firecrawl MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 55 | 70 | Firecrawl MCP +15 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 72 | 88 | Firecrawl MCP +16 |\n| Agent ergonomics | 13% (16.2 this run) | 72 | 92 | Firecrawl MCP +20 |\n| Security \u0026 auth | 14% (17.5 this run) | 58 | 67 | Firecrawl MCP +9 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 70 | 50 | Brave Search API + MCP +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 87 | even |\n| Transparency \u0026 trust | 7% (8.8 this run) | 82 | 76 | Brave Search API + MCP +6 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **68.1 · B** | **75.5 · BB** | |\n\n## Facts side by side\n\n| Fact | Brave Search API + MCP | Firecrawl MCP |\n| --- | --- | --- |\n| Kind | HTTP API | MCP server |\n| Vendor | Brave | Firecrawl (Mendable) |\n| Hosted endpoint | `https://api.search.brave.com/res/v1/web/search` | `https://mcp.firecrawl.dev/v2/mcp` |\n| Transports | stdio, Streamable HTTP, HTTP | stdio, Streamable HTTP, SSE (legacy) |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Pay per use | Freemium |\n| x402 | payer tooling only | no |\n| Licence | MIT | MIT |\n| Tools exposed | 8 | 26 |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | `io.github.brave/brave-search-mcp-server` | `io.github.firecrawl/firecrawl-mcp-server` |\n| Last release | 2026-09-17 | 2026-10-01 |\n| Popularity | 1.4k stars, 22k npm/wk | 7.5k stars, 29k npm/wk |\n| Agent reviews | 3.5/5 (2) | 3.5/5 (8) |\n\n## Verdicts\n\n**Brave Search API + MCP.** x402 proxy sells web, LLM Context, news, video, image and local search at $0.005 a call, and a failed search isn't charged. The status page marks the Search API \"not monitored\" and shows no incident history.\n\n**Firecrawl MCP.** Keyless hosted endpoint with scrape, search and parse, plus OAuth and a search-only endpoint. No x402 or other machine payment.\n\n## Before you call either\n\n### Brave Search API + MCP\n\n1. Call /res/v1/llm/context when you need page text rather than links. It saves a separate fetch\n2. Treat \"No web results found\" from the MCP server as an empty result, not an outage\n3. On 429, wait for `X-RateLimit-Reset` seconds. There's no `Retry-After` header\n4. Skip `brave_summarizer`. The Summarizer is deprecated and the x402 proxy doesn't sell it\n5. Pin `Api-Version` to a date, since requests without it get the latest version\n\n### Firecrawl MCP\n\n1. Use `firecrawl_map` to list URLs, then scrape the few you need instead of crawling a whole site\n2. On the keyless endpoint only scrape, search and parse work. A 429 carries a `signup_url` for the human\n3. Ask for markdown only. JSON, question and highlight formats add 4 credits a page\n4. Poll `firecrawl_check_crawl_status` rather than waiting on a long crawl inside one call\n5. Check the URL before scraping. Dead pages still cost a credit\n\n## Other comparisons with Brave Search API + MCP or Firecrawl MCP\n\n- [Brave Search API + MCP vs Exa API + MCP](https://www.anchorterminal.com/compare/brave-search-mcp-vs-exa-mcp.md)\n- [Brave Search API + MCP vs Linkup](https://www.anchorterminal.com/compare/brave-search-mcp-vs-linkup.md)\n- [Brave Search API + MCP vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/brave-search-mcp-vs-parallel-search-api.md)\n- [Brave Search API + MCP vs SearchAPI.io](https://www.anchorterminal.com/compare/brave-search-mcp-vs-searchapi-io.md)\n- [Brave Search API + MCP vs SerpApi](https://www.anchorterminal.com/compare/brave-search-mcp-vs-serpapi.md)\n- [Brave Search API + MCP vs Serper](https://www.anchorterminal.com/compare/brave-search-mcp-vs-serper.md)\n- [Brave Search API + MCP vs Tavily API + MCP](https://www.anchorterminal.com/compare/brave-search-mcp-vs-tavily-mcp.md)\n- [Brave Search API + MCP vs Valyu](https://www.anchorterminal.com/compare/brave-search-mcp-vs-valyu.md)\n- [Brave Search API + MCP vs You.com APIs](https://www.anchorterminal.com/compare/brave-search-mcp-vs-you-com-api.md)\n- [Bright Data vs Firecrawl MCP](https://www.anchorterminal.com/compare/bright-data-vs-firecrawl-mcp.md)\n- [Exa API + MCP vs Firecrawl MCP](https://www.anchorterminal.com/compare/exa-mcp-vs-firecrawl-mcp.md)\n- [Firecrawl MCP vs Jina Reader](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-jina-reader.md)\n- [Firecrawl MCP vs Linkup](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-linkup.md)\n- [Firecrawl MCP vs Olostep](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-olostep.md)\n- [Firecrawl MCP vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-parallel-search-api.md)\n- [Firecrawl MCP vs ScrapeGraphAI](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrapegraphai.md)\n- [Firecrawl MCP vs Scrapeless](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrapeless.md)\n- [Firecrawl MCP vs ScrapingBee](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrapingbee.md)\n- [Firecrawl MCP vs Scrapingdog](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrapingdog.md)\n- [Firecrawl MCP vs SearchAPI.io](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-searchapi-io.md)\n- [Firecrawl MCP vs SerpApi](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-serpapi.md)\n- [Firecrawl MCP vs Serper](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-serper.md)\n- [Firecrawl MCP vs Spider](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-spider-cloud.md)\n- [Firecrawl MCP vs Tavily API + MCP](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-tavily-mcp.md)\n- [Firecrawl MCP vs Valyu](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-valyu.md)\n- [Firecrawl MCP vs You.com APIs](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-you-com-api.md)\n- [Firecrawl MCP vs Scrape.do](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrape-do.md)\n- [Firecrawl MCP vs Scrapfly](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrapfly.md)\n- [Firecrawl MCP vs ScrapingAnt](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-scrapingant.md)\n- [Apify MCP Server vs Firecrawl MCP](https://www.anchorterminal.com/compare/apify-mcp-vs-firecrawl-mcp.md)\n- [Firecrawl MCP vs ZenRows](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-zenrows.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Brave Search API + MCP vs Firecrawl MCP",
        "url": ""
      }
    ],
    "description": "Firecrawl MCP has a score of 75.5 (BB) against Brave Search API + MCP's 68.1 (B). Both do web search. The largest gap is agent ergonomics, 20 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Brave Search API + MCP B 68.1",
      "Firecrawl MCP BB 75.5",
      "scores"
    ],
    "h1": "Brave Search API + MCP vs Firecrawl MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-brave-search-mcp-vs-firecrawl-mcp.png",
    "path": "/compare/brave-search-mcp-vs-firecrawl-mcp",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Brave Search API + MCP vs Firecrawl MCP for AI agents",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-firecrawl-mcp"
  },
  "tokens": {
    "markdown": 2050,
    "slim": 380
  },
  "version": 1
}
