Resumen
Financial AI agents necesita web search to verify mercado datos, verificar SEC filings, y monitorear news. But cumplimiento teams block direct internet acceso. Este flujo de trabajo routes todos agent search a traves de Scavio's MCP servidor con audit registro, consulta filtrado (no PII in consultas), y per-agent budget controls. Compliance-approved search acceso.
Desencadenador
Every search solicitud de un financial AI agent.
Programación
Event-driven
Pasos del flujo de trabajo
Intercept Agent Search Solicitud
Capture el agent's consulta de busqueda antes de it reaches el network.
Filtrar for PII y Compliance
Scan el consulta for personally identifiable informacion, cuenta numbers, o restricted terms. Block o sanitize.
Route Through MCP Sandbox
Enviar el sanitized consulta a traves de Scavio's MCP servidor. No direct internet acceso for el agent.
Log for Audit
Record el consulta, respuesta metadata, agent ID, y marca de tiempo in el cumplimiento audit registro.
Return Filtrado Resultados
Return resultados de busqueda to el agent despues de stripping cualquier contenido ese violates cumplimiento politicas.
Implementacion en Python
import requests, os, json, re, logging
from datetime import datetime
API_KEY = os.environ["SCAVIO_API_KEY"]
MCP_URL = "https://mcp.scavio.dev/mcp"
MH = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
logging.basicConfig(filename="financial_audit.log", level=logging.INFO)
PII_PATTERNS = [
r"\b\d{3}-\d{2}-\d{4}\b", # SSN
r"\b\d{16}\b", # Credit card
r"\b[A-Z]{2}\d{6,10}\b", # Account numbers
]
def sanitize_query(query: str) -> str:
for pattern in PII_PATTERNS:
if re.search(pattern, query):
raise ValueError(f"Query contains PII matching pattern: {pattern}")
return query
def secure_search(query: str, agent_id: str) -> dict:
clean_query = sanitize_query(query)
logging.info(json.dumps({"ts": datetime.now().isoformat(), "agent": agent_id, "query": clean_query, "action": "search"}))
payload = {
"jsonrpc": "2.0", "id": 1,
"method": "tools/call",
"params": {"name": "search", "arguments": {"query": clean_query, "country_code": "us"}}
}
resp = requests.post(MCP_URL, headers=MH, json=payload, timeout=15)
result = resp.json().get("result", {})
logging.info(json.dumps({"ts": datetime.now().isoformat(), "agent": agent_id, "result_size": len(str(result)), "action": "result"}))
return result
# Financial agent searches safely
try:
result = secure_search("AAPL Q2 2026 earnings report SEC", "fin-agent-002")
print(f"Search completed: {len(str(result))} chars")
except ValueError as e:
print(f"BLOCKED: {e}")Implementacion en JavaScript
const MCP_URL = 'https://mcp.scavio.dev/mcp';
const MH = {'Authorization': 'Bearer '+process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const PII_PATTERNS = [/\b\d{3}-\d{2}-\d{4}\b/, /\b\d{16}\b/, /\b[A-Z]{2}\d{6,10}\b/];
function auditLog(entry) { console.log('[AUDIT]', JSON.stringify({...entry, ts:new Date().toISOString()})); }
function sanitizeQuery(query) {
for (const p of PII_PATTERNS) { if (p.test(query)) throw new Error('Query contains PII'); }
return query;
}
async function secureSearch(query, agentId) {
const clean = sanitizeQuery(query);
auditLog({agent:agentId, query:clean, action:'search'});
const payload = {jsonrpc:'2.0', id:1, method:'tools/call', params:{name:'search', arguments:{query:clean, country_code:'us'}}};
const r = await fetch(MCP_URL, {method:'POST', headers:MH, body:JSON.stringify(payload)});
const result = (await r.json()).result || {};
auditLog({agent:agentId, resultSize:JSON.stringify(result).length, action:'result'});
return result;
}
try {
const result = await secureSearch('AAPL Q2 2026 earnings report SEC', 'fin-agent-002');
console.log('Search completed: '+JSON.stringify(result).length+' chars');
} catch (e) { console.log('BLOCKED: '+e.message); }Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA