import logging import os import platform import sys from fastmcp import FastMCP from module import setup_environment, EnvironmentMiddleware, EnvironmentConfig, setup_kis_config from module.plugin import Database from tools import * logging.basicConfig( level=logging.DEBUG, # DEBUG 이상 (DEBUG, INFO, WARNING...) 모두 출력 format='%(asctime)s [%(levelname)s] %(message)s', datefmt='%H:%M:%S' ) def main(): env = os.getenv("ENV", None) # 환경 설정 logging.info("setup environment ...") env_config = setup_environment(env=env) # KIS 설정 자동 생성 (템플릿 다운로드 + 값 덮어쓰기) logging.info("setup KIS configuration ...") if not setup_kis_config(force_update=env == "live"): logging.warning("KIS 설정 파일 생성에 실패했습니다. 수동으로 설정해주세요.") # 데이터베이스 초기화 logging.info("setup database ...") db = None db_exists = False try: db = Database() db_exists = os.path.exists(os.path.join("configs/master", "master.db")) db.new(db_dir="configs/master") logging.info(f"📁 Available databases: {db.get_available_databases()}") except Exception as e: logging.error(f"❌ Database initialization failed: {e}") sys.exit(1) # MCP 서버 설정 mcp_server = FastMCP( name="My Awesome MCP Server", instructions="This is a server for a specific project.", version="1.0.0", stateless_http=False, ) # middleware mcp_server.add_middleware(EnvironmentMiddleware(environment=env_config)) # tools 등록 DomesticStockTool().register(mcp_server=mcp_server) DomesticFutureOptionTool().register(mcp_server=mcp_server) DomesticBondTool().register(mcp_server=mcp_server) OverseasStockTool().register(mcp_server=mcp_server) OverseasFutureOptionTool().register(mcp_server=mcp_server) ElwTool().register(mcp_server=mcp_server) EtfEtnTool().register(mcp_server=mcp_server) AuthTool().register(mcp_server=mcp_server) # MCP 서버 실행 방식 결정 logging.info(f"🚀 MCP 서버를 {env_config.mcp_type} 모드로 시작합니다...") if env_config.mcp_type == "stdio": # stdio 모드 (기본값) logging.info("📝 stdio 모드로 MCP 서버를 시작합니다.") mcp_server.run( transport="stdio" ) elif env_config.mcp_type == "sse": # HTTP 모드로 실행 logging.info(f"🌐 Server Sent Event 모드로 MCP 서버를 시작합니다: {env_config.mcp_host}:{env_config.mcp_port}") mcp_server.run( transport="sse", host=env_config.mcp_host, port=env_config.mcp_port, path=env_config.mcp_path, ) elif env_config.mcp_type == "streamable-http": # HTTP 모드로 실행 logging.info(f"🌐 HTTP 모드로 MCP 서버를 시작합니다: {env_config.mcp_host}:{env_config.mcp_port}") mcp_server.run( transport="streamable-http", host=env_config.mcp_host, port=env_config.mcp_port, path=env_config.mcp_path, ) else: logging.error(f"❌ 지원하지 않는 MCP_TYPE: {env_config.mcp_type}") sys.exit(1) if __name__ == "__main__": try: main() except KeyboardInterrupt: logging.info("🛑 Application interrupted by user (Ctrl+C)")