Skip to main content
Glama
berlinbra

AlphaVantage-MCP

get-crypto-exchange-rate

Retrieve current cryptocurrency exchange rates for trading pairs like BTC/USD or ETH/EUR using Alpha Vantage market data.

Instructions

Get current cryptocurrency exchange rate

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
crypto_symbolYesCryptocurrency symbol (e.g., BTC, ETH)
marketNoMarket currency (e.g., USD, EUR)USD

Implementation Reference

  • The main handler function that implements the core logic for the 'get-crypto-exchange-rate' tool. It validates input parameters, makes an asynchronous HTTP request to the Alpha Vantage CURRENCY_EXCHANGE_RATE API using the make_alpha_request helper, handles errors, formats the response using format_crypto_rate, and returns a formatted text content response.
    elif name == "get-crypto-exchange-rate":
        crypto_symbol = arguments.get("crypto_symbol")
        if not crypto_symbol:
            return [types.TextContent(type="text", text="Missing crypto_symbol parameter")]
    
        market = arguments.get("market", "USD")
        crypto_symbol = crypto_symbol.upper()
        market = market.upper()
    
        async with httpx.AsyncClient() as client:
            crypto_data = await make_alpha_request(
                client,
                "CURRENCY_EXCHANGE_RATE",
                None,
                {
                    "from_currency": crypto_symbol,
                    "to_currency": market
                }
            )
    
            if isinstance(crypto_data, str):
                return [types.TextContent(type="text", text=f"Error: {crypto_data}")]
    
            formatted_rate = format_crypto_rate(crypto_data)
            rate_text = f"Cryptocurrency exchange rate for {crypto_symbol}/{market}:\n\n{formatted_rate}"
    
            return [types.TextContent(type="text", text=rate_text)]
  • Tool registration in the list_tools handler, defining the tool name, description, and JSON schema for input validation (crypto_symbol required, market optional with USD default).
    types.Tool(
        name="get-crypto-exchange-rate",
        description="Get current cryptocurrency exchange rate",
        inputSchema={
            "type": "object",
            "properties": {
                "crypto_symbol": {
                    "type": "string",
                    "description": "Cryptocurrency symbol (e.g., BTC, ETH)",
                },
                "market": {
                    "type": "string",
                    "description": "Market currency (e.g., USD, EUR)",
                    "default": "USD"
                }
            },
            "required": ["crypto_symbol"],
        },
    ),
  • JSON schema defining the input parameters for the tool: crypto_symbol (string, required) and market (string, optional default 'USD').
    inputSchema={
        "type": "object",
        "properties": {
            "crypto_symbol": {
                "type": "string",
                "description": "Cryptocurrency symbol (e.g., BTC, ETH)",
            },
            "market": {
                "type": "string",
                "description": "Market currency (e.g., USD, EUR)",
                "default": "USD"
            }
        },
        "required": ["crypto_symbol"],
    },
  • Supporting helper function that takes the raw API response from Alpha Vantage CURRENCY_EXCHANGE_RATE and formats it into a readable multi-line string with currency details, exchange rate, bid/ask prices, and metadata.
    def format_crypto_rate(crypto_data: Dict[str, Any]) -> str:
        """Format cryptocurrency exchange rate data into a concise string.
        
        Args:
            crypto_data: The response data from the Alpha Vantage CURRENCY_EXCHANGE_RATE endpoint
            
        Returns:
            A formatted string containing the cryptocurrency exchange rate information
        """
        try:
            realtime_data = crypto_data.get("Realtime Currency Exchange Rate", {})
            if not realtime_data:
                return "No exchange rate data available in the response"
    
            return (
                f"From: {realtime_data.get('2. From_Currency Name', 'N/A')} ({realtime_data.get('1. From_Currency Code', 'N/A')})\n"
                f"To: {realtime_data.get('4. To_Currency Name', 'N/A')} ({realtime_data.get('3. To_Currency Code', 'N/A')})\n"
                f"Exchange Rate: {realtime_data.get('5. Exchange Rate', 'N/A')}\n"
                f"Last Updated: {realtime_data.get('6. Last Refreshed', 'N/A')} {realtime_data.get('7. Time Zone', 'N/A')}\n"
                f"Bid Price: {realtime_data.get('8. Bid Price', 'N/A')}\n"
                f"Ask Price: {realtime_data.get('9. Ask Price', 'N/A')}\n"
                "---"
            )
        except Exception as e:
            return f"Error formatting cryptocurrency data: {str(e)}"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/berlinbra/alpha-vantage-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server