Aperçu
Les agents IA financiers ont besoin de la recherche Web pour vérifier les données de marché, consulter les dépôts SEC et surveiller les actualités. Mais les équipes de conformité bloquent l'accès direct à Internet. Ce workflow achemine toutes les recherches des agents via le serveur MCP de Scavio avec une journalisation d'audit, un filtrage des requêtes (pas d'informations personnelles identifiables dans les requêtes) et des contrôles budgétaires par agent. Un accès à la recherche approuvé par la conformité.
Déclencheur
Chaque requête de recherche d'un agent IA financier.
Planification
Piloté par les événements
Étapes du workflow
Intercepter la requête de recherche de l'agent
Capturer la requête de recherche de l'agent avant qu'elle n'atteigne le réseau.
Filtrer pour les informations personnelles identifiables (PII) et la conformité
Analyser la requête pour détecter les informations personnelles identifiables, les numéros de compte ou les termes restreints. Bloquer ou nettoyer.
Acheminer via le bac à sable MCP
Envoyer la requête nettoyée via le serveur MCP de Scavio. Aucun accès direct à Internet pour l'agent.
Consigner pour audit
Enregistrer la requête, les métadonnées de réponse, l'ID de l'agent et l'horodatage dans le journal d'audit de conformité.
Retourner les résultats filtrés
Retourner les résultats de recherche à l'agent après avoir supprimé tout contenu violant les politiques de conformité.
Implémentation 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}")Implémentation 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); }Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA