Class: SchwabMCP::Tools::GetMarketHoursTool
- Inherits:
-
MCP::Tool
- Object
- MCP::Tool
- SchwabMCP::Tools::GetMarketHoursTool
- Extended by:
- Loggable
- Defined in:
- lib/schwab_mcp/tools/get_market_hours_tool.rb
Class Method Summary collapse
- .call(markets:, date: nil, server_context:) ⇒ Object
-
.format_market_hours_object(obj) ⇒ Object
Format the market hours object for display.
Methods included from Loggable
log_debug, log_error, log_fatal, log_info, log_warn, logger
Class Method Details
.call(markets:, date: nil, server_context:) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/schwab_mcp/tools/get_market_hours_tool.rb', line 42 def self.call(markets:, date: nil, server_context:) log_info("Getting market hours for markets: #{markets.join(', ')}") log_debug("Date parameter: #{date || 'today'}") begin client = SchwabClientFactory.create_client return SchwabClientFactory.client_error_response unless client parsed_date = nil if date begin parsed_date = Date.parse(date) log_debug("Parsed date: #{parsed_date}") rescue ArgumentError => e log_error("Invalid date format: #{date}") return MCP::Tool::Response.new([{ type: "text", text: "**Error**: Invalid date format '#{date}'. Please use YYYY-MM-DD format." }]) end end log_debug("Making API request for markets: #{markets.join(', ')}") market_hours_obj = client.get_market_hours(markets, date: parsed_date, return_data_objects: true) unless market_hours_obj log_warn("No market hours data object returned for markets: #{markets.join(', ')}") return MCP::Tool::Response.new([{ type: "text", text: "**No Data**: No market hours data returned for markets: #{markets.join(', ')}" }]) end formatted = format_market_hours_object(market_hours_obj) log_info("Successfully retrieved market hours for #{markets.join(', ')}") date_info = date ? " for #{date}" : " for today" MCP::Tool::Response.new([{ type: "text", text: "**Market Hours#{date_info}:**\n\n#{formatted}" }]) rescue => e log_error("Error retrieving market hours for #{markets.join(', ')}: #{e.}") log_debug("Backtrace: #{e.backtrace.first(3).join('\n')}") MCP::Tool::Response.new([{ type: "text", text: "**Error** retrieving market hours for #{markets.join(', ')}: #{e.}\n\n#{e.backtrace.first(3).join('\n')}" }]) end end |
.format_market_hours_object(obj) ⇒ Object
Format the market hours object for display
94 95 96 97 98 99 100 |
# File 'lib/schwab_mcp/tools/get_market_hours_tool.rb', line 94 def self.format_market_hours_object(obj) if obj.respond_to?(:to_h) obj.to_h.inspect else obj.inspect end end |