get_historical_crypto_prices
Retrieve historical cryptocurrency price data by specifying ticker, date range, and interval for analysis and tracking.
Instructions
Gets historical prices for a crypto currency.
Args:
ticker: Ticker symbol of the crypto currency (e.g. BTC-USD). The list of available crypto tickers can be retrieved via the get_available_crypto_tickers tool.
start_date: Start date of the price data (e.g. 2020-01-01)
end_date: End date of the price data (e.g. 2020-12-31)
interval: Interval of the price data (e.g. minute, hour, day, week, month)
interval_multiplier: Multiplier of the interval (e.g. 1, 2, 3)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| start_date | Yes | ||
| end_date | Yes | ||
| interval | No | day | |
| interval_multiplier | No |
Implementation Reference
- server.py:275-308 (handler)The main handler function for the 'get_historical_crypto_prices' tool. It is decorated with @mcp.tool() which handles both registration and schema inference from the signature and docstring. The function constructs an API URL, calls the make_request helper to fetch data from Financial Datasets API, extracts the prices, and returns them as JSON string.@mcp.tool() async def get_historical_crypto_prices( ticker: str, start_date: str, end_date: str, interval: str = "day", interval_multiplier: int = 1, ) -> str: """Gets historical prices for a crypto currency. Args: ticker: Ticker symbol of the crypto currency (e.g. BTC-USD). The list of available crypto tickers can be retrieved via the get_available_crypto_tickers tool. start_date: Start date of the price data (e.g. 2020-01-01) end_date: End date of the price data (e.g. 2020-12-31) interval: Interval of the price data (e.g. minute, hour, day, week, month) interval_multiplier: Multiplier of the interval (e.g. 1, 2, 3) """ # Fetch data from the API url = f"{FINANCIAL_DATASETS_API_BASE}/crypto/prices/?ticker={ticker}&interval={interval}&interval_multiplier={interval_multiplier}&start_date={start_date}&end_date={end_date}" data = await make_request(url) # Check if data is found if not data: return "Unable to fetch prices or no prices found." # Extract the prices prices = data.get("prices", []) # Check if prices are found if not prices: return "Unable to fetch prices or no prices found." # Stringify the prices return json.dumps(prices, indent=2)
- server.py:25-41 (helper)Helper function used by the tool (and others) to make authenticated HTTP requests to the Financial Datasets API, handling API key from env and errors.async def make_request(url: str) -> dict[str, any] | None: """Make a request to the Financial Datasets API with proper error handling.""" # Load environment variables from .env file load_dotenv() headers = {} if api_key := os.environ.get("FINANCIAL_DATASETS_API_KEY"): headers["X-API-KEY"] = api_key async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers, timeout=30.0) response.raise_for_status() return response.json() except Exception as e: return {"Error": str(e)}
- server.py:275-275 (registration)The @mcp.tool() decorator registers the function as an MCP tool, inferring schema from args and docstring.@mcp.tool()