CrawlForge
InicioPlaygroundCasos de usoIntegracionesPreciosDocumentaciónBlog
Cómo usar CrawlForge con la API de Anthropic Claude
Tutorials
Volver al blog
Tutoriales

Cómo usar CrawlForge con la API de Anthropic Claude

C
CrawlForge Team
Equipo de Ingeniería
15 de abril de 2026
9 min de lectura

En esta página

La API de Claude de Anthropic admite el uso nativo de herramientas: defines herramientas con esquemas JSON y Claude decide cuándo invocarlas durante una conversación. Las 26 herramientas de web scraping de CrawlForge encajan de forma natural: le dan a Claude la capacidad de buscar en la web, extraer contenido, hacer scraping de datos estructurados y realizar investigaciones profundas, todo a través de la API estándar de tool_use.

Esta guía te lleva paso a paso por la definición de las herramientas de CrawlForge para la API de Claude, el manejo de las respuestas de uso de herramientas y la creación de un asistente de investigación de nivel de producción.

Tabla de contenidos

  • Requisitos previos
  • Cómo funciona el uso de herramientas de Claude con CrawlForge
  • Paso 1: define los esquemas de herramientas de CrawlForge
  • Paso 2: maneja el bucle de uso de herramientas
  • Paso 3: crea un asistente de investigación
  • Avanzado: streaming con uso de herramientas
  • Desglose de costo en credits
  • Buenas prácticas
  • Preguntas frecuentes
  • Próximos pasos

Requisitos previos

Bash
npm install @anthropic-ai/sdk dotenv
Bash
# .env
ANTHROPIC_API_KEY=sk-ant-xxxxx
CRAWLFORGE_API_KEY=cf_live_xxxxx

Obtén tu API key de CrawlForge en crawlforge.dev/signup: incluye 1,000 credits gratis. Para acceder a la API de Claude, visita console.anthropic.com y sigue la guía de primeros pasos de la API.

Cómo funciona el uso de herramientas de Claude con CrawlForge

El uso de herramientas de Claude sigue un bucle de petición-respuesta:

  1. Envías un mensaje con las definiciones de herramientas y un prompt del usuario
  2. Claude responde con texto o con un bloque de contenido tool_use
  3. Ejecutas la herramienta (llamas a la API de CrawlForge) y devuelves el resultado
  4. Claude incorpora el resultado y continúa su respuesta
You -> Claude: "What's on the Hacker News front page?" Claude -> You: tool_use { name: "extract_content", input: { url: "https://news.ycombinator.com" } } You -> CrawlForge: POST /api/v1/tools/extract_content { url: "..." } CrawlForge -> You: { content: "..." } You -> Claude: tool_result { content: "..." } Claude -> You: "Here are the top stories on Hacker News right now: ..."

Paso 1: define los esquemas de herramientas de CrawlForge

Define las herramientas que Claude puede usar. Cada herramienta necesita un name, una description y un input_schema (formato JSON Schema):

Typescript
// lib/tool-definitions.ts
import Anthropic from '@anthropic-ai/sdk';

export const crawlforgeTools: Anthropic.Tool[] = [
  {
    name: 'search_web',
    description: 'Search Google and return top results. Use when you need to find web pages about a topic. Returns titles, URLs, and snippets. Costs 5 credits.',
    input_schema: {
      type: 'object' as const,
      properties: {
        query: {
          type: 'string',
          description: 'The search query',
        },
        limit: {
          type: 'number',
          description: 'Maximum number of results (default: 5)',
        },
      },
      required: ['query'],
    },
  },
  {
    name: 'extract_content',
    description: 'Extract the main readable content from a web page. Returns clean text without navigation, ads, or boilerplate. Use when you need to read a specific URL. Costs 2 credits.',
    input_schema: {
      type: 'object' as const,
      properties: {
        url: {
          type: 'string',
          description: 'The full URL to extract content from',
        },
      },
      required: ['url'],
    },
  },
  {
    name: 'scrape_structured',
    description: 'Extract specific data from a page using CSS selectors. Use when you need structured data like prices, names, or lists. Costs 2 credits.',
    input_schema: {
      type: 'object' as const,
      properties: {
        url: {
          type: 'string',
          description: 'The URL to scrape',
        },
        selectors: {
          type: 'object',
          description: 'Map of field names to CSS selectors',
          additionalProperties: { type: 'string' },
        },
      },
      required: ['url', 'selectors'],
    },
  },
  {
    name: 'fetch_url',
    description: 'Fetch raw HTML from a URL. Cheapest option at 1 credit. Use for APIs or when you need the raw HTML.',
    input_schema: {
      type: 'object' as const,
      properties: {
        url: {
          type: 'string',
          description: 'The URL to fetch',
        },
      },
      required: ['url'],
    },
  },
  {
    name: 'extract_metadata',
    description: 'Get page metadata including title, description, Open Graph tags, and other meta information. Costs 1 credit.',
    input_schema: {
      type: 'object' as const,
      properties: {
        url: {
          type: 'string',
          description: 'The URL to extract metadata from',
        },
      },
      required: ['url'],
    },
  },
];

Paso 2: maneja el bucle de uso de herramientas

El patrón central: envía mensajes a Claude, comprueba si quiere usar una herramienta, ejecuta la herramienta a través de CrawlForge y devuelve el resultado.

Typescript
// lib/agent.ts
import Anthropic from '@anthropic-ai/sdk';
import { crawlforgeTools } from './tool-definitions';

const client = new Anthropic();
const CRAWLFORGE_BASE = 'https://crawlforge.dev/api/v1/tools';

// Execute a CrawlForge tool
async function executeTool(
  name: string,
  input: Record<string, unknown>
): Promise<string> {
  const response = await fetch(`${CRAWLFORGE_BASE}/${name}`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CRAWLFORGE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(input),
  });

  if (!response.ok) {
    return JSON.stringify({ error: `HTTP ${response.status}: ${response.statusText}` });
  }

  const data = await response.json();
  return JSON.stringify(data);
}

// Run Claude with CrawlForge tools
export async function askClaude(prompt: string): Promise<string> {
  const messages: Anthropic.MessageParam[] = [
    { role: 'user', content: prompt },
  ];

  // Tool use loop: keep going until Claude gives a final text response
  while (true) {
    const response = await client.messages.create({
      model: 'claude-sonnet-4-20250514',
      max_tokens: 4096,
      tools: crawlforgeTools,
      messages,
    });

    // Check if Claude wants to use a tool
    if (response.stop_reason === 'tool_use') {
      // Add Claude's response to message history
      messages.push({ role: 'assistant', content: response.content });

      // Execute each tool call and collect results
      const toolResults: Anthropic.ToolResultBlockParam[] = [];

      for (const block of response.content) {
        if (block.type === 'tool_use') {
          const result = await executeTool(
            block.name,
            block.input as Record<string, unknown>
          );
          toolResults.push({
            type: 'tool_result',
            tool_use_id: block.id,
            content: result,
          });
        }
      }

      // Return tool results to Claude
      messages.push({ role: 'user', content: toolResults });
    } else {
      // Claude gave a final text response
      const textBlock = response.content.find(b => b.type === 'text');
      return textBlock ? textBlock.text : '';
    }
  }
}

// Usage
const answer = await askClaude(
  'What are the top 3 trending repositories on GitHub right now?'
);
console.log(answer);

Este bucle maneja el uso de herramientas en varios pasos de forma automática. Claude podría buscar, luego extraer contenido de un resultado y después buscar de nuevo: el bucle continúa hasta que produce una respuesta de texto final.

Paso 3: crea un asistente de investigación

Envuelve el agente en una aplicación más estructurada:

Typescript
// research-assistant.ts
import { askClaude } from './lib/agent';

async function researchTopic(topic: string, depth: 'quick' | 'thorough' = 'quick') {
  const systemPrompt = depth === 'thorough'
    ? `Research this topic thoroughly. Search for at least 3 different sources,
       read each one, and provide a comprehensive summary with citations.
       Topic: ${topic}`
    : `Quickly answer this question using web search if needed.
       Be concise and cite your source. Topic: ${topic}`;

  console.log(`Researching: ${topic} (mode: ${depth})`);
  const result = await askClaude(systemPrompt);
  console.log(result);
  return result;
}

// Quick research: ~7 credits (search + 1 extract)
await researchTopic('What is the current version of Next.js?', 'quick');

// Thorough research: ~11-15 credits (search + 3 extracts)
await researchTopic(
  'Compare the performance of Bun vs Node.js for HTTP servers in 2026',
  'thorough'
);

Avanzado: streaming con uso de herramientas

Para una mejor experiencia de usuario, usa streaming para mostrar el razonamiento de Claude en tiempo real:

Typescript
// lib/streaming-agent.ts
import Anthropic from '@anthropic-ai/sdk';
import { crawlforgeTools } from './tool-definitions';

const client = new Anthropic();
const CRAWLFORGE_BASE = 'https://crawlforge.dev/api/v1/tools';

async function executeTool(
  name: string,
  input: Record<string, unknown>
): Promise<string> {
  const response = await fetch(`${CRAWLFORGE_BASE}/${name}`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.CRAWLFORGE_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(input),
  });
  return JSON.stringify(await response.json());
}

export async function streamWithTools(prompt: string) {
  const messages: Anthropic.MessageParam[] = [
    { role: 'user', content: prompt },
  ];

  while (true) {
    const stream = client.messages.stream({
      model: 'claude-sonnet-4-20250514',
      max_tokens: 4096,
      tools: crawlforgeTools,
      messages,
    });

    // Collect streamed text
    let hasToolUse = false;

    stream.on('text', (text) => {
      process.stdout.write(text); // Stream to terminal in real time
    });

    const response = await stream.finalMessage();

    if (response.stop_reason === 'tool_use') {
      hasToolUse = true;
      messages.push({ role: 'assistant', content: response.content });

      const toolResults: Anthropic.ToolResultBlockParam[] = [];
      for (const block of response.content) {
        if (block.type === 'tool_use') {
          console.log(`\n[Calling ${block.name}...]\n`);
          const result = await executeTool(
            block.name,
            block.input as Record<string, unknown>
          );
          toolResults.push({
            type: 'tool_result',
            tool_use_id: block.id,
            content: result,
          });
        }
      }

      messages.push({ role: 'user', content: toolResults });
    }

    if (!hasToolUse) break;
  }
}

// Usage: streams text to stdout as Claude generates it
await streamWithTools('What is CrawlForge MCP and how does it compare to Firecrawl?');

Desglose de costo en credits

FlujoHerramientas usadasCredits
Respuesta rápida (1 página)extract_content2
Buscar + leer el primer resultadosearch_web + extract_content7
Investigación a fondo (3 fuentes)search_web + 3x extract_content11
Extracción de datos estructuradosscrape_structured2
Comprobación de metadatos de páginaextract_metadata1
Obtención de HTML en brutofetch_url1
Informe profundo multifuentedeep_research10

El nivel Free (1,000 credits únicos) admite aproximadamente 140 extracciones de una sola página o 90 flujos de buscar y leer para empezar. El plan Hobby ($19/mes, 5,000 credits) es ideal para desarrollo y uso ligero en producción.

Buenas prácticas

Escribe descripciones de herramientas descriptivas. Claude usa el campo description para decidir qué herramienta llamar. Incluye qué hace la herramienta, cuándo usarla y su costo en credits. "Extract the main readable content from a web page" es mejor que "Get content".

Incluye el costo en credits en las descripciones. Cuando Claude sabe que fetch_url cuesta 1 credit y deep_research cuesta 10, elige de forma natural la opción más barata para tareas sencillas.

Maneja los errores con elegancia. Devuelve los mensajes de error como resultados de herramienta en lugar de lanzar excepciones. Claude puede adaptar su estrategia cuando una herramienta falla: por ejemplo, probar una URL distinta o reformular una búsqueda.

Configura max_tokens de forma adecuada. El contenido web puede ser largo. Configura max_tokens en al menos 4096 para darle a Claude espacio para incorporar los resultados de las herramientas en respuestas completas.

Usa system prompts para guiar el uso de herramientas. Indícale a Claude cuándo buscar y cuándo acceder directamente a una URL conocida. Esto evita llamadas innecesarias a search_web (5 credits) cuando bastaría con un extract_content directo (2 credits).

Preguntas frecuentes

¿Puedo usar CrawlForge con Claude 3.5 Haiku para reducir costos?

Sí. Todos los modelos de Claude que admiten uso de herramientas funcionan con las herramientas de CrawlForge. Haiku es más barato por token, pero puede necesitar instrucciones más explícitas para elegir la herramienta correcta. Claude Sonnet ofrece el mejor equilibrio entre costo y precisión en el uso de herramientas.

¿Cómo manejo los límites de velocidad?

La API de CrawlForge incluye cabeceras de límite de velocidad (X-RateLimit-Remaining). Si recibes una respuesta 429, añade un reintento con retroceso exponencial. Para uso de alto volumen, el plan Professional incluye límites de velocidad más altos.

¿Puede Claude llamar a varias herramientas de CrawlForge en un solo turno?

Sí. Claude puede solicitar el uso de varias herramientas en una sola respuesta. El bucle de uso de herramientas del Paso 2 lo maneja: itera sobre todos los bloques tool_use y devuelve todos los resultados a la vez.

¿Qué ocurre cuando se acaban los credits de CrawlForge?

La API devuelve un error 402 Payment Required. Devuélvelo como resultado de herramienta para que Claude pueda informar al usuario. Puedes comprobar los credits restantes a través del dashboard o del endpoint de credits de la API.

Próximos pasos

Ahora tienes una aplicación impulsada por Claude con acceso web en vivo. Explora más:

  • Inicio rápido de CrawlForge para la integración nativa de MCP con Claude Code
  • Las 26 herramientas explicadas con costos en credits y ejemplos de uso
  • Crear un asistente de investigación con IA con Claude y CrawlForge
  • Comparativa CrawlForge vs Firecrawl para elegir la herramienta adecuada

Dale a Claude acceso a la web en vivo. Empieza gratis con 1,000 credits: sin tarjeta de crédito.

Pruébalo tú mismo — sin necesidad de registrarte

Ejecuta cualquiera de las 27 herramientas de scraping y extracción de CrawlForge en el playground y luego empieza gratis con 1,000 credits.

1,000 credits gratis • Se recargan cada mes • No se requiere tarjeta de crédito

Etiquetas

anthropicclaude-apitool-useintegrationweb-scrapingtutorialtypescript

Sobre el autor

C

CrawlForge Team

Equipo de Ingeniería

Construimos el MCP server de web scraping más completo. Creamos herramientas que ayudan a los desarrolladores a extraer, analizar y transformar datos web para aplicaciones de IA.

Mantente al día con los últimos artículos

Recibe tutoriales, novedades del producto y consejos de web scraping en tu bandeja de entrada.

Sin spam. Cancela tu suscripción cuando quieras.

Ponlo en práctica

Prueba las herramientas de CrawlForge en cualquier URL — gratis, sin registro.

En esta página

Artículos relacionados

Cómo usar CrawlForge con agentes de LangGraph
Tutorials

Cómo usar CrawlForge con agentes de LangGraph

Construye agentes de web scraping con estado usando LangGraph y CrawlForge. Guía en TypeScript que cubre nodos del grafo, gestión de estado y flujos de scraping condicionales.

C
CrawlForge Team
|
24 abr
|
8m
Cómo usar CrawlForge con agentes de IA de Mastra
Tutorials

Cómo usar CrawlForge con agentes de IA de Mastra

Crea agentes de IA con capacidades de web scraping usando Mastra y CrawlForge. Guía de configuración en TypeScript con integración de herramientas, workflows y ejemplos de agentes.

C
CrawlForge Team
|
21 abr
|
7m
Cómo usar CrawlForge con el Vercel AI SDK
Tutorials

Cómo usar CrawlForge con el Vercel AI SDK

Construye apps de IA con datos web en vivo usando CrawlForge y el Vercel AI SDK. Añade herramientas de web scraping a tu chatbot o agente LLM en menos de 10 minutos.

C
CrawlForge Team
|
7 abr
|
8m

Pie de página

CrawlForge

Web scraping empresarial para agentes de IA. 27 herramientas MCP especializadas diseñadas para desarrolladores modernos que crean sistemas inteligentes.

Producto

  • Funciones
  • Playground
  • Precios
  • Casos de uso
  • Integraciones
  • Alternativas
  • Registro de cambios

Recursos

  • Primeros pasos
  • Referencia de la API
  • Plantillas
  • Guías
  • Blog
  • Glosario
  • Preguntas frecuentes
  • Mapa del sitio

Desarrolladores

  • Protocolo MCP
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

Empresa

  • Acerca de
  • Contacto
  • Privacidad
  • Términos
  • Uso aceptable
  • Cookies

Mantente al día

Recibe las últimas novedades sobre nuevas herramientas y funciones.

Creado con Next.js y el protocolo MCP

© 2025-2026 CrawlForge. Todos los derechos reservados.