Skip to main content
Glama
neeraj-somani

Tavily Web Search MCP Server

get_stock_ohlc

Retrieve Open, High, Low, Close stock price data for a specific symbol on a given date or the last trading day.

Instructions

Get Open, High, Low, Close (OHLC) data for a stock symbol for the last working day or specified date

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
symbolYes
dateNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • server.py:25-29 (handler)
    MCP tool handler for 'get_stock_ohlc', registered via @mcp.tool() decorator. Executes by calling get_stock_data from polygon_api.
    @mcp.tool()
    def get_stock_ohlc(symbol: str, date: str = None) -> str:
        """Get Open, High, Low, Close (OHLC) data for a stock symbol for the last working day or specified date"""
        return get_stock_data(symbol, date)
  • Core helper method in PolygonStockAPI class that performs the actual API call to Polygon.io to retrieve OHLC stock data.
    def get_stock_ohlc(self, symbol: str, date: Optional[str] = None) -> Dict:
        """
        Fetch Open, High, Low, Close (OHLC) data for a stock symbol.
        
        Args:
            symbol: Stock symbol (e.g., 'AAPL', 'MSFT', 'GOOGL')
            date: Date in YYYY-MM-DD format. If not provided, uses last working day.
        
        Returns:
            Dictionary containing OHLC data and metadata
        """
        if not date:
            date = self.get_last_working_day()
        
        # Validate symbol format
        symbol = symbol.upper().strip()
        
        # Polygon.io API endpoint for daily bars
        url = f"{self.base_url}/v2/aggs/ticker/{symbol}/prev"
        
        params = {
            "adjusted": "true",
            "apikey": self.api_key
        }
        
        try:
            response = requests.get(url, params=params, timeout=10)
            response.raise_for_status()
            
            data = response.json()
            
            if data.get("status") != "OK":
                return {
                    "error": f"API Error: {data.get('status', 'Unknown error')}",
                    "symbol": symbol,
                    "date": date
                }
            
            results = data.get("results", [])
            if not results:
                return {
                    "error": f"No data found for symbol {symbol}",
                    "symbol": symbol,
                    "date": date
                }
            
            # Extract OHLC data from the first result
            result = results[0]
            
            return {
                "symbol": symbol,
                "date": date,
                "open": result.get("o"),
                "high": result.get("h"),
                "low": result.get("l"),
                "close": result.get("c"),
                "volume": result.get("v"),
                "volume_weighted_average_price": result.get("vw"),
                "number_of_transactions": result.get("n"),
                "status": "success"
            }
            
        except requests.exceptions.RequestException as e:
            return {
                "error": f"Network error: {str(e)}",
                "symbol": symbol,
                "date": date
            }
        except Exception as e:
            return {
                "error": f"Unexpected error: {str(e)}",
                "symbol": symbol,
                "date": date
            }
  • Wrapper function imported by server.py that instantiates the API client, fetches data, formats it, and returns the string result.
    def get_stock_data(symbol: str, date: Optional[str] = None) -> str:
        """
        Convenience function to get formatted stock data.
        
        Args:
            symbol: Stock symbol (e.g., 'AAPL', 'MSFT', 'GOOGL')
            date: Date in YYYY-MM-DD format. If not provided, uses last working day.
        
        Returns:
            Formatted string with stock OHLC data
        """
        try:
            api = PolygonStockAPI()
            data = api.get_stock_ohlc(symbol, date)
            return api.format_stock_data(data)
        except Exception as e:
            return f"Error initializing API: {str(e)}"
  • Helper method to determine the last working day (weekday) if no date is specified.
    def get_last_working_day(self) -> str:
        """
        Get the last working day (excluding weekends).
        
        Returns:
            Date string in YYYY-MM-DD format
        """
        today = datetime.now()
        
        # Go back to find the last working day
        days_back = 1
        while True:
            check_date = today - timedelta(days=days_back)
            # Monday = 0, Sunday = 6
            if check_date.weekday() < 5:  # Monday to Friday
                return check_date.strftime("%Y-%m-%d")
            days_back += 1
  • Helper method to format the raw stock data dictionary into a human-readable string.
        def format_stock_data(self, data: Dict) -> str:
            """
            Format stock data into a readable string.
            
            Args:
                data: Stock data dictionary from get_stock_ohlc
                
            Returns:
                Formatted string with stock information
            """
            if "error" in data:
                return f"Error fetching data for {data.get('symbol', 'Unknown')}: {data['error']}"
            
            return f"""
    Stock Symbol: {data['symbol']}
    Date: {data['date']}
    Open: ${data['open']:.2f}
    High: ${data['high']:.2f}
    Low: ${data['low']:.2f}
    Close: ${data['close']:.2f}
    Volume: {data['volume']:,}
    VWAP: ${data['volume_weighted_average_price']:.2f}
    Transactions: {data['number_of_transactions']:,}
    """

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

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/neeraj-somani/AIE8-MCP-S13'

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