メインコンテンツへスキップ
Vercel AI SDK 向け Firecrawl ツール。AI アプリケーションで、検索、スクレイピング、ページと Interact し、Web をクロールできます。

インストール

npm install firecrawl-aisdk ai
環境変数を設定する:
FIRECRAWL_API_KEY=fc-your-key       # https://firecrawl.dev
AI_GATEWAY_API_KEY=your-key         # https://vercel.com/ai-gateway
これらの例では Vercel AI Gateway の string モデルフォーマットを使用していますが、Firecrawl のツールはどの AI SDK プロバイダとも動作します。@ai-sdk/anthropicanthropic('claude-sonnet-4-5-20250514') のようなプロバイダのインポートも使用できます。

クイックスタート

FirecrawlTools() には、デフォルトで searchscrapeinteract が含まれています。
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  tools: FirecrawlTools(),
  stopWhen: stepCountIs(30),
  prompt: `
    1. Use interact on Hacker News to identify the top story
    2. Search for other perspectives on the same topic
    3. Scrape the most relevant pages you found
    4. Summarize everything you found
  `,
});

FirecrawlTools

FirecrawlTools() は、デフォルトのツールに加えて、generateText に渡せる自動生成の systemPrompt も提供します。
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';

const tools = FirecrawlTools();

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  system: `${tools.systemPrompt}\n\nAnswer with citations when possible.`,
  tools,
  stopWhen: stepCountIs(20),
  prompt: 'Find the current Firecrawl pricing page and explain the available plans.',
});
default 設定をカスタマイズし、非同期ツール を有効にしたり、個々のツールを disable したりできます:
const tools = FirecrawlTools({
  search: { limit: 5 },
  scrape: { formats: ['markdown'], onlyMainContent: true },
  interact: { profile: { name: 'my-session', saveChanges: true } },
  crawl: true,
  agent: true,
});
// interactを無効化し、search + scrapeを維持
FirecrawlTools({ interact: false });

// 非推奨のbrowser互換性を有効にする
FirecrawlTools({ browser: {} });

// 利用可能なすべてのツールを含める
FirecrawlTools({ all: true });
ページに関する質問に答えるために スクレイピング を行う場合は、query フォーマット を優先してください:
formats: [{ type: 'query', prompt: 'What does this page say about pricing and rate limits?' }]
ページ全体のコンテンツが必要な場合にのみ、formats: ['markdown'] を使用してください.

個別ツール

すべてのツールは直接使用することも、options を指定して呼び出すこともできます。
import { generateText } from 'ai';
import { scrape, search } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Firecrawlを検索し、最も関連性の高い結果をスクレイピングする。',
  tools: { search, scrape },
});

const customScrape = scrape({ apiKey: 'fc-custom-key', apiUrl: 'https://api.firecrawl.dev' });

検索 + スクレイピング

import { generateText } from 'ai';
import { search, scrape } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Search for Firecrawl, scrape the top official result, and explain what it does.',
  tools: { search, scrape },
});

マップ

import { generateText } from 'ai';
import { map } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'https://docs.firecrawl.dev をマップして主要なセクションをリストアップしてください。',
  tools: { map },
});

ストリーミング

import { streamText, stepCountIs } from 'ai';
import { scrape } from 'firecrawl-aisdk';

const result = streamText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'What is the first 100 words of firecrawl.dev?',
  tools: { scrape },
  stopWhen: stepCountIs(3),
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

await result.fullStream;

Interact

interact() は、スクレイピングを基盤とした対話型セッションを作成します。start(url) を呼び出してセッションを開始し、ライブビュー URL を取得してから、モデルが interact ツールを通じてそのセッションを再利用できるようにします。
import { generateText, stepCountIs } from 'ai';
import { interact, search } from 'firecrawl-aisdk';

const interactTool = interact();
console.log('Live view:', await interactTool.start('https://news.ycombinator.com'));

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  tools: { interact: interactTool, search },
  stopWhen: stepCountIs(25),
  prompt: 'Use interact on the current Hacker News session, find the top story, then search for more context.',
});

await interactTool.close();
起動後に明示的なライブビューURLが必要な場合は、interactTool.interactiveLiveViewUrlを使用します。 プロファイルを使用すると、セッション間でブラウザの状態を再利用できます:
const interactTool = interact({
  profile: { name: 'my-session', saveChanges: true },
});
browser() は非推奨です。代わりに interact() を使用してください。

非同期ツール

クロール、バッチスクレイプ、エージェント はジョブ ID を返します。poll と組み合わせて使用します。

クロール

import { generateText } from 'ai';
import { crawl, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Crawl https://docs.firecrawl.dev (limit 3 pages) and summarize.',
  tools: { crawl, poll },
});

バッチスクレイプ

import { generateText } from 'ai';
import { batchScrape, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and https://docs.firecrawl.dev, then compare them.',
  tools: { batchScrape, poll },
});

エージェント

自律的な Web データ収集 — 自動で検索・ページ遷移・データ抽出を行います。
import { generateText, stepCountIs } from 'ai';
import { agent, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Find the founders of Firecrawl, their roles, and their backgrounds.',
  tools: { agent, poll },
  stopWhen: stepCountIs(10),
});

ロギング

import { generateText } from 'ai';
import { logStep, scrape, stepLogger } from 'firecrawl-aisdk';

const logger = stepLogger();

const { text, usage } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and summarize it.',
  tools: { scrape },
  onStepFinish: logger.onStep,
  experimental_onToolCallFinish: logger.onToolCallFinish,
});

logger.close();
logger.summary(usage);

await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and summarize it again.',
  tools: { scrape },
  onStepFinish: logStep,
});

エクスポート一覧

import {
  // コアツール
  search,             // ウェブを検索する
  scrape,             // 単一のURLをスクレイピングする
  map,                // サイト上のURLを探索する
  crawl,              // 複数ページをクロールする(非同期、pollを使用)
  batchScrape,        // 複数のURLをスクレイピングする(非同期、pollを使用)
  agent,              // 自律型ウェブリサーチ(非同期、pollを使用)

  // ジョブ管理
  poll,               // 非同期ジョブの結果をポーリングする
  status,             // ジョブのステータスを確認する
  cancel,             // 実行中のジョブをキャンセルする

  // ブラウザ/セッションツール
  interact,           // interact({ profile: { name: '...' } })
  browser,            // 非推奨の互換エクスポート

  // オールインワンバンドル
  FirecrawlTools,     // FirecrawlTools({ search, scrape, interact, crawl, agent })

  // ヘルパー
  stepLogger,         // ツール呼び出しごとのトークン統計
  logStep,            // シンプルな1行ロギング
} from 'firecrawl-aisdk';