Resource und Prompt aus MCP abrufen
Dein Currency-Server stellt eine Resource (file://currencies.txt) und einen Prompt (convert_currency_prompt) bereit, die die Anfrage der Nutzerin bzw. des Nutzers mit aufgabenspezifischem Kontext und Regeln kombinieren. Damit ein LLM damit arbeiten kann, muss der Client beides in einem Rutsch abrufen. Implementiere eine Hilfsfunktion namens get_context_from_mcp(), die den Resource-Text und den Prompt-Text (bereits mit der Nutzeranfrage) zurückgibt, sodass der Aufrufer daraus die Message bauen kann.
Die Datei currency_server.py ist mit einem Tool, einer Resource und einem Prompt verfügbar. Verwende dieselbe Session, um die Resource zu lesen und den Prompt mit der Nutzereingabe zu holen.
Diese Übung ist Teil des Kurses
<Kurs>Einführung in das Model Context Protocol (MCP)</Kurs>Übungsanweisungen
- Rufe innerhalb der Session die Methode auf, um die Resource unter
"file://currencies.txt"zu lesen. - Rufe die Methode auf, um den Prompt per Namen mit der Nutzereingabe zu holen: Verwende den Prompt-Namen
"convert_currency_prompt"und einarguments-Dict mit dem Schlüssel"currency_request"und dem Wertuser_query.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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?")))