106 lines
3.4 KiB
Python
106 lines
3.4 KiB
Python
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)")
|