Arachne — o ecossistema de MCP tools, visão multimodal e o que vem por aí
Arachne·

Arachne — o ecossistema de MCP tools, visão multimodal e o que vem por aí

6 min de leitura← Voltar para timeline

Quando escrevi o primeiro post sobre o Arachne, ele era basicamente um scraper com RAG. Três meses depois, virou uma plataforma com 25 ferramentas MCP, visão multimodal com IA local, painel de billing, observabilidade e deploy no MCP Registry oficial.

Esse post não é sobre o começo — é sobre onde o Arachne está agora e como ele chegou aqui.

De 4 a 25 MCP tools

O pulo do gato foi o protocolo MCP. Em junho, o Arachne tinha 4 ferramentas MCP expostas via STDIO. Hoje são 25, com dois transportes:

 STDIO — tools locais, acoplamento direto
 SSE  — remoto via arachne.seu.pet/mcp, autenticação X-API-Key

Cada tool tem descrição, timing estimado e fallback chain. O arachne_plan é a orquestradora — você me pergunta “como faço X” e ela monta o plano de execução antes de qualquer tool rodar.

# Exemplo: fallback chain do browser
async def browser_extract(url: str) -> str:
  try:
  return await playwright_extract(url)  #  Playwright stealth
  except BlockedError:
  return await camoufox_extract(url)  #  Camoufox evasão
  except TimeoutError:
  return await screenshot_ocr(url)  #  fallback: captura + OCR

E foi pro MCP Registry oficial como io.github.Samuelfmedeiros/arachne — descoberta automática por qualquer cliente MCP que conheça o nome.

Visão multimodal — 8 estágios + IA local

A feature mais recente e a que mais me orgulha: o pipeline de visão que roda tudo localmente.

# app/vision/pipeline.py — simplified
stages = [
  metadata_extract,  #  dimensões, formato, EXIF
  color_analysis,  #  histograma, paleta dominante
  ocr_extract,  #  texto via Tesseract
  edge_detect,  #  contornos Canny
  face_detect,  #  detecção facial
  texture_analysis,  #  padrões e texturas
  quality_assess,  #  nitidez, ruído, exposição
  vlm_describe,  #  IA opcional (gemma4:12b)
]

Os 7 primeiros estágios são zero AI — puro OpenCV + Tesseract + NumPy. O oitavo estágio usa o gemma4:12b rodando local no Ollama (CUDA, GPU). Zero custo de API externa.

Três endpoints REST + duas MCP tools dedicadas:

Rota Função
POST /vision/analyze Analisa imagem de URL
POST /vision/upload Upload + análise
POST /vision/screenshot Screenshot + análise one-shot
arachne_vision MCP tool de imagem
arachne_screenshot_vision MCP tool screenshot+visão

A cereja do bolo: suporte a data URI (data:image/png;base64,...). Dá pra colar um base64 direto do buffer de memória sem salvar arquivo.

Observabilidade — cada chamada rastreada

Implementei cabeçalhos X-Called-By e X-MCP-Tool injetados em toda chamada MCP. Cada requisição deixa rastro no ApiUsageLog:

class ApiUsageLog(BaseModel):
  id: int | None
  user_id: int
  endpoint: str
  method: str
  status_code: int
  response_time_ms: float
  tokens_in: int | None
  tokens_out: int | None
  called_by: str | None  #  qual agente chamou
  mcp_tool: str | None  #  qual tool MCP
  created_at: datetime

Isso permite responder perguntas como “quem está usando mais o browser?” e “qual tool está consumindo mais tokens?” — dados reais, não achismo.

Monetização — Stripe com 4 tiers

O Arachne virou produto. Quatro planos no Stripe:

Plano Preço Diferencial
Free R$ 0 10 requisições/dia, scraping básico
Scraper R$ 29/mês 500 req/dia, browser extraction
Pro R$ 79/mês 2000 req/dia, visão multimodal + RAG
Enterprise R$ 399/mês Ilimitado, suporte prioritário

Tudo integrado via Stripe Connect com webhooks de checkout.session.completed, invoice.paid e customer.subscription.updated. O rate limiting é Redis (com fallbar RAM) e 10 limiters dedicados por endpoint.

ai-jail — sandbox de segurança

Uma adição silenciosa mas crítica: integração com ai-jail v1.13.0 (bubblewrap). Todo browser/handler roda num sandbox com:

  • Sistema de arquivos read-only (exceto /tmp)
  • Sem acesso a GPU/Docker
  • Sem rede interna
  • Cache de dependências pré-montado
# ~/.ai-jail/rules.toml (global)
[mask]
files = [".env", "*.key", "secrets/"]
network = ["internal"]

O sandbox é modulável — desliga via env var ARACHNE_SANDBOX_ENABLED=false sem rebuild.

Métricas — servidor respirando

No momento em que escrevo:

Métrica Valor
CPU 0.6%
RAM 11.9 GB (76.9% usado)
Disco 690 GB livre (27.8% usado)
Browser processes 6 instâncias
Heavy tasks seguro

O servidor aguenta bem. 6 instâncias de browser ativas, mas o pool de workers (20/40 gunicorn) dá conta do recado.

O que vem por aí

O roadmap imediato:

  • Code Knowledge Graph — já implementado (KG watcher, comunidades Leiden, god nodes). Falta expor pro frontend.
  • MCP Intelligence Layer — Smart Router, Tool Chainer, cache de memória entre tools
  • Gravacão de vídeo nas MCP tools (arachne_record_video com Playwright screencast)
  • BYO LLM no Settings — cada usuário escolhe seu modelo
  • Pipeline Builder visual — arrastar e soltar stages no navegador
~/lifelog — bash
$cat about.txt
╔══════════════════════════════════════╗
║  Samuel Medeiros                    ║
║  Senior Software Engineer           ║
║  Stack: Python · TypeScript · Rust  ║
║  Projetos: Arachne, Dogwalk,        ║
║            Capivara, TatuEngine      ║
╚══════════════════════════════════════╝
      
$

O Arachne não é mais um scraper. virou um ecossistema. E ainda tem muito chão pela frente.