La plupart des agents d'IA codent en dur quel outil utiliser pour chaque type de requête. MCP change cela en permettant aux agents de découvrir les outils à l'exécution et de sélectionner le meilleur en fonction du contexte. Ce tutoriel construit un agent de routage qui se connecte au serveur MCP de Scavio, découvre 11 outils de recherche et choisit dynamiquement la plateforme optimale pour chaque requête. Aucune logique de routage if-else n'est nécessaire : le LLM prend la décision de routage en fonction des descriptions des outils.
Prérequis
- Node.js 18+ installé
- Paquet @modelcontextprotocol/sdk
- Une clé API Scavio provenant de scavio.dev
- Une clé API Anthropic ou OpenAI pour le LLM
Parcours
Étape 1: Installer le SDK MCP
Ajoutez le SDK client MCP à votre projet.
npm install @modelcontextprotocol/sdkÉtape 2: Connectez-vous au serveur MCP et découvrez les outils
Créez un client qui se connecte au serveur MCP de Scavio et liste tous les outils disponibles.
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPClientTransport(
new URL('https://mcp.scavio.dev/mcp'),
{ requestInit: { headers: { 'x-api-key': process.env.SCAVIO_API_KEY } } }
);
const client = new Client({ name: 'routing-agent', version: '1.0.0' });
await client.connect(transport);
const { tools } = await client.listTools();
console.log(`Discovered ${tools.length} tools:`);
tools.forEach(t => console.log(` - ${t.name}: ${t.description}`));Étape 3: Convertissez les outils MCP en définitions d'outils pour le LLM
Mappez les outils MCP découverts dans le format attendu par votre LLM pour l'appel d'outils.
function mcpToLlmTools(mcpTools) {
return mcpTools.map(t => ({
type: 'function',
function: {
name: t.name,
description: t.description,
parameters: t.inputSchema
}
}));
}
const llmTools = mcpToLlmTools(tools);Étape 4: Construisez la boucle de routage
Envoyez les requêtes utilisateur au LLM avec la liste des outils. Le LLM choisit l'outil ; votre code l'exécute via MCP.
async function routingAgent(userQuery) {
const messages = [{ role: 'user', content: userQuery }];
const response = await llm.chat({
messages,
tools: llmTools,
tool_choice: 'auto'
});
if (response.tool_calls) {
for (const call of response.tool_calls) {
const result = await client.callTool({
name: call.function.name,
arguments: JSON.parse(call.function.arguments)
});
messages.push({ role: 'tool', content: JSON.stringify(result), tool_call_id: call.id });
}
const final = await llm.chat({ messages, tools: llmTools });
return final.content;
}
return response.content;
}Exemple Python
# Python MCP client with routing:
import requests, os, json
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
# Simplified routing without full MCP SDK:
PLATFORM_MAP = {
'product': 'amazon', 'price': 'amazon', 'buy': 'walmart',
'video': 'youtube', 'tutorial': 'youtube', 'how to': 'youtube',
'reddit': 'reddit', 'community': 'reddit', 'opinion': 'reddit',
}
def route_search(query: str) -> str:
q_lower = query.lower()
platform = 'google'
for keyword, p in PLATFORM_MAP.items():
if keyword in q_lower:
platform = p
break
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': platform, 'query': query}, timeout=10)
return json.dumps({'platform': platform, 'results': resp.json().get('organic', [])[:3]}, indent=2)Exemple JavaScript
// Full MCP routing example in the steps above.
// Simplified version without MCP SDK:
const PLATFORM_MAP = { product: 'amazon', video: 'youtube', reddit: 'reddit', opinion: 'reddit' };
async function routeSearch(query) {
let platform = 'google';
for (const [kw, p] of Object.entries(PLATFORM_MAP)) {
if (query.toLowerCase().includes(kw)) { platform = p; break; }
}
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform, query})
});
return {platform, results: (await resp.json()).organic?.slice(0, 3)};
}Sortie attendue
An MCP routing agent that discovers search tools dynamically and lets the LLM select the optimal platform per query context.