Aller au contenu principal

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 GitHub
  • docs-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 :

  1. La requête utilisateur : Grok analyse ce que l’utilisateur demande
  2. Les descriptions des serveurs : le server_description de chaque serveur oriente le choix
  3. Les noms et descriptions des outils : chaque outil du serveur a son propre nom et sa description
  4. 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 :

  1. Vérifier le statut du service via status__get_current_status
  2. Consulter l’historique du client via crm__get_customer
  3. Chercher un article de dépannage via knowledge__search_articles

Points clés à retenir

  • Passez plusieurs objets MCP dans le tableau tools pour le multi-serveur
  • Chaque serveur doit avoir un server_label unique et descriptif
  • Les server_description sont 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_names pour limiter le bruit