Appel direct d’outils

La méthode call_tool permet d’appeler un outil MCP spécifique sur un Connecteur sans démarrer de conversation ni faire intervenir le modèle.

Cela est utile lorsque vous :

  • Connaissez déjà l’outil à appeler et les arguments à transmettre
  • Souhaitez récupérer la sortie brute de l’outil pour un traitement ultérieur
  • Construisez des pipelines qui enchaînent des appels d’outils de manière programmatique
  • Voulez tester ou vérifier les outils d’un Connecteur avant de les utiliser dans des conversations

Pour les scénarios où c’est le modèle qui choisit les outils à appeler, utilisez plutôt les Connecteurs dans les conversations.

Note

Si un Connecteur nécessite une authentification, vous devez terminer le flux d’authentification avant d’appeler ses outils.

Appeler un outil directement

Appeler un outil directement

Pour appeler un outil, transmettez le nom (ou l’UUID) du Connecteur, le nom de l’outil et les arguments attendus par celui-ci.

import asyncio
from mistralai.client import Mistral

client = Mistral(api_key="your-api-key")


async def main() -> None:
    result = await client.beta.connectors.call_tool_async(
        connector_id_or_name="my_deepwiki",
        tool_name="read_wiki_structure",
        arguments={"repoName": "sqlite/sqlite"},
    )

    # result.content is a list of content blocks (TextContent, ImageContent, etc.)
    for item in result.content:
        if hasattr(item, "text"):
            print(item.text)


asyncio.run(main())

Le tableau content de la réponse contient des blocs de contenu typés (texte, image, audio ou ressource) renvoyés par le serveur MCP.

i
Information

Les noms des outils doivent correspondre exactement : utilisez list tools pour vérifier ce qu’un Connecteur expose.

Enchaîner plusieurs appels d’outils

Enchaîner plusieurs appels d’outils

Vous pouvez appeler plusieurs outils en séquence pour créer un pipeline sans faire intervenir le modèle à chaque étape.

import asyncio
from mistralai.client import Mistral

client = Mistral(api_key="your-api-key")


async def main() -> None:
    # First call: get the repository structure
    structure = await client.beta.connectors.call_tool_async(
        connector_id_or_name="my_deepwiki",
        tool_name="read_wiki_structure",
        arguments={"repoName": "sqlite/sqlite"},
    )
    for item in structure.content:
        if hasattr(item, "text"):
            print("Structure:", item.text[:300])

    # Second call: ask a question about the repo
    answer = await client.beta.connectors.call_tool_async(
        connector_id_or_name="my_deepwiki",
        tool_name="ask_question",
        arguments={
            "repoName": "sqlite/sqlite",
            "question": "What is the purpose of the VDBE?",
        },
    )
    for item in answer.content:
        if hasattr(item, "text"):
            print("Answer:", item.text[:300])


asyncio.run(main())