Una publicación de r/crewai documentó a un agente SDR usando Google Dorks en Serper más pdfplumber más Llama-3 más un caché MCP. Este tutorial intercambia Serper por Scavio y muestra el mismo patrón con un caché JSON escrito.
Requisitos previos
- Python 3.10+
- TripulaciónAI
- Clave API de Scavio
Guia paso a paso
Paso 1: Definir la herramienta Scavio CrewAI
BaseTool de la subclase CrewAI.
from crewai.tools import BaseTool
import requests, os
class ScavioSearch(BaseTool):
name = 'scavio_search'
description = 'Multi-platform web search returning typed JSON. Use search_type="dorks" for Google Dorks.'
def _run(self, query: str):
return requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'query': query}).json()Paso 2: Definir el patrón de consulta de Google Dorks
Las mismas cuerdas tontas que el original.
DORK_PATTERNS = [
'site:gov.br filetype:pdf 2026 contratos',
'site:gob.mx filetype:pdf 2026 licitaciones'
]Paso 3: Controlador crontab
Mismo cron, cambia la API.
# crontab -e
# 0 6 * * * /usr/bin/python /path/to/dorks.pyPaso 4: Capa de caché en SQLite (ahora escrita JSON)
Clave de caché = (consulta, superficie). Valor = cadena JSON.
import sqlite3, json
conn = sqlite3.connect('cache.db')
conn.execute('CREATE TABLE IF NOT EXISTS cache(key TEXT PRIMARY KEY, payload TEXT, ts REAL)')
def cached_search(q):
row = conn.execute('SELECT payload FROM cache WHERE key=?', (q,)).fetchone()
if row: return json.loads(row[0])
data = ScavioSearch()._run(q)
conn.execute('INSERT OR REPLACE INTO cache VALUES (?, ?, ?)', (q, json.dumps(data), 0))
conn.commit()
return dataPaso 5: Conéctese al agente CrewAI
Misma forma de agente, la herramienta Scavio reemplaza a la herramienta Serper.
from crewai import Agent
researcher = Agent(role='Government Bid Researcher', tools=[ScavioSearch()])Ejemplo en Python
# See steps above for full pattern.Ejemplo en JavaScript
// CrewAI is Python-first; equivalent Mastra/JS pattern uses Scavio HTTP directly.Salida esperada
SDR agent fetches government bid PDFs the same as before, now with Reddit thread surfacing as a second source layer at no additional vendor.