ComeçarComece de graça

Making API Tool Calls Robust

In production, the currency server's convert_currency() tool should not hang if the exchange-rate API is slow or unreachable. To mitigate this, you'll implement a timeout to the request and ensure any failure returns a short, clear error message to the user instead of a raw exception.

An MCP server has already been instantiated and stored as the variable mcp.

Este exercício faz parte do curso

Introduction to Model Context Protocol (MCP)

Ver curso

Instruções do exercício

  • Implement try-except logic that will attempt the API request, and gracefully fail if an error is returned by capturing the exception.
  • Add a timeout of 10 seconds to the requests.get() call so the request does not hang indefinitely.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

@mcp.tool()
def convert_currency(amount: float, from_currency: str, to_currency: str) -> str:
    """
    Convert an amount from one currency to another using current exchange rates.

    Args:
        amount: The amount to convert
        from_currency: Source currency code (e.g., 'USD', 'EUR', 'GBP')
        to_currency: Target currency code (e.g., 'USD', 'EUR', 'GBP')

    Returns:
        A string with the conversion result and exchange rate
    """
    url = f"https://api.frankfurter.dev/v1/latest?base={from_currency}&symbols={to_currency}"
    # Implement try-except to gracefully handle errors
    ____:
        # Add a 10-second timeout so the request does not hang
        r = requests.get(url, ____=____)
        r.raise_for_status()
        data = r.json()
        rate = data["rates"].get(to_currency)
        if rate is None:
            return f"Could not find exchange rate for {from_currency} to {to_currency}"
        return f"{amount} {from_currency} = {amount * rate:.2f} {to_currency} (Rate: {rate})"
    ____ requests.exceptions.RequestException as e:
        return f"Error converting currency: {e}"

print(convert_currency(10, "USD", "EUR"))
Editar e executar o código