Firecrawl MCP Server vs MCP Ticket Demo
A side-by-side look at the Firecrawl MCP Server and MCP Ticket Demo MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Firecrawl MCP Server for search & data extraction work as a local process; choose MCP Ticket Demo for support & service management as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Firecrawl MCP Server when
- You need dedicated capabilities in the Search & Data Extraction domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: API key required.
- You have the keys it needs:
FIRECRAWL_API_KEY, HTTP_STREAMABLE_SERVER, FIRECRAWL_NO_SEARCH_FEEDBACK, FIRECRAWL_NO_ENDPOINT_FEEDBACK. - You want tools like
firecrawl_scrape, firecrawl_map, firecrawl_search.
Choose MCP Ticket Demo when
- You need dedicated capabilities in the Support & Service Management domain.
- You prefer a local stdio subprocess transport.
- You want tools like
create_ticket, add_comment, close_ticket.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Search & Data Extraction | Support & Service Management |
| Quality signal | 90/100 · Excellent | 63/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | Not declared |
| Pricing | Freemium | Not declared |
| Required env vars | FIRECRAWL_API_KEYHTTP_STREAMABLE_SERVERFIRECRAWL_NO_SEARCH_FEEDBACKFIRECRAWL_NO_ENDPOINT_FEEDBACK | None listed |
| Verified owner | Verified | Community listing |
| GitHub stars | 7,642 | 1 |
| Directory activity | 13 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 25 | 19 |
| Full listing | View Firecrawl MCP Server | View MCP Ticket Demo |
Tools & capabilities
Firecrawl MCP Server tools 25
firecrawl_scrapeRetrieve and extract content from one supplied URL through Firecrawl. Use this when the request identifies a page and needs its content or defined fields. It can return markdown, HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema; JSON is useful when the requested result has defined fields, while markdown preserves readable page content. This tool operates on a known page. For a set of pages use `firecrawl_crawl`, and to discover page URLs use `firecrawl_map` or `firecrawl_search`. Options include JavaScript render delay, cache age, main-content filtering, PII redaction, and lockdown cache-only retrieval. Browser actions may change the live page when interactive actions are enabled. Firecrawl may reuse recently indexed content instead of refetching the page, and the reuse window varies by domain. Set `maxAge: 0` to force a live fetch, or a smaller `maxAge` to bound how stale reused content may be. A successful response does not by itself confirm that the state it describes is still current. Returns the selected content formats and page metadata.firecrawl_mapEnumerate URLs indexed under one website through Firecrawl without fetching each page's content. Use this when the request asks for a site's URL inventory, when several relevant pages must be located, or when the desired page URL is unknown. An optional `search` term narrows the URL list, while sitemap, subdomain, query-parameter, and result-limit options control coverage. Returns matching URLs rather than page bodies. Retrieve one page with `firecrawl_scrape`; collect content across multiple pages with `firecrawl_crawl`.firecrawl_searchSearch web, news, or image sources and return ranked results. Operators include quoted phrases, `-term`, `site:host`, `inurl:term`, `intitle:term`, and `related:host`; the set is non-exhaustive. `includeDomains` and `excludeDomains` are mutually exclusive hostname filters; categories limit results to GitHub, research, PDF, or developer sources. For a programming question, add `categories: ["developer"]`. It searches an index of GitHub issues, merged pull requests, repository READMEs, and curated documentation sites, and returns the hits in `data.developer` beside the web results. `categories: ["research"]` restricts these web results to research-affiliated websites and returns page snippets. The `firecrawl_research_*` tools are a separate surface that searches paper abstracts and full text across biomedical (PubMed, bioRxiv, medRxiv) and arXiv literature. `scrapeOptions` can attach extracted page content; pages fetched this way use a fixed reuse window and ignore `maxAge`, so use `firecrawl_scrape` when a live fetch is required. Returns source-type result groups and usage metadata. Authenticated responses can include an `id` for optional search feedback.firecrawl_crawlStart a multi-page crawl at a website URL, poll it to a terminal state, and return the final status and collected data. Scope can be bounded with include/exclude paths, depth, page limit, subdomain/external-link controls, sitemap handling, delay, and scrape options. Crawl results can be large; use conservative limits when full-site coverage is unnecessary. Webhooks and interactive scrape actions are unavailable in safe mode. Returns the crawl ID, status, and page data.firecrawl_check_crawl_statusRetrieve the current status, progress, and available results for an existing crawl ID. This only reads Firecrawl job state and does not start or modify the crawl.firecrawl_extractDeprecated compatibility entry point. Use firecrawl_scrape once per known URL with formats: ["json"] and jsonOptions containing the prompt and schema. Use firecrawl_search or firecrawl_agent before Scrape when URLs are not known.firecrawl_agentStart an asynchronous web research job from a prompt, optional seed URLs, and an optional JSON schema. Use this for a requested synthesis across multiple sources when the task can wait for asynchronous completion. The agent can search, navigate, read pages, and assemble a structured result. This call returns only a job ID, not the research result. Read the job with `firecrawl_agent_status` until it reaches `completed` or `failed`; research commonly takes several minutes. If the job cannot finish within the task's available time, `firecrawl_search` and `firecrawl_scrape` can gather evidence synchronously.firecrawl_agent_statusRetrieve progress or final results for a `firecrawl_agent` job ID. A `processing` response is non-terminal and does not contain the final research result. Check again after 15–30 seconds until the status is `completed` or `failed`; complex jobs can take several minutes. If the job cannot finish within the task's available time, use `firecrawl_search` and `firecrawl_scrape` to complete the requested output. Returns job status, progress information, and result data when completed.firecrawl_interactOpen or reuse a live browser session to navigate a page, click controls, fill fields, or run browser code. Provide either `url` or `scrapeId`, and either a natural-language `prompt` or executable `code`; code can run as Bash, Python, or Node with a bounded timeout. This acts on the live site, so actions such as form submission can create persistent external side effects. Returns execution output, stdout/stderr, exit status, and session viewing URLs.firecrawl_interact_stopStop the live interact session associated with a `scrapeId` and release its resources. Returns a success confirmation.firecrawl_parseParse 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`. Local 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`. Set `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.firecrawl_monitor_createCreate a recurring scrape, crawl, or search monitor that compares each check with its retained predecessor. The simple form accepts `page`/`pages` or `queries` plus a plain-language `goal`; the advanced `body` form controls targets, schedule, change-tracking formats, judging, retention, webhook, and notifications. In the simple form, a `goal` is required. If `queries` contains one or more non-empty values and is supplied with `page`/`pages`, `queries` create the search target and page targets are ignored. A monitor schedules future network checks and can send configured email or webhook notifications. Returns the created monitor.- +13 more on the listing page
MCP Ticket Demo tools 19
create_ticketOpen a support ticket on behalf of a customer. ALWAYS pass requester_email as the real customer email. If you omit it the call still succeeds (201) but the service account owns the ticket and every reply is mailed to the bot, not the customer — that is the attribution scar. A tool is not done when the API call succeeds; it is done when the next thing that happens is right. This is a write tool and may require a credential.add_commentAdd a comment to an existing ticket. You need a real ticket_id from run_query schema=tickets — do not invent TCK- ids. Pass author as the human speaking; omitting it attributes the comment to the service account. This is a write tool and may require a credential. To resolve the ticket after commenting, call close_ticket.close_ticketResolve and close a support ticket (destructive, idempotent). Sets status to solved and records resolved_at. Optionally appends resolution as the final comment. If the ticket is already solved this is a no-op and returns alreadyClosed=true — do not retry. Use a real ticket_id from run_query schema=tickets. Use add_comment first if you want a longer explanation before closing. This is a write tool and may require a credential.get_schemaDiscover names and shapes. With no name: lists every name with its kind (data = object shape: ticket, customer, server; query = tickets, customers, assets, timers, system, settings, events, users, api_keys, trace, errors or counters, the only names run_query accepts; tool = that tool's arguments). With a name from that list: the shape of that one. This does not perform the task. kind=query: the filterable keys are for run_query. kind=tool: these are the arguments, call that tool next and do not pass the tool name to run_query. kind=data: an object shape, call the tool named in next. An unknown name is an error. There is no list_schemas tool and no query_tickets tool.run_queryExact-match rows for schema tickets, customers, assets, timers, system, settings, events, users, api_keys, trace, errors or counters only. Timers are read here (there is no get_timer): state, elapsed_ms and remaining_ms are worked out when you query. system is one row about this machine: memory, CPU, disk and whether it is in a container (inside Docker those are the container limits); there is no system_info tool. settings is one row: the saved settings, with no API keys or passwords (there is no get_settings tool); change them with update_settings (MQTT: set_mqtt). events are the events already announced, newest first; filter type takes a name or a group such as ticket.*. users and api_keys need an admin credential and never contain a password or a key secret; there is no list_users or list_api_keys tool. trace (the call trace, only while audit is on), errors (failed calls) and counters (success, error and denied per tool) also need an admin credential; there is no export_log tool. tickets: this is how tickets are found and read (there is no search_tickets or get_ticket tool). filter status (open, pending, solved), requester_email, attribution, query (a keyword in subject or body), or id for one ticket with its body and comments. A list returns the short fields; pass fields to choose others. customers: filter email for one customer (there is no lookup_customer tool). phone is the text REDACTED unless you present a credential with the pii scope. Do not pass a tool name or a singular data name. Do not invent query_tickets or query_with_filter. Empty rows mean no match; loosen the filter, do not retry the same query.describe_serverCall this first, and again after any denial or empty tool list: server identity, auth mode, who the server thinks you are, the scopes you hold, your rate-limit budget, and every tool with the scope it needs and whether it is currently available. The tools list is the set of actions — call a tool to do the work, do not get_schema it first. Discovery stays open in every auth mode. When a call was denied, this tells you which credential is missing — do not guess.update_settingsChange settings in one call. The argument has the shape of the settings row that run_query schema=settings returns, and every field is optional: authMode (off, write or all); rateLimit {enabled, limit, windowSeconds}; audit (record the call trace); uiAuth (hide the desk pages until sign-in); protocols {stdio, streamableHttp, sse} (at least one stays on); events {enabled, types, autoTimer, autoSystem} (which events the server announces; types are names, groups such as ticket.* or *); toolGates {tool: true|false} (false disables a tool, not describe_server); toolAuthOverrides {tool: true|false} (true requires a credential for that tool even while auth is off); toolScopeOverrides {tool: read|write|pii|admin|default} (default restores the tool's own scope; admin tools, describe_server and generate_traffic cannot change). Only the fields you send change. Everything is checked first, and if any part is refused nothing is changed. MQTT has its own tool, set_mqtt. Requires admin even when auth mode is off, because it can change auth mode, the rate limit, the call trace, the page lock and who may call what. Then call run_query with schema=settings, or describe_server for the scopes and gates in force.set_mqttPublish the events to an MQTT broker. Publish only: the server does not subscribe. Send url (mqtt://host:1883 or mqtts://host:8883), enabled, topic_prefix, username, password, qos 0 or 1, retain. Anything left out stays. Events must be on (update_settings with events.enabled=true) and only the kinds meant for everyday listeners are published, never settings, users or keys. The password is kept in memory and never shown again. test=true publishes one message to <prefix>/test. Requires admin. Then call run_query with schema=settings and read mqtt.status.create_userCreate a user. The password is stored as a hash and is never listed. The built-in admin cannot be replaced. Requires admin.delete_userDelete a user by username. The built-in admin cannot be removed. Requires admin.issue_api_keyIssue an API key. The secret is returned once in key and is not stored. Requires admin. Then call run_query with schema=api_keys and confirm the secret is absent.revoke_api_keyRevoke an API key by id from run_query schema=api_keys or issue_api_key. Requires admin.- +7 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Firecrawl MCP Server
{
"mcpServers": {
"firecrawl-firecrawl-mcp-server": {
"command": "npx",
"args": [
"-y",
"firecrawl-mcp"
],
"env": {
"FIRECRAWL_API_KEY": "YOUR_FIRECRAWL_API_KEY_HERE",
"HTTP_STREAMABLE_SERVER": "YOUR_HTTP_STREAMABLE_SERVER_HERE",
"FIRECRAWL_NO_SEARCH_FEEDBACK": "YOUR_FIRECRAWL_NO_SEARCH_FEEDBACK_HERE",
"FIRECRAWL_NO_ENDPOINT_FEEDBACK": "YOUR_FIRECRAWL_NO_ENDPOINT_FEEDBACK_HERE"
}
}
}
}
MCP Ticket Demo
{
"mcpServers": {
"mcp-ticket-demo": {
"command": "npx",
"args": [
"-y",
"mcp-ticket-demo"
]
}
}
}
Frequently asked questions
Firecrawl MCP Server is categorized under Search & Data Extraction and uses a local stdio subprocess. MCP Ticket Demo belongs to Support & Service Management and uses a local stdio subprocess. Pick Firecrawl MCP Server for search & data extraction work and MCP Ticket Demo for support & service management.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Firecrawl MCP Server is listed as freemium — a free tier with paid plans. Auth: api key required. MCP Ticket Demo has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add firecrawl-firecrawl-mcp-server and mcp-ticket-demo as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Firecrawl MCP Server has a quality signal of 90/100 (Excellent) with 13 views, 0 installs and 7,642 GitHub stars. MCP Ticket Demo has 63/100 (Good) with 1 views, 0 installs and 1 GitHub stars.