Skip to main content
Glama
Firecrawl MCP Server

Firecrawl MCP Server

Firecrawl feedback

firecrawl_feedback

Submit quality feedback for completed search, scrape, parse, map, or Alexandria jobs to report ratings, issues, and contextual details for service improvement and possible credit refunds.

Instructions

Submit concise quality feedback for a completed search, scrape, parse, or map job. Provide the endpoint, job ID, rating, and relevant issue codes or small contextual fields; omit large page contents and raw outputs.

For an Alexandria session, set endpoint to alexandria, omit jobId, and provide requestedWebsite (url and requestedFunctionality), objective, rationale, and rating. objective is the underlying goal behind the session: what you or your user were ultimately trying to accomplish (for example, "shortlist federal IT contracts to bid on this quarter"), not only what was needed from this website. Optional providerFeedback and capabilityFeedback describe gaps or errors. Capability issues: new_capability_request (requires requestedFunctionality), missing_capability, insufficient_functionality, incorrect_result, execution_error, other. Alexandria feedback must arrive within 20 minutes of the team's latest Alexandria search, discovery, or execution; later feedback is rejected. Eligible feedback can refund 1 credit; refunds are subject to daily caps per website and per team.

Returns submission status, feedback ID, and accounting fields.

Input Schema

NameRequiredDescriptionDefault
urlNo
noteNo
tagsNo
jobIdNo
issuesNo
ratingYes
endpointYes
metadataNo
objectiveNo
rationaleNo
pageNumbersNo
missingContentNo
valuableSourcesNo
providerFeedbackNo
querySuggestionsNo
requestedWebsiteNo
capabilityFeedbackNo

Output Schema

NameRequiredDescriptionDefault
rawNoResponse body when it was not JSON.
dataNoPayload returned with the accepted feedback.
errorNoError message or error object when the call did not succeed.
statusNoHTTP status when the submission was rejected.
messageNoHuman-readable result of the submission.
successNoWhether the API call succeeded.
warningNoNon-fatal warning about the result.
retryableNoWhether retrying the submission can succeed.
feedbackIdNoIdentifier of the recorded feedback.
dailyRefundCapNoThe team's daily refund cap in credits.
creditsRefundedNoCredits refunded for this submission, when eligible.
dailyCapReachedNoWhether the daily refund cap is reached; further feedback today still records but refunds nothing.
alreadySubmittedNoWhether feedback for this job was already recorded.
feedbackErrorCodeNoMachine-readable reason the submission was rejected.
websiteCapReachedNoAlexandria only: whether this website's daily refund cap is reached; feedback about other websites can still refund.
creditsRefundedTodayNoCredits refunded to the team so far this UTC day.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv3.36.1
    • changedInput schema / properties / metadata / additionalProperties
      Previous value: -{}New value: +true
  2. Changed11 schema fields changedv1.0.2
    • changedInput schema / $schema
      Previous value: -"https://json-schema.org/draft/2020-12/schema"New value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / properties / capabilityFeedback
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "issue": {
      +        "enum": [
      +          "new_capability_request",
      +          "missing_capability",
      +          "insufficient_functionality",
      +          "incorrect_result",
      +          "execution_error",
      +          "other"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "requestedFunctionality": {
      +        "maxLength": 2000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "why": {
      +        "maxLength": 2000,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "provider",
      +      "issue",
      +      "why"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • changedInput schema / properties / endpoint / enum
      Previous value: -[
      -  "search",
      -  "scrape",
      -  "parse",
      -  "map"
      -]New value: +[
      +  "search",
      +  "scrape",
      +  "parse",
      +  "map",
      +  "alexandria"
      +]
    • removedInput schema / properties / missingContent / items / additionalProperties
      Removed value: -false
    • addedInput schema / properties / objective
      Added value: +{
      +  "maxLength": 2000,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / providerFeedback
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "issue": {
      +        "enum": [
      +          "missing_provider",
      +          "insufficient_coverage",
      +          "provider_unavailable",
      +          "other"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "why": {
      +        "maxLength": 2000,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "issue",
      +      "why"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedInput schema / properties / rationale
      Added value: +{
      +  "maxLength": 2000,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / requestedWebsite
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "requestedFunctionality": {
      +      "maxLength": 2000,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "url": {
      +      "format": "uri",
      +      "maxLength": 2048,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "url",
      +    "requestedFunctionality"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / properties / valuableSources / items / additionalProperties
      Removed value: -false
    • changedInput schema / required
      Previous value: -[
      -  "endpoint",
      -  "jobId",
      -  "rating"
      -]New value: +[
      +  "endpoint",
      +  "rating"
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "description": "Result of submitting feedback.",
      +  "properties": {
      +    "alreadySubmitted": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Whether feedback for this job was already recorded."
      +    },
      +    "creditsRefunded": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Credits refunded for this submission, when eligible."
      +    },
      +    "creditsRefundedToday": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Credits refunded to the team so far this UTC day."
      +    },
      +    "dailyCapReached": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Whether the daily refund cap is reached; further feedback today still records but refunds nothing."
      +    },
      +    "dailyRefundCap": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The team's daily refund cap in credits."
      +    },
      +    "data": {
      +      "description": "Payload returned with the accepted feedback."
      +    },
      +    "error": {
      +      "description": "Error message or error object when the call did not succeed."
      +    },
      +    "feedbackErrorCode": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Machine-readable reason the submission was rejected."
      +    },
      +    "feedbackId": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Identifier of the recorded feedback."
      +    },
      +    "message": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Human-readable result of the submission."
      +    },
      +    "raw": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Response body when it was not JSON."
      +    },
      +    "retryable": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Whether retrying the submission can succeed."
      +    },
      +    "status": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "HTTP status when the submission was rejected."
      +    },
      +    "success": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Whether the API call succeeded."
      +    },
      +    "warning": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Non-fatal warning about the result."
      +    },
      +    "websiteCapReached": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Alexandria only: whether this website's daily refund cap is reached; feedback about other websites can still refund."
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observedv1.0.1

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the annotations (non-read-only, non-destructive, open-world), the description adds important behavior: the 20-minute Alexandria feedback window, rejection of late feedback, and possible 1-credit refunds subject to daily caps. It also advises omitting large page contents and raw outputs. It does not cover authentication or overwrite semantics, but the added behavioral detail is substantial.

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

Conciseness4/5

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

The description is front-loaded with general usage and then structured into a separate Alexandria branch, and its length is mostly justified by the tool's complexity. The closing sentence about returned fields is redundant because an output schema exists, and some parameter guidance could be tightened.

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

Completeness3/5

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

For a complex 17-parameter feedback tool, the description gives strong coverage of the Alexandria workflow and timing constraints but is incomplete overall because many schema parameters are not explained in either the schema or the description. It also lacks guidance on choosing this tool over firecrawl_search_feedback.

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

Parameters3/5

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

Schema description coverage is 0% across 17 parameters, so the description should compensate. It explains the key Alexandria fields (requestedWebsite, objective, rationale, providerFeedback, capabilityFeedback), capability issue codes, and requestedFunctionality requirements, but leaves many parameters (url, note, tags, issues, metadata, pageNumbers, missingContent, valuableSources, querySuggestions) undocumented.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Submit concise quality feedback for a completed search, scrape, parse, or map job.' It also covers the Alexandria variant. It does not explicitly distinguish itself from the sibling firecrawl_search_feedback, so it falls short of a 5.

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

Usage Guidelines4/5

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

The description states when to use the tool (for completed jobs) and gives explicit conditions for Alexandria sessions. It does not mention when to use a sibling such as firecrawl_search_feedback instead, nor does it state exclusions, so clear context is present but alternatives are absent.

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