Appel direct d'outils

La méthode call_tool permet d'appeler un outil MCP spécifique sur un Connector directement, sans démarrer de conversation ni solliciter le modèle.

Cela s'avère utile lorsque vous :

  • Savez déjà quel outil appeler et quels arguments transmettre
  • Souhaitez obtenir la sortie brute de l'outil pour un traitement en aval
  • Construisez des pipelines enchaînant des appels d'outils de manière programmatique
  • Voulez déboguer ou vérifier les outils d'un Connector avant de les utiliser dans des conversations

Pour les scénarios où le modèle choisit les outils à appeler, utilisez plutôt les Connectors dans les conversations.

Note

Si un Connector nécessite une authentification, vous devez compléter 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 Connector, le nom de l'outil et les arguments attendus par l'outil.

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 d'outils doivent correspondre exactement : utilisez lister les outils pour vérifier ce qu'expose un Connector.

Enchaîner plusieurs appels d'outils

Enchaîner plusieurs appels d'outils

Vous pouvez appeler plusieurs outils en séquence pour construire un pipeline sans solliciter 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())