firecrawl-mcp 3.19.1 → 3.20.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.
Files changed (3) hide show
  1. package/README.md +0 -108
  2. package/dist/index.js +9 -199
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -18,7 +18,6 @@ A Model Context Protocol (MCP) server that brings [Firecrawl](https://github.com
18
18
  - Scrape any URL into clean, structured data
19
19
  - Interact with pages — click, navigate, and operate
20
20
  - Deep research with autonomous agent
21
- - Cloud browser sessions with agent-browser automation
22
21
  - Automatic retries and rate limiting
23
22
  - Cloud and self-hosted support
24
23
  - SSE support
@@ -328,7 +327,6 @@ Use this guide to select the right tool for your task:
328
327
  - **If you need complex research across multiple unknown sources:** use **agent**
329
328
  - **If you want to analyze a whole site or section:** use **crawl** (with limits!)
330
329
  - **If you need interactive browser automation** (click, type, navigate): use **scrape** + **interact**
331
- - **If you need a raw CDP browser session** (advanced): use **browser** (deprecated)
332
330
 
333
331
  ### Quick Reference Table
334
332
 
@@ -341,7 +339,6 @@ Use this guide to select the right tool for your task:
341
339
  | crawl | Multi-page extraction (with limits) | markdown/html[] |
342
340
  | search | Web search for info | results[] |
343
341
  | agent | Complex multi-source research | JSON (structured data) |
344
- | browser | Interactive multi-step automation (deprecated) | Session with live browser |
345
342
 
346
343
  ### Format Selection Guide
347
344
 
@@ -940,111 +937,6 @@ Pass `body` when you need crawl targets, JSON change tracking, custom retention,
940
937
  - `firecrawl_monitor_checks`: list checks, optionally filtered by status.
941
938
  - `firecrawl_monitor_check`: get page-level results, including `diff`, `snapshot`, `judgment.meaningful`, and `judgment.meaningfulChanges`.
942
939
 
943
- ### 12. Browser Create (`firecrawl_browser_create`) — Deprecated
944
-
945
- > **Deprecated:** Prefer `firecrawl_scrape` + `firecrawl_interact` instead. Interact lets you scrape a page and then click, fill forms, and navigate without managing sessions manually.
946
-
947
- Create a cloud browser session for interactive automation.
948
-
949
- **Arguments:**
950
-
951
- - `ttl`: Total session lifetime in seconds (30-3600, optional)
952
- - `activityTtl`: Idle timeout in seconds (10-3600, optional)
953
- - `streamWebView`: Whether to enable live view streaming (optional)
954
- - `profile`: Save and reuse browser state across sessions (optional)
955
- - `name`: Profile name (sessions with the same name share state)
956
- - `saveChanges`: Whether to save changes back to the profile (default: true)
957
-
958
- **Usage Example:**
959
-
960
- ```json
961
- {
962
- "name": "firecrawl_browser_create",
963
- "arguments": {
964
- "ttl": 600,
965
- "profile": { "name": "my-profile", "saveChanges": true }
966
- }
967
- }
968
- ```
969
-
970
- **Returns:**
971
-
972
- - Session ID, CDP URL, and live view URL
973
-
974
- ### 13. Browser Execute (`firecrawl_browser_execute`) — Deprecated
975
-
976
- > **Deprecated:** Prefer `firecrawl_scrape` + `firecrawl_interact` instead.
977
-
978
- Execute code in a browser session. Supports agent-browser commands (bash), Python, or JavaScript.
979
-
980
- **Recommended: Use bash with agent-browser commands** (pre-installed in every sandbox):
981
-
982
- ```json
983
- {
984
- "name": "firecrawl_browser_execute",
985
- "arguments": {
986
- "sessionId": "session-id-here",
987
- "code": "agent-browser open https://example.com",
988
- "language": "bash"
989
- }
990
- }
991
- ```
992
-
993
- **Common agent-browser commands:**
994
-
995
- | Command | Description |
996
- | ------------------------------- | -------------------------------------- |
997
- | `agent-browser open <url>` | Navigate to URL |
998
- | `agent-browser snapshot` | Accessibility tree with clickable refs |
999
- | `agent-browser click @e5` | Click element by ref from snapshot |
1000
- | `agent-browser type @e3 "text"` | Type into element |
1001
- | `agent-browser get title` | Get page title |
1002
- | `agent-browser screenshot` | Take screenshot |
1003
- | `agent-browser --help` | Full command reference |
1004
-
1005
- **For Playwright scripting, use Python:**
1006
-
1007
- ```json
1008
- {
1009
- "name": "firecrawl_browser_execute",
1010
- "arguments": {
1011
- "sessionId": "session-id-here",
1012
- "code": "await page.goto('https://example.com')\ntitle = await page.title()\nprint(title)",
1013
- "language": "python"
1014
- }
1015
- }
1016
- ```
1017
-
1018
- ### 14. Browser List (`firecrawl_browser_list`) — Deprecated
1019
-
1020
- > **Deprecated:** Prefer `firecrawl_scrape` + `firecrawl_interact` instead.
1021
-
1022
- List browser sessions, optionally filtered by status.
1023
-
1024
- ```json
1025
- {
1026
- "name": "firecrawl_browser_list",
1027
- "arguments": {
1028
- "status": "active"
1029
- }
1030
- }
1031
- ```
1032
-
1033
- ### 15. Browser Delete (`firecrawl_browser_delete`) — Deprecated
1034
-
1035
- > **Deprecated:** Prefer `firecrawl_scrape` + `firecrawl_interact` instead.
1036
-
1037
- Destroy a browser session.
1038
-
1039
- ```json
1040
- {
1041
- "name": "firecrawl_browser_delete",
1042
- "arguments": {
1043
- "sessionId": "session-id-here"
1044
- }
1045
- }
1046
- ```
1047
-
1048
940
  ## Logging System
1049
941
 
1050
942
  The server includes comprehensive logging:
package/dist/index.js CHANGED
@@ -187,7 +187,15 @@ const server = new FastMCP({
187
187
  protectedResourceMetadataUrl: getOAuthProtectedResourceMetadataUrl(),
188
188
  },
189
189
  authenticate: async (request) => {
190
- const headerCred = await resolveCredentialFromHeaders(request.headers);
190
+ // FastMCP invokes `authenticate(undefined)` for the stdio transport
191
+ // because there is no HTTP request context. Without this null guard,
192
+ // accessing `request.headers` throws a TypeError, FastMCP silently
193
+ // swallows it, and every subsequent tool call fails with
194
+ // "Unauthorized: API key is required when not using a self-hosted
195
+ // instance" even though `FIRECRAWL_API_KEY` is set in env.
196
+ const headerCred = request?.headers
197
+ ? await resolveCredentialFromHeaders(request.headers)
198
+ : undefined;
191
199
  const envCred = resolveCredentialFromEnv();
192
200
  if (process.env.CLOUD_SERVICE === 'true') {
193
201
  if (!headerCred) {
@@ -1203,204 +1211,6 @@ Check the status of an agent job and retrieve results when complete. Use this to
1203
1211
  return asText(res);
1204
1212
  },
1205
1213
  });
1206
- // Browser session tools (deprecated — prefer firecrawl_scrape + firecrawl_interact)
1207
- server.addTool({
1208
- name: 'firecrawl_browser_create',
1209
- annotations: {
1210
- title: 'Create browser session',
1211
- readOnlyHint: false,
1212
- openWorldHint: false,
1213
- destructiveHint: false,
1214
- },
1215
- description: `
1216
- **DEPRECATED — prefer firecrawl_scrape + firecrawl_interact instead.** Interact lets you scrape a page and then click, fill forms, and navigate without managing sessions manually.
1217
-
1218
- Create a browser session for code execution via CDP (Chrome DevTools Protocol).
1219
-
1220
- **Arguments:**
1221
- - ttl: Total session lifetime in seconds (30-3600, optional)
1222
- - activityTtl: Idle timeout in seconds (10-3600, optional)
1223
- - streamWebView: Whether to enable live view streaming (optional)
1224
- - profile: Save and reuse browser state (cookies, localStorage) across sessions (optional)
1225
- - name: Profile name (sessions with the same name share state)
1226
- - saveChanges: Whether to save changes back to the profile (default: true)
1227
-
1228
- **Usage Example:**
1229
- \`\`\`json
1230
- {
1231
- "name": "firecrawl_browser_create",
1232
- "arguments": {
1233
- "profile": { "name": "my-profile", "saveChanges": true }
1234
- }
1235
- }
1236
- \`\`\`
1237
- **Returns:** Session ID, CDP URL, and live view URL.
1238
- `,
1239
- parameters: z.object({
1240
- ttl: z.number().min(30).max(3600).optional(),
1241
- activityTtl: z.number().min(10).max(3600).optional(),
1242
- streamWebView: z.boolean().optional(),
1243
- profile: z
1244
- .object({
1245
- name: z.string().min(1).max(128),
1246
- saveChanges: z.boolean().default(true),
1247
- })
1248
- .optional(),
1249
- }),
1250
- execute: async (args, { session, log }) => {
1251
- const client = getClient(session);
1252
- const a = args;
1253
- const cleaned = removeEmptyTopLevel(a);
1254
- log.info('Creating browser session');
1255
- const res = await client.browser(cleaned);
1256
- return asText(res);
1257
- },
1258
- });
1259
- if (!SAFE_MODE) {
1260
- server.addTool({
1261
- name: 'firecrawl_browser_execute',
1262
- annotations: {
1263
- title: 'Run code in browser session',
1264
- readOnlyHint: false,
1265
- openWorldHint: false,
1266
- destructiveHint: true,
1267
- },
1268
- description: `
1269
- **DEPRECATED — prefer firecrawl_scrape + firecrawl_interact instead.** Interact lets you scrape a page and then click, fill forms, and navigate without managing sessions manually.
1270
-
1271
- Execute code in a browser session. Supports agent-browser commands (bash), Python, or JavaScript.
1272
- **Requires:** An active browser session (create one with firecrawl_browser_create first).
1273
-
1274
- **Arguments:**
1275
- - sessionId: The browser session ID (required)
1276
- - code: The code to execute (required)
1277
- - language: "bash", "python", or "node" (optional, defaults to "bash")
1278
-
1279
- **Recommended: Use bash with agent-browser commands** (pre-installed in every sandbox):
1280
- \`\`\`json
1281
- {
1282
- "name": "firecrawl_browser_execute",
1283
- "arguments": {
1284
- "sessionId": "session-id-here",
1285
- "code": "agent-browser open https://example.com",
1286
- "language": "bash"
1287
- }
1288
- }
1289
- \`\`\`
1290
-
1291
- **Common agent-browser commands:**
1292
- - \`agent-browser open <url>\` — Navigate to URL
1293
- - \`agent-browser snapshot\` — Get accessibility tree with clickable refs (for AI)
1294
- - \`agent-browser snapshot -i -c\` — Interactive elements only, compact
1295
- - \`agent-browser click @e5\` — Click element by ref from snapshot
1296
- - \`agent-browser type @e3 "text"\` — Type into element
1297
- - \`agent-browser fill @e3 "text"\` — Clear and fill element
1298
- - \`agent-browser get text @e1\` — Get text content
1299
- - \`agent-browser get title\` — Get page title
1300
- - \`agent-browser get url\` — Get current URL
1301
- - \`agent-browser screenshot [path]\` — Take screenshot
1302
- - \`agent-browser scroll down\` — Scroll page
1303
- - \`agent-browser wait 2000\` — Wait 2 seconds
1304
- - \`agent-browser --help\` — Full command reference
1305
-
1306
- **For Playwright scripting, use Python** (has proper async/await support):
1307
- \`\`\`json
1308
- {
1309
- "name": "firecrawl_browser_execute",
1310
- "arguments": {
1311
- "sessionId": "session-id-here",
1312
- "code": "await page.goto('https://example.com')\\ntitle = await page.title()\\nprint(title)",
1313
- "language": "python"
1314
- }
1315
- }
1316
- \`\`\`
1317
-
1318
- **Note:** Prefer bash (agent-browser) or Python.
1319
- **Returns:** Execution result including stdout, stderr, and exit code.
1320
- `,
1321
- parameters: z.object({
1322
- sessionId: z.string(),
1323
- code: z.string(),
1324
- language: z.enum(['bash', 'python', 'node']).optional(),
1325
- }),
1326
- execute: async (args, { session, log }) => {
1327
- const client = getClient(session);
1328
- const { sessionId, code, language } = args;
1329
- log.info('Executing code in browser session', { sessionId });
1330
- const res = await client.browserExecute(sessionId, { code, language });
1331
- return asText(res);
1332
- },
1333
- });
1334
- }
1335
- server.addTool({
1336
- name: 'firecrawl_browser_delete',
1337
- annotations: {
1338
- title: 'Delete browser session',
1339
- readOnlyHint: false,
1340
- openWorldHint: false,
1341
- destructiveHint: true,
1342
- },
1343
- description: `
1344
- **DEPRECATED — prefer firecrawl_scrape + firecrawl_interact instead.**
1345
-
1346
- Destroy a browser session.
1347
-
1348
- **Usage Example:**
1349
- \`\`\`json
1350
- {
1351
- "name": "firecrawl_browser_delete",
1352
- "arguments": {
1353
- "sessionId": "session-id-here"
1354
- }
1355
- }
1356
- \`\`\`
1357
- **Returns:** Success confirmation.
1358
- `,
1359
- parameters: z.object({
1360
- sessionId: z.string(),
1361
- }),
1362
- execute: async (args, { session, log }) => {
1363
- const client = getClient(session);
1364
- const { sessionId } = args;
1365
- log.info('Deleting browser session', { sessionId });
1366
- const res = await client.deleteBrowser(sessionId);
1367
- return asText(res);
1368
- },
1369
- });
1370
- server.addTool({
1371
- name: 'firecrawl_browser_list',
1372
- annotations: {
1373
- title: 'List browser sessions',
1374
- readOnlyHint: true,
1375
- openWorldHint: false,
1376
- },
1377
- description: `
1378
- **DEPRECATED — prefer firecrawl_scrape + firecrawl_interact instead.**
1379
-
1380
- List browser sessions, optionally filtered by status.
1381
-
1382
- **Usage Example:**
1383
- \`\`\`json
1384
- {
1385
- "name": "firecrawl_browser_list",
1386
- "arguments": {
1387
- "status": "active"
1388
- }
1389
- }
1390
- \`\`\`
1391
- **Returns:** Array of browser sessions.
1392
- `,
1393
- parameters: z.object({
1394
- status: z.enum(['active', 'destroyed']).optional(),
1395
- }),
1396
- execute: async (args, { session, log }) => {
1397
- const client = getClient(session);
1398
- const { status } = args;
1399
- log.info('Listing browser sessions', { status });
1400
- const res = await client.listBrowsers({ status });
1401
- return asText(res);
1402
- },
1403
- });
1404
1214
  // Interact tools (scrape-bound browser sessions)
1405
1215
  server.addTool({
1406
1216
  name: 'firecrawl_interact',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firecrawl-mcp",
3
- "version": "3.19.1",
3
+ "version": "3.20.1",
4
4
  "description": "MCP server for Firecrawl — search, scrape, and interact with the web. Supports both cloud and self-hosted instances. Features include web search, scraping, page interaction, batch processing, and LLM-powered content analysis.",
5
5
  "type": "module",
6
6
  "mcpName": "io.github.firecrawl/firecrawl-mcp-server",