get_date_range_data
Retrieve historical USD/MXN exchange rate data from Banxico for specific date ranges to analyze currency trends and financial performance.
Instructions
Get exchange rate data for a specific date range.
Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format series_id: The series ID (default: SF63528 for USD/MXN)
Returns: Exchange rate data for the specified date range
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| series_id | No | SF63528 |
Implementation Reference
- banxico_mcp_server.py:417-439 (handler)The handler function for the 'get_date_range_data' tool. Decorated with @mcp.tool() for automatic registration in FastMCP. Fetches Banxico API data for a given date range and series ID, handles token and request errors, and returns formatted data using helper functions.@mcp.tool() async def get_date_range_data(start_date: str, end_date: str, series_id: str = "SF63528") -> str: """ Get exchange rate data for a specific date range. Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format series_id: The series ID (default: SF63528 for USD/MXN) Returns: Exchange rate data for the specified date range """ if not BANXICO_TOKEN: return "Error: BANXICO_API_TOKEN environment variable not set. Please configure your API token." endpoint = f"series/{series_id}/datos/{start_date}/{end_date}" data = await make_banxico_request(endpoint, BANXICO_TOKEN) if not data: return f"Failed to retrieve data for {series_id} from {start_date} to {end_date}. Please check your API token and network connection." return format_exchange_rate_data(data)
- banxico_mcp_server.py:43-69 (helper)Helper function used by get_date_range_data to make authenticated HTTP requests to the Banxico SIE API with comprehensive error handling.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
- banxico_mcp_server.py:71-122 (helper)Helper function used by get_date_range_data to format the raw JSON data from Banxico API into a human-readable string, showing series info and data points.def format_exchange_rate_data(data: dict[str, Any]) -> str: """ Format exchange rate data into a readable string. Args: data: Raw JSON response from Banxico API Returns: Formatted string with exchange rate information """ if not data or "bmx" not in data: return "No data available" series_list = data["bmx"].get("series", []) if not series_list: return "No series data found" result = [] for series in series_list: series_title = series.get("titulo", "Unknown Series") series_id = series.get("idSerie", "Unknown ID") result.append(f"Series: {series_title} (ID: {series_id})") datos = series.get("datos", []) if not datos: result.append(" No data points available") else: result.append(f" Total data points: {len(datos)}") # Show first few and last few data points if len(datos) <= 10: for dato in datos: fecha = dato.get("fecha", "Unknown date") valor = dato.get("dato", "N/A") result.append(f" {fecha}: {valor}") else: # Show first 5 for i, dato in enumerate(datos[:5]): fecha = dato.get("fecha", "Unknown date") valor = dato.get("dato", "N/A") result.append(f" {fecha}: {valor}") result.append(f" ... ({len(datos) - 10} more data points) ...") # Show last 5 for dato in datos[-5:]: fecha = dato.get("fecha", "Unknown date") valor = dato.get("dato", "N/A") result.append(f" {fecha}: {valor}") result.append("") # Empty line between series return "\n".join(result)