Skip to main content
Glama
cfocoder

Banxico MCP Server

get_banxico_reserves_data

Retrieve current and historical reserve assets data from Mexico's central bank (Banxico) for financial analysis and monitoring.

Instructions

Get Banxico Reserve Assets data.

Args: limit: Maximum number of recent data points (default: 30)

Returns: Current and historical Banxico reserve assets data

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo

Implementation Reference

  • Handler function for get_banxico_reserves_data tool. Fetches reserve assets data (series SF308843) from Banxico API, applies optional limit to recent data points, and formats the output using format_financial_data.
    @mcp.tool()
    async def get_banxico_reserves_data(limit: Optional[int] = 30) -> str:
        """
        Get Banxico Reserve Assets data.
        
        Args:
            limit: Maximum number of recent data points (default: 30)
            
        Returns:
            Current and historical Banxico reserve assets data
        """
        if not BANXICO_TOKEN:
            return "Error: BANXICO_API_TOKEN environment variable not set. Please configure your API token."
        
        endpoint = "series/SF308843/datos"
        data = await make_banxico_request(endpoint, BANXICO_TOKEN)
        
        if not data:
            return "Failed to retrieve Banxico reserve assets data. Please check your API token and network connection."
        
        # Apply limit if specified
        if limit and data.get("bmx", {}).get("series"):
            for series in data["bmx"]["series"]:
                if "datos" in series and len(series["datos"]) > limit:
                    series["datos"] = series["datos"][-limit:]
        
        return format_financial_data(data)
  • Helper function to make authenticated HTTP requests to the Banxico SIE API, used by get_banxico_reserves_data.
    async def make_banxico_request(endpoint: str, token: str) -> dict[str, Any] | None:
        """
        Make a request to the Banxico SIE API with proper error handling.
        
        Args:
            endpoint: The API endpoint to call (without base URL)
            token: The Banxico API token
            
        Returns:
            JSON response data or None if request failed
        """
        url = f"{BANXICO_API_BASE}/{endpoint}"
        headers = {"User-Agent": USER_AGENT}
        params = {"token": token}
        
        try:
            async with httpx.AsyncClient() as client:
                response = await client.get(url, headers=headers, params=params, timeout=30.0)
                response.raise_for_status()
                return response.json()
        except httpx.HTTPError as e:
            logger.error(f"HTTP error occurred: {e}")
            return None
        except Exception as e:
            logger.error(f"An error occurred: {e}")
            return None
  • Helper function to format financial data (used for reserves), including units, recent data points with comma-formatted large numbers.
    def format_financial_data(data: dict[str, Any]) -> str:
        """
        Format financial data with appropriate units and formatting.
        
        Args:
            data: Raw JSON response from Banxico API
            
        Returns:
            Formatted string with financial data
        """
        if not data or "bmx" not in data:
            return "No financial data available"
        
        series_list = data["bmx"].get("series", [])
        if not series_list:
            return "No financial series found"
        
        result = []
        for series in series_list:
            title = series.get("titulo", "Unknown Series")
            series_id = series.get("idSerie", "Unknown ID")
            unit = series.get("unidad", "")
            result.append(f"💰 {title} (ID: {series_id})")
            if unit:
                result.append(f"  Unit: {unit}")
            
            datos = series.get("datos", [])
            if not datos:
                result.append("  No data points available")
            else:
                result.append(f"  Total data points: {len(datos)}")
                # Show recent data points with number formatting
                display_count = min(len(datos), 10)
                for dato in datos[-display_count:]:
                    fecha = dato.get("fecha", "Unknown date")
                    valor = dato.get("dato", "N/A")
                    # Format large numbers with commas
                    if valor != "N/A" and valor is not None:
                        try:
                            valor_num = float(valor)
                            if valor_num >= 1000:
                                valor = f"{valor_num:,.2f}"
                            else:
                                valor = f"{valor_num}"
                        except (ValueError, TypeError):
                            pass
                    result.append(f"  {fecha}: {valor}")
            
            result.append("")  # Empty line between series
        
        return "\n".join(result)
  • FastMCP decorator that registers the get_banxico_reserves_data function as a tool.
    @mcp.tool()

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/cfocoder/banxico_mcp'

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