Ajoutez le contexte CRM à un agent de recherche MCP en interrogeant votre CRM pour obtenir des données de compte avant ou après les appels de recherche, puis fusionnez le contexte CRM avec les résultats de recherche pour produire des réponses plus pertinentes et tenant compte du compte. Les agents MCP dotés d'outils de recherche renvoient des résultats génériques qui manquent de contexte spécifique au client. En enrichissant les résultats de recherche avec des données CRM telles que l'étape de l'affaire, les interactions passées et la taille du compte, l'agent peut adapter ses recommandations et prioriser les informations qui comptent pour le compte spécifique en discussion.
Prérequis
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Données CRM accessibles via API ou fichier local
Parcours
Étape 1: Charger les données de compte CRM
Extraire le contexte du compte depuis votre CRM pour enrichir les résultats de recherche.
import os, requests, json
API_KEY = os.environ['SCAVIO_API_KEY']
# Simulated CRM data (replace with your CRM API call)
def load_crm_account(account_name: str) -> dict:
# In production: requests.get(f'{CRM_API}/accounts?name={account_name}')
crm_data = {
'Acme Corp': {
'deal_stage': 'negotiation',
'deal_value': 50000,
'industry': 'manufacturing',
'size': '500-1000 employees',
'last_contact': '2026-04-15',
'notes': 'Interested in automation tools. Key pain point: manual data entry.',
},
'Beta Inc': {
'deal_stage': 'discovery',
'deal_value': 25000,
'industry': 'saas',
'size': '50-200 employees',
'last_contact': '2026-05-01',
'notes': 'Evaluating search APIs for their product. Comparing with SerpAPI.',
},
}
return crm_data.get(account_name, {})
account = load_crm_account('Acme Corp')
print(f"Stage: {account.get('deal_stage')}, Industry: {account.get('industry')}")Étape 2: Rechercher avec le contexte du compte
Utilisez le contexte CRM pour affiner les requêtes de recherche et obtenir des résultats plus pertinents.
def contextual_search(query: str, account: dict) -> list:
"""Search with CRM context to get industry-relevant results."""
industry = account.get('industry', '')
refined_query = f'{query} {industry}' if industry else query
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': refined_query}, timeout=15)
results = resp.json().get('organic_results', [])
return [{
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
} for r in results[:5]]
account = load_crm_account('Acme Corp')
results = contextual_search('automation tools', account)
for r in results:
print(f" {r['title'][:50]}")Étape 3: Fusionner les données CRM et de recherche
Combinez les données de compte CRM avec les résultats de recherche dans un bloc de contexte unifié.
def merge_context(account_name: str, query: str) -> dict:
account = load_crm_account(account_name)
results = contextual_search(query, account)
return {
'account': {
'name': account_name,
'deal_stage': account.get('deal_stage', 'unknown'),
'industry': account.get('industry', ''),
'notes': account.get('notes', ''),
},
'search_results': results,
'context_type': 'enriched' if account else 'search_only',
}
merged = merge_context('Acme Corp', 'automation tools')
print(f"Context type: {merged['context_type']}")
print(f"Deal stage: {merged['account']['deal_stage']}")
print(f"Search results: {len(merged['search_results'])}")Étape 4: Formater pour l'agent MCP
Structurez le contexte combiné pour l'injecter dans la réponse de l'outil de l'agent MCP.
def format_mcp_response(merged: dict) -> str:
parts = []
acct = merged.get('account', {})
if acct.get('deal_stage') != 'unknown':
parts.append('ACCOUNT CONTEXT:')
parts.append(f" Company: {acct.get('name', '')}")
parts.append(f" Deal Stage: {acct.get('deal_stage', '')}")
parts.append(f" Industry: {acct.get('industry', '')}")
if acct.get('notes'):
parts.append(f" Notes: {acct['notes']}")
parts.append('')
parts.append('SEARCH RESULTS:')
for i, r in enumerate(merged.get('search_results', []), 1):
parts.append(f'{i}. {r["title"]}')
if r.get('snippet'):
parts.append(f' {r["snippet"][:150]}')
return '\n'.join(parts)
response = format_mcp_response(merged)
print(response[:500])Étape 5: Tester avec un appel d'outil MCP
Simulez un appel d'outil MCP qui combine la consultation CRM avec la recherche.
def mcp_search_tool(params: dict) -> dict:
"""MCP tool handler for CRM-enriched search."""
query = params.get('query', '')
account_name = params.get('account', '')
if not query:
return {'error': 'query is required'}
merged = merge_context(account_name, query)
formatted = format_mcp_response(merged)
return {
'content': [{'type': 'text', 'text': formatted}],
'isError': False,
}
# Test the MCP tool
result = mcp_search_tool({'query': 'automation tools', 'account': 'Acme Corp'})
print(result['content'][0]['text'][:400])
# Test without account
result2 = mcp_search_tool({'query': 'search api comparison', 'account': ''})
print(f'\nWithout account: {len(result2["content"][0]["text"])} chars')Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def crm_search(query, industry=''):
refined = f'{query} {industry}'.strip()
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': refined}).json()
return [{'title': r['title'], 'snippet': r.get('snippet', '')[:80]}
for r in data.get('organic_results', [])[:3]]
print(crm_search('automation tools', 'manufacturing'))Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function crmSearch(query, industry = '') {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${query} ${industry}`.trim()})
});
return ((await r.json()).organic_results || []).slice(0, 3)
.map(r => ({title: r.title, snippet: (r.snippet || '').slice(0, 80)}));
}
crmSearch('automation tools', 'manufacturing').then(console.log);Sortie attendue
An MCP search agent enriched with CRM account context that delivers industry-specific, deal-stage-aware search results for more relevant agent responses.