Récupérer une ressource et une invite depuis MCP
Votre serveur de devises expose une ressource (file://currencies.txt) et une invite (convert_currency_prompt) qui combinent la demande de l'utilisateur avec du contexte et des règles propres à la tâche. Pour alimenter un LLM, le client doit récupérer les deux en une seule opération. Implémentez une fonction utilitaire appelée get_context_from_mcp() qui retourne le texte de la ressource et le texte de l'invite (avec la requête de l'utilisateur déjà intégrée) afin que l'appelant puisse construire le message.
Le fichier currency_server.py est fourni avec un outil, une ressource et une invite. Utilisez la même session pour lire la ressource et obtenir l'invite avec l'entrée de l'utilisateur.
Cette activité fait partie du cours
Introduction au Model Context Protocol (MCP)
Instructions de l’exercice
- À l'intérieur de la session, appelez la méthode pour lire la ressource à
"file://currencies.txt". - Appelez la méthode pour obtenir l'invite par son nom avec l'entrée de l'utilisateur : utilisez le nom d'invite
"convert_currency_prompt"et un dictionnaireargumentsavec la clé"currency_request"et la valeuruser_query.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def get_context_from_mcp(user_query: str) -> tuple[str, str]:
"""Fetch resource content and prompt text from the MCP server."""
params = StdioServerParameters(command=sys.executable, args=["currency_server.py"])
async with stdio_client(params) as (reader, writer):
async with ClientSession(reader, writer) as session:
await session.initialize()
# Read the resource (supported currencies)
resource_result = await session.____("file://currencies.txt")
resource_text = resource_result.contents[0].text
# Get the prompt with the user's query
prompt_result = await session.____("convert_currency_prompt",
arguments={"currency_request": user_query})
prompt_text = prompt_result.messages[0].content.text
return resource_text, prompt_text
print(asyncio.run(get_context_from_mcp("How much is 50 GBP in euros?")))