Configuration multi-serveur
Connecter plusieurs serveurs MCP
L’un des atouts majeurs du MCP distant est la possibilité de connecter Grok à plusieurs serveurs simultanément. Chaque serveur apporte ses propres outils, et Grok choisit automatiquement le bon serveur en fonction de la requête utilisateur.
Syntaxe multi-serveur
La configuration multi-serveur est simple : vous passez plusieurs objets MCP dans le tableau tools.
from xai_sdk.tools import mcp
tools = [
mcp(server_url="https://mcp.deepwiki.com/mcp", server_label="deepwiki"),
mcp(server_url="https://your-custom-tools.com/mcp", server_label="custom"),
mcp(server_url="https://api.example.com/tools", server_label="api-tools"),
]
Avec l’API Responses (format OpenAI) :
tools = [
{
"type": "mcp",
"server_url": "https://mcp.deepwiki.com/mcp",
"server_label": "deepwiki",
"server_description": "Documentation de projets open-source GitHub"
},
{
"type": "mcp",
"server_url": "https://your-custom-tools.com/mcp",
"server_label": "custom",
"server_description": "Outils internes de l'entreprise"
},
{
"type": "mcp",
"server_url": "https://api.example.com/tools",
"server_label": "api-tools",
"server_description": "API de données et d'analyse"
},
]
L’importance des labels distincts
En multi-serveur, le server_label devient critique. Quand deux serveurs exposent des outils aux noms similaires, le label permet la désambiguïsation.
Prenons un exemple concret. Vous connectez un serveur de documentation interne et DeepWiki. Les deux exposent un outil search. Sans labels distincts, Grok ne saurait pas lequel appeler. Avec les labels :
deepwiki__search: recherche dans la documentation GitHubdocs-internes__search: recherche dans votre base de connaissances
Grok utilise le server_description et le contexte de la conversation pour choisir le bon outil.
Règles pour les labels multi-serveur
- Chaque label doit être unique dans la configuration
- Utilisez des noms qui reflètent la source de données, pas la fonction technique
- Gardez les labels courts mais distinctifs
# Bon : labels descriptifs et distincts
server_label="deepwiki"
server_label="crm"
server_label="jira"
# Mauvais : labels ambigus
server_label="server1"
server_label="server2"
server_label="tools"
Comment Grok choisit le bon serveur
Face à plusieurs serveurs MCP, Grok suit un processus de sélection basé sur :
- La requête utilisateur : Grok analyse ce que l’utilisateur demande
- Les descriptions des serveurs : le
server_descriptionde chaque serveur oriente le choix - Les noms et descriptions des outils : chaque outil du serveur a son propre nom et sa description
- Le contexte de la conversation : les messages précédents influencent la sélection
C’est pourquoi les server_description sont particulièrement importantes en multi-serveur. Sans elles, Grok doit se baser uniquement sur les noms d’outils, ce qui peut mener à des erreurs de sélection.
Exemple concret : agent de support
Voici une configuration réaliste pour un agent de support client :
tools = [
mcp(
server_url="https://kb.monentreprise.com/mcp",
server_label="knowledge",
server_description="Base de connaissances produit. Articles d'aide, FAQ, guides de dépannage.",
allowed_tool_names=["search_articles", "get_article"]
),
mcp(
server_url="https://crm.monentreprise.com/mcp",
server_label="crm",
server_description="CRM. Historique client, tickets précédents, informations de compte.",
authorization=f"Bearer {os.getenv('CRM_TOKEN')}",
allowed_tool_names=["get_customer", "search_tickets", "get_ticket"]
),
mcp(
server_url="https://status.monentreprise.com/mcp",
server_label="status",
server_description="Statut des services. Incidents en cours, maintenances planifiées.",
allowed_tool_names=["get_current_status", "list_incidents"]
),
]
Avec cette configuration, quand un client demande “Mon service ne fonctionne plus”, Grok peut :
- Vérifier le statut du service via
status__get_current_status - Consulter l’historique du client via
crm__get_customer - Chercher un article de dépannage via
knowledge__search_articles
Points clés à retenir
- Passez plusieurs objets MCP dans le tableau
toolspour le multi-serveur - Chaque serveur doit avoir un
server_labelunique et descriptif - Les
server_descriptionsont essentielles pour guider Grok vers le bon serveur - Grok choisit automatiquement le serveur adapté en fonction de la requête et du contexte
- Restreignez les outils de chaque serveur avec
allowed_tool_namespour limiter le bruit