EmpezarEmpieza gratis

Obtener recurso y prompt desde MCP

Tu servidor de divisas expone un recurso (file://currencies.txt) y un prompt (convert_currency_prompt) que combinan la petición del usuario con contexto y reglas específicas de la tarea. Para alimentar a un LLM, el cliente debe obtener ambos de una vez. Implementa una función auxiliar llamada get_context_from_mcp() que devuelva el texto del recurso y el texto del prompt (ya con la consulta del usuario incluida) para que quien la llame pueda construir el mensaje.

El archivo currency_server.py está disponible con una herramienta, un recurso y un prompt. Usa la misma sesión para leer el recurso y obtener el prompt con la entrada del usuario.

Este ejercicio forma parte del curso

Introducción a Model Context Protocol (MCP)

Ver curso

Instrucciones del ejercicio

  • Dentro de la sesión, llama al método para leer el recurso en "file://currencies.txt".
  • Llama al método para obtener el prompt por nombre con la entrada del usuario: usa el nombre de prompt "convert_currency_prompt" y un diccionario arguments con la clave "currency_request" y el valor user_query.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

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?")))
Editar y ejecutar código