Appel direct d’outils
La méthode call_tool appelle directement un outil MCP d'un connecteur, sans conversation ni modèle.
Appelez un outil directement 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 dans le code.
- Souhaitez vérifier les outils d'un connecteur avant de les utiliser dans des conversations.
Lorsque le modèle doit choisir les outils, utilisez plutôt les connecteurs dans les conversations. Dans les deux cas, connectez le connecteur avant d'appeler ses outils.
Appeler un outil directement
Pour appeler un outil, transmettez le nom ou l'identifiant du connecteur, 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 les blocs typés que renvoie le serveur MCP : texte, image, audio, lien de ressource ou ressource intégrée.
Les noms des outils doivent correspondre exactement. Pour vérifier les noms, listez les outils du connecteur.
Enchaîner plusieurs appels d’outils
Pour construire un pipeline, appelez plusieurs outils en séquence. Le modèle n'intervient à aucune é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_wiki_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())