En esta página
El Model Context Protocol (MCP) ha cambiado de raíz la forma en que los asistentes de IA interactúan con la web. Esta guía completa cubre todo lo que los desarrolladores necesitan saber sobre el web scraping con MCP, desde los conceptos fundamentales hasta las técnicas avanzadas.
Parte 1: Entendiendo MCP
¿Qué es el Model Context Protocol?
MCP (Model Context Protocol) es un estándar abierto desarrollado por Anthropic que permite a asistentes de IA como Claude conectarse a herramientas y fuentes de datos externas. Piénsalo como un adaptador universal que permite a los modelos de IA usar herramientas especializadas.
┌─────────────┐ ┌───────────────┐ ┌──────────────┐
│ Claude │ ←──→ │ MCP Server │ ←──→ │ External │
│ (AI Model) │ │ (CrawlForge) │ │ Resources │
└─────────────┘ └───────────────┘ └──────────────┘
↑
MCP Protocol
(JSON-RPC over stdio)
Por qué MCP importa para el web scraping
Antes de MCP, los asistentes de IA no podían acceder de forma fiable a los datos web:
| Estrategia | Problemas |
|---|---|
| Datos de entrenamiento | Desactualizados, límite de conocimiento |
| RAG (recuperación) | Limitado a documentos indexados |
| Function calling | Requiere implementación personalizada |
| Plugins de navegador | Inconsistentes, problemas de seguridad |
MCP resuelve esto al proporcionar:
- Interfaz estandarizada - Un protocolo para todas las herramientas
- Datos en tiempo real - Información fresca de cualquier fuente
- Componibilidad de herramientas - Combina varias herramientas sin fricción
- Modelo de seguridad - Acceso controlado a recursos externos
Cómo funciona MCP
MCP usa una arquitectura cliente-servidor con JSON-RPC:
1. Descubrimiento del servidor
{
"mcpServers": {
"crawlforge": {
"command": "npx",
"args": ["crawlforge-mcp-server"]
}
}
}2. Registro de herramientas
{
"tools": [
{
"name": "fetch_url",
"description": "Fetch content from a URL",
"inputSchema": {
"type": "object",
"properties": {
"url": { "type": "string", "format": "uri" }
},
"required": ["url"]
}
}
]
}3. Invocación de herramientas
{
"method": "tools/call",
"params": {
"name": "fetch_url",
"arguments": {
"url": "https://example.com"
}
}
}4. Respuesta
{
"result": {
"content": "<html>...",
"status": 200,
"headers": {...}
}
}Parte 2: El ecosistema del web scraping con MCP
Servidores de scraping MCP
Varios MCP servers ofrecen capacidades de web scraping:
| Servidor | Herramientas | Enfoque |
|---|---|---|
| CrawlForge | 20 | Scraping integral, investigación, sigilo |
| Firecrawl | ~5 | Scraping y rastreo básicos |
| Browser MCP | ~3 | Automatización del navegador |
| Fetch MCP | 1 | Solicitudes HTTP simples |
Por qué CrawlForge lidera
CrawlForge se construyó específicamente para MCP con la cobertura de herramientas más amplia:
CrawlForge: ████████████████████ 26 tools
Firecrawl: █████ 5 tools
Browser: ███ 3 tools
Fetch: █ 1 tool
Parte 3: Las 26 herramientas de CrawlForge explicadas
Scraping básico (1-2 credits)
1. fetch_url (1 credit)
La base del web scraping: obtiene el HTML en bruto de cualquier URL.
// Usage:
"Fetch https://example.com"
// Returns:
{
"html": "<html>...",
"status": 200,
"headers": {...},
"timing": { "total": 523 }
}Cuándo usarla: Punto de partida para cualquier tarea de scraping. Pruébala siempre primero.
2. extract_text (1 credit)
Extrae contenido de texto limpio, eliminando etiquetas HTML, scripts y estilos.
// Usage:
"Extract text from https://example.com/article"
// Returns:
{
"text": "Article headline\n\nFirst paragraph...",
"wordCount": 1247,
"readingTime": 5
}Cuándo usarla: Entradas de blog, artículos, documentación donde necesitas texto legible.
3. extract_links (1 credit)
Descubre todos los enlaces de una página con filtrado opcional.
// Usage:
"Extract all links from https://example.com"
// With filtering:
{
"url": "https://example.com",
"filter_external": true // Internal links only
}
// Returns:
{
"links": [
{ "href": "/about", "text": "About Us" },
{ "href": "/products", "text": "Products" }
],
"total": 45
}Cuándo usarla: Exploración de sitios, encontrar páginas para hacer scraping, construir sitemaps.
4. extract_metadata (1 credit)
Extrae metadatos SEO: título, descripción, Open Graph, JSON-LD.
// Usage:
"Get metadata from https://example.com"
// Returns:
{
"title": "Example Site - Homepage",
"description": "Welcome to Example...",
"openGraph": {
"title": "Example Site",
"image": "https://example.com/og.png"
},
"jsonLd": [...]
}Cuándo usarla: Análisis SEO, vistas previas de contenido, extracción de datos estructurados.
Extracción estructurada (2-3 credits)
5. scrape_structured (2 credits)
Extrae datos específicos usando selectores CSS.
// Usage:
{
"url": "https://example.com/products",
"selectors": {
"title": "h1.product-title",
"price": "span.price",
"description": ".product-description"
}
}
// Returns:
{
"data": {
"title": "Product Name",
"price": "$99.99",
"description": "Product description..."
}
}Cuándo usarla: Scraping de comercio electrónico, datos estructurados, diseños de página conocidos.
6. extract_content (2 credits)
Extracción inteligente de artículos (como Readability).
// Usage:
"Extract the main content from https://blog.example.com/post"
// Returns:
{
"title": "Blog Post Title",
"author": "John Smith",
"publishedDate": "2026-01-15",
"content": "Clean article text...",
"images": ["..."],
"readingTime": 7
}Cuándo usarla: Artículos de noticias, entradas de blog, contenido editorial.
7. map_site (2 credits)
Descubre la estructura del sitio y genera sitemaps.
// Usage:
{
"url": "https://example.com",
"max_urls": 1000,
"include_sitemap": true
}
// Returns:
{
"pages": [
{ "url": "/", "title": "Home", "depth": 0 },
{ "url": "/about", "title": "About", "depth": 1 },
...
],
"structure": {
"/": ["/about", "/products", "/blog"],
"/products": ["/products/1", "/products/2"]
}
}Cuándo usarla: Auditorías de sitios, planificación de rastreos, descubrimiento de contenido.
8. analyze_content (3 credits)
Análisis NLP: idioma, sentimiento, temas, entidades.
// Usage:
"Analyze this content: [text]"
// Returns:
{
"language": "en",
"sentiment": { "score": 0.7, "label": "positive" },
"topics": ["technology", "AI", "automation"],
"entities": [
{ "text": "OpenAI", "type": "organization" },
{ "text": "GPT-4", "type": "product" }
],
"readability": { "grade": 12, "score": 45 }
}Cuándo usarla: Análisis de contenido, seguimiento de sentimiento, extracción de temas.
Scraping avanzado (4-5 credits)
9. process_document (2 credits)
Maneja PDFs y documentos.
// Usage:
{
"source": "https://example.com/report.pdf",
"sourceType": "pdf_url"
}
// Returns:
{
"text": "Extracted PDF text...",
"pages": 15,
"metadata": {
"author": "...",
"created": "..."
}
}Cuándo usarla: Artículos de investigación, informes, PDFs de documentación.
10. summarize_content (4 credits)
Resumen impulsado por IA.
// Usage:
"Summarize this article: [long text]"
// Returns:
{
"summary": "Concise summary...",
"keyPoints": [
"Point 1",
"Point 2",
"Point 3"
],
"wordReduction": "85%"
}Cuándo usarla: Documentos largos, síntesis de investigación, resúmenes de contenido.
11. crawl_deep (4 credits)
Rastreo de varias páginas con profundidad configurable.
// Usage:
{
"url": "https://example.com",
"max_depth": 3,
"max_pages": 100,
"include_patterns": ["/blog/*"],
"exclude_patterns": ["/admin/*"]
}
// Returns:
{
"pages": [...], // All crawled pages
"stats": {
"total": 87,
"successful": 85,
"failed": 2
}
}Cuándo usarla: Scraping de un sitio completo, agregación de contenido, archivado.
12. batch_scrape (5 credits)
Scraping en paralelo de varias URLs.
// Usage:
{
"urls": [
"https://example1.com",
"https://example2.com",
// ... up to 50 URLs
],
"maxConcurrency": 10
}
// Returns:
{
"results": [
{ "url": "...", "success": true, "data": {...} },
...
],
"stats": { "successful": 48, "failed": 2 }
}Cuándo usarla: Varias URLs conocidas, monitorización de competidores, seguimiento de precios.
13. scrape_with_actions (5 credits)
Automatización del navegador con acciones.
// Usage:
{
"url": "https://example.com/app",
"actions": [
{ "type": "wait", "selector": ".content" },
{ "type": "click", "selector": "#load-more" },
{ "type": "wait", "timeout": 2000 },
{ "type": "scroll", "selector": "body" },
{ "type": "screenshot" }
]
}
// Returns:
{
"finalContent": "...",
"screenshots": ["base64..."],
"actionsExecuted": 5
}Cuándo usarla: SPAs, scroll infinito, contenido dinámico, sitios que requieren inicio de sesión.
14. search_web (5 credits)
Integración con la búsqueda de Google.
// Usage:
{
"query": "web scraping best practices 2026",
"limit": 10,
"site": "github.com" // Optional site filter
}
// Returns:
{
"results": [
{
"title": "...",
"url": "...",
"snippet": "..."
},
...
]
}Cuándo usarla: Descubrimiento, encontrar fuentes, punto de partida de una investigación.
Herramientas especializadas (3-10 credits)
15. stealth_mode (5 credits)
Evasión de detección anti-bot (detallado en la guía del modo sigiloso).
// Usage:
{
"operation": "create_context",
"stealthConfig": {
"level": "advanced",
"hideWebDriver": true,
"randomizeFingerprint": true,
"simulateHumanBehavior": true
}
}Cuándo usarla: Sitios protegidos, evasión de Cloudflare, evasión de anti-bot.
16. track_changes (3 credits)
Monitorización de contenido y detección de cambios.
// Usage:
{
"url": "https://example.com/pricing",
"operation": "create_baseline",
"monitoringOptions": {
"interval": 86400000, // Daily
"notificationThreshold": "moderate"
}
}
// Returns (on change):
{
"changes": [
{
"type": "text_change",
"path": ".pricing-tier-1",
"before": "$19/mo",
"after": "$29/mo",
"significance": "major"
}
]
}Cuándo usarla: Monitorización de precios, seguimiento de competidores, actualizaciones de contenido.
17. localization (2 credits)
Scraping geosegmentado.
// Usage:
{
"operation": "configure_country",
"countryCode": "GB",
"language": "en-GB"
}
// Then scrape to get UK-specific content/pricingCuándo usarla: Precios regionales, contenido localizado, datos con restricción geográfica.
18. extract_structured (3 credits)
Extracción basada en esquema impulsada por LLM con respaldo en selectores CSS.
// Usage:
{
"url": "https://example.com/product/123",
"schema": {
"type": "object",
"properties": {
"title": { "type": "string" },
"price": { "type": "number" }
},
"required": ["title"]
},
"prompt": "Extract the product name and price"
}Cuándo usarla: Cuando quieres una salida tipada que coincida con un esquema sin escribir selectores.
19. generate_llms_txt (5 credits)
Analiza un sitio y emite archivos llms.txt y llms-full.txt conformes al estándar.
// Usage:
{
"url": "https://example.com",
"format": "both",
"complianceLevel": "standard",
"outputOptions": {
"organizationName": "Example Inc.",
"contactEmail": "ai@example.com"
}
}Cuándo usarla: Publicar pautas de interacción con IA para tu sitio web.
20. deep_research (10 credits)
Investigación integral de múltiples fuentes (detallado en la guía de investigación profunda).
// Usage:
{
"topic": "quantum computing commercialization",
"maxUrls": 50,
"enableSourceVerification": true,
"enableConflictDetection": true
}
// Returns:
{
"synthesis": "Comprehensive analysis...",
"sources": [...],
"conflicts": [...],
"citations": [...]
}Cuándo usarla: Proyectos de investigación, diligencia debida, análisis de mercado.
Parte 4: Guía de integración
Configuración de Claude Code
# 1. Install CrawlForge MCP server
npm install -g crawlforge-mcp-server
# 2. Run setup wizard
npx crawlforge-setup
# 3. Add to Claude Code
claude
> /mcp add crawlforge npx crawlforge-mcp-server
# 4. Verify
> /mcp list
# Should show: crawlforge (26 tools)Configuración de Claude Desktop
Edita el archivo de configuración de Claude Desktop:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"crawlforge": {
"command": "npx",
"args": ["crawlforge-mcp-server"],
"env": {
"CRAWLFORGE_API_KEY": "cf_live_your_key_here"
}
}
}
}Integración en una aplicación personalizada
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const transport = new StdioClientTransport({
command: "npx",
args: ["crawlforge-mcp-server"],
env: {
CRAWLFORGE_API_KEY: process.env.CRAWLFORGE_API_KEY
}
});
const client = new Client({
name: "my-app",
version: "1.0.0"
});
await client.connect(transport);
// List available tools
const tools = await client.listTools();
console.log(`Available tools: ${tools.tools.length}`);
// Call a tool
const result = await client.callTool({
name: "fetch_url",
arguments: {
url: "https://example.com"
}
});Parte 5: Mejores prácticas
Optimización de credits
| Objetivo | Caro | Eficiente |
|---|---|---|
| Comprobar si una página existe | deep_research (10) | fetch_url (1) |
| Obtener el texto de un artículo | scrape_with_actions (5) | extract_content (2) |
| Encontrar URLs de un competidor | search_web × 10 (50) | extract_links (1) |
| Hacer scraping de 20 páginas de producto | fetch_url × 20 (20) | batch_scrape (5) |
Manejo de errores
// Always handle failures gracefully
try {
const result = await fetchUrl(url);
if (result.status >= 400) {
// Try with stealth mode
return await stealthMode(url);
}
return result;
} catch (error) {
// Log and retry with exponential backoff
await sleep(retryDelay * attempt);
return retry(url, attempt + 1);
}Límites de velocidad
Respeta los sitios objetivo:
// Good: Reasonable delays
for (const url of urls) {
await scrape(url);
await sleep(1000 + Math.random() * 2000); // 1-3s delay
}
// Better: Use batch_scrape with built-in rate limiting
await batchScrape(urls, { delayBetweenRequests: 1500 });Caché
No hagas scraping de la misma URL dos veces:
const cache = new Map<string, ScrapedContent>();
async function smartScrape(url: string) {
if (cache.has(url)) {
return cache.get(url);
}
const result = await fetchUrl(url);
cache.set(url, result);
return result;
}Parte 6: El futuro del scraping con MCP
Tendencias emergentes
- Extracción nativa de IA - LLMs analizando directamente HTML no estructurado
- Scrapers autorreparables - La IA se adapta a los cambios del sitio automáticamente
- Búsqueda semántica - Consultas en lenguaje natural sobre los datos extraídos
- Análisis entre sitios - La IA conectando información entre fuentes
Hoja de ruta de CrawlForge
Próximamente en 2026:
- Monitorización en tiempo real - Notificaciones de cambios al instante
- Generación de esquemas con IA - Plantillas de extracción automáticas
- Flujos de trabajo entre herramientas - Encadenar herramientas de forma inteligente
- Privacidad mejorada - Opciones de scraping de conocimiento cero
Primeros pasos
¿Listo para empezar con el web scraping con MCP? Este es tu camino:
Plan gratuito (perfecto para empezar)
- 1.000 credits de prueba puntuales
- Las 26 herramientas disponibles
- No se requiere tarjeta de crédito
# Quick start
npm install -g crawlforge-mcp-server
npx crawlforge-setup
# Visit: https://crawlforge.dev/signupQué puedes hacer con 1.000 credits
| Caso de uso | Herramientas | Credits | Capacidad mensual |
|---|---|---|---|
| Scraping básico | fetch_url | 1 | 1.000 páginas |
| Extracción de artículos | extract_content | 2 | 500 artículos |
| Mapeo de sitios | map_site | 2 | 500 sitios |
| Trabajos por lotes | batch_scrape | 5 | 200 lotes (10K URLs) |
| Proyectos de investigación | deep_research | 10 | 100 temas |
Resumen
MCP ha revolucionado el web scraping para aplicaciones de IA. Puntos clave:
- MCP es el estándar - Todos los principales asistentes de IA lo admiten
- CrawlForge lidera con 26 herramientas - 4 veces más que las alternativas
- Empieza simple - Usa fetch_url (1 credit) antes que las herramientas avanzadas
- Combina herramientas - Encadena operaciones para flujos de trabajo potentes
- Sé ético - Respeta robots.txt y los límites de velocidad
Recursos relacionados:
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
Sobre el autor
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.