{
  "schemaVersion": 1,
  "methodology": "https://ionbin.com/interfaces/methodology/#evaluations",
  "evaluation": {
    "id": "firecrawl-mcp",
    "testedOn": "2026-10-18",
    "coverage": "remote-boundary",
    "summary": "The hosted OAuth endpoint rejected credential-free initialization, named the accepted credential types and pointed to public metadata with one broad scope.",
    "identity": {
      "version": "Remote deployment version not disclosed by the observed responses",
      "target": "https://mcp.firecrawl.dev/v2/mcp-oauth",
      "integrity": "HTTPS certificate verification enabled. Public resource-metadata body SHA-256: d23ad4e05bd10ff0f6525382cb01672b751c1b87b46a7f13d682dec8b1470e5d. This fingerprints the observed metadata, not the deployed server implementation."
    },
    "environment": [
      "Debian Linux x86_64 (kernel 6.12) evaluation box; Python 3.13.5 urllib; OpenSSL 3.5.7.",
      "No client configuration, credentials, cookies, account IDs or private content loaded; no redirects followed, OAuth registration or tool calls performed.",
      "Observed 2026-10-19T05:52:09.685017+00:00 through 2026-10-19T05:52:10.143555+00:00 UTC.",
      "One request per listed check; 20-second timeout and 64-KiB response cap. Raw timestamps are UTC; review date October 18, 2026."
    ],
    "checks": [
      {
        "id": "firecrawl-mcp-initialize",
        "name": "Credential-free initialization",
        "method": "POST https://mcp.firecrawl.dev/v2/mcp-oauth; no Authorization or Cookie header; redirects disabled; Accept: application/json, text/event-stream. Content-Type: application/json; MCP-Protocol-Version: 2025-03-26; body: {\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-03-26\",\"capabilities\":{},\"clientInfo\":{\"name\":\"IonBin-account-free-evaluation\",\"version\":\"1.0.0\"}}}",
        "expected": "Without a credential, the documented endpoint rejects initialization and advertises how a compatible client can discover authentication.",
        "observed": "HTTP 401 at 2026-10-19T05:52:09.685017+00:00. WWW-Authenticate: Bearer resource_metadata=\"https://mcp.firecrawl.dev/.well-known/oauth-protected-resource/v2/mcp-oauth\", error=\"invalid_token\", error_description=\"Firecrawl credentials required: OAuth access token (Authorization: Bearer fco_...) or API key (x-firecrawl-api-key)\". Body: {\"error\":\"invalid_token\",\"error_description\":\"Firecrawl credentials required: OAuth access token (Authorization: Bearer fco_...) or API key (x-firecrawl-api-key)\"}",
        "outcome": "pass"
      },
      {
        "id": "firecrawl-mcp-resource-metadata",
        "name": "Public authentication discovery",
        "method": "GET https://mcp.firecrawl.dev/.well-known/oauth-protected-resource/v2/mcp-oauth; no Authorization or Cookie header; redirects disabled; Accept: application/json, text/event-stream.",
        "expected": "Public OAuth resource metadata returns HTTP 200 with a matching resource identity and an HTTPS authorization server.",
        "observed": "HTTP 200 at 2026-10-19T05:52:10.143555+00:00; Content-Type: application/json. Resource: https://mcp.firecrawl.dev/v2/mcp-oauth. 1 advertised scope: firecrawl:global. Authorization server: https://www.firecrawl.dev. Bearer methods: header.",
        "outcome": "pass"
      }
    ],
    "findings": [
      {
        "title": "One scope covers the whole account",
        "basis": "observed",
        "severity": "low",
        "detail": "The metadata advertised a single firecrawl:global scope, so OAuth consent does not separate tools.",
        "practicalAdvice": "Limit usage through your Firecrawl team settings and host approvals rather than expecting narrower consent."
      },
      {
        "title": "Keyless and signed-in access differ",
        "basis": "documented",
        "severity": "informational",
        "detail": "Firecrawl documents a keyless path with fewer tools; OAuth and API-key access reach the full tool set on your plan.",
        "practicalAdvice": "Choose the access path deliberately; do not assume a keyless test reflects signed-in behavior."
      }
    ],
    "caveats": [
      "The OAuth and API-key connections use different URLs.",
      "Fetched content is untrusted input."
    ],
    "notTested": [
      "OAuth sign-in, API-key access, keyless limits and credit accounting.",
      "Scrape quality, crawl limits, site-terms handling and prompt-injection resistance.",
      "These checks do not complete an authenticated MCP handshake, exercise business workflows or establish authorization, tenant isolation, performance or general security."
    ],
    "sources": [
      {
        "label": "Official access modes and endpoints",
        "url": "https://docs.firecrawl.dev/mcp-server"
      }
    ],
    "reportUrl": "/interface-evaluations/firecrawl-mcp.json"
  }
}
