get-daily-stock-data
Retrieve daily stock market data for analysis, providing historical price information for specified stock symbols with adjustable data range options.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol (e.g., IBM, AAPL) | |
| outputsize | No | Amount of data to return (compact: latest 100 data points, full: up to 20 years of data) |
Implementation Reference
- src/index.ts:90-102 (handler)MCP tool handler for get-daily-stock-data that invokes getStockData with daily interval and handles response/error formatting.async ({ symbol, outputsize = "compact" }) => { try { const data = await getStockData(symbol, "daily", outputsize); return { content: [{ type: "text", text: data }] }; } catch (error) { return { content: [{ type: "text", text: `Error fetching daily stock data: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } }
- src/index.ts:86-89 (schema)Input schema using Zod validators for the tool parameters: symbol and optional outputsize.{ symbol: z.string().describe("Stock symbol (e.g., IBM, AAPL)"), outputsize: z.enum(["compact", "full"]).optional().describe("Amount of data to return (compact: latest 100 data points, full: up to 20 years of data)") },
- src/index.ts:84-103 (registration)Registration of the get-daily-stock-data tool with schema and handler on the MCP server.server.tool( "get-daily-stock-data", { symbol: z.string().describe("Stock symbol (e.g., IBM, AAPL)"), outputsize: z.enum(["compact", "full"]).optional().describe("Amount of data to return (compact: latest 100 data points, full: up to 20 years of data)") }, async ({ symbol, outputsize = "compact" }) => { try { const data = await getStockData(symbol, "daily", outputsize); return { content: [{ type: "text", text: data }] }; } catch (error) { return { content: [{ type: "text", text: `Error fetching daily stock data: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );
- src/alphaVantage.ts:21-68 (helper)Helper function implementing the core API call to Alpha Vantage for stock data, specifically using TIME_SERIES_DAILY for the 'daily' interval used by the tool, and formatting the response.export async function getStockData(symbol: string | string[], interval: string | string[] | 'daily', outputsize: string = 'compact'): Promise<string> { try { // Ensure parameters are strings, not arrays const symbolStr = Array.isArray(symbol) ? symbol[0] : symbol; const intervalStr = Array.isArray(interval) ? interval[0] : interval; const outputsizeStr = Array.isArray(outputsize) ? outputsize[0] : outputsize; let url: string; let timeSeriesKey: string; if (intervalStr === 'daily') { // Use TIME_SERIES_DAILY endpoint url = `${BASE_URL}?function=TIME_SERIES_DAILY&symbol=${symbolStr}&outputsize=${outputsizeStr}&apikey=${API_KEY}`; timeSeriesKey = 'Time Series (Daily)'; } else { // Use TIME_SERIES_INTRADAY endpoint url = `${BASE_URL}?function=TIME_SERIES_INTRADAY&symbol=${symbolStr}&interval=${intervalStr}&outputsize=${outputsizeStr}&apikey=${API_KEY}`; timeSeriesKey = `Time Series (${intervalStr})`; } const response = await axios.get(url); // Check for error messages from Alpha Vantage if (response.data['Error Message']) { throw new Error(response.data['Error Message']); } if (response.data['Note']) { console.warn('API Usage Note:', response.data['Note']); } // Extract the time series data const timeSeries = response.data[timeSeriesKey]; if (!timeSeries) { throw new Error('No time series data found in the response'); } // Format the data const formattedData = formatTimeSeriesData(timeSeries, symbolStr, intervalStr); return formattedData; } catch (error) { if (axios.isAxiosError(error)) { throw new Error(`API request failed: ${error.message}`); } throw error; } }