Spicrawl
Servidor MCP de web scraping con 24 herramientas. Lee una URL como Markdown, HTML, texto, JSON o PDF, renderiza JavaScript, extrae datos estructurados, ejecuta trabajos por lotes, toma capturas de pantalla y mantiene sesiones de navegador.
Servidor MCP alojado
npx add-mcp 'https://mcp.spicrawl.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Servidor MCP de Spicrawl
El servidor MCP de Spicrawl es un servidor del Protocolo de Contexto de Modelos (MCP) que brinda a los agentes de IA en Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Gemini CLI y Codex capacidades de extracción web a Markdown, extracción de datos estructurados, capturas de pantalla, sesiones de navegador y extracción por lotes como herramientas nativas.
Documentación · Obtén una clave API · SDK de TypeScript · CLI · Complementos para agentes · Registro de cambios
Inicio rápido
-
Crea una clave API en app.spicrawl.com. Las claves comienzan con
spicrawl_live_ospicrawl_test_. -
Conecta el endpoint alojado,
https://mcp.spicrawl.com/mcp(MCP Streamable HTTP, nada que instalar):export SPICRAWL_API_KEY=spicrawl_live_... claude mcp add --transport http spicrawl https://mcp.spicrawl.com/mcp \ --header "Authorization: Bearer $SPICRAWL_API_KEY"Codex:
codex mcp add spicrawl --url https://mcp.spicrawl.com/mcp --bearer-token-env-var SPICRAWL_API_KEY -
O ejecútalo localmente sobre stdio (Node.js 20+), para clientes que solo lanzan servidores locales:
claude mcp add spicrawl --env SPICRAWL_API_KEY=$SPICRAWL_API_KEY -- npx -y @spicrawl/mcp -
Pídele a tu agente: "Usa Spicrawl para leer https://example.com/pricing como markdown y lista cada plan con su precio." Llama a
spicrawl_scrapey obtiene la página de vuelta como Markdown.
Ambos transportes sirven las mismas herramientas spicrawl_* (25 están definidas; el endpoint alojado lista 24 hasta que se lancen los navegadores remotos, consulta Herramientas), y cada llamada se ejecuta bajo tu clave con los mismos alcances, límites y créditos que una llamada directa a la API.
Qué hace
- Extrae cualquier URL a Markdown, texto, HTML, un sobre JSON o un PDF impreso con una sola herramienta,
spicrawl_scrape. Markdown es el valor predeterminado y reduce la página a su contenido principal. - Renderiza JavaScript con
render: true(3 créditos). Una solicitud fetch simple cuesta 1 crédito, las capturas de pantalla, los PDF yactionsusan un navegador completo (8 créditos), ymode: "auto"escala de fetch a navegador y cobra solo el nivel que funcionó (tabla de precios). Nunca eliges el renderizado tú mismo; Spicrawl elige el más económico que pueda hacer lo que la solicitud pide. - Extrae datos estructurados con un mapa de selectores CSS/XPath (
extract) o desde el JSON-LD, OpenGraph, Twitter Card y microdatos que una página publica (autoparse). - Controla la página antes de la captura con 8 acciones de navegador tipadas:
click,fill,wait_for,wait_for_navigation,scroll(incluido el desplazamiento infinito),select,evaluateyscreenshot. - Devuelve capturas de pantalla y PDF que el modelo puede ver: las capturas de pantalla llegan como bloques de imagen MCP (hasta 5 MB de base64 cada una) y las páginas impresas como bloques de recurso
application/pdf(hasta 10 MB). - Extrae por lotes miles de URLs como un solo trabajo asíncrono, hasta 10,000 elementos por llamada, con 9 herramientas para enviar, consultar, paginar resultados, reintentar, cancelar y mantener un trabajo abierto para rastreo.
- Mantén un navegador con sesión iniciada con sesiones persistentes: cookies, almacenamiento y un nivel de renderizado fijo reutilizado entre extracciones.
- Responde "¿cuánto costó eso?" desde las herramientas de uso y registro de solicitudes, y lee la documentación de Spicrawl desde dentro del agente.
Qué herramienta usar
- Si necesitas el contenido o los datos de una página ahora, usa
spicrawl_scrape. - Si la página está en blanco o es un esqueleto sin JavaScript, llama a
spicrawl_scrapede nuevo conrender: true. - Si conoces la estructura de la página, usa
extractcon selectores CSS; si no la conoces, pruebaautoparse. - Si tienes más de unas 20 URLs, usa
spicrawl_batch_submit, luegospicrawl_batch_statusyspicrawl_batch_results. - Si descubres URLs sobre la marcha (rastreo), envía con
open: true, añade conspicrawl_batch_add_itemsy finaliza conspicrawl_batch_close. - Si debes iniciar sesión primero, usa
spicrawl_session_createy pasa suidcomosession_idaspicrawl_scrape. - Si una llamada falló y necesitas saber por qué, usa
spicrawl_request_getcon el id de solicitud, ospicrawl_requests_listcononly_errors. - Si no estás seguro de un parámetro o un código de error, usa
spicrawl_docs_searchantes de adivinar.
Herramientas
25 herramientas, agrupadas por tarea. El endpoint alojado lista 24 hasta que se lancen los navegadores remotos: su tools/list sin clave y la tarjeta del servidor omiten spicrawl_browser_connect_url (Próximamente), mientras que una sesión abierta con tu clave y el paquete stdio (npx -y @spicrawl/mcp) lista las 25. Las herramientas rechazan argumentos desconocidos, por lo que un campo mal escrito falla con un error que lo nombra en lugar de descartarse silenciosamente. Cada herramienta establece un title y anotaciones explícitas de readOnlyHint, destructiveHint y openWorldHint, para que un cliente sepa qué llamadas confirmar: spicrawl_scrape no es de solo lectura (sus method y actions pueden enviar formularios), y spicrawl_batch_cancel, spicrawl_session_release y spicrawl_session_delete son destructivas. Cada herramienta también declara un outputSchema y devuelve structuredContent coincidentes junto al mismo texto que siempre devolvió, para que un cliente pueda leer campos (credits, status, next_cursor, ...) sin analizar texto. Los esquemas listan en qué puede confiar un agente y permanecen abiertos: los campos que la API añada más tarde pasan, y los estados y niveles son cadenas simples. Una herramienta que devuelve un documento o un arreglo JSON (spicrawl_docs_read, spicrawl_batch_task_content) lo coloca bajo content en structuredContent. Referencia completa de argumentos: docs.spicrawl.com/agents/mcp.
Extrae un sitio web a Markdown
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
spicrawl_scrape | Recupera una URL como markdown (predeterminado), text, html, json o pdf, con renderizado, extracción, enlaces, capturas de pantalla y acciones de navegador opcionales. | url, format, render, mode, main_content_only, include_tags, exclude_tags, extract, autoparse, links, screenshot, actions, wait_for, session_id, proxy, cache, max_cost |
Extrae por lotes muchas URLs
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
spicrawl_batch_submit | Pone en cola muchas URLs como un trabajo asíncrono con configuraciones compartidas; devuelve el trabajo con estimated_credits. | urls o items, render, format, open, max_attempts, credit_budget, max_cost |
spicrawl_batch_list | Lista los trabajos por lotes del proyecto, del más reciente al más antiguo. | status, limit (máx. 200), cursor |
spicrawl_batch_status | Estado y progreso de un trabajo. | job_id |
spicrawl_batch_results | Una página de elementos terminados; funciona mientras el trabajo se ejecuta. | job_id, status, limit (máx. 5000), cursor |
spicrawl_batch_task_content | La carga útil completa de un elemento. | job_id, seq |
spicrawl_batch_cancel | Cancela un trabajo; los elementos terminados conservan sus resultados. | job_id |
spicrawl_batch_retry | Vuelve a poner en cola cada elemento fallido. | job_id |
spicrawl_batch_add_items | Añade URLs a un trabajo enviado con open: true. | job_id, urls o items |
spicrawl_batch_close | Detiene que un trabajo abierto acepte elementos para que pueda completarse. | job_id |
Sesiones de navegador
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
spicrawl_session_create | Crea una identidad de navegador persistente (cookies, almacenamiento, un nivel de renderizado fijo). | engine, ttl_seconds, session_context |
spicrawl_session_list | Lista sesiones, del más reciente al más antiguo. | status, engine, limit, cursor |
spicrawl_session_get | Estado de una sesión, nivel de renderizado, salida, uso y caducidad. | session_id |
spicrawl_session_context | Vuelca las cookies y el almacenamiento de una sesión activa (contiene secretos). | session_id |
spicrawl_session_release | Finaliza una sesión; su registro permanece como released. | session_id |
spicrawl_session_delete | Elimina permanentemente una sesión y su estado. | session_id |
Uso e historial de solicitudes
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
spicrawl_usage | Uso de grado de facturación en un rango de fechas (alcance read). | from, to, group_by, metrics |
spicrawl_usage_summary | Totales del período actual (alcance read). | ninguno |
spicrawl_usage_reconciliation | Desviación de un día entre el registro de solicitudes y el resumen facturado (alcance read). | day |
spicrawl_requests_list | Llamadas API recientes con estado, código de error, nivel de renderizado, latencia y créditos. | only_errors, status, limit, all_projects |
spicrawl_request_get | El registro completo de una llamada. | id |
Documentación
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
spicrawl_docs_search | Busca en la documentación de Spicrawl; un código de error también enlaza a su entrada. | query, limit (1-20, predeterminado 8) |
spicrawl_docs_read | Lee una página de documentación como Markdown (truncada por encima de 60,000 caracteres). | path |
spicrawl_docs_index | El llms.txt de la documentación: cada página con su título y enlace .md. | ninguno |
Próximamente
spicrawl_browser_connect_url acuñará una URL WebSocket CDP de un solo uso para controlar un navegador alojado por Spicrawl desde cualquier cliente CDP; los navegadores remotos aún no están disponibles. Es la herramienta número 25 y la única que el listado alojado sin clave y la tarjeta del servidor omiten (24 herramientas allí). Los esquemas también aceptan ai_extract, stealth, extract_preset, premium_proxy, proxy_country y sticky_key antes del lanzamiento. Los agentes no deberían enviarlas todavía. Para listar solo lo que funciona hoy, establece SPICRAWL_MCP_HIDE_UNAVAILABLE=1 (consulta Variables de entorno).
Ejemplos de indicaciones
- "Extrae https://example.com/pricing como markdown y resume los planes."
- "Obtén el nombre del producto, el precio y el estado de stock de esta URL." (
spicrawl_scrapeconextractoautoparse) - "Toma una captura de pantalla de página completa de https://example.com después de que desaparezca el banner de cookies." (
render,actions,screenshot_fullpage) - "Extrae estas 500 URLs y dame el título de cada página." (
spicrawl_batch_submit, luegospicrawl_batch_results) - "¿Por qué falló mi última extracción?" (
spicrawl_requests_listcononly_errors, luegospicrawl_request_get) - "¿Cuántos créditos he usado este mes?" (
spicrawl_usage_summary)
Configura tu cliente MCP
Coloca tu clave en SPICRAWL_API_KEY y refiérela desde la configuración donde el cliente lo permita, para que la clave nunca termine en un archivo confirmado.
Claude Code
Endpoint alojado, almacenado solo para ti (añade --scope user para cada proyecto):
claude mcp add --transport http spicrawl https://mcp.spicrawl.com/mcp \
--header "Authorization: Bearer $SPICRAWL_API_KEY"
Para compartirlo con un equipo, confirma .mcp.json en la raíz del proyecto. Claude Code expande ${VAR}, por lo que se usa la clave propia de cada compañero:
{
"mcpServers": {
"spicrawl": {
"type": "http",
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${SPICRAWL_API_KEY}" }
}
}
}
O instala el complemento, que incluye el servidor MCP y la habilidad de agente de Spicrawl:
claude plugin marketplace add OfficialSpicrawl/agent-plugins
claude plugin install spicrawl@spicrawl-plugins
Verifica con claude mcp list, o /mcp en una sesión. Más: docs.spicrawl.com/agents/claude-code.
Claude Desktop
El claude_desktop_config.json de Claude Desktop inicia solo servidores locales (stdio), y los conectores personalizados no pueden enviar un encabezado Authorization, así que ejecuta el paquete localmente. El archivo está en ~/Library/Application Support/Claude/claude_desktop_config.json en macOS y %APPDATA%\Claude\claude_desktop_config.json en Windows:
{
"mcpServers": {
"spicrawl": {
"command": "npx",
"args": ["-y", "@spicrawl/mcp"],
"env": { "SPICRAWL_API_KEY": "spicrawl_live_..." }
}
}
}
Reinicia Claude Desktop después de guardar.
Cursor
Use el botón **Add to Cursor** de arriba, o añada esto a `.cursor/mcp.json` en el proyecto (o `~/.cursor/mcp.json` para cada proyecto). Cursor resuelve `${env:NAME}` en `url` y `headers`, así que inicie Cursor desde un entorno donde `SPICRAWL_API_KEY` esté definida:{
"mcpServers": {
"spicrawl": {
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
VS Code (GitHub Copilot)
Use el botón Install in VS Code de arriba, o añada esto a .vscode/mcp.json. VS Code usa la clave servers, y la variable de entrada hace que pida la clave una vez y la almacene de forma segura, por lo que el archivo es seguro para confirmar:
{
"inputs": [
{ "type": "promptString", "id": "spicrawl-api-key", "description": "Spicrawl API key", "password": true }
],
"servers": {
"spicrawl": {
"type": "http",
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${input:spicrawl-api-key}" }
}
}
}
VS Code no expande ${env:...} dentro de headers, así que use la variable de entrada. Más: docs.spicrawl.com/agents/github-copilot.
Windsurf (Devin Desktop)
Windsurf ahora se llama Devin Desktop. Para el agente predeterminado Devin Local, añada el servidor en el ámbito local (guardado en .devin/mcp_config.local.json, que está en gitignore):
devin mcp add spicrawl https://mcp.spicrawl.com/mcp -H "Authorization: Bearer $SPICRAWL_API_KEY"
Para el agente heredado Cascade, edite ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json en Windows). Cascade lee la URL de serverUrl y reemplaza ${env:...}:
{
"mcpServers": {
"spicrawl": {
"serverUrl": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
Gemini CLI
Gemini CLI elimina las variables cuyos nombres contienen KEY, TOKEN o AUTH antes de expandir los encabezados, así que exporte la clave con otro nombre:
export SPICRAWL_MCP_BEARER="$SPICRAWL_API_KEY"
Luego añada a ~/.gemini/settings.json (o .gemini/settings.json para un proyecto). Streamable HTTP usa la clave httpUrl:
{
"mcpServers": {
"spicrawl": {
"httpUrl": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer $SPICRAWL_MCP_BEARER" }
}
}
}
O: gemini mcp add --scope user --transport http --header 'Authorization: Bearer $SPICRAWL_MCP_BEARER' spicrawl https://mcp.spicrawl.com/mcp. Ejecute /mcp para verificar. Más: docs.spicrawl.com/agents/gemini-cli.
Codex
Codex lee la clave del entorno cada vez que se conecta, por lo que la clave nunca termina en un archivo:
codex mcp add spicrawl --url https://mcp.spicrawl.com/mcp --bearer-token-env-var SPICRAWL_API_KEY
El equivalente ~/.codex/config.toml (o .codex/config.toml en un proyecto de confianza):
[mcp_servers.spicrawl]
url = "https://mcp.spicrawl.com/mcp"
bearer_token_env_var = "SPICRAWL_API_KEY"
En su lugar, stdio local:
[mcp_servers.spicrawl]
command = "npx"
args = ["-y", "@spicrawl/mcp"]
env = { SPICRAWL_API_KEY = "spicrawl_live_..." }
Smithery y otras puertas de enlace
Una puerta de enlace que pasa un parámetro de conexión como encabezado no siempre puede enviar Authorization: Bearer <key>: Smithery asigna un parámetro a un encabezado pero envía el valor sin procesar, sin el prefijo Bearer , y un cliente a menudo no puede nombrar su fuente authorization. /mcp acepta la clave en cualquiera de estos encabezados:
| Encabezado | Valor |
|---|---|
x-api-key | spicrawl_live_... (recomendado para una puerta de enlace) |
api-key | spicrawl_live_... |
Authorization | spicrawl_live_... (la clave sin procesar, sin Bearer ), o Bearer spicrawl_live_... |
En Smithery, haga que la clave API sea un parámetro de conexión, asígnela al encabezado x-api-key y márquela como secreta. O asígnela a Authorization y envíe la clave sin procesar; el servidor la acepta cuando todo el valor es una clave de Spicrawl.
La clave puede dejarse opcional en el esquema de conexión (sin required): initialize, ping y tools/list en /mcp responden sin clave, con la misma lista de herramientas que la tarjeta del servidor (24 herramientas, sin spicrawl_browser_connect_url), por lo que un directorio puede listar las herramientas. Cada llamada a una herramienta aún necesita una clave válida y se rechaza con 401 de lo contrario; no se abre ninguna sesión y no se factura ni se lee nada sin una. Diga en la descripción del parámetro que se necesita para ejecutar cualquier herramienta.
Si se envía más de una, la primera que contenga una clave bien formada gana, en el orden Authorization: Bearer, Authorization sin procesar, x-api-key, api-key. Una clave en la cadena de consulta no se lee, porque las URL terminan en los registros de acceso. /chatgpt/mcp acepta solo tokens de acceso OAuth y no acepta ninguna de estas.
Cualquier otro cliente MCP
| Configuración | Valor |
|---|---|
| Transporte | Streamable HTTP |
| URL | https://mcp.spicrawl.com/mcp |
| Encabezado | Authorization: Bearer <your key> (o x-api-key: <your key>) |
Un cliente solo stdio ejecuta npx -y @spicrawl/mcp con SPICRAWL_API_KEY en su entorno. El servidor acepta solo claves API, no OAuth. Páginas de configuración para más clientes (OpenCode, Zed, JetBrains, Cline, Goose y otros): docs.spicrawl.com/agents/mcp.
Variables de entorno
| Variable | Predeterminado | Usado por | Propósito |
|---|---|---|---|
SPICRAWL_API_KEY | ninguno (requerido) | stdio | Su clave API. El servidor HTTP la ignora y usa el token de portador de cada llamador. |
SPICRAWL_BASE_URL | https://api.spicrawl.com (stdio), http://127.0.0.1:8080 (HTTP) | ambos | La API de Spicrawl que llaman las herramientas. |
SPICRAWL_PUBLIC_BASE_URL | SPICRAWL_BASE_URL | ambos | La API tal como la alcanza el usuario final, usada solo en las URL devueltas. |
SPICRAWL_DOCS_URL | https://docs.spicrawl.com | ambos | URL base de documentación para las herramientas de documentación. Su clave nunca se envía allí. |
SPICRAWL_DOCS_HOST | ninguno | ambos | Heredado: un origen cuya documentación está en /docs. Se lee solo cuando SPICRAWL_DOCS_URL no está definida. |
SPICRAWL_MCP_ADDR | 127.0.0.1:8090 | HTTP | Dirección de escucha, host:port. |
SPICRAWL_MCP_SESSION_IDLE_MS | 1800000 (30 min) | HTTP | Las sesiones MCP inactivas se eliminan después de este tiempo. |
SPICRAWL_MCP_HIDE_UNAVAILABLE | off | ambos | 1, true, yes o on deja fuera lo que se anuncia pero aún no está disponible: spicrawl_browser_connect_url no se registra (24 herramientas en lugar de 25) y cada argumento marcado "Próximamente" se elimina de los esquemas (ai_extract, stealth, extract_preset, premium_proxy, proxy_country, sticky_key, y la sesión rotate_ip, region_pool y fingerprint). Se lee cuando el servidor inicia una sesión, así que reinicie el proceso después de cambiarla. El tools/list sin clave y la tarjeta del servidor se comportan como si siempre estuviera activada. |
SPICRAWL_CHATGPT_ENABLED | off | HTTP | 1, true, yes o on activa el endpoint de ChatGPT. Off, /chatgpt/mcp, sus metadatos y el desafío de OpenAI responden todos 404. |
SPICRAWL_CHATGPT_RESOURCE | https://mcp.spicrawl.com/chatgpt/mcp | HTTP | El identificador de recurso OAuth. Los tokens deben emitirse exactamente para este aud; los metadatos se publican en /.well-known/oauth-protected-resource + su ruta. |
SPICRAWL_OAUTH_ISSUER | https://app.spicrawl.com | HTTP | El servidor de autorización, listado en los metadatos. Los tokens se inspeccionan en <issuer>/api/oauth/introspect. |
SPICRAWL_OAUTH_INTROSPECT_SECRET | ninguno | HTTP | El secreto de portador de este servidor en el endpoint de introspección. Sin definir, cada token se responde 503. |
SPICRAWL_CHATGPT_ROOT_PRM | off | HTTP | También sirve los metadatos en la raíz /.well-known/oauth-protected-resource. Off por defecto porque /mcp acepta claves API y no debe anunciar OAuth. |
SPICRAWL_OPENAI_APPS_CHALLENGE | ninguno | HTTP | El token de verificación de dominio de OpenAI servido en /.well-known/openai-apps-challenge. |
SPICRAWL_OPENAI_APPS_CHALLENGE_FILE | ninguno | HTTP | Un archivo que contiene ese token (los espacios circundantes y la nueva línea final se eliminan). Se lee cuando SPICRAWL_OPENAI_APPS_CHALLENGE no está definida. |
Sin variable de documentación definida, un servidor apuntado a una API autoalojada lee la documentación propia de esa API en <SPICRAWL_PUBLIC_BASE_URL or SPICRAWL_BASE_URL>/docs.
Autoalojar el servidor MCP sobre HTTP
El endpoint alojado ejecuta el servidor Streamable HTTP de este paquete. Para ejecutar el suyo propio:
SPICRAWL_MCP_ADDR=127.0.0.1:8090 \
SPICRAWL_BASE_URL=https://api.spicrawl.com \
npx -y @spicrawl/mcp --http
SPICRAWL_BASE_URLpor defecto eshttp://127.0.0.1:8080en modo HTTP (una API de Spicrawl en el mismo host), no la API pública. Establézcala enhttps://api.spicrawl.compara servir la API pública.- MCP se sirve en
POST/GET/DELETE /mcp; liveness enGET /healthz(sin autenticación). GET /.well-known/mcp/server-card.json(sin autenticación,Cache-Control: public, max-age=3600) es una tarjeta de servidor estática para directorios como Smithery que no pueden escanear/mcpsin una clave:serverInfo, el transporte, la autenticación de portador y la lista de herramientas. Las herramientas se leen de las mismas definiciones quetools/list, como siSPICRAWL_MCP_HIDE_UNAVAILABLEestuviera activada: 24 herramientas, sinspicrawl_browser_connect_url. Una sesión abierta con una clave lista esa herramienta también, a menos que la variable esté definida.- Sin ninguna clave,
/mcpresponde solo al descubrimiento:initialize,ping, la notificacióninitializedytools/list(la misma lista de 24 herramientas que la tarjeta del servidor; no se emiteMcp-Session-Idy no se envía nada aguas arriba). Cualquier otra solicitud, incluida unatools/call, es401, al igual que una solicitud que envía una clave mal formada o nombra una sesión. UnGETsin sesión es405. - Cada llamador envía su propia clave como
Authorization: Bearer spicrawl_live_..., o, para una puerta de enlace que no puede enviar el prefijoBearer, como un encabezadoAuthorization: spicrawl_live_...,x-api-keyoapi-keysin procesar (ver "Smithery y otras puertas de enlace" arriba; nunca un parámetro de consulta). La clave se verifica contra la API antes de abrir una sesión (401si se rechaza,503conRetry-Aftersi la API no se puede alcanzar), y una sesión se fija a la clave que la abrió. - El servidor habla HTTP simple. Póngalo detrás de TLS antes de enviar claves a través de una red.
Endpoint de ChatGPT (OAuth)
El mismo proceso puede servir un segundo endpoint MCP restringido para aplicaciones de ChatGPT. Está apagado a menos que SPICRAWL_CHATGPT_ENABLED esté activada, y /mcp no cambia de ninguna manera.
| Ruta | Qué hace |
|---|---|
POST /chatgpt/mcp | MCP Streamable HTTP, sin estado: sin Mcp-Session-Id, un servidor nuevo por solicitud, respuestas JSON. Otros métodos responden 405. |
GET /.well-known/oauth-protected-resource/chatgpt/mcp | Metadatos de recurso protegido (RFC 9728): resource, authorization_servers (el emisor), scopes_supported: ["scrape","batch"], resource_documentation. |
GET /.well-known/oauth-protected-resource | El mismo documento, solo con SPICRAWL_CHATGPT_ROOT_PRM. |
GET /.well-known/openai-apps-challenge | El token de verificación como text/plain, bytes exactos, sin nueva línea final; 404 cuando no se configura ninguno. |
La autenticación acepta solo tokens de acceso OAuth (spicrawl_oat_…):
- Sin token:
401conWWW-Authenticate: Bearer resource_metadata="https://mcp.spicrawl.com/.well-known/oauth-protected-resource/chatgpt/mcp", scope="scrape batch". - Un token malo, inactivo, caducado o de audiencia incorrecta, o una clave API (
spicrawl_live_…/spicrawl_test_…, nunca aceptada aquí): el mismo401máserror="invalid_token", error_description="…". - Una llamada a una herramienta que los alcances del token no cubren:
403conerror="insufficient_scope".spicrawl_scrapenecesitascrape, las herramientas por lotes necesitanbatch, las herramientas de documentación necesitan solo un token válido. - El servidor de autorización inalcanzable o que rechaza el secreto de este servidor:
503conRetry-After.
Cada token se verifica con POST <issuer>/api/oauth/introspect (Authorization: Bearer <SPICRAWL_OAUTH_INTROSPECT_SECRET>, cuerpo de formulario token=…). Solo active: true con aud igual al recurso se acepta. Una respuesta positiva se almacena en caché por el SHA-256 del token durante como máximo 30 segundos y nunca más allá de su exp. Las herramientas se ejecutan aguas arriba bajo el api_key que devuelve la introspección; ni este ni el token se registran. Si la API rechaza esa clave a mitad de la llamada, la herramienta devuelve un error cuyo _meta["mcp/www_authenticate"] lleva un desafío invalid_token nuevo, y el token se elimina de la caché.
El endpoint lista seis herramientas, cada una con readOnlyHint/destructiveHint/openWorldHint explícitos, un título y securitySchemes: [{type: "oauth2", scopes: [...]}] (también en _meta.securitySchemes):
| Herramienta | Ámbitos | Argumentos |
|---|---|---|
spicrawl_scrape | scrape | url (solo http/https), format (markdown/text/html/json), render, main_content_only, include_tags, exclude_tags, links, extract (selectores CSS), autoparse, wait_for, cache, cache_ttl, max_cost (predeterminado 5). Siempre es un GET HTTP. |
spicrawl_batch_submit | batch | urls (1 a 25), format, render, main_content_only, max_cost, credit_budget (predeterminado 50). |
spicrawl_batch_status | batch | job_id. |
spicrawl_batch_results | batch | job_id, status, limit (predeterminado 25, máximo 100), cursor. |
spicrawl_docs_search, spicrawl_docs_read | ninguno | Igual que en /mcp. |
spicrawl_scrape es de solo lectura aquí, a diferencia de /mcp: este endpoint solo envía un GET, sin method, cuerpo, cabeceras ni actions. spicrawl_batch_submit no es de solo lectura, porque crea un trabajo.
spicrawl_batch_results rellena el contenido de un elemento que ha tenido éxito y que la página de resultados lista sin él, lo que ocurre mientras el trabajo aún está finalizando, desde GET /v1/batch/{id}/tasks/{seq}/content. Obtiene como máximo 25 elementos y 2 MiB por página. Un elemento que aún no se puede leer devuelve unavailable, y uno que supera el límite de tamaño omitted.
Cualquier otro argumento se rechaza, no se ignora. Los resultados conservan el contenido, el estado del sitio y los créditos cobrados; los identificadores de solicitud, las marcas de tiempo, los detalles del motor y del proxy, las referencias de almacenamiento y los identificadores de proyecto se omiten.
Instalado globalmente (npm install -g @spicrawl/mcp), el comando es spicrawl-mcp (alias spicrawl-mcp-server), con --http, --version y --help.
Preguntas frecuentes
¿Hay un servidor MCP de Spicrawl alojado?
Sí: https://mcp.spicrawl.com/mcp, MCP Streamable HTTP, autenticado con Authorization: Bearer <API key>, por lo que no hay nada que instalar.
¿Spicrawl es gratuito?
Spicrawl cobra créditos por cada solicitud exitosa, y durante la versión beta cada organización recibe un plan de 1,000 créditos al mes. Las solicitudes fallidas cuestan 0 créditos; un acierto de caché se factura al mismo precio que la recuperación que lo almacenó. Consulta Créditos.
¿Renderiza JavaScript?
Sí. Establece render: true en spicrawl_scrape para ejecutar la página en un navegador, o mode: "auto" para permitir que Spicrawl escale desde una recuperación simple solo cuando sea necesario. No hay argumento para elegir el renderizado en spicrawl_scrape ni en las herramientas por lotes: Spicrawl lo elige para cada solicitud y factura el nivel que la sirvió (fetch, js o browser, informado como engine en el resultado JSON).
¿Funciona con Claude Code, Cursor y VS Code?
Sí, y también con Claude Desktop, Windsurf, Gemini CLI, Codex y cualquier cliente que hable MCP Streamable HTTP con cabeceras personalizadas o que inicie servidores stdio.
¿Puede rastrear un sitio web completo?
No existe una herramienta única de rastreo. Extrae una página con links: true para obtener sus enlaces y luego envíalos a un trabajo por lotes abierto (open: true y spicrawl_batch_add_items).
¿Admite OAuth?
No en /mcp: solo acepta claves de API de Spicrawl, así que desactiva OAuth para ello en los clientes que lo intenten en un 401. El endpoint de ChatGPT separado en /chatgpt/mcp solo acepta tokens de acceso OAuth, cuando el operador lo activa.
¿Debo usar el servidor MCP, el SDK o la CLI?
Usa el servidor MCP cuando un agente de IA deba llamar a Spicrawl como herramientas. Usa @spicrawl/sdk en tu propio código TypeScript o JavaScript, @spicrawl/cli en una terminal o script de shell, y la API REST desde cualquier otro lenguaje.
Solución de problemas
| Síntoma | Solución |
|---|---|
HTTP 401 o "No autorizado: envía tu clave de API de Spicrawl" | Falta la cabecera, o la clave está malformada, es desconocida, revocada o caducada. Comprueba que la variable esté configurada en el entorno desde el que se inició el cliente. Una pasarela que no pueda enviar Bearer puede usar una cabecera x-api-key; una clave en la URL nunca se lee. |
La cabecera contiene un ${SPICRAWL_API_KEY} literal | El cliente no lo expandió. Usa ${VAR} en Claude Code, ${env:VAR} en Cursor, ${input:id} en VS Code, bearer_token_env_var en Codex. |
HTTP 503 con Retry-After al conectar | El servidor no pudo alcanzar la API para verificar tu clave. Reintenta; tu clave está bien. |
ERR::AUTH::INSUFFICIENT_SCOPE de una herramienta spicrawl_usage* | Concede a la clave el ámbito read en el panel. |
ERR::LIMIT::QUOTA_EXCEEDED (HTTP 402) | Se ha agotado la asignación mensual de créditos. No se puede reintentar hasta que se restablezca. |
"Argumento desconocido" en spicrawl_scrape | Usa los nombres de la herramienta: render, no js_render; format, no response_format. |
| Las herramientas no aparecen | Reinicia el cliente y comprueba la clave de configuración (servers en VS Code, mcpServers en otros). |
npx no encontrado (stdio) | Instala Node.js 20 o posterior. |
curl -i https://mcp.spicrawl.com/mcp sin clave responde 401: el endpoint es accesible.
Paquetes relacionados
@spicrawl/sdk: el SDK oficial de TypeScript para la API de Spicrawl.@spicrawl/cli: la interfaz de línea de comandos de Spicrawl.- OfficialSpicrawl/agent-plugins: plugins que incluyen este servidor y la habilidad de Spicrawl para Claude Code, Codex, Cursor, Gemini CLI y más.
Enlaces
- Documentación: docs.spicrawl.com/agents/mcp
- Documentación para LLM: docs.spicrawl.com/llms.txt
- Panel y claves de API: app.spicrawl.com
- Problemas: github.com/OfficialSpicrawl/mcp/issues
- Seguridad: SECURITY.md. Nunca confirmes una clave de API; revoca una filtrada en app.spicrawl.com.
Publicación en el Registro MCP
server.json lista tanto el paquete npm/stdio como el endpoint
alojado Streamable HTTP bajo io.github.OfficialSpicrawl/mcp. Las claves de API se
solicitan a la persona que instala el servidor; ninguna clave pertenece al manifiesto.
El flujo de trabajo existente release publica en el Registro MCP después de que su trabajo
npm tenga éxito, en envíos a main o ejecuciones manuales desde main. La autenticación del registro
usa GitHub OIDC (id-token: write), por lo que no necesita ningún secreto nuevo, inicio de sesión de dispositivo ni registro
DNS. El lanzamiento npm sigue usando el secreto existente NPM_TOKEN.
Para un lanzamiento, ejecuta npm version --no-git-tag-version X.Y.Z, actualiza el registro de cambios
y envía los cambios a main. El hook de versión npm sincroniza ambas versiones
en server.json. Si editas package.json manualmente, ejecuta npm run registry:sync.
CI verifica el manifiesto contra su $schema oficial con Ajv y rechaza la deriva
de nombre o versión antes de la publicación npm. Para ejecutar esa verificación localmente:
npm ci
npm run registry:validate
# Offline: pass a downloaded copy of the exact server.json $schema URL.
npm run registry:validate -- /path/to/server.schema.json
El trabajo del registro verifica que el paquete npm publicado tenga el mcpName coincidente
antes de publicar. Una versión de registro existente se omite; los fallos de búsqueda detienen
el trabajo. Para reintentar un fallo del registro o listar la versión npm actual ya publicada,
ejecuta el flujo de trabajo release en main de nuevo. Usa una nueva versión para cambios de metadatos
en un listado existente. El binario del publicador está fijado y su descarga
se verifica contra las sumas de verificación del lanzamiento; actualiza su versión en release.yml
al actualizar la CLI.
Verifica la publicación en
https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.OfficialSpicrawl/mcp.
El flujo de trabajo debe fusionarse en OfficialSpicrawl/mcp antes de que OIDC pueda publicar
ese espacio de nombres. Las solicitudes de extracción de bifurcaciones validan y prueban, pero nunca ejecutan el trabajo del registro.
Referencias oficiales: inicio rápido de publicación, GitHub Actions, y servidores remotos.