Skip to main content
Glama
qubaomingg

@qubaomingg/stock-mcp

get-daily-stock-data

Retrieve daily stock price data for any stock symbol, with options for recent data or extended historical records up to 20 years.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
outputsizeNoAmount of data to return (compact: latest 100 data points, full: up to 20 years of data)
symbolYesStock symbol (e.g., IBM, AAPL)

Implementation Reference

  • MCP tool handler for 'get-daily-stock-data': calls getStockData with 'daily' interval and returns the data as text content or error response.
    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, }; } },
  • Zod schema for tool inputs: required stock symbol and optional outputsize (compact or full).
    { 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:119-150 (registration)
    Full registration of the 'get-daily-stock-data' tool on the MCP server, including name, schema, and handler.
    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, }; } }, );
  • Core implementation logic for fetching and formatting stock time series data from Alpha Vantage API, specifically used with interval='daily' for this tool.
    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/qubaomingg/stock-analysis-mcp'

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