요약
create_instance 의 기본값(no_wait=false)이 --wait 플래그를 붙여 OpenStack 빌드가 완료될 때까지 MCP 응답을 블로킹합니다. 빌드는 수십초~수분 소요되며, stdio 서버는 단일 클라이언트이므로 빌드 한 번이 전체 세션을 멈춥니다.
문제
// internal/openstack/instances.go:202-204
if !opts.NoWait {
args = append(args, "--wait")
}
// internal/openstack/instances.go:218
runAuditedOpenStackJSON(ctx, 5*time.Minute, ...) // ← 타임아웃 5분
기본값(NoWait=false)으로 생성 시 실제 argv:
server create --image i --flavor f --network n -f json --wait x
재현 / 증거
실행 검증 (TestPerf3):
PERF-3: 기본 create_instance 인자 = server create --image i --flavor f --network n -f json --wait x
PERF-3 결론: --wait 기본값 -> OpenStack 빌드 완료까지 MCP 응답 블로킹 (수십초~분, 타임아웃 5분)
영향
- OpenStack 이미지 빌드(수십초~수분) 동안 MCP 클라이언트가 아무 도구도 못 쓰고 대기
- stdio 단일 클라이언트 → 빌드 한 번이 세션 전체 중단
- 타임아웃 5분 초과 시 사용자에게 불투명한 실패
제안 수정
기본값을 비동기로 전환:
// 기본을 no_wait=true 로 (또는 NoWait 필드의 의미를 반전해 Wait 옵션으로)
args := []string{"server", "create", "--image", opts.Image, ...}
if opts.Wait { // ← opt-in 으로 변경
args = append(args, "--wait")
}
필요시 별도 폴링 도구(예: 진행률 확인용 get_instance)로 상태 추적을 클라이언트에 위임.
영향받는 코드
internal/openstack/instances.go:202-204, 216-224
internal/tools/instances.go:26-34 (입력 스키마 NoWait)
README.md:36-37 (문서 갱신 필요)
요약
create_instance의 기본값(no_wait=false)이--wait플래그를 붙여 OpenStack 빌드가 완료될 때까지 MCP 응답을 블로킹합니다. 빌드는 수십초~수분 소요되며, stdio 서버는 단일 클라이언트이므로 빌드 한 번이 전체 세션을 멈춥니다.문제
기본값(
NoWait=false)으로 생성 시 실제 argv:재현 / 증거
실행 검증 (TestPerf3):
영향
제안 수정
기본값을 비동기로 전환:
필요시 별도 폴링 도구(예: 진행률 확인용
get_instance)로 상태 추적을 클라이언트에 위임.영향받는 코드
internal/openstack/instances.go:202-204, 216-224internal/tools/instances.go:26-34(입력 스키마NoWait)README.md:36-37(문서 갱신 필요)