firecrawl-mcp 3.24.0 → 3.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +222 -19
- package/dist/index.js +1328 -563
- package/dist/origin.js +38 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -19,12 +19,26 @@ A Model Context Protocol (MCP) server that brings [Firecrawl](https://github.com
|
|
|
19
19
|
- Scrape any URL into clean, structured data
|
|
20
20
|
- Interact with pages — click, navigate, and operate
|
|
21
21
|
- Deep research with autonomous agent
|
|
22
|
+
- Check current and historical Firecrawl credit usage
|
|
22
23
|
- Automatic retries and rate limiting
|
|
23
24
|
- Cloud and self-hosted support
|
|
24
25
|
- SSE support
|
|
25
26
|
|
|
26
27
|
> Play around with [our MCP Server on MCP.so's playground](https://mcp.so/playground?server=firecrawl-mcp-server) or on [Klavis AI](https://www.klavis.ai/mcp-servers).
|
|
27
28
|
|
|
29
|
+
## When to Use This Server
|
|
30
|
+
|
|
31
|
+
- Use `firecrawl_scrape` when you have a known URL and want its content as markdown or as JSON matching a schema you supply.
|
|
32
|
+
- Use `firecrawl_map` when you need to discover URLs on a site without fetching their content.
|
|
33
|
+
- Use `firecrawl_crawl` when you need content from many pages under a site; set `limit`, `includePaths`/`excludePaths`, or `maxDiscoveryDepth` to bound it.
|
|
34
|
+
- Use `firecrawl_search` when you're starting from a query rather than a URL and want ranked web results; add `scrapeOptions` if you also want page content fetched in the same call (the search-only endpoint never fetches content).
|
|
35
|
+
- Use `firecrawl_interact` when a page needs a click, type, or navigate action before you can read it — pass a `url` for a fresh page or a `scrapeId` to continue on one you already scraped.
|
|
36
|
+
- Use the `firecrawl_monitor_*` tools when the same page needs to be checked on a recurring schedule with diffs and change alerts, rather than fetched once.
|
|
37
|
+
- Use `firecrawl_credit_usage` to check credits left or monthly consumption, optionally broken down by API key.
|
|
38
|
+
- Consider something else when you need to hold a browser session open across many of your own steps with your own retry and termination logic: each `firecrawl_interact` call runs one `prompt` or `code` turn to completion and returns control — the session can persist across calls via `scrapeId` and ends with `firecrawl_interact_stop`, but you cannot drive it interactively step-by-step from the client side within a single call.
|
|
39
|
+
|
|
40
|
+
This server lists 26 tools when the full profile registers with default settings (feedback tools included, not running in local-keyless mode). Setting `FIRECRAWL_NO_SEARCH_FEEDBACK=1` and/or `FIRECRAWL_NO_ENDPOINT_FEEDBACK=1` removes the corresponding feedback tools and reduces this count, as does local keyless startup. For clients with a tool-slot limit: the hosted keyless endpoint (`https://mcp.firecrawl.dev/v2/mcp`, no API key) exposes only 3 — `firecrawl_scrape`, `firecrawl_search`, `firecrawl_parse` — and the dedicated [search-only endpoint](#search-only-endpoint) (`https://mcp.firecrawl.dev/v2/mcp-search`) exposes a fixed 6 read-only tools.
|
|
41
|
+
|
|
28
42
|
## Installation
|
|
29
43
|
|
|
30
44
|
### Hosted MCP (keyless free tier)
|
|
@@ -67,7 +81,7 @@ A read-only, search-only surface is also hosted at:
|
|
|
67
81
|
https://mcp.firecrawl.dev/v2/mcp-search
|
|
68
82
|
```
|
|
69
83
|
|
|
70
|
-
It exposes a fixed set of six read-only tools: `firecrawl_search` and the
|
|
84
|
+
It exposes a fixed set of six read-only tools: `firecrawl_search`, `firecrawl_developer_search`, and the four `firecrawl_research_*` tools. It performs no page-content fetching and has its own OAuth identity; the full endpoint above is unchanged. It is the connector listed in Anthropic's Claude directory, so its tool set is a reviewed contract rather than a profile to tune. See [docs/search-profile.md](docs/search-profile.md) for the full contract and what a change to it involves.
|
|
71
85
|
|
|
72
86
|
### Running with npx
|
|
73
87
|
|
|
@@ -292,24 +306,26 @@ Use this guide to select the right tool for your task:
|
|
|
292
306
|
- **If you want to search the web for info:** use **search**
|
|
293
307
|
- **If you have a programming question** (a library, an API contract, an error message, a known bug): use **developer search**
|
|
294
308
|
- **If you need scientific papers** (biomedical, life-science, clinical, or arXiv literature): use **research tools** — they search paper abstracts and full text. `search` with `categories: ["research"]` is a different thing: a website filter over ordinary web results.
|
|
295
|
-
- **If you need
|
|
309
|
+
- **If you need multi-source research that returns structured data, do not know the URLs, or the answer spans several sites** (an entity plus its fields, a list, a dataset): use **agent**
|
|
296
310
|
- **If you want to analyze a whole site or section:** use **crawl** (with limits!)
|
|
297
311
|
- **If you need interactive browser automation** (click, type, navigate): use **interact** with a URL for a fresh page, or **scrape** + **interact** when you already scraped the page or need tighter scrape control
|
|
312
|
+
- **If you need data from a catalogued provider** (Alexandria): search with `sources: ["alexandria"]`, inspect the selected contract with **find_tools**, and execute it with **scrape** `alexandria`
|
|
298
313
|
|
|
299
314
|
### Quick Reference Table
|
|
300
315
|
|
|
301
|
-
| Tool
|
|
302
|
-
|
|
|
303
|
-
| scrape
|
|
304
|
-
| interact
|
|
305
|
-
| map
|
|
306
|
-
| crawl
|
|
307
|
-
| parse
|
|
308
|
-
| search
|
|
309
|
-
|
|
|
310
|
-
|
|
|
311
|
-
|
|
|
312
|
-
|
|
|
316
|
+
| Tool | Best for | Returns |
|
|
317
|
+
| --------- | ---------------------------------------------- | ------------------------------------------------ |
|
|
318
|
+
| scrape | Single page content | JSON (preferred) or markdown |
|
|
319
|
+
| interact | Interact with a URL or scraped page | Execution result + scrapeId for URL mode |
|
|
320
|
+
| map | Discovering URLs on a site | URL[] |
|
|
321
|
+
| crawl | Multi-page extraction (with limits) | final crawl status/data after internal polling |
|
|
322
|
+
| parse | Files and hosted upload refs | markdown, JSON, or document output |
|
|
323
|
+
| search | Web search for info | results[] |
|
|
324
|
+
| find_tools | Alexandria catalogue browsing and URL lookup | providers, tool contracts and nextTool navigation |
|
|
325
|
+
| developer | Programming questions over developer sources | results[] with passages |
|
|
326
|
+
| agent | Multi-source research, unknown or many sites | JSON (structured data) |
|
|
327
|
+
| monitor | Recurring page checks | monitor/check metadata and diffs |
|
|
328
|
+
| research | Paper and GitHub repository research | research results and repo matches |
|
|
313
329
|
|
|
314
330
|
### Format Selection Guide
|
|
315
331
|
|
|
@@ -482,6 +498,8 @@ Search the web and optionally extract content from search results.
|
|
|
482
498
|
|
|
483
499
|
Set `highlights` to `true` to request query-relevant highlights or `false` to keep the original search snippets. Omit it to use the API's default behavior.
|
|
484
500
|
|
|
501
|
+
Add `"sources": ["alexandria"]` for semantic tool discovery in `data.tools`, optionally mixed with web/news/images. A query is required. Use `firecrawl_find_tools` on the full MCP surface for contextual lookup and progressive disclosure; see [Alexandria Tools](#15-alexandria-tools).
|
|
502
|
+
|
|
485
503
|
For scientific papers, see [Research Tools](#12-research-tools-firecrawl_research_): they search paper abstracts and full text, while `categories: ["research"]` here filters ordinary web results to research-affiliated websites.
|
|
486
504
|
|
|
487
505
|
**Returns:**
|
|
@@ -611,7 +629,6 @@ Starts a crawl job, polls until it reaches a terminal state, and returns the fin
|
|
|
611
629
|
}
|
|
612
630
|
```
|
|
613
631
|
|
|
614
|
-
|
|
615
632
|
**Returns:**
|
|
616
633
|
|
|
617
634
|
- Final crawl status and data after internal polling, including `id`, `status`, `completed`, `total`, `creditsUsed`, `expiresAt`, `next`, and `data`. Use the returned `id` with `firecrawl_check_crawl_status` if you need to re-check the job later.
|
|
@@ -685,11 +702,11 @@ For structured data from a known page, call `firecrawl_scrape` once per URL with
|
|
|
685
702
|
}
|
|
686
703
|
```
|
|
687
704
|
|
|
688
|
-
|
|
705
|
+
When the URLs are not known or the data spans several sites, use `firecrawl_agent` for multi-source research.
|
|
689
706
|
|
|
690
707
|
### 8. Agent Tool (`firecrawl_agent`)
|
|
691
708
|
|
|
692
|
-
Autonomous web research agent
|
|
709
|
+
Autonomous web research agent that returns structured data when you do not know the URLs or the answer spans several sites. Describe the fields you need, optionally pass a JSON schema and seed URLs, and the agent searches, navigates, reads pages, and returns JSON assembled across sources. Use it for an entity plus its fields, for lists and datasets, and for pages that need navigation to reach the data. For one known URL use `firecrawl_scrape` with JSON format instead.
|
|
693
710
|
|
|
694
711
|
**How it works:**
|
|
695
712
|
|
|
@@ -840,7 +857,6 @@ Search and inspect papers and GitHub repositories through the research MCP tools
|
|
|
840
857
|
- `firecrawl_research_inspect_paper`: retrieve canonical metadata for one paper ID (arXiv, PMC, PMID, or DOI).
|
|
841
858
|
- `firecrawl_research_related_papers`: expand from one or more anchor papers through the citation graph.
|
|
842
859
|
- `firecrawl_research_read_paper`: read full-text passages from a specific paper.
|
|
843
|
-
- `firecrawl_research_search_github`: search indexed public GitHub issue, pull-request, and README content.
|
|
844
860
|
|
|
845
861
|
**Best for:** Literature review, paper lookup, and repository discovery workflows where the agent needs a focused research surface instead of general web scraping.
|
|
846
862
|
|
|
@@ -940,7 +956,131 @@ Search an index built for coding agents. The index covers GitHub issues, merged
|
|
|
940
956
|
|
|
941
957
|
**Returns:** Ranked results. Each result carries an ID, a source type (`issue`, `pull_request`, `readme`, or `doc`), a URL, a title, and the matched passages in markdown.
|
|
942
958
|
|
|
943
|
-
`firecrawl_search` with `categories: ["developer"]` searches the same index beside the web results. Use this tool instead when you want the passages
|
|
959
|
+
`firecrawl_search` with `categories: ["developer"]` searches the same index beside the web results. Use this tool instead when you want the matched passages, the `skills` filter, or no web results in the response. The search-only endpoint exposes both tools, and the same choice applies there.
|
|
960
|
+
|
|
961
|
+
### 15. Alexandria Tools
|
|
962
|
+
|
|
963
|
+
Firecrawl Alexandria is a catalogue of data providers reachable through the Firecrawl API with a Firecrawl API key on a team with Alexandria access. Keyless sessions (hosted or local) get `Alexandria requires an API key on a team with Alexandria access`; Alexandria discovery tools are not listed for hosted keyless sessions.
|
|
964
|
+
|
|
965
|
+
**Semantic discovery (`firecrawl_search`):**
|
|
966
|
+
|
|
967
|
+
```json
|
|
968
|
+
{
|
|
969
|
+
"name": "firecrawl_search",
|
|
970
|
+
"arguments": {
|
|
971
|
+
"query": "podcast conversations about AI agents",
|
|
972
|
+
"sources": ["web", "alexandria"],
|
|
973
|
+
"domainTools": true,
|
|
974
|
+
"limit": 2
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
`data.tools` defaults to compact suggestions with provider, capability, and
|
|
980
|
+
description. Set `toolDetail: "summary"` for metadata and navigation, or
|
|
981
|
+
`toolDetail: "full"` for contracts including inputs, response fields and examples. `domainTools: true` adds contextual matches to
|
|
982
|
+
query mentions and result URLs in that same array. Check `warning` for unavailable
|
|
983
|
+
discovery. Search requires a query and does not accept catalogue traversal filters.
|
|
984
|
+
This discovery works on both the full and search-only MCP surfaces.
|
|
985
|
+
|
|
986
|
+
**Progressive disclosure (`firecrawl_find_tools`, full MCP surface):**
|
|
987
|
+
|
|
988
|
+
```json
|
|
989
|
+
{
|
|
990
|
+
"name": "firecrawl_find_tools",
|
|
991
|
+
"arguments": {
|
|
992
|
+
"providers": ["particle"],
|
|
993
|
+
"capabilities": ["podcasts/episodes/search"],
|
|
994
|
+
"expand": ["options", "response", "examples"],
|
|
995
|
+
"limit": 2
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
```
|
|
999
|
+
|
|
1000
|
+
Start with no arguments for categories, then progressively narrow the catalogue:
|
|
1001
|
+
|
|
1002
|
+
| Arguments | Result |
|
|
1003
|
+
| --- | --- |
|
|
1004
|
+
| `{}` | Categories and short descriptions |
|
|
1005
|
+
| `{"categories":["podcasts"]}` | Providers in that category |
|
|
1006
|
+
| `{"categories":["podcasts"],"providers":["particle"]}` | Compact tool names, descriptions, and prices |
|
|
1007
|
+
| `{"providers":["particle"],"capabilities":["podcasts/episodes/search"]}` | Complete selected inputs, constraints, response, and examples |
|
|
1008
|
+
|
|
1009
|
+
No group hop is required. Explicit `level` supports `categories`, `providers`,
|
|
1010
|
+
`groups`, or `tools`; explicit `expand` selects contract sections. `expand: []`
|
|
1011
|
+
keeps results compact even when selecting a capability. For broad full contracts,
|
|
1012
|
+
explicitly request `level: "tools"` and `expand: ["options", "response", "examples"]`.
|
|
1013
|
+
URLs provide contextual discovery without fetching the page.
|
|
1014
|
+
|
|
1015
|
+
Results are in `data.alexandria[0].data`. Follow an item's `nextTool` by calling
|
|
1016
|
+
its `name` with its `arguments`; the page's `nextTool` advances pagination.
|
|
1017
|
+
Existing `next` objects remain Alexandria discovery calls usable through
|
|
1018
|
+
`firecrawl_scrape`. Discovery costs zero credits and never executes the
|
|
1019
|
+
provider tools. Read the selected full contract before execution.
|
|
1020
|
+
|
|
1021
|
+
These controls require the matching Alexandria API deployment.
|
|
1022
|
+
|
|
1023
|
+
**Execute (`firecrawl_scrape` with `alexandria`):** pass `alexandria` instead of `url` (exactly one of the two; requestId and timeout may also be supplied). A single call or an array of up to ten calls is accepted.
|
|
1024
|
+
|
|
1025
|
+
```json
|
|
1026
|
+
{
|
|
1027
|
+
"name": "firecrawl_scrape",
|
|
1028
|
+
"arguments": {
|
|
1029
|
+
"alexandria": [
|
|
1030
|
+
{
|
|
1031
|
+
"provider": "fred",
|
|
1032
|
+
"capability": "series/observations",
|
|
1033
|
+
"options": { "series_id": "CPIAUCSL" }
|
|
1034
|
+
}
|
|
1035
|
+
]
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
**Returns:** `{ success, scrape_id, requestId, data: { alexandria: [...], creditsCost } }`. Each item is either a result (`provider`, `capability`, `creditsCost`, `data`, `records`, `upstreamStatus`) or an `error` with a `code`; the batch never fails as a whole for a provider error and `data.creditsCost` sums the successful items. Alexandria error bodies (403 without Alexandria access, and 402/409 billing statuses) are relayed in-band with their `code`.
|
|
1041
|
+
|
|
1042
|
+
Execution generates one `x-request-id` and returns it on success or failure. Retry
|
|
1043
|
+
the identical payload with that `requestId`; do not create a new ID after an
|
|
1044
|
+
uncertain outcome. Available credits are checked by the API.
|
|
1045
|
+
|
|
1046
|
+
An Alexandria provider whose terms the team has not accepted fails before anything runs with
|
|
1047
|
+
HTTP 403 and this body:
|
|
1048
|
+
|
|
1049
|
+
```json
|
|
1050
|
+
{
|
|
1051
|
+
"success": false,
|
|
1052
|
+
"code": "THIRD_PARTY_DATA_TERMS_REQUIRED",
|
|
1053
|
+
"error": "An organization admin must accept the benzinga provider's terms (version 2026-09-12-placeholder) before this request can run. Accept them at https://www.firecrawl.dev/app/alexandria/benzinga",
|
|
1054
|
+
"requiresAction": {
|
|
1055
|
+
"type": "accept_terms",
|
|
1056
|
+
"terms": "benzinga",
|
|
1057
|
+
"version": "2026-09-12-placeholder",
|
|
1058
|
+
"url": "https://www.firecrawl.dev/app/alexandria/benzinga"
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
```
|
|
1062
|
+
|
|
1063
|
+
The tool result relays it as an error with `structuredContent` carrying `code`,
|
|
1064
|
+
`status: 403`, `requestId`, the `requiresAction` object unchanged, and
|
|
1065
|
+
`next_actions` (`human_action_required` then `retry_same_request`). Accepting
|
|
1066
|
+
terms is a legal act. Use the returned `nextTool` call to read the agreement through `firecrawl_scrape`
|
|
1067
|
+
with `alexandria: [{provider: "firecrawl", capability: "terms/show", options: {provider: "<provider>"}}]`.
|
|
1068
|
+
Present it to the user and obtain explicit authorization to bind their organization
|
|
1069
|
+
before calling `firecrawl_scrape` with capability `terms/accept` under provider `firecrawl`.
|
|
1070
|
+
Its options are `provider`, the exact reviewed `version`
|
|
1071
|
+
and 64-character lowercase hexadecimal `digest`, and `confirmed: true`. A request
|
|
1072
|
+
for data is not consent. Authority or eligibility errors may require an organization
|
|
1073
|
+
admin to use `requiresAction.url`. No automatic acceptance or uncertain retries occur.
|
|
1074
|
+
Send terms calls separately from execution. These are nested capabilities, not top-level MCP tools.
|
|
1075
|
+
No credits are charged for the blocked retrieval. After confirmed acceptance, call the same
|
|
1076
|
+
tool again with the identical payload and `requestId`.
|
|
1077
|
+
|
|
1078
|
+
### 16. Credit Usage Tool
|
|
1079
|
+
|
|
1080
|
+
The tool requires an authenticated Firecrawl account and is read-only.
|
|
1081
|
+
|
|
1082
|
+
- `firecrawl_credit_usage` defaults to `{ "view": "current" }` and returns `remainingCredits`, `planCredits`, `billingPeriodStart`, and `billingPeriodEnd`. Remaining credits can exceed plan credits when the team has top-ups or grants.
|
|
1083
|
+
- Pass `{ "view": "historical" }` for calendar-month periods containing `startDate`, `endDate`, and `creditsUsed`. Passing `{ "byApiKey": true }` also selects the historical view and splits periods by API key; each row then includes `apiKey`. Do not combine `byApiKey` with `{ "view": "current" }`. The latest period's `endDate` can be null.
|
|
944
1084
|
|
|
945
1085
|
## Logging System
|
|
946
1086
|
|
|
@@ -1010,3 +1150,66 @@ Thanks to MCP.so and Klavis AI for hosting and [@gstarwd](https://github.com/gst
|
|
|
1010
1150
|
## License
|
|
1011
1151
|
|
|
1012
1152
|
MIT License - see LICENSE file for details
|
|
1153
|
+
|
|
1154
|
+
### Structured data and large results
|
|
1155
|
+
|
|
1156
|
+
Authenticated search defaults to web results, semantic Alexandria tools, and domain matches. Start with the actual question. Use `firecrawl_find_tools` for direct semantic tool lookup, selected contracts, or progressive browsing: categories → providers → compact tools → selected contract. Execute tools through `firecrawl_scrape`; ordinary URL scraping and search never automatically execute provider tools.
|
|
1157
|
+
|
|
1158
|
+
For selected contracts, prefer `expand: ["options", "response"]` and request examples only if the input shape is unclear. Inspect related capabilities together and reuse the returned contracts.
|
|
1159
|
+
|
|
1160
|
+
For a potentially large workflow result, supply and preserve a top-level `requestId` before execution. That ID remains available even if the client rejects the response. Regular URL scrapes use the returned scrape ID instead.
|
|
1161
|
+
|
|
1162
|
+
For a large retained workflow or regular scrape result, call `firecrawl_scrape` with:
|
|
1163
|
+
|
|
1164
|
+
```json
|
|
1165
|
+
{
|
|
1166
|
+
"alexandria": {
|
|
1167
|
+
"provider": "firecrawl",
|
|
1168
|
+
"capability": "bash",
|
|
1169
|
+
"options": {
|
|
1170
|
+
"requestId": "<source-request-or-scrape-id>",
|
|
1171
|
+
"command": "ls -lh"
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
```
|
|
1176
|
+
|
|
1177
|
+
Read `stdout`, `stderr`, `exitCode`, and `workspaceId` in `data.alexandria[0].data`. Continue with `options: {workspaceId, command}` to inspect `response.json` using `jq`, or `document.md` using bounded text commands for regular scrapes. Keep output selective. Source loading must be a standalone call; its nested source ID differs from the top-level execution request ID. Workspaces expire after five idle minutes, and not every result is retained (including ZDR and API-provider workflow payloads). Search IDs are not supported.
|
|
1178
|
+
|
|
1179
|
+
For workflow sources, `response.json` preserves the API envelope: select `.data.alexandria[].data`, then the selected contract’s `response.key` when nonempty. Combine related counts and projections in one Bash command when that shape is known, rather than repeatedly inspecting keys.
|
|
1180
|
+
|
|
1181
|
+
Successful Alexandria execution responses above 20,000 estimated tokens (serialized UTF-8 bytes divided by four) return a small handoff after remote Bash confirms the complete batch is accessible. Follow `nextTool` to inspect the retained data. This adds one Bash call and starts a workspace with a five-minute idle TTL. The full payload is preserved. If confirmation fails, the original response stays inline. Search, ordinary URL scrape, error responses and Firecrawl utility calls are unchanged. This delivery budget does not measure the client’s remaining context; no process-local result cache is added. When local filesystem tools are available, saving CLI output and reading selected sections is another option.
|
|
1182
|
+
|
|
1183
|
+
The CLI discovery sequence maps to these MCP calls:
|
|
1184
|
+
|
|
1185
|
+
| Intent | Tool | Arguments |
|
|
1186
|
+
| --- | --- | --- |
|
|
1187
|
+
| Web + semantic + domain tools | `firecrawl_search` | `{"query":"<user question>"}` |
|
|
1188
|
+
| Semantic tools only | `firecrawl_search` | `{"query":"<user question>","sources":["alexandria"]}` |
|
|
1189
|
+
| Categories | `firecrawl_find_tools` | `{}` |
|
|
1190
|
+
| Providers in a category | `firecrawl_find_tools` | `{"categories":["<category-id>"]}` |
|
|
1191
|
+
| Compact provider tools | `firecrawl_find_tools` | `{"providers":["<provider-id>"]}` |
|
|
1192
|
+
| Selected contract | `firecrawl_find_tools` | `{"providers":["<provider-id>"],"capabilities":["<capability-id>"]}` |
|
|
1193
|
+
| Execute | `firecrawl_scrape` | `{"alexandria":{"provider":"<provider-id>","capability":"<capability-id>","options":{"<required-field>":"<value>"}}}` |
|
|
1194
|
+
|
|
1195
|
+
Use the full MCP surface for Find Tools and execution; the dedicated search-only surface does not expose them. Reuse a complete contract from search when present rather than making another discovery call. Follow returned `nextTool` navigation only when more results are needed.
|
|
1196
|
+
|
|
1197
|
+
### Alexandria session feedback
|
|
1198
|
+
|
|
1199
|
+
Use the existing `firecrawl_feedback` tool with `endpoint: "alexandria"`:
|
|
1200
|
+
|
|
1201
|
+
```json
|
|
1202
|
+
{
|
|
1203
|
+
"endpoint": "alexandria",
|
|
1204
|
+
"rating": "partial",
|
|
1205
|
+
"requestedWebsite": {
|
|
1206
|
+
"url": "https://example.com",
|
|
1207
|
+
"requestedFunctionality": "Find records and download their attachments"
|
|
1208
|
+
},
|
|
1209
|
+
"rationale": "Found summaries but could not retrieve attachments"
|
|
1210
|
+
}
|
|
1211
|
+
```
|
|
1212
|
+
|
|
1213
|
+
This uses authenticated `POST /v2/feedback`, without a job ID, job-age deadline, or credit refund. Optional `providerFeedback` and `capabilityFeedback` arrays describe coverage gaps and execution issues; the tool schema lists supported issue values. A `new_capability_request` requires `requestedFunctionality`; `missing_capability` (the provider exists but lacks the capability) does not. Existing feedback opt-out and authentication controls apply.
|
|
1214
|
+
|
|
1215
|
+
Agents are pointed at this loop from three places: the server instructions, the `firecrawl_scrape` and `firecrawl_find_tools` descriptions, and a `feedbackTool` object attached to every Alexandria execution and discovery result (with the tool name and a skeleton of the arguments). The hint is omitted for Firecrawl-internal calls such as `bash` and when `firecrawl_feedback` is not registered (`FIRECRAWL_NO_ENDPOINT_FEEDBACK` or keyless startup).
|