CrawlForge MCP
LangChain

Integración con LangChain

Integre CrawlForge MCP con LangChain para crear potentes agentes de IA con capacidades de web scraping. Úselo como cargador de documentos, herramienta o cadena de recuperación personalizada.

Casos de uso

Cargadores de documentos
Cargue páginas web como documentos para almacenes vectoriales y aplicaciones de RAG
Agentes de IA
Dé a los agentes herramientas de web scraping para obtener datos en tiempo real
Cadenas de recuperación
Cree cadenas personalizadas que obtienen y procesan contenido web
Pipelines de investigación
Cree flujos de trabajo de investigación automatizados con la herramienta deep_research

Instalación

Instale LangChain. CrawlForge no tiene un paquete adaptador: el cargador y las herramientas siguientes son clases normales que copia en su proyecto.

Bash
npm install langchain @langchain/core @langchain/openai zod
También necesitará una API key de CrawlForge desde el panel.

Cargador de documentos

Use CrawlForge como cargador de documentos para obtener páginas web para aplicaciones de RAG.

crawlforge.tsTypescript
import { BaseDocumentLoader } from '@langchain/core/document_loaders/base';
import { Document } from '@langchain/core/documents';

const CRAWLFORGE_API = 'https://www.crawlforge.dev/api/v1/tools';

/** Every CrawlForge tool is a POST to /api/v1/tools/<tool_name>. */
export async function callTool<T>(
  tool: string,
  params: Record<string, unknown>,
): Promise<T> {
  const response = await fetch(`${CRAWLFORGE_API}/${tool}`, {
    method: 'POST',
    headers: {
      'X-API-Key': process.env.CRAWLFORGE_API_KEY!,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(params),
  });

  const payload = await response.json();
  if (!payload.success) {
    throw new Error(payload.error?.message ?? 'CrawlForge request failed');
  }
  return payload.data as T;
}

interface ExtractedContent {
  url: string;
  title: string;
  content: string;
  author: string | null;
  publish_date: string | null;
}

/** Loads each URL through extract_content (2 credits per URL). */
export class CrawlForgeLoader extends BaseDocumentLoader {
  constructor(private readonly urls: string[]) {
    super();
  }

  async load(): Promise<Document[]> {
    return Promise.all(
      this.urls.map(async (url) => {
        const data = await callTool<ExtractedContent>('extract_content', { url });
        return new Document({
          pageContent: data.content,
          metadata: {
            source: data.url,
            title: data.title,
            author: data.author,
            publishedAt: data.publish_date,
          },
        });
      }),
    );
  }
}

// ---------- usage ----------

const docs = await new CrawlForgeLoader([
  'https://example.com/page1',
  'https://example.com/page2',
]).load();

console.log(docs[0].pageContent);
console.log(docs[0].metadata.title);
Buena práctica: Use extract_text para contenido limpio o extract_content para la extracción de artículos.

Pipeline de RAG con almacén vectorial

Cree un pipeline de RAG completo con el cargador de documentos de CrawlForge y un almacén vectorial.

Typescript
import { ChatPromptTemplate } from '@langchain/core/prompts';
import { StringOutputParser } from '@langchain/core/output_parsers';
import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
import { MemoryVectorStore } from 'langchain/vectorstores/memory';
import { CrawlForgeLoader } from './crawlforge';

// 1. Load web pages as LangChain documents (2 credits per URL)
const docs = await new CrawlForgeLoader([
  'https://example.com/doc1',
  'https://example.com/doc2',
  'https://example.com/doc3',
]).load();

// 2. Embed them into a vector store
const store = await MemoryVectorStore.fromDocuments(docs, new OpenAIEmbeddings());
const retriever = store.asRetriever({ k: 4 });

// 3. Retrieve the relevant chunks, then answer over them
const prompt = ChatPromptTemplate.fromTemplate(
  'Answer using only this context:\n\n{context}\n\nQuestion: {question}',
);
const model = new ChatOpenAI({ model: 'gpt-4o-mini' });

const question = 'What are the key points from these documents?';
const context = (await retriever.invoke(question))
  .map((doc) => doc.pageContent)
  .join('\n\n');

const answer = await prompt
  .pipe(model)
  .pipe(new StringOutputParser())
  .invoke({ context, question });

console.log(answer);

Herramientas para agentes

Dé a los agentes de LangChain capacidades de web scraping con las herramientas de CrawlForge.

tools.tsTypescript
import { DynamicStructuredTool } from '@langchain/core/tools';
import { ChatOpenAI } from '@langchain/openai';
import { z } from 'zod';
import { callTool } from './crawlforge';

interface SearchResults {
  results: { title: string; url: string; snippet: string }[];
}

export const searchWeb = new DynamicStructuredTool({
  name: 'search_web',
  description: 'Search the web and return ranked results. Costs 5 credits.',
  schema: z.object({
    query: z.string().describe('What to search for'),
    limit: z.number().optional().describe('How many results, 1-100 (default 10)'),
  }),
  func: async ({ query, limit }) => {
    const data = await callTool<SearchResults>('search_web', { query, limit });
    return JSON.stringify(data.results);
  },
});

export const readPage = new DynamicStructuredTool({
  name: 'extract_content',
  description: 'Extract the main article text from one URL. Costs 2 credits.',
  schema: z.object({
    url: z.string().url().describe('The page to read'),
  }),
  func: async ({ url }) => {
    const data = await callTool<{ title: string; content: string }>(
      'extract_content',
      { url },
    );
    return `${data.title}\n\n${data.content}`;
  },
});

// ---------- usage ----------

// These are ordinary LangChain tools, so they also drop straight into an
// agent executor or a LangGraph node.
const model = new ChatOpenAI({ model: 'gpt-4o-mini', temperature: 0 })
  .bindTools([searchWeb, readPage]);

const reply = await model.invoke('Which CrawlForge plan includes 50,000 credits?');

for (const call of reply.tool_calls ?? []) {
  console.log(call.name, call.args);
}
Consejos para agentes: Use nombres y descripciones de herramientas descriptivos para ayudar al LLM a elegir la herramienta adecuada. Cada llamada a una herramienta gasta credits (search_web cuesta 5 y extract_content cuesta 2), así que haga las descripciones lo bastante específicas para que el agente no tenga que adivinar.

Cadena de recuperación personalizada

Cree una cadena personalizada que busca, obtiene y resume contenido web.

Typescript
import { ChatPromptTemplate } from '@langchain/core/prompts';
import { StringOutputParser } from '@langchain/core/output_parsers';
import { RunnableSequence } from '@langchain/core/runnables';
import { ChatOpenAI } from '@langchain/openai';
import { callTool } from './crawlforge';

interface ResearchResult {
  research_report: {
    title: string;
    sections: { executive_summary?: string; findings?: unknown };
  };
}

// deep_research costs 10 credits per call, so put it behind a chain step
// rather than calling it per retrieved chunk.
const research = async (question: string) => {
  const data = await callTool<ResearchResult>('deep_research', {
    research_query: question,
    research_scope: { depth_level: 'moderate' },
  });
  return data.research_report.sections.executive_summary ?? '';
};

const prompt = ChatPromptTemplate.fromTemplate(
  'Based on this research, answer the question.\n\n{context}\n\nQuestion: {question}',
);

const chain = RunnableSequence.from([
  {
    context: (input: { question: string }) => research(input.question),
    question: (input: { question: string }) => input.question,
  },
  prompt,
  new ChatOpenAI({ model: 'gpt-4o-mini' }),
  new StringOutputParser(),
]);

const result = await chain.invoke({
  question: 'What are the latest AI safety research findings?',
});

console.log(result);

Buenas prácticas

  • Elija la herramienta adecuada — Use extract_text (1 credit) para contenido sencillo, deep_research (10 credits) para un análisis exhaustivo
  • Implemente caché — Almacene en caché los documentos obtenidos para evitar llamadas a la API redundantes y ahorrar credits
  • Maneje los límites de tasa — Implemente lógica de reintento con retroceso exponencial para aplicaciones en producción
  • Monitoree el uso de credits — Compruebe los metadatos de los documentos para conocer el uso de credits y configure alertas en su panel
¿Listo para crear con LangChain?
Explore las 29 herramientas de CrawlForge o consulte otras integraciones.
Ver todas las herramientasIntegración con LlamaIndex

Pie de página

CrawlForge MCP

Web scraping empresarial para agentes de IA. 29 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.