본문으로 건너뛰기

mcp-gateway.yaml

설정 파일은 ${VAR:default} 구문을 사용하여 환경 변수 주입을 지원합니다. 환경 변수가 설정되지 않은 경우 기본값이 사용됩니다.

일반적인 방법은 다양한 .env, .env.development, .env.prod 파일을 통해 주입하거나, 고정 값으로 직접 설정을 변경하는 것입니다.

기본 설정

port: ${MCP_GATEWAY_PORT:5235}                      # 서비스 리스닝 포트
pid: "${MCP_GATEWAY_PID:/var/run/mcp-gateway.pid}" # PID 파일 경로

여기의 PID는 아래에서 언급된 PID와 일치해야 합니다

스토리지 설정

스토리지 설정 모듈은 주로 게이트웨이 프록시 설정 정보를 저장하는 데 사용됩니다. 현재 두 가지 스토리지 방법을 지원합니다:

  • disk: 설정은 디스크의 파일로 저장되며, 각 설정은 별도의 파일에 저장됩니다. nginx의 vhost 개념과 유사하며, 예를 들어 svc-a.yaml, svc-b.yaml 등입니다
  • db: 데이터베이스에 저장하며, 각 설정은 하나의 레코드입니다. 현재 세 가지 데이터베이스를 지원합니다:
    • SQLite3
    • PostgreSQL
    • MySQL
storage:
type: "${GATEWAY_STORAGE_TYPE:db}" # 스토리지 유형: db, disk

# 데이터베이스 설정 (type이 'db'일 때 사용)
database:
type: "${GATEWAY_DB_TYPE:sqlite}" # 데이터베이스 유형 (sqlite, postgres, mysql)
host: "${GATEWAY_DB_HOST:localhost}" # 데이터베이스 호스트 주소
port: ${GATEWAY_DB_PORT:5432} # 데이터베이스 포트
user: "${GATEWAY_DB_USER:postgres}" # 데이터베이스 사용자 이름
password: "${GATEWAY_DB_PASSWORD:example}" # 데이터베이스 비밀번호
dbname: "${GATEWAY_DB_NAME:./data/mcp-gateway.db}" # 데이터베이스 이름 또는 파일 경로
sslmode: "${GATEWAY_DB_SSL_MODE:disable}" # 데이터베이스 SSL 모드

# 디스크 설정 (type이 'disk'일 때 사용)
disk:
path: "${GATEWAY_STORAGE_DISK_PATH:}" # 데이터 파일 저장 경로

알림 설정

알림 설정 모듈은 mcp-gateway에 설정 업데이트를 알리고 서비스를 재시작하지 않고 핫 리로드를 트리거하는 데 사용됩니다.

현재 네 가지 알림 방법을 지원합니다:

  • signal: 운영 체제 신호를 통해 알림을 보냅니다. kill -SIGHUP <pid> 또는 nginx -s reload와 유사하며, mcp-gateway reload 명령을 통해 호출할 수 있습니다. 단일 머신 배포에 적합합니다
  • api: API 호출을 통해 알림을 보냅니다. mcp-gateway는 별도의 포트에서 수신 대기하고 요청을 받으면 핫 리로드를 수행합니다. curl http://localhost:5235/_reload를 통해 직접 호출할 수 있습니다. 단일 머신 및 클러스터 배포에 적합합니다
  • redis: Redis의 pub/sub 기능을 통해 알림을 보냅니다. 단일 머신 및 클러스터 배포에 적합합니다
  • composite: 여러 방법을 사용하는 복합 알림입니다. 기본적으로 signalapi가 활성화되어 있으며 다른 방법과 결합할 수 있습니다. 단일 머신 및 클러스터 배포에 적합하며 기본 방법으로 권장됩니다

알림 역할:

  • sender: 발신자로, 알림 전송을 담당합니다. apiserver는 이 모드만 사용할 수 있습니다
  • receiver: 수신자로, 알림 수신을 담당합니다. 단일 머신의 mcp-gateway는 이 모드만 사용하는 것이 좋습니다
  • both: 발신자와 수신자 모두입니다. 클러스터 배포된 mcp-gateway는 이 모드를 사용할 수 있습니다
notifier:
role: "${NOTIFIER_ROLE:receiver}" # 역할: 'sender' 또는 'receiver'
type: "${NOTIFIER_TYPE:signal}" # 유형: 'signal', 'api', 'redis' 또는 'composite'

# 신호 설정 (type이 'signal'일 때 사용)
signal:
signal: "${NOTIFIER_SIGNAL:SIGHUP}" # 전송할 신호
pid: "${NOTIFIER_SIGNAL_PID:/var/run/mcp-gateway.pid}" # PID 파일 경로

# API 설정 (type이 'api'일 때 사용)
api:
port: ${NOTIFIER_API_PORT:5235} # API 포트
target_url: "${NOTIFIER_API_TARGET_URL:http://localhost:5235/_reload}" # 리로드 엔드포인트

# Redis 설정 (type이 'redis'일 때 사용)
redis:
addr: "${NOTIFIER_REDIS_ADDR:localhost:6379}" # Redis 주소
password: "${NOTIFIER_REDIS_PASSWORD:UseStrongPasswordIsAGoodPractice}" # Redis 비밀번호
db: ${NOTIFIER_REDIS_DB:0} # Redis 데이터베이스 번호
topic: "${NOTIFIER_REDIS_TOPIC:mcp-gateway:reload}" # Redis pub/sub 토픽

세션 스토리지 설정

세션 스토리지 설정은 MCP 세션 정보를 저장하는 데 사용됩니다. 현재 두 가지 스토리지 방법을 지원합니다:

  • memory: 메모리 내 스토리지로, 단일 머신 배포에 적합합니다 (참고: 세션 정보는 재시작 시 손실됩니다)
  • redis: Redis 스토리지로, 단일 머신 및 클러스터 배포에 적합합니다
session:
type: "${SESSION_STORAGE_TYPE:memory}" # 스토리지 유형: memory, redis
redis:
addr: "${SESSION_REDIS_ADDR:localhost:6379}" # Redis 주소
password: "${SESSION_REDIS_PASSWORD:}" # Redis 비밀번호
db: ${SESSION_REDIS_DB:0} # Redis 데이터베이스 번호
topic: "${SESSION_REDIS_TOPIC:mcp-gateway:session}" # Redis pub/sub 토픽