Resource en prompt ophalen uit MCP
Je currency-server stelt een resource (file://currencies.txt) en een prompt (convert_currency_prompt) bloot die de vraag van de gebruiker combineren met taakspecifieke context en regels. Om een LLM van input te voorzien, moet de client beide in één keer ophalen. Implementeer een helperfunctie get_context_from_mcp() die de resource-tekst en de prompttekst retourneert (met de gebruikersquery er al in) zodat de aanroeper het bericht kan opbouwen.
Het bestand currency_server.py is beschikbaar met een tool, resource en prompt. Gebruik dezelfde sessie om de resource te lezen en de prompt op te halen met de invoer van de gebruiker.
Deze oefening maakt deel uit van de cursus
Introductie tot Model Context Protocol (MCP)
Oefeninstructies
- Roep binnen de sessie de methode aan om de resource op
"file://currencies.txt"te lezen. - Roep de methode aan om de prompt op naam op te halen met de invoer van de gebruiker: gebruik promptnaam
"convert_currency_prompt"en eenarguments-dict met sleutel"currency_request"en waardeuser_query.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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?")))