Snowflake Cube Server

  • src
  • mcp_cube_server
import argparse import asyncio import json import logging import os import dotenv from . import server def args_to_kwargs(unknown): extras = {} i = 0 while i < len(unknown): if unknown[i].startswith("--"): key = unknown[i][2:] # Remove '--' prefix if i + 1 >= len(unknown) or unknown[i + 1].startswith("--"): extras[key] = True # Flag argument i += 1 else: extras[key] = unknown[i + 1] # Key-value pair i += 2 else: i += 1 return extras def main(): """Main entry point for the package.""" parser = argparse.ArgumentParser(description="Cube MCP Server") parser.add_argument( "--log_dir", required=False, default=None, help="Directory to log to" ) parser.add_argument( "--log_level", required=False, default="INFO", help="Logging level" ) dotenv.load_dotenv() required = { "endpoint": os.getenv("CUBE_ENDPOINT"), "api_secret": os.getenv("CUBE_API_SECRET"), "token_payload": os.getenv("CUBE_TOKEN_PAYLOAD", "{}"), } parser.add_argument( "--endpoint", required=not required["endpoint"], default=required["endpoint"] ) parser.add_argument( "--api_secret", required=not required["api_secret"], default=required["api_secret"], ) args, unknown = parser.parse_known_args() additional_kwargs = args_to_kwargs(unknown) token_payload = json.loads(required["token_payload"]) for key, value in additional_kwargs.items(): token_payload[key] = value logger = logging.getLogger(__name__) logger.propagate = False logger.setLevel(args.log_level) console_handler = logging.StreamHandler() formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) console_handler.setFormatter(formatter) logger.addHandler(console_handler) if args.log_dir: file_handler = logging.FileHandler( os.path.join(args.log_dir, "mcp_cube_server.log") ) file_handler.setFormatter(formatter) logger.addHandler(file_handler) try: credentials = { "endpoint": args.endpoint, "api_secret": args.api_secret, "token_payload": token_payload, } except json.JSONDecodeError: logger.error("Invalid JSON in token_payload: %s", args.token_payload) return server.main( credentials, logger, ) # Optionally expose other important items at package level __all__ = ["main", "server"] if __name__ == "__main__": main()