Spicrawl
Servidor MCP de web scraping com 24 ferramentas. Lê uma URL como Markdown, HTML, texto, JSON ou PDF, renderiza JavaScript, extrai dados estruturados, executa trabalhos em lote, tira capturas de tela e mantém sessões de navegador.
Servidor MCP hospedado
npx add-mcp 'https://mcp.spicrawl.com/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Servidor MCP Spicrawl
O servidor MCP Spicrawl é um servidor do Model Context Protocol que dá a agentes de IA no Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Gemini CLI e Codex recursos de raspagem web para Markdown, extração estruturada de dados, capturas de tela, sessões de navegador e raspagem em lote como ferramentas nativas.
Documentação · Obtenha uma chave de API · SDK TypeScript · CLI · Plugins de agente · Changelog
Início rápido
-
Crie uma chave de API em app.spicrawl.com. As chaves começam com
spicrawl_live_ouspicrawl_test_. -
Conecte o endpoint hospedado,
https://mcp.spicrawl.com/mcp(MCP Streamable HTTP, nada para 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 -
Ou execute-o localmente via stdio (Node.js 20+), para clientes que só iniciam servidores locais:
claude mcp add spicrawl --env SPICRAWL_API_KEY=$SPICRAWL_API_KEY -- npx -y @spicrawl/mcp -
Pergunte ao seu agente: "Use o Spicrawl para ler https://example.com/pricing como markdown e liste cada plano com seu preço." Ele chama
spicrawl_scrapee recebe a página de volta como Markdown.
Ambos os transportes servem as mesmas ferramentas spicrawl_* (25 são definidas; o endpoint hospedado lista 24 até os navegadores remotos serem lançados, veja Ferramentas), e cada chamada é executada sob sua chave com os mesmos escopos, limites e créditos de uma chamada direta à API.
O que ele faz
- Raspe qualquer URL para Markdown, texto, HTML, um envelope JSON ou um PDF impresso com uma ferramenta,
spicrawl_scrape. Markdown é o padrão e reduz a página ao seu conteúdo principal. - Renderize JavaScript com
render: true(3 créditos). Um fetch simples custa 1 crédito, capturas de tela, PDFs eactionsusam um navegador completo (8 créditos), emode: "auto"escala de fetch para navegador e cobra apenas o nível que funcionou (tabela de preços). Você nunca escolhe a renderização; o Spicrawl escolhe a mais barata que pode fazer o que a solicitação pede. - Extraia dados estruturados com um mapa de seletores CSS/XPath (
extract) ou a partir do JSON-LD, OpenGraph, Twitter Card e microdados que uma página publica (autoparse). - Controle a página antes da captura com 8 ações de navegador tipadas:
click,fill,wait_for,wait_for_navigation,scroll(incluindo rolagem infinita),select,evaluateescreenshot. - Retorne capturas de tela e PDFs que o modelo pode ver: capturas de tela chegam como blocos de imagem MCP (até 5 MB de base64 cada) e páginas impressas como blocos de recurso
application/pdf(até 10 MB). - Raspe milhares de URLs em lote como um único trabalho assíncrono, até 10.000 itens por chamada, com 9 ferramentas para enviar, consultar, paginar resultados, tentar novamente, cancelar e manter um trabalho aberto para rastreamento.
- Mantenha um navegador conectado com sessões persistentes: cookies, armazenamento e um nível de renderização fixo reutilizados entre raspagens.
- Responda "quanto isso custou?" a partir de ferramentas de uso e registro de solicitações, e leia a documentação do Spicrawl de dentro do agente.
Qual ferramenta usar
- Se você precisa do conteúdo ou dados de uma página agora, use
spicrawl_scrape. - Se a página estiver em branco ou for um esqueleto sem JavaScript, chame
spicrawl_scrapenovamente comrender: true. - Se você conhece a estrutura da página, use
extractcom seletores CSS; se não conhece, tenteautoparse. - Se você tem mais de cerca de 20 URLs, use
spicrawl_batch_submit, depoisspicrawl_batch_statusespicrawl_batch_results. - Se você descobre URLs conforme avança (rastreamento), envie com
open: true, acrescente comspicrawl_batch_add_itemse finalize comspicrawl_batch_close. - Se você precisa fazer login primeiro, use
spicrawl_session_createe passe seuidcomosession_idparaspicrawl_scrape. - Se uma chamada falhou e você precisa saber o motivo, use
spicrawl_request_getcom o id da solicitação, ouspicrawl_requests_listcomonly_errors. - Se você não tem certeza de um parâmetro ou código de erro, use
spicrawl_docs_searchantes de adivinhar.
Ferramentas
25 ferramentas, agrupadas por tarefa. O endpoint hospedado lista 24 até os navegadores remotos serem lançados: seu tools/list sem chave e o cartão do servidor deixam de fora spicrawl_browser_connect_url (Em breve), enquanto uma sessão aberta com sua chave e o pacote stdio (npx -y @spicrawl/mcp) lista todas as 25. As ferramentas rejeitam argumentos desconhecidos, então um campo com erro de digitação falha com um erro que o nomeia em vez de ser silenciosamente ignorado. Cada ferramenta define um title e anotações explícitas de readOnlyHint, destructiveHint e openWorldHint, para que um cliente saiba quais chamadas confirmar: spicrawl_scrape não é somente leitura (seus method e actions podem enviar formulários), e spicrawl_batch_cancel, spicrawl_session_release e spicrawl_session_delete são destrutivas. Cada ferramenta também declara um outputSchema e retorna structuredContent correspondentes ao lado do mesmo texto que sempre retornou, para que um cliente possa ler campos (credits, status, next_cursor, ...) sem analisar texto. Os esquemas listam o que um agente pode usar com segurança e permanecem abertos: campos que a API adicionar depois passam direto, e status e níveis são strings simples. Uma ferramenta que retorna um documento ou um array JSON (spicrawl_docs_read, spicrawl_batch_task_content) o coloca sob content em structuredContent. Referência completa de argumentos: docs.spicrawl.com/agents/mcp.
Raspe um site para Markdown
| Ferramenta | O que ela faz | Parâmetros principais |
|---|---|---|
spicrawl_scrape | Recupera uma URL como markdown (padrão), text, html, json ou pdf, com renderização, extração, links, capturas de tela e ações de navegador opcionais. | url, format, render, mode, main_content_only, include_tags, exclude_tags, extract, autoparse, links, screenshot, actions, wait_for, session_id, proxy, cache, max_cost |
Raspe muitas URLs em lote
| Ferramenta | O que ela faz | Parâmetros principais |
|---|---|---|
spicrawl_batch_submit | Enfileira muitas URLs como um único trabalho assíncrono com configurações compartilhadas; retorna o trabalho com estimated_credits. | urls ou items, render, format, open, max_attempts, credit_budget, max_cost |
spicrawl_batch_list | Lista os trabalhos em lote do projeto, do mais recente ao mais antigo. | status, limit (máx. 200), cursor |
spicrawl_batch_status | Status e progresso de um trabalho. | job_id |
spicrawl_batch_results | Uma página de itens concluídos; funciona enquanto o trabalho está em execução. | job_id, status, limit (máx. 5000), cursor |
spicrawl_batch_task_content | O payload completo de um item. | job_id, seq |
spicrawl_batch_cancel | Cancela um trabalho; itens concluídos mantêm seus resultados. | job_id |
spicrawl_batch_retry | Re-enfileira cada item que falhou. | job_id |
spicrawl_batch_add_items | Acrescenta URLs a um trabalho enviado com open: true. | job_id, urls ou items |
spicrawl_batch_close | Para um trabalho aberto de aceitar itens para que ele possa ser concluído. | job_id |
Sessões de navegador
| Ferramenta | O que ela faz | Parâmetros principais |
|---|---|---|
spicrawl_session_create | Cria uma identidade de navegador persistente (cookies, armazenamento, um nível de renderização fixo). | engine, ttl_seconds, session_context |
spicrawl_session_list | Lista sessões, da mais recente à mais antiga. | status, engine, limit, cursor |
spicrawl_session_get | Status de uma sessão, nível de renderização, saída, uso e expiração. | session_id |
spicrawl_session_context | Despeja cookies e armazenamento de uma sessão ativa (contém segredos). | session_id |
spicrawl_session_release | Encerra uma sessão; seu registro permanece como released. | session_id |
spicrawl_session_delete | Exclui permanentemente uma sessão e seu estado. | session_id |
Uso e histórico de solicitações
| Ferramenta | O que ela faz | Parâmetros principais |
|---|---|---|
spicrawl_usage | Uso de nível de faturamento em uma janela de datas (escopo read). | from, to, group_by, metrics |
spicrawl_usage_summary | Totais do período atual (escopo read). | nenhum |
spicrawl_usage_reconciliation | Divergência de um dia entre o registro de solicitações e o resumo faturado (escopo read). | day |
spicrawl_requests_list | Chamadas recentes à API com status, código de erro, nível de renderização, latência e créditos. | only_errors, status, limit, all_projects |
spicrawl_request_get | O registro completo de log de uma chamada. | id |
Documentação
| Ferramenta | O que ela faz | Parâmetros principais |
|---|---|---|
spicrawl_docs_search | Pesquisa a documentação do Spicrawl; um código de erro também vincula à sua entrada. | query, limit (1-20, padrão 8) |
spicrawl_docs_read | Lê uma página da documentação como Markdown (truncada acima de 60.000 caracteres). | path |
spicrawl_docs_index | O llms.txt da documentação: cada página com seu título e link .md. | nenhum |
Em breve
spicrawl_browser_connect_url vai cunhar uma URL WebSocket CDP de uso único para controlar um navegador hospedado pelo Spicrawl a partir de qualquer cliente CDP; navegadores remotos ainda não estão disponíveis. É a 25ª ferramenta e a única que a listagem hospedada sem chave e o cartão do servidor deixam de fora (24 ferramentas lá). Os esquemas também aceitam ai_extract, stealth, extract_preset, premium_proxy, proxy_country e sticky_key antes do lançamento. Os agentes ainda não devem enviá-los. Para listar apenas o que funciona hoje, defina SPICRAWL_MCP_HIDE_UNAVAILABLE=1 (veja Variáveis de ambiente).
Exemplos de prompts
- "Raspe https://example.com/pricing como markdown e resuma os planos."
- "Obtenha o nome do produto, preço e status de estoque desta URL." (
spicrawl_scrapecomextractouautoparse) - "Tire uma captura de tela de página inteira de https://example.com depois que o banner de cookies desaparecer." (
render,actions,screenshot_fullpage) - "Raspe estas 500 URLs e me dê o título de cada página." (
spicrawl_batch_submit, depoisspicrawl_batch_results) - "Por que minha última raspagem falhou?" (
spicrawl_requests_listcomonly_errors, depoisspicrawl_request_get) - "Quantos créditos usei este mês?" (
spicrawl_usage_summary)
Configure seu cliente MCP
Coloque sua chave em SPICRAWL_API_KEY e referencie-a a partir da configuração onde o cliente permitir, para que a chave nunca caia em um arquivo versionado.
Claude Code
Endpoint hospedado, armazenado apenas para você (adicione --scope user para cada projeto):
claude mcp add --transport http spicrawl https://mcp.spicrawl.com/mcp \
--header "Authorization: Bearer $SPICRAWL_API_KEY"
Para compartilhar com uma equipe, faça commit de .mcp.json na raiz do projeto. O Claude Code expande ${VAR}, então a chave de cada colega é usada:
{
"mcpServers": {
"spicrawl": {
"type": "http",
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${SPICRAWL_API_KEY}" }
}
}
}
Ou instale o plugin, que inclui o servidor MCP e a habilidade de agente do Spicrawl:
claude plugin marketplace add OfficialSpicrawl/agent-plugins
claude plugin install spicrawl@spicrawl-plugins
Verifique com claude mcp list, ou /mcp em uma sessão. Mais: docs.spicrawl.com/agents/claude-code.
Claude Desktop
O claude_desktop_config.json do Claude Desktop inicia apenas servidores locais (stdio), e conectores personalizados não podem enviar um cabeçalho Authorization, então execute o pacote localmente. O arquivo está em ~/Library/Application Support/Claude/claude_desktop_config.json no macOS e %APPDATA%\Claude\claude_desktop_config.json no Windows:
{
"mcpServers": {
"spicrawl": {
"command": "npx",
"args": ["-y", "@spicrawl/mcp"],
"env": { "SPICRAWL_API_KEY": "spicrawl_live_..." }
}
}
}
Reinicie o Claude Desktop após salvar.
Cursor
Use o botão **Adicionar ao Cursor** acima, ou adicione isto a `.cursor/mcp.json` no projeto (ou `~/.cursor/mcp.json` para todos os projetos). O Cursor resolve `${env:NAME}` em `url` e `headers`, então inicie o Cursor a partir de um ambiente onde `SPICRAWL_API_KEY` esteja definido:{
"mcpServers": {
"spicrawl": {
"url": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
VS Code (GitHub Copilot)
Use o botão Instalar no VS Code acima, ou adicione isto a .vscode/mcp.json. O VS Code usa a chave servers, e a variável de entrada faz com que ele peça a chave uma vez e a armazene com segurança, então o arquivo é seguro para commit:
{
"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}" }
}
}
}
O VS Code não expande ${env:...} dentro de headers, então use a variável de entrada. Mais: docs.spicrawl.com/agents/github-copilot.
Windsurf (Devin Desktop)
O Windsurf agora se chama Devin Desktop. Para o agente padrão Devin Local, adicione o servidor no escopo local (salvo no .devin/mcp_config.local.json ignorado pelo git):
devin mcp add spicrawl https://mcp.spicrawl.com/mcp -H "Authorization: Bearer $SPICRAWL_API_KEY"
Para o agente legado Cascade, edite ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json no Windows). O Cascade lê a URL de serverUrl e substitui ${env:...}:
{
"mcpServers": {
"spicrawl": {
"serverUrl": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer ${env:SPICRAWL_API_KEY}" }
}
}
}
Gemini CLI
O Gemini CLI remove variáveis cujos nomes contenham KEY, TOKEN ou AUTH antes de expandir cabeçalhos, então exporte a chave com outro nome:
export SPICRAWL_MCP_BEARER="$SPICRAWL_API_KEY"
Depois adicione a ~/.gemini/settings.json (ou .gemini/settings.json para um projeto). O Streamable HTTP usa a chave httpUrl:
{
"mcpServers": {
"spicrawl": {
"httpUrl": "https://mcp.spicrawl.com/mcp",
"headers": { "Authorization": "Bearer $SPICRAWL_MCP_BEARER" }
}
}
}
Ou: gemini mcp add --scope user --transport http --header 'Authorization: Bearer $SPICRAWL_MCP_BEARER' spicrawl https://mcp.spicrawl.com/mcp. Execute /mcp para verificar. Mais: docs.spicrawl.com/agents/gemini-cli.
Codex
O Codex lê a chave do ambiente a cada conexão, então a chave nunca fica em um arquivo:
codex mcp add spicrawl --url https://mcp.spicrawl.com/mcp --bearer-token-env-var SPICRAWL_API_KEY
O equivalente ~/.codex/config.toml (ou .codex/config.toml em um projeto confiável):
[mcp_servers.spicrawl]
url = "https://mcp.spicrawl.com/mcp"
bearer_token_env_var = "SPICRAWL_API_KEY"
Stdio local em vez disso:
[mcp_servers.spicrawl]
command = "npx"
args = ["-y", "@spicrawl/mcp"]
env = { SPICRAWL_API_KEY = "spicrawl_live_..." }
Smithery e outros gateways
Um gateway que passa um parâmetro de conexão como cabeçalho nem sempre consegue enviar Authorization: Bearer <key>: o Smithery mapeia um parâmetro para um cabeçalho, mas envia o valor bruto, sem o prefixo Bearer , e um cliente muitas vezes não consegue nomear sua fonte authorization. /mcp aceita a chave em qualquer um destes cabeçalhos:
| Cabeçalho | Valor |
|---|---|
x-api-key | spicrawl_live_... (recomendado para um gateway) |
api-key | spicrawl_live_... |
Authorization | spicrawl_live_... (a chave bruta, sem Bearer ), ou Bearer spicrawl_live_... |
No Smithery, torne a chave de API um parâmetro de conexão, mapeie-a para o cabeçalho x-api-key e marque-a como secreta. Ou mapeie-a para Authorization e envie a chave bruta; o servidor aceita isso quando o valor inteiro é uma chave Spicrawl.
A chave pode ficar opcional no esquema de conexão (sem required): initialize, ping e tools/list em /mcp respondem sem chave, com a mesma lista de ferramentas do cartão do servidor (24 ferramentas, sem spicrawl_browser_connect_url), então um diretório pode listar as ferramentas. Toda chamada de ferramenta ainda precisa de uma chave válida e é recusada com 401 caso contrário; nenhuma sessão é aberta e nada é cobrado ou lido sem uma. Diga na descrição do parâmetro que ele é necessário para executar qualquer ferramenta.
Se mais de um for enviado, o primeiro que contiver uma chave bem formada vence, na ordem Authorization: Bearer, chave bruta Authorization, x-api-key, api-key. Uma chave na string de consulta não é lida, porque URLs acabam em logs de acesso. /chatgpt/mcp aceita apenas tokens de acesso OAuth e não aceita nenhum destes.
Qualquer outro cliente MCP
| Configuração | Valor |
|---|---|
| Transporte | Streamable HTTP |
| URL | https://mcp.spicrawl.com/mcp |
| Cabeçalho | Authorization: Bearer <your key> (ou x-api-key: <your key>) |
Um cliente somente stdio executa npx -y @spicrawl/mcp com SPICRAWL_API_KEY em seu ambiente. O servidor aceita apenas chaves de API, não OAuth. Páginas de configuração para mais clientes (OpenCode, Zed, JetBrains, Cline, Goose e outros): docs.spicrawl.com/agents/mcp.
Variáveis de ambiente
| Variável | Padrão | Usada por | Finalidade |
|---|---|---|---|
SPICRAWL_API_KEY | nenhum (obrigatório) | stdio | Sua chave de API. O servidor HTTP a ignora e usa o token bearer de cada chamador. |
SPICRAWL_BASE_URL | https://api.spicrawl.com (stdio), http://127.0.0.1:8080 (HTTP) | ambos | A API Spicrawl que as ferramentas chamam. |
SPICRAWL_PUBLIC_BASE_URL | SPICRAWL_BASE_URL | ambos | A API como o usuário final a acessa, usada apenas em URLs devolvidas. |
SPICRAWL_DOCS_URL | https://docs.spicrawl.com | ambos | URL base da documentação para as ferramentas de docs. Sua chave nunca é enviada para lá. |
SPICRAWL_DOCS_HOST | nenhum | ambos | Legado: uma origem cuja documentação está em /docs. Lida apenas quando SPICRAWL_DOCS_URL não está definido. |
SPICRAWL_MCP_ADDR | 127.0.0.1:8090 | HTTP | Endereço de escuta, host:port. |
SPICRAWL_MCP_SESSION_IDLE_MS | 1800000 (30 min) | HTTP | Sessões MCP ociosas são descartadas após esse tempo. |
SPICRAWL_MCP_HIDE_UNAVAILABLE | desligado | ambos | 1, true, yes ou on deixa de fora o que é anunciado, mas ainda não disponível: spicrawl_browser_connect_url não é registrado (24 ferramentas em vez de 25) e todo argumento marcado como "Em breve" é removido dos esquemas (ai_extract, stealth, extract_preset, premium_proxy, proxy_country, sticky_key, e a sessão rotate_ip, region_pool e fingerprint). Lida quando o servidor inicia uma sessão, então reinicie o processo após alterá-la. O tools/list sem chave e o cartão do servidor se comportam como se estivesse sempre ligado. |
SPICRAWL_CHATGPT_ENABLED | desligado | HTTP | 1, true, yes ou on ativa o endpoint ChatGPT. Desligado, /chatgpt/mcp, seus metadados e o desafio OpenAI respondem todos 404. |
SPICRAWL_CHATGPT_RESOURCE | https://mcp.spicrawl.com/chatgpt/mcp | HTTP | O identificador de recurso OAuth. Os tokens devem ser emitidos exatamente para este aud; os metadados são publicados em /.well-known/oauth-protected-resource + seu caminho. |
SPICRAWL_OAUTH_ISSUER | https://app.spicrawl.com | HTTP | O servidor de autorização, listado nos metadados. Os tokens são inspecionados em <issuer>/api/oauth/introspect. |
SPICRAWL_OAUTH_INTROSPECT_SECRET | nenhum | HTTP | O segredo bearer deste servidor no endpoint de introspecção. Não definido, todo token recebe a resposta 503. |
SPICRAWL_CHATGPT_ROOT_PRM | desligado | HTTP | Também serve os metadados na raiz /.well-known/oauth-protected-resource. Desligado por padrão porque /mcp aceita chaves de API e não deve anunciar OAuth. |
SPICRAWL_OPENAI_APPS_CHALLENGE | nenhum | HTTP | O token de verificação de domínio OpenAI servido em /.well-known/openai-apps-challenge. |
SPICRAWL_OPENAI_APPS_CHALLENGE_FILE | nenhum | HTTP | Um arquivo contendo esse token (espaços ao redor e a nova linha final são removidos). Lido quando SPICRAWL_OPENAI_APPS_CHALLENGE não está definido. |
Sem nenhuma variável de docs definida, um servidor apontado para uma API auto-hospedada lê a documentação dessa própria API em <SPICRAWL_PUBLIC_BASE_URL or SPICRAWL_BASE_URL>/docs.
Auto-hospede o servidor MCP via HTTP
O endpoint hospedado executa o servidor Streamable HTTP deste pacote. Para executar o seu próprio:
SPICRAWL_MCP_ADDR=127.0.0.1:8090 \
SPICRAWL_BASE_URL=https://api.spicrawl.com \
npx -y @spicrawl/mcp --http
SPICRAWL_BASE_URLpadrão éhttp://127.0.0.1:8080no modo HTTP (uma API Spicrawl no mesmo host), não a API pública. Defina-a comohttps://api.spicrawl.compara servir a API pública.- O MCP é servido em
POST/GET/DELETE /mcp; liveness emGET /healthz(sem autenticação). GET /.well-known/mcp/server-card.json(sem autenticação,Cache-Control: public, max-age=3600) é um cartão de servidor estático para diretórios como Smithery que não conseguem escanear/mcpsem chave:serverInfo, o transporte, autenticação bearer e a lista de ferramentas. As ferramentas são lidas das mesmas definições detools/list, como seSPICRAWL_MCP_HIDE_UNAVAILABLEestivesse ligado: 24 ferramentas, semspicrawl_browser_connect_url. Uma sessão aberta com chave lista essa ferramenta também, a menos que a variável esteja definida.- Sem nenhuma chave,
/mcpresponde apenas descoberta:initialize,ping, a notificaçãoinitializedetools/list(a mesma lista de 24 ferramentas do cartão do servidor; nenhumMcp-Session-Idé emitido e nada é enviado upstream). Qualquer outra solicitação, incluindo umtools/call, é401, assim como uma solicitação que envia uma chave malformada ou nomeia uma sessão. UmGETsem sessão é405. - Cada chamador envia sua própria chave como
Authorization: Bearer spicrawl_live_..., ou, para um gateway que não consegue enviar o prefixoBearer, como um cabeçalho brutoAuthorization: spicrawl_live_...,x-api-keyouapi-key(veja "Smithery e outros gateways" acima; nunca um parâmetro de consulta). A chave é verificada contra a API antes de uma sessão abrir (401se recusada,503comRetry-Afterse a API não puder ser alcançada), e uma sessão é fixada à chave que a abriu. - O servidor fala HTTP simples. Coloque-o atrás de TLS antes de enviar chaves por uma rede.
Endpoint ChatGPT (OAuth)
O mesmo processo pode servir um segundo endpoint MCP restrito para aplicativos ChatGPT. Ele fica desligado a menos que SPICRAWL_CHATGPT_ENABLED esteja ligado, e /mcp não muda de qualquer forma.
| Rota | O que faz |
|---|---|
POST /chatgpt/mcp | MCP Streamable HTTP, sem estado: sem Mcp-Session-Id, um servidor novo por solicitação, respostas JSON. Outros métodos respondem 405. |
GET /.well-known/oauth-protected-resource/chatgpt/mcp | Metadados de recurso protegido (RFC 9728): resource, authorization_servers (o emissor), scopes_supported: ["scrape","batch"], resource_documentation. |
GET /.well-known/oauth-protected-resource | O mesmo documento, apenas com SPICRAWL_CHATGPT_ROOT_PRM. |
GET /.well-known/openai-apps-challenge | O token de verificação como text/plain, bytes exatos, sem nova linha final; 404 quando nenhum está configurado. |
A autenticação aceita apenas tokens de acesso OAuth (spicrawl_oat_…):
- Sem token:
401comWWW-Authenticate: Bearer resource_metadata="https://mcp.spicrawl.com/.well-known/oauth-protected-resource/chatgpt/mcp", scope="scrape batch". - Um token ruim, inativo, expirado ou com audiência errada, ou uma chave de API (
spicrawl_live_…/spicrawl_test_…, nunca aceita aqui): o mesmo401maiserror="invalid_token", error_description="…". - Uma chamada de ferramenta que os escopos do token não cobrem:
403comerror="insufficient_scope".spicrawl_scrapeprecisa descrape, as ferramentas em lote precisam debatch, as ferramentas de docs precisam apenas de um token válido. - Servidor de autorização inacessível ou recusando o segredo deste servidor:
503comRetry-After.
Cada token é verificado com POST <issuer>/api/oauth/introspect (Authorization: Bearer <SPICRAWL_OAUTH_INTROSPECT_SECRET>, corpo de formulário token=…). Apenas active: true com aud igual ao recurso é aceito. Uma resposta positiva é armazenada em cache pelo SHA-256 do token por no máximo 30 segundos e nunca além de seu exp. As ferramentas executam upstream sob o api_key que a introspecção retorna; nem ele nem o token são registrados. Se a API recusar essa chave no meio de uma chamada, a ferramenta retorna um erro cujo _meta["mcp/www_authenticate"] carrega um novo desafio invalid_token, e o token é removido do cache.
O endpoint lista seis ferramentas, cada uma com readOnlyHint/destructiveHint/openWorldHint explícitos, um título e securitySchemes: [{type: "oauth2", scopes: [...]}] (também em _meta.securitySchemes):
| Ferramenta | Escopos | Argumentos |
|---|---|---|
spicrawl_scrape | scrape | url (somente http/https), format (markdown/text/html/json), render, main_content_only, include_tags, exclude_tags, links, extract (seletores CSS), autoparse, wait_for, cache, cache_ttl, max_cost (padrão 5). Sempre um GET HTTP. |
spicrawl_batch_submit | batch | urls (1 a 25), format, render, main_content_only, max_cost, credit_budget (padrão 50). |
spicrawl_batch_status | batch | job_id. |
spicrawl_batch_results | batch | job_id, status, limit (padrão 25, máximo 100), cursor. |
spicrawl_docs_search, spicrawl_docs_read | nenhum | Como em /mcp. |
spicrawl_scrape é somente leitura aqui, ao contrário de /mcp: este endpoint apenas envia um GET, sem method, corpo, cabeçalhos ou actions. spicrawl_batch_submit não é somente leitura, pois cria um job.
spicrawl_batch_results preenche o conteúdo de um item bem-sucedido que a página de resultados lista sem ele, o que acontece enquanto o job ainda está finalizando, a partir de GET /v1/batch/{id}/tasks/{seq}/content. Ele busca no máximo 25 itens e 2 MiB por página. Um item que ainda não pode ser lido retorna unavailable, e um que exceda o limite de tamanho retorna omitted.
Todos os outros argumentos são recusados, não descartados. Os resultados mantêm o conteúdo, o status do site e os créditos cobrados; ids de requisição, timestamps, detalhes de engine e proxy, referências de armazenamento e ids de projeto são omitidos.
Instalado globalmente (npm install -g @spicrawl/mcp), o comando é spicrawl-mcp (alias spicrawl-mcp-server), com --http, --version e --help.
FAQ
Existe um servidor MCP Spicrawl hospedado?
Sim: https://mcp.spicrawl.com/mcp, MCP Streamable HTTP, autenticado com Authorization: Bearer <API key>, então não há nada para instalar.
O Spicrawl é gratuito?
O Spicrawl cobra créditos por requisição bem-sucedida, e durante o beta toda organização recebe um plano de 1.000 créditos por mês. Requisições com falha custam 0 créditos; um cache hit é cobrado pelo mesmo preço do fetch que o armazenou. Veja Créditos.
Ele renderiza JavaScript?
Sim. Defina render: true em spicrawl_scrape para executar a página em um navegador, ou mode: "auto" para deixar o Spicrawl escalar de um fetch simples somente quando necessário. Não há argumento para escolher a renderização em spicrawl_scrape ou nas ferramentas de lote: o Spicrawl escolhe para cada requisição e cobra o nível que atendeu (fetch, js ou browser, reportado como engine no resultado JSON).
Funciona com Claude Code, Cursor e VS Code?
Sim, e também com Claude Desktop, Windsurf, Gemini CLI, Codex e qualquer cliente que fale MCP Streamable HTTP com cabeçalhos personalizados ou que inicie servidores stdio.
Ele pode rastrear um site inteiro?
Não existe uma ferramenta única de rastreamento. Raspe uma página com links: true para obter seus links e depois alimente-os em um job de lote aberto (open: true e spicrawl_batch_add_items).
Ele suporta OAuth?
Não em /mcp: ele aceita apenas chaves de API do Spicrawl, então desative o OAuth para ele em clientes que tentam usá-lo em um 401. O endpoint separado do ChatGPT em /chatgpt/mcp aceita apenas tokens de acesso OAuth, quando o operador o ativa.
Devo usar o servidor MCP, o SDK ou o CLI?
Use o servidor MCP quando um agente de IA deve chamar o Spicrawl como ferramentas. Use @spicrawl/sdk no seu próprio código TypeScript ou JavaScript, @spicrawl/cli em um terminal ou script de shell, e a API REST em qualquer outra linguagem.
Solução de problemas
| Sintoma | Correção |
|---|---|
HTTP 401 ou "Unauthorized: send your Spicrawl API key" | O cabeçalho está ausente, ou a chave está malformada, desconhecida, revogada ou expirada. Verifique se a variável está definida no ambiente de onde o cliente foi iniciado. Um gateway que não pode enviar Bearer pode usar um cabeçalho x-api-key; uma chave na URL nunca é lida. |
O cabeçalho contém um ${SPICRAWL_API_KEY} literal | O cliente não o expandiu. Use ${VAR} no Claude Code, ${env:VAR} no Cursor, ${input:id} no VS Code, bearer_token_env_var no Codex. |
HTTP 503 com Retry-After na conexão | O servidor não conseguiu alcançar a API para verificar sua chave. Tente novamente; sua chave está correta. |
ERR::AUTH::INSUFFICIENT_SCOPE de uma ferramenta spicrawl_usage* | Conceda à chave o escopo read no painel. |
ERR::LIMIT::QUOTA_EXCEEDED (HTTP 402) | A cota mensal de créditos foi esgotada. Não é possível tentar novamente até que seja redefinida. |
"Unknown argument" em spicrawl_scrape | Use os nomes da ferramenta: render, não js_render; format, não response_format. |
| As ferramentas não aparecem | Reinicie o cliente e verifique a chave de configuração (servers no VS Code, mcpServers em outros lugares). |
npx não encontrado (stdio) | Instale Node.js 20 ou posterior. |
curl -i https://mcp.spicrawl.com/mcp sem uma chave responde 401: o endpoint está acessível.
Pacotes relacionados
@spicrawl/sdk: o SDK oficial em TypeScript para a API do Spicrawl.@spicrawl/cli: a interface de linha de comando do Spicrawl.- OfficialSpicrawl/agent-plugins: plugins que agrupam este servidor e a habilidade Spicrawl para Claude Code, Codex, Cursor, Gemini CLI e mais.
Links
- Documentação: docs.spicrawl.com/agents/mcp
- Documentação para LLMs: docs.spicrawl.com/llms.txt
- Painel e chaves de API: app.spicrawl.com
- Problemas: github.com/OfficialSpicrawl/mcp/issues
- Segurança: SECURITY.md. Nunca faça commit de uma chave de API; revogue uma chave vazada em app.spicrawl.com.
Publicação no Registro MCP
server.json lista tanto o pacote npm/stdio quanto o endpoint
hospedado Streamable HTTP sob io.github.OfficialSpicrawl/mcp. As chaves de API são
solicitadas à pessoa que instala o servidor; nenhuma chave pertence ao manifesto.
O fluxo de trabalho existente release publica no Registro MCP após o sucesso
do job npm, em pushes para main ou execuções manuais a partir de main. A autenticação do registro
usa GitHub OIDC (id-token: write), então não precisa de novo segredo, login de dispositivo ou registro
DNS. O lançamento npm continua usando o segredo existente NPM_TOKEN.
Para um lançamento, execute npm version --no-git-tag-version X.Y.Z, atualize o changelog
e envie as alterações para main. O hook de versão npm sincroniza ambas as versões
em server.json. Se você editar package.json manualmente, execute npm run registry:sync.
O CI verifica o manifesto contra o $schema oficial com Ajv e rejeita desvios
de nome ou versão antes da publicação npm. Para executar essa verificação 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
O job do registro verifica se o pacote npm publicado tem o mcpName correspondente
antes de publicar. Uma versão existente do registro é ignorada; falhas de consulta interrompem
o job. Para tentar novamente uma falha do registro ou listar a versão npm atual já publicada,
execute o fluxo de trabalho release em main novamente. Use uma nova versão para alterações de metadados
em uma listagem existente. O binário do publicador é fixado e seu download
é verificado contra os checksums do lançamento; atualize sua versão em release.yml
ao atualizar o CLI.
Verifique a publicação em
https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.OfficialSpicrawl/mcp.
O fluxo de trabalho deve ser mesclado em OfficialSpicrawl/mcp antes que o OIDC possa publicar
esse namespace. Pull requests de forks validam e testam, mas nunca executam o job do registro.
Referências oficiais: início rápido de publicação, GitHub Actions, e servidores remotos.