El problema
Los sistemas de agentes múltiples con entre 3 y 5 agentes que realizan llamadas de búsqueda crean un uso de API de búsqueda impredecible. Cada agente gestiona su propia conexión de búsqueda, lo que genera consultas duplicadas, sin almacenamiento en caché, sin controles de presupuesto y sin conmutación por error. Una única interrupción del proveedor de búsqueda afecta a todos los agentes simultáneamente.
La solucion de Scavio
Implemente una puerta de enlace de búsqueda MCP a la que se conecten todos los agentes. La puerta de enlace expone una única herramienta de "búsqueda" a través del protocolo MCP, maneja la conmutación por error del proveedor internamente, almacena en caché los resultados recientes para evitar consultas duplicadas y aplica límites de presupuesto en todos los agentes. Scavio actúa como proveedor principal en mcp.scavio.dev/mcp.
Antes
Antes de la puerta de enlace, 4 agentes tenían cada uno su propia conexión con Scavio. Dos agentes que buscaron la misma palabra clave en 5 minutos realizaron consultas duplicadas. No existía ningún control presupuestario global. Cuando el equipo superó los 7.000 créditos mensuales, los 4 agentes fallaron simultáneamente.
Después
Después de implementar la puerta de enlace, las consultas duplicadas se almacenan en caché (reducción de consultas del 30%). El presupuesto se gestiona de forma centralizada con alertas y límites por agente. Failover to Brave maneja cualquier problema con el proveedor de forma transparente. El recuento de consultas mensuales se redujo de 9200 a 6400 gracias a la deduplicación.
Para quien es
Equipos que ejecutan sistemas multiagente y todos necesitan acceso de búsqueda. Equipos de plataforma que brindan infraestructura de búsqueda para proyectos de múltiples agentes. SRE construye una infraestructura confiable de búsqueda de agentes.
Beneficios clave
- Búsqueda centralizada de todos los agentes a través de un punto final MCP
- El almacenamiento en caché de resultados reduce las consultas duplicadas entre un 20 y un 30 %
- Los controles presupuestarios globales evitan el agotamiento del crédito
- Conmutación por error automática transparente para todos los agentes conectados
- Seguimiento del uso por agente para la asignación de costos
Ejemplo en Python
import requests
import json
import time
from functools import lru_cache
SCAVIO_KEY = "your_scavio_api_key"
BRAVE_KEY = "your_brave_api_key"
DAILY_BUDGET = 500 # queries
query_count = 0
@lru_cache(maxsize=1000)
def cached_search(query: str, platform: str) -> str:
"""Cache search results for 30 minutes."""
return json.dumps(_do_search(query, platform))
def _do_search(query: str, platform: str) -> dict:
global query_count
if query_count >= DAILY_BUDGET:
return {"error": "Daily budget exceeded", "results": []}
# Primary: Scavio
try:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": SCAVIO_KEY},
json={"platform": platform, "query": query, "ai_overview": True},
timeout=10,
)
if res.ok and len(res.json().get("organic", [])) >= 1:
query_count += 1
return {"provider": "scavio", "data": res.json()}
except Exception:
pass
# Fallback: Brave
try:
res = requests.get(
"https://api.search.brave.com/res/v1/web/search",
headers={"X-Subscription-Token": BRAVE_KEY},
params={"q": query},
timeout=8,
)
if res.ok:
query_count += 1
return {"provider": "brave", "data": res.json()}
except Exception:
pass
return {"provider": "none", "data": {}}
# MCP tool handler
def handle_search_tool(params: dict) -> dict:
query = params.get("query", "")
platform = params.get("platform", "google")
cached = cached_search(query, platform)
return json.loads(cached)
result = handle_search_tool({"query": "best search api 2026", "platform": "google"})
print(f"Provider: {result.get('provider')}, Budget used: {query_count}/{DAILY_BUDGET}")Ejemplo en JavaScript
const SCAVIO_KEY = "your_scavio_api_key";
const cache = new Map();
let queryCount = 0;
const DAILY_BUDGET = 500;
async function gatewaySearch(query, platform = "google") {
const cacheKey = `${platform}:${query}`;
if (cache.has(cacheKey)) return cache.get(cacheKey);
if (queryCount >= DAILY_BUDGET) return { error: "Budget exceeded" };
try {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": SCAVIO_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform, query, ai_overview: true }),
});
if (res.ok) {
const data = await res.json();
queryCount++;
cache.set(cacheKey, { provider: "scavio", data });
return { provider: "scavio", data };
}
} catch {}
return { provider: "none", data: {} };
}
const r = await gatewaySearch("best search api 2026");
console.log(`Provider: ${r.provider}, Budget: ${queryCount}/${DAILY_BUDGET}`);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
YouTube
Búsqueda de videos con transcripciones y metadatos
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit