# Anthropic (/pt-BR/developer-guides/llm-sdks-and-frameworks/anthropic)

<!-- agent-signals: reading_time_min: 3 · est_tokens: 1159 · updated: 2026-07-30 -->
Related: [OpenAI](/pt-BR/developer-guides/llm-sdks-and-frameworks/openai.md), [Gemini](/pt-BR/developer-guides/llm-sdks-and-frameworks/gemini.md), [Agent Development Kit (ADK)](/pt-BR/developer-guides/llm-sdks-and-frameworks/google-adk.md), [Vercel AI SDK](/pt-BR/developer-guides/llm-sdks-and-frameworks/vercel-ai-sdk.md), [LangChain](/pt-BR/developer-guides/llm-sdks-and-frameworks/langchain.md), [LangGraph](/pt-BR/developer-guides/llm-sdks-and-frameworks/langgraph.md)

Integre o Firecrawl ao Claude para criar aplicativos de IA baseados em dados da web.

<div id="setup">
  ## Configuração [#configuração]
</div>

```bash
npm install firecrawl @anthropic-ai/sdk zod zod-to-json-schema
```

Crie o arquivo `.env`:

```bash
FIRECRAWL_API_KEY=sua_chave_firecrawl
ANTHROPIC_API_KEY=sua_chave_anthropic
```

> **Nota:** Se estiver usando Node \< 20, instale `dotenv` e adicione `import 'dotenv/config'` ao seu código.

<div id="scrape-summarize">
  ## Scraping + Resumir [#scraping--resumir]
</div>

Este exemplo demonstra um fluxo de trabalho simples: fazer scraping de um site e resumir o conteúdo usando Claude.

```typescript
import { Firecrawl } from 'firecrawl';
import Anthropic from '@anthropic-ai/sdk';

const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

const scrapeResult = await firecrawl.scrape('https://firecrawl.dev', {
    formats: ['markdown']
});

console.log('Scraped content length:', scrapeResult.markdown?.length);

const message = await anthropic.messages.create({
    model: 'claude-haiku-4-5',
    max_tokens: 1024,
    messages: [
        { role: 'user', content: `Summarize in 100 words: ${scrapeResult.markdown}` }
    ]
});

console.log('Response:', message);
```

<div id="tool-use">
  ## Uso de ferramentas [#uso-de-ferramentas]
</div>

Este exemplo mostra como usar a funcionalidade de ferramentas do Claude para permitir que o modelo decida quando fazer scraping de sites com base em solicitações do usuário.

```typescript
import { Firecrawl } from 'firecrawl';
import { Anthropic } from '@anthropic-ai/sdk';
import { z } from 'zod';
import { zodToJsonSchema } from 'zod-to-json-schema';

const firecrawl = new Firecrawl({
    apiKey: process.env.FIRECRAWL_API_KEY
});

const anthropic = new Anthropic({
    apiKey: process.env.ANTHROPIC_API_KEY
});

const ScrapeArgsSchema = z.object({
    url: z.string()
});

console.log("Sending user message to Claude and requesting tool use if necessary...");
const response = await anthropic.messages.create({
    model: 'claude-haiku-4-5',
    max_tokens: 1024,
    tools: [{
        name: 'scrape_website',
        description: 'Scrape and extract markdown content from a website URL',
        input_schema: zodToJsonSchema(ScrapeArgsSchema, 'ScrapeArgsSchema') as any
    }],
    messages: [{
        role: 'user',
        content: 'What is Firecrawl? Check firecrawl.dev'
    }]
});

const toolUse = response.content.find(block => block.type === 'tool_use');

if (toolUse && toolUse.type === 'tool_use') {
    const input = toolUse.input as { url: string };
    console.log(`Calling tool: ${toolUse.name} | URL: ${input.url}`);

    const result = await firecrawl.scrape(input.url, {
        formats: ['markdown']
    });

    console.log(`Scraped content preview: ${result.markdown?.substring(0, 300)}...`);
    // Continue with the conversation or process the scraped content as needed
}
```

<div id="structured-extraction">
  ## Extração Estruturada [#extração-estruturada]
</div>

Este exemplo demonstra como usar Claude para extrair dados estruturados de conteúdo de sites obtido por scraping.

```typescript
import { Firecrawl } from 'firecrawl';
import Anthropic from '@anthropic-ai/sdk';
import { z } from 'zod';

const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY });
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

const CompanyInfoSchema = z.object({
    name: z.string(),
    industry: z.string().optional(),
    description: z.string().optional()
});

const scrapeResult = await firecrawl.scrape('https://stripe.com', {
    formats: ['markdown'],
    onlyMainContent: true
});

const prompt = `Extraia as informações da empresa deste conteúdo do site.

Retorne APENAS JSON válido neste formato exato (sem markdown, sem explicação):

{
  "name": "Nome da Empresa",
  "industry": "Setor",
  "description": "Descrição em uma frase"
}

Conteúdo do site:
${scrapeResult.markdown}`;

const message = await anthropic.messages.create({
    model: 'claude-haiku-4-5',
    max_tokens: 1024,
    messages: [
        { role: 'user', content: prompt },
        { role: 'assistant', content: '{' }
    ]
});

const textBlock = message.content.find(block => block.type === 'text');

if (textBlock && textBlock.type === 'text') {
    const jsonText = '{' + textBlock.text;
    const companyInfo = CompanyInfoSchema.parse(JSON.parse(jsonText));
  
    console.log(companyInfo);
}
```

Para mais exemplos, consulte a [documentação do Claude](https://docs.anthropic.com/claude/docs).
