firecrawl-mcp 3.23.9 → 3.25.0
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 +233 -25
- package/dist/index.js +1301 -563
- package/dist/origin.js +38 -0
- package/package.json +11 -5
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
|
|
|
@@ -291,24 +305,27 @@ Use this guide to select the right tool for your task:
|
|
|
291
305
|
- **If you need to discover URLs on a site:** use **map**
|
|
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
|
-
- **If you need
|
|
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.
|
|
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**
|
|
295
310
|
- **If you want to analyze a whole site or section:** use **crawl** (with limits!)
|
|
296
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`
|
|
297
313
|
|
|
298
314
|
### Quick Reference Table
|
|
299
315
|
|
|
300
|
-
| Tool
|
|
301
|
-
|
|
|
302
|
-
| scrape
|
|
303
|
-
| interact
|
|
304
|
-
| map
|
|
305
|
-
| crawl
|
|
306
|
-
| parse
|
|
307
|
-
| search
|
|
308
|
-
|
|
|
309
|
-
|
|
|
310
|
-
|
|
|
311
|
-
|
|
|
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 |
|
|
312
329
|
|
|
313
330
|
### Format Selection Guide
|
|
314
331
|
|
|
@@ -465,7 +482,7 @@ Search the web and optionally extract content from search results.
|
|
|
465
482
|
{
|
|
466
483
|
"name": "firecrawl_search",
|
|
467
484
|
"arguments": {
|
|
468
|
-
"query": "
|
|
485
|
+
"query": "remote work stipend policies at tech companies",
|
|
469
486
|
"highlights": true,
|
|
470
487
|
"limit": 5,
|
|
471
488
|
"lang": "en",
|
|
@@ -481,13 +498,17 @@ Search the web and optionally extract content from search results.
|
|
|
481
498
|
|
|
482
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.
|
|
483
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
|
+
|
|
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.
|
|
504
|
+
|
|
484
505
|
**Returns:**
|
|
485
506
|
|
|
486
507
|
- Array of search results (with optional scraped content), plus an `id` field. Pass that `id` to `firecrawl_search_feedback` after you've used the results to refund 1 credit (search costs 2) and improve search quality.
|
|
487
508
|
|
|
488
509
|
**Prompt Example:**
|
|
489
510
|
|
|
490
|
-
> "
|
|
511
|
+
> "Compare remote work stipend policies across tech companies."
|
|
491
512
|
|
|
492
513
|
### 3b. Search Feedback Tool (`firecrawl_search_feedback`)
|
|
493
514
|
|
|
@@ -608,7 +629,6 @@ Starts a crawl job, polls until it reaches a terminal state, and returns the fin
|
|
|
608
629
|
}
|
|
609
630
|
```
|
|
610
631
|
|
|
611
|
-
|
|
612
632
|
**Returns:**
|
|
613
633
|
|
|
614
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.
|
|
@@ -682,11 +702,11 @@ For structured data from a known page, call `firecrawl_scrape` once per URL with
|
|
|
682
702
|
}
|
|
683
703
|
```
|
|
684
704
|
|
|
685
|
-
|
|
705
|
+
When the URLs are not known or the data spans several sites, use `firecrawl_agent` for multi-source research.
|
|
686
706
|
|
|
687
707
|
### 8. Agent Tool (`firecrawl_agent`)
|
|
688
708
|
|
|
689
|
-
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.
|
|
690
710
|
|
|
691
711
|
**How it works:**
|
|
692
712
|
|
|
@@ -829,16 +849,19 @@ Stop an interact session for a scraped page when you are done interacting.
|
|
|
829
849
|
|
|
830
850
|
Search and inspect papers and GitHub repositories through the research MCP tools.
|
|
831
851
|
|
|
852
|
+
**Covers:** paper abstracts and full text across biomedical, life-science, and clinical literature (PubMed, bioRxiv, medRxiv) alongside arXiv and other scientific sources.
|
|
853
|
+
|
|
832
854
|
**Available research tools:**
|
|
833
855
|
|
|
834
|
-
- `firecrawl_research_search_papers`: search
|
|
835
|
-
- `firecrawl_research_inspect_paper`:
|
|
836
|
-
- `firecrawl_research_related_papers`:
|
|
837
|
-
- `firecrawl_research_read_paper`: read paper
|
|
838
|
-
- `firecrawl_research_search_github`: search GitHub repositories.
|
|
856
|
+
- `firecrawl_research_search_papers`: search paper metadata and abstracts with a natural-language query, with optional author, category, and date filters.
|
|
857
|
+
- `firecrawl_research_inspect_paper`: retrieve canonical metadata for one paper ID (arXiv, PMC, PMID, or DOI).
|
|
858
|
+
- `firecrawl_research_related_papers`: expand from one or more anchor papers through the citation graph.
|
|
859
|
+
- `firecrawl_research_read_paper`: read full-text passages from a specific paper.
|
|
839
860
|
|
|
840
861
|
**Best for:** Literature review, paper lookup, and repository discovery workflows where the agent needs a focused research surface instead of general web scraping.
|
|
841
862
|
|
|
863
|
+
`firecrawl_search` with `categories: ["research"]` is a different surface: it filters ordinary web results to research-affiliated websites and returns page snippets, not paper records. Use these tools when the question is about the literature itself, and pass several distinct framings of the same question — they surface different papers than a single query does.
|
|
864
|
+
|
|
842
865
|
### 13. Monitor Tools (`firecrawl_monitor_*`)
|
|
843
866
|
|
|
844
867
|
Create and manage recurring page monitors. Monitors run scheduled scrapes or crawls, diff each result against the last retained snapshot, and can notify by webhook or email.
|
|
@@ -933,7 +956,131 @@ Search an index built for coding agents. The index covers GitHub issues, merged
|
|
|
933
956
|
|
|
934
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.
|
|
935
958
|
|
|
936
|
-
`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.
|
|
937
1084
|
|
|
938
1085
|
## Logging System
|
|
939
1086
|
|
|
@@ -1003,3 +1150,64 @@ Thanks to MCP.so and Klavis AI for hosting and [@gstarwd](https://github.com/gst
|
|
|
1003
1150
|
## License
|
|
1004
1151
|
|
|
1005
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.
|