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.
Si un Connector nécessite une authentification, vous devez compléter le flux d'authentification avant d'appeler ses outils.
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.
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
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())