firecrawl-mcp 3.27.2 → 3.27.3
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 +17 -18
- package/dist/index.js +68 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -419,6 +419,7 @@ Scrape content from a single URL with advanced options.
|
|
|
419
419
|
|
|
420
420
|
**Branding format:** Extracts comprehensive brand identity (colors, fonts, typography, spacing, logo, UI components) for design analysis or style replication.
|
|
421
421
|
**Privacy:** Set `redactPII: true` to return content with personally identifiable information redacted.
|
|
422
|
+
**Hosted server:** On the hosted server (`CLOUD_SERVICE=true`) scrape is read-only. It takes no browser `actions` and cannot accept provider terms. A named `profile` loads saved browser state without saving changes to it. An organization admin accepts terms in the dashboard.
|
|
422
423
|
|
|
423
424
|
**Returns:**
|
|
424
425
|
|
|
@@ -747,17 +748,17 @@ The agent performs web searches, follows links, reads pages, and gathers data au
|
|
|
747
748
|
- `enabled`, `toolkits` (up to 5 provider slugs), `maxCalls` (1 to 30), `requireApproval` (paid calls end the turn with a `pendingApproval`; needs `mode: "chat"` on the same call, even on a follow-up)
|
|
748
749
|
- `onTermsRequired`: what to do when an Alexandria provider the agent would use needs data terms your team has not accepted. Gated providers are never called in any mode. Omitted on a follow-up keeps the previous turn's value.
|
|
749
750
|
- `"skip"` (default): answer with accepted providers only. `exchange.skippedProviders` on the status result lists the gated providers that would have helped.
|
|
750
|
-
- `"ask"`: the same, plus a terms `pendingApproval` and `exchange.requiresAction` with the
|
|
751
|
+
- `"ask"`: the same, plus a terms `pendingApproval` and `exchange.requiresAction` with the approval ID and provider requirements. Read terms with `terms/show`; an organization admin accepts them in the Firecrawl dashboard.
|
|
751
752
|
- `approve`: `{ approvalId, callIds?, always? }` answers yes to the `pendingApproval` the previous turn ended on. `callIds` and `always` apply to paid-call approvals only.
|
|
752
753
|
- `decline`: `{ approvalId }` answers no. A declined terms offer keeps those providers out of the rest of the thread.
|
|
753
754
|
- `approve` and `decline` need `threadId`, and only one of them can be sent.
|
|
754
755
|
|
|
755
|
-
**Provider terms (ask mode):** there is no auto-accept mode. When a turn ends on a terms offer, the status result carries `pendingApproval` (`kind: "terms"`) and `exchange.requiresAction` with the `approvalId` and
|
|
756
|
+
**Provider terms (ask mode):** there is no auto-accept mode. When a turn ends on a terms offer, the status result carries `pendingApproval` (`kind: "terms"`) and `exchange.requiresAction` with the `approvalId` and provider requirements. Any `terms/accept` descriptor in that API payload is unavailable through MCP. To use the provider:
|
|
756
757
|
|
|
757
758
|
1. Show the user the terms (`terms/show` through `firecrawl_scrape` with `alexandria`).
|
|
758
|
-
2.
|
|
759
|
-
3.
|
|
760
|
-
4. Continue the same thread: call `firecrawl_agent` with the same `threadId` and `exchange.approve: { "approvalId": "..." }`.
|
|
759
|
+
2. Direct an organization admin to accept the terms at the provider's URL, or [data sources settings](https://www.firecrawl.dev/app/settings?tab=data-sources). A data request is not consent.
|
|
760
|
+
3. Wait for the admin to confirm acceptance in the dashboard.
|
|
761
|
+
4. Continue the same thread: call `firecrawl_agent` with the same `threadId` and `exchange.approve: { "approvalId": "..." }`. This resumes research and does not accept terms.
|
|
761
762
|
|
|
762
763
|
If the user says no, call `firecrawl_agent` with the same `threadId` and `exchange.decline: { "approvalId": "..." }` instead.
|
|
763
764
|
|
|
@@ -818,13 +819,13 @@ Then poll with `firecrawl_agent_status` using the returned job ID.
|
|
|
818
819
|
}
|
|
819
820
|
```
|
|
820
821
|
|
|
821
|
-
**Usage Example (continue the thread after
|
|
822
|
+
**Usage Example (continue the thread after an admin confirmed dashboard acceptance):**
|
|
822
823
|
|
|
823
824
|
```json
|
|
824
825
|
{
|
|
825
826
|
"name": "firecrawl_agent",
|
|
826
827
|
"arguments": {
|
|
827
|
-
"prompt": "
|
|
828
|
+
"prompt": "The admin confirmed acceptance of the Apollo terms in the dashboard. Continue.",
|
|
828
829
|
"threadId": "0199a1b2-0000-7000-8000-000000000031",
|
|
829
830
|
"exchange": { "approve": { "approvalId": "0199a1b2-0000-7000-8000-000000000033" } }
|
|
830
831
|
}
|
|
@@ -1113,16 +1114,14 @@ HTTP 403 and this body:
|
|
|
1113
1114
|
The tool result relays it as an error with `structuredContent` carrying `code`,
|
|
1114
1115
|
`status: 403`, `requestId`, the `requiresAction` object unchanged, and
|
|
1115
1116
|
`next_actions` (`human_action_required` then `retry_same_request`). Accepting
|
|
1116
|
-
terms is a legal act
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
for data is not consent
|
|
1123
|
-
|
|
1124
|
-
Send terms calls separately from execution. These are nested capabilities, not top-level MCP tools.
|
|
1125
|
-
No credits are charged for the blocked retrieval. After confirmed acceptance, call the same
|
|
1117
|
+
terms is a legal act, so an organization admin accepts them in the Firecrawl dashboard, not
|
|
1118
|
+
through MCP. Use the returned `nextTool` call to read the agreement through `firecrawl_scrape`
|
|
1119
|
+
with `alexandria: [{provider: "firecrawl", capability: "terms/show", options: {provider: "<provider>"}}]`,
|
|
1120
|
+
sent separately from provider execution, and present it to the user. An organization admin then
|
|
1121
|
+
accepts it at `requiresAction.url`, or at https://www.firecrawl.dev/app/settings?tab=data-sources.
|
|
1122
|
+
`firecrawl_scrape` refuses every other `terms/*` capability, so it makes no account changes. A request
|
|
1123
|
+
for data is not consent, and no automatic acceptance or uncertain retries occur.
|
|
1124
|
+
No credits are charged for the blocked retrieval. After the admin confirms acceptance, call the same
|
|
1126
1125
|
tool again with the identical payload and `requestId`.
|
|
1127
1126
|
|
|
1128
1127
|
### 16. Credit Usage Tool
|
|
@@ -1288,7 +1287,7 @@ The existing `firecrawl_feedback` tool accepts `endpoint: "alexandria"`:
|
|
|
1288
1287
|
}
|
|
1289
1288
|
```
|
|
1290
1289
|
|
|
1291
|
-
`objective` is the underlying goal of the session: what the agent or its user was ultimately trying to accomplish, beyond the single website in `requestedWebsite`.
|
|
1290
|
+
The optional `objective` is the underlying goal of the session: what the agent or its user was ultimately trying to accomplish, beyond the single website in `requestedWebsite`.
|
|
1292
1291
|
|
|
1293
1292
|
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.
|
|
1294
1293
|
|
package/dist/index.js
CHANGED
|
@@ -76,8 +76,7 @@ var alexandriaSessionFeedbackSchema = z.strictObject({
|
|
|
76
76
|
rating: z.enum(["good", "bad", "partial"]),
|
|
77
77
|
...alexandriaFeedbackFields,
|
|
78
78
|
requestedWebsite: alexandriaFeedbackFields.requestedWebsite.unwrap(),
|
|
79
|
-
rationale: detail
|
|
80
|
-
objective: detail
|
|
79
|
+
rationale: detail
|
|
81
80
|
});
|
|
82
81
|
|
|
83
82
|
// src/index.ts
|
|
@@ -2271,6 +2270,10 @@ var agentStatusOutputSchema = z4.object({
|
|
|
2271
2270
|
status: str("Job state: `processing` is non-terminal; `completed` and `failed` are terminal."),
|
|
2272
2271
|
progress: unknown("Progress information for a running job."),
|
|
2273
2272
|
data: unknown("Research result, present once the job has completed."),
|
|
2273
|
+
partial: unknown("Incomplete best-effort result of a `failed` run; never a completed answer."),
|
|
2274
|
+
partialSchemaValid: bool("Whether `partial` matches the requested schema, when one was supplied."),
|
|
2275
|
+
stopReason: str("Why a `failed` run stopped early; `credit_limit_reached` means it hit maxCredits."),
|
|
2276
|
+
notice: str("Set when the run stopped at its credit limit: what that means and how to continue."),
|
|
2274
2277
|
creditsUsed: num("Credits the job consumed."),
|
|
2275
2278
|
sources: unknown("Sources the agent read."),
|
|
2276
2279
|
expiresAt: str("When the job result expires and can no longer be read."),
|
|
@@ -2281,10 +2284,10 @@ var agentStatusOutputSchema = z4.object({
|
|
|
2281
2284
|
message: unknown("The agent's reply; in chat mode, the short answer to a follow-up."),
|
|
2282
2285
|
suggestions: unknown("Follow-ups the agent offers; send one as the prompt of the next turn with this threadId."),
|
|
2283
2286
|
exchange: unknown(
|
|
2284
|
-
"What the job did with Alexandria providers: onTermsRequired, paidCalls, creditsUsed, skippedProviders (gated providers that would have helped), and requiresAction (approvalId
|
|
2287
|
+
"What the job did with Alexandria providers: onTermsRequired, paidCalls, creditsUsed, skippedProviders (gated providers that would have helped), and requiresAction (approvalId and provider requirements). Read terms with terms/show. Ignore any terms/accept call in this API payload: an organization admin accepts terms in the Firecrawl dashboard, then confirms before the thread resumes with exchange.approve: {approvalId}."
|
|
2285
2288
|
),
|
|
2286
2289
|
pendingApproval: unknown(
|
|
2287
|
-
'Set when the job ended waiting on the caller. Answer it by calling firecrawl_agent with this threadId and exchange.approve or exchange.decline carrying its id. kind "terms" lists providers whose data terms need
|
|
2290
|
+
'Set when the job ended waiting on the caller. Answer it by calling firecrawl_agent with this threadId and exchange.approve or exchange.decline carrying its id. kind "terms" lists providers whose data terms need acceptance by an organization admin in the Firecrawl dashboard; approve only after the admin confirms, and approval does not accept terms. Otherwise calls lists paid calls waiting for approval.'
|
|
2288
2291
|
)
|
|
2289
2292
|
}).describe("Progress or final result of a research agent job.");
|
|
2290
2293
|
var interactOutputSchema = z4.object({
|
|
@@ -4155,6 +4158,8 @@ var searchDomainSchema = z10.string().trim().toLowerCase().min(1).max(253).regex
|
|
|
4155
4158
|
var searchToolBaseFields = {
|
|
4156
4159
|
toolDetail: z10.enum(["compact", "summary", "full"]).optional().describe("Compact by default. Compact returns only provider, capability and description; full includes contracts. Inspect selected compact tools with firecrawl_find_tools providers and capabilities."),
|
|
4157
4160
|
query: z10.string().min(1).describe("Query for web and semantic tool discovery. Operators include quoted phrases, `-term`, `site:host`, `inurl:term`, `intitle:term`, and `related:host`; the set is non-exhaustive. Catalogue browsing is available through firecrawl_find_tools."),
|
|
4161
|
+
objective: z10.string().trim().min(1).max(5e3).optional().describe("Optional broader goal for this search, if known. Avoid sensitive information."),
|
|
4162
|
+
clientModel: z10.string().trim().min(1).max(128).optional().describe("Optional model identifier, if known."),
|
|
4158
4163
|
domainTools: z10.boolean().optional().describe(
|
|
4159
4164
|
"Include domain-matched tools for result URLs. Defaults to true when Alexandria is combined with web, news or images; semantic-only search leaves domain matching off."
|
|
4160
4165
|
),
|
|
@@ -4198,6 +4203,15 @@ function assertExchangeCredential(session) {
|
|
|
4198
4203
|
throw new UserError(payload.message, payload);
|
|
4199
4204
|
}
|
|
4200
4205
|
var TERMS_REQUIRED_CODE = "THIRD_PARTY_DATA_TERMS_REQUIRED";
|
|
4206
|
+
var DATA_SOURCES_SETTINGS_URL = "https://www.firecrawl.dev/app/settings?tab=data-sources";
|
|
4207
|
+
function isTermsWrite(call) {
|
|
4208
|
+
const capability = call.capability.trim().toLowerCase();
|
|
4209
|
+
return call.provider.trim().toLowerCase() === "firecrawl" && capability.startsWith("terms/") && capability !== "terms/show";
|
|
4210
|
+
}
|
|
4211
|
+
function termsWriteError() {
|
|
4212
|
+
const message = `Provider terms are accepted in the Firecrawl dashboard, not through this connection. Read them with terms/show, then ask an organization admin to accept them at ${DATA_SOURCES_SETTINGS_URL}.`;
|
|
4213
|
+
return new UserError(message, { code: "invalid_option", status: 400, message });
|
|
4214
|
+
}
|
|
4201
4215
|
function termsRequiredAction(body) {
|
|
4202
4216
|
const data = body;
|
|
4203
4217
|
if (data?.code !== TERMS_REQUIRED_CODE) return void 0;
|
|
@@ -4218,8 +4232,8 @@ function termsRequiredError(action, context, hints) {
|
|
|
4218
4232
|
return new UserError(
|
|
4219
4233
|
`${message}
|
|
4220
4234
|
|
|
4221
|
-
1. Read the agreement with firecrawl_scrape using alexandria: {provider: "firecrawl", capability: "terms/show", options: {provider: "${action.terms}"}} and present it to the user.
|
|
4222
|
-
2. After
|
|
4235
|
+
1. Read the agreement with firecrawl_scrape using alexandria: {provider: "firecrawl", capability: "terms/show", options: {provider: "${action.terms}"}} and present it to the user. Send terms/show separately from provider execution. Terms are accepted in the Firecrawl dashboard, not through this connection: ask an organization admin to accept them at ${action.url}, or ${DATA_SOURCES_SETTINGS_URL} if that page is unavailable. Never infer acceptance from a data request.
|
|
4236
|
+
2. After the admin confirms, call ${context.tool} again with the identical payload${retryIdentity}. If the same terms error persists, stop and ask an organization admin to check access at ${DATA_SOURCES_SETTINGS_URL}.
|
|
4223
4237
|
|
|
4224
4238
|
Do not retry until acceptance is confirmed.`,
|
|
4225
4239
|
{
|
|
@@ -4281,7 +4295,7 @@ async function relayExchangeError(run, context) {
|
|
|
4281
4295
|
const disabledProvider = response.status === 403 ? context.providers?.find((provider) => message === `Access to ${provider} is disabled for this organization.`) : void 0;
|
|
4282
4296
|
if (disabledProvider) {
|
|
4283
4297
|
throw new UserError(
|
|
4284
|
-
`${message} Read the provider terms and status using nextTool and present them to the user. Never infer acceptance from a data request.
|
|
4298
|
+
`${message} Read the provider terms and status using nextTool and present them to the user. Never infer acceptance from a data request. Terms are accepted in the Firecrawl dashboard, not through this connection; acceptance may not restore disabled access, and an organization admin can review access at ${DATA_SOURCES_SETTINGS_URL}. Retry the original request only after access is restored.`,
|
|
4285
4299
|
{
|
|
4286
4300
|
code: typeof data?.code === "string" ? data.code : "exchange_error",
|
|
4287
4301
|
status: 403,
|
|
@@ -5321,8 +5335,9 @@ var scrapeTool = {
|
|
|
5321
5335
|
name: "firecrawl_scrape",
|
|
5322
5336
|
annotations: {
|
|
5323
5337
|
title: "Firecrawl scrape",
|
|
5324
|
-
|
|
5325
|
-
//
|
|
5338
|
+
// Hosted scrape omits browser actions and refuses provider terms writes
|
|
5339
|
+
// before execution.
|
|
5340
|
+
readOnlyHint: SAFE_MODE,
|
|
5326
5341
|
openWorldHint: true,
|
|
5327
5342
|
// Accepts any user-supplied URL on the public web.
|
|
5328
5343
|
destructiveHint: false
|
|
@@ -5349,6 +5364,9 @@ Alexandria mode, on an authenticated session with Alexandria access: \`alexandri
|
|
|
5349
5364
|
} = args2;
|
|
5350
5365
|
if (alexandria) {
|
|
5351
5366
|
assertExchangeCredential(session);
|
|
5367
|
+
if ((Array.isArray(alexandria) ? alexandria : [alexandria]).some(isTermsWrite)) {
|
|
5368
|
+
throw termsWriteError();
|
|
5369
|
+
}
|
|
5352
5370
|
log.info("Executing Alexandria capabilities", {
|
|
5353
5371
|
count: Array.isArray(alexandria) ? alexandria.length : 1
|
|
5354
5372
|
});
|
|
@@ -5596,7 +5614,7 @@ var findToolsTool = {
|
|
|
5596
5614
|
};
|
|
5597
5615
|
server.addTool(findToolsTool);
|
|
5598
5616
|
var SEARCH_SURFACE_SCRAPE_DESCRIPTION = `
|
|
5599
|
-
Scrape one URL and return its content, or execute catalogued Alexandria capabilities. URL mode returns markdown by default, or HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema, plus page metadata. Firecrawl may serve recently indexed content; set \`maxAge: 0\` for a live fetch. A successful response does not by itself confirm the page is still current.
|
|
5617
|
+
Scrape one URL and return its content, or execute catalogued Alexandria capabilities. URL mode returns markdown by default, or HTML, links, screenshots, branding data, a targeted answer, or JSON matching a supplied schema, plus page metadata. Firecrawl may serve recently indexed content; set \`maxAge: 0\` for a live fetch. A successful response does not by itself confirm the page is still current. A named browser profile loads saved session data.
|
|
5600
5618
|
|
|
5601
5619
|
\`firecrawl_search\` with \`sources\` unset and \`firecrawl_find_tools\` can discover providers for the same fields across several pages; a matching Alexandria provider returns typed records in one call.
|
|
5602
5620
|
|
|
@@ -6206,13 +6224,13 @@ var agentExchangeSchema = z10.strictObject({
|
|
|
6206
6224
|
callIds: z10.array(z10.string()).optional(),
|
|
6207
6225
|
always: z10.boolean().optional()
|
|
6208
6226
|
}).optional().describe(
|
|
6209
|
-
"Answer yes to the pendingApproval the previous turn of this thread ended on (its id, also exchange.requiresAction.approvalId). Needs threadId. For a terms offer, send it only after the
|
|
6227
|
+
"Answer yes to the pendingApproval the previous turn of this thread ended on (its id, also exchange.requiresAction.approvalId). Needs threadId. For a terms offer, send it only after an organization admin confirms acceptance in the Firecrawl dashboard; this does not accept terms. callIds and always are ignored on terms offers. For paid calls, callIds picks a subset (default all) and always stops asking for the rest of the thread."
|
|
6210
6228
|
),
|
|
6211
6229
|
decline: z10.strictObject({ approvalId: z10.string().uuid() }).optional().describe(
|
|
6212
6230
|
"Answer no to that pendingApproval. Needs threadId. A declined terms offer keeps those providers out of the rest of the thread."
|
|
6213
6231
|
),
|
|
6214
6232
|
onTermsRequired: z10.enum(["skip", "ask"]).optional().describe(
|
|
6215
|
-
`What to do when a provider the agent would use needs data terms the team has not accepted. Gated providers are never called. "skip" (default): answer with accepted providers and list the rest in exchange.skippedProviders. "ask": the same, plus a terms pendingApproval and exchange.requiresAction
|
|
6233
|
+
`What to do when a provider the agent would use needs data terms the team has not accepted. Gated providers are never called. "skip" (default): answer with accepted providers and list the rest in exchange.skippedProviders. "ask": the same, plus a terms pendingApproval and exchange.requiresAction. Read terms with terms/show; an organization admin accepts them in the Firecrawl dashboard. There is no auto-accept. Omitted on a follow-up keeps the previous turn's value.`
|
|
6216
6234
|
)
|
|
6217
6235
|
}).describe(
|
|
6218
6236
|
"Alexandria provider settings for this turn, forwarded as the request's exchange object."
|
|
@@ -6235,7 +6253,7 @@ This call returns only a job ID, not the research result. Read the job with \`fi
|
|
|
6235
6253
|
|
|
6236
6254
|
The job also returns a \`threadId\`. To continue that thread, pass it with a follow-up \`prompt\`; omitted \`mode\`, \`urls\`, \`schema\` and exchange settings carry over from the previous turn.
|
|
6237
6255
|
|
|
6238
|
-
The agent only calls Alexandria providers whose
|
|
6256
|
+
The agent only calls Alexandria providers whose terms the team has accepted. \`exchange.skippedProviders\` lists gated providers. With \`exchange.onTermsRequired\` "ask", a terms \`pendingApproval\` and \`exchange.requiresAction\` carry the \`approvalId\` and provider requirements. Read terms/show through \`firecrawl_scrape\`. An organization admin must accept terms in the Firecrawl dashboard at the provider URL or ${DATA_SOURCES_SETTINGS_URL}. Ignore any terms/accept call in the API response. Only after the admin confirms acceptance, resume with the same \`threadId\` and \`exchange.approve: {approvalId}\`; this does not accept terms. To decline, use \`exchange.decline: {approvalId}\`. Never infer acceptance from a data request.
|
|
6239
6257
|
`,
|
|
6240
6258
|
outputSchema: agentOutputSchema,
|
|
6241
6259
|
parameters: z10.object({
|
|
@@ -6331,9 +6349,41 @@ Returns job status, progress information, and result data when completed.
|
|
|
6331
6349
|
`/v2/agent/${encodeURIComponent(id)}`,
|
|
6332
6350
|
originHeaders(requestOrigin(mcpClient, session))
|
|
6333
6351
|
);
|
|
6334
|
-
return
|
|
6352
|
+
return agentStatusResult(res?.data ?? {});
|
|
6335
6353
|
}
|
|
6336
6354
|
});
|
|
6355
|
+
function agentStatusResult(data) {
|
|
6356
|
+
const run = data;
|
|
6357
|
+
if (!run || typeof run !== "object" || run.status !== "failed" || run.stopReason !== "credit_limit_reached") {
|
|
6358
|
+
return structuredText(data);
|
|
6359
|
+
}
|
|
6360
|
+
const lines = [
|
|
6361
|
+
"This agent run stopped at its credit limit (maxCredits) before finishing."
|
|
6362
|
+
];
|
|
6363
|
+
const hasPartial = run.partial !== void 0 && run.partial !== null;
|
|
6364
|
+
if (hasPartial) {
|
|
6365
|
+
const validity = run.partialSchemaValid === true ? " It matches the schema this run was given." : run.partialSchemaValid === false ? " It does not match the schema this run was given." : "";
|
|
6366
|
+
lines.push(
|
|
6367
|
+
`\`partial\` is an INCOMPLETE best-effort result, not a finished answer; tell the user it is incomplete.${validity}`
|
|
6368
|
+
);
|
|
6369
|
+
} else {
|
|
6370
|
+
lines.push("No partial result was recovered.");
|
|
6371
|
+
}
|
|
6372
|
+
if (typeof run.message === "string" && run.message.trim()) {
|
|
6373
|
+
lines.push(`Agent message: ${run.message.trim()}`);
|
|
6374
|
+
}
|
|
6375
|
+
const threadId = typeof run.threadId === "string" ? run.threadId : void 0;
|
|
6376
|
+
lines.push(
|
|
6377
|
+
threadId ? `To continue, call firecrawl_agent with threadId "${threadId}" and a prompt to finish the task (the follow-up ${hasPartial ? "resumes from this partial" : "keeps this thread"}), or start a new run with a higher maxCredits.` : "To continue, start a new firecrawl_agent run with a higher maxCredits."
|
|
6378
|
+
);
|
|
6379
|
+
const notice = lines.join(" ");
|
|
6380
|
+
return withStructured(
|
|
6381
|
+
`${notice}
|
|
6382
|
+
|
|
6383
|
+
${JSON.stringify(data, null, 2)}`,
|
|
6384
|
+
{ ...run, notice }
|
|
6385
|
+
);
|
|
6386
|
+
}
|
|
6337
6387
|
server.addTool({
|
|
6338
6388
|
name: "firecrawl_interact",
|
|
6339
6389
|
annotations: {
|
|
@@ -6568,6 +6618,8 @@ Returns result groups in \`data\` and an operation \`id\`.
|
|
|
6568
6618
|
execute: async (args2, { session, log, client: mcpClient }) => {
|
|
6569
6619
|
const {
|
|
6570
6620
|
query,
|
|
6621
|
+
objective,
|
|
6622
|
+
clientModel,
|
|
6571
6623
|
includeDomains,
|
|
6572
6624
|
excludeDomains,
|
|
6573
6625
|
limit,
|
|
@@ -6585,6 +6637,8 @@ Returns result groups in \`data\` and an operation \`id\`.
|
|
|
6585
6637
|
const searchBody = {
|
|
6586
6638
|
query: searchQuery,
|
|
6587
6639
|
...removeEmptyTopLevel({
|
|
6640
|
+
objective,
|
|
6641
|
+
clientModel,
|
|
6588
6642
|
limit,
|
|
6589
6643
|
includeDomains,
|
|
6590
6644
|
excludeDomains,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "firecrawl-mcp",
|
|
3
|
-
"version": "3.27.
|
|
3
|
+
"version": "3.27.3",
|
|
4
4
|
"description": "MCP server for Firecrawl — search, scrape, and interact with the web, and search scientific papers. Supports both cloud and self-hosted instances. Features include web search, scraping, page interaction, batch processing, LLM-powered content analysis, and research paper search over biomedical and arXiv literature (PubMed, bioRxiv, medRxiv, arXiv) with citation-graph expansion and full-text reading.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"mcpName": "io.github.firecrawl/firecrawl-mcp-server",
|