Skip to main content
Glama
ranveer0323

Alpha Vantage Stock Analysis MCP Server

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
NameRequiredDescriptionDefault
symbolYesStock symbol (e.g., IBM, AAPL)
outputsizeNoAmount of data to return (compact: latest 100 data points, full: up to 20 years of data)

Implementation Reference

  • 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 }; } }
  • 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 }; } } );
  • 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; } }

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/ranveer0323/stock-analysis-mcp'

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