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.
Si un Connecteur nécessite une authentification, vous devez terminer le flux d’authentification avant d’appeler ses outils.
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.
Les noms des outils doivent correspondre exactement : utilisez list tools pour vérifier ce qu’un Connecteur expose.
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())