models.py•6.12 kB
"""
Pydantic Models for Unreal Blueprint MCP Server
MCP 도구에서 사용하는 데이터 모델 정의
"""
from typing import Optional, List, Dict, Any
from pydantic import BaseModel, Field
class BlueprintCreateParams(BaseModel):
"""블루프린트 생성 요청 파라미터"""
blueprint_name: str = Field(..., description="생성할 블루프린트 이름")
parent_class: str = Field(default="Actor", description="부모 클래스 (기본값: Actor)")
asset_path: str = Field(default="/Game/Blueprints/", description="생성 경로 (기본값: /Game/Blueprints/)")
class BlueprintPropertyParams(BaseModel):
"""블루프린트 속성 설정 요청 파라미터"""
blueprint_path: str = Field(..., description="블루프린트 에셋 경로")
property_name: str = Field(..., description="설정할 속성 이름")
property_value: Any = Field(..., description="속성 값")
property_type: Optional[str] = Field(None, description="속성 타입 (자동 감지)")
class BlueprintCompileParams(BaseModel):
"""블루프린트 컴파일 요청 파라미터"""
blueprint_path: str = Field(..., description="컴파일할 블루프린트 경로")
class BlueprintNodeAddParams(BaseModel):
"""블루프린트 노드 추가 요청 파라미터"""
blueprint_path: str = Field(..., description="대상 블루프린트 경로")
node_class: str = Field(..., description="추가할 노드 클래스")
position_x: float = Field(default=0.0, description="노드 X 위치")
position_y: float = Field(default=0.0, description="노드 Y 위치")
node_name: Optional[str] = Field(None, description="노드 이름 (선택사항)")
class ConnectionTestParams(BaseModel):
"""연결 테스트 요청 파라미터"""
timeout: float = Field(default=5.0, description="테스트 타임아웃 (초)")
class ServerStatusResponse(BaseModel):
"""서버 상태 응답 모델"""
success: bool = Field(..., description="요청 성공 여부")
server_version: str = Field(..., description="서버 버전")
unreal_connected: bool = Field(..., description="언리얼 엔진 연결 상태")
active_connections: int = Field(..., description="활성 연결 수")
uptime_seconds: float = Field(..., description="서버 가동 시간 (초)")
class BlueprintCreateResponse(BaseModel):
"""블루프린트 생성 응답 모델"""
success: bool = Field(..., description="생성 성공 여부")
message: str = Field(..., description="결과 메시지")
blueprint_path: Optional[str] = Field(None, description="생성된 블루프린트 경로")
unreal_response: Optional[Dict[str, Any]] = Field(None, description="언리얼에서 받은 원본 응답")
class BlueprintPropertyResponse(BaseModel):
"""블루프린트 속성 설정 응답 모델"""
success: bool = Field(..., description="설정 성공 여부")
message: str = Field(..., description="결과 메시지")
property_name: str = Field(..., description="설정된 속성 이름")
old_value: Optional[Any] = Field(None, description="이전 값")
new_value: Any = Field(..., description="새로 설정된 값")
class BlueprintCompileResponse(BaseModel):
"""블루프린트 컴파일 응답 모델"""
success: bool = Field(..., description="컴파일 성공 여부")
message: str = Field(..., description="결과 메시지")
compile_errors: List[str] = Field(default_factory=list, description="컴파일 에러 목록")
compile_warnings: List[str] = Field(default_factory=list, description="컴파일 경고 목록")
class BlueprintNodeAddResponse(BaseModel):
"""블루프린트 노드 추가 응답 모델"""
success: bool = Field(..., description="노드 추가 성공 여부")
message: str = Field(..., description="결과 메시지")
node_id: Optional[str] = Field(None, description="추가된 노드 ID")
node_name: Optional[str] = Field(None, description="추가된 노드 이름")
class ConnectionTestResponse(BaseModel):
"""연결 테스트 응답 모델"""
success: bool = Field(..., description="테스트 성공 여부")
message: str = Field(..., description="테스트 결과 메시지")
response_time_ms: float = Field(..., description="응답 시간 (밀리초)")
unreal_version: Optional[str] = Field(None, description="언리얼 엔진 버전")
class ErrorResponse(BaseModel):
"""에러 응답 모델"""
success: bool = Field(False, description="항상 False")
error: str = Field(..., description="에러 메시지")
error_code: Optional[str] = Field(None, description="에러 코드")
details: Optional[Dict[str, Any]] = Field(None, description="추가 에러 정보")
class SupportedClassesResponse(BaseModel):
"""지원 클래스 목록 응답 모델"""
success: bool = Field(..., description="요청 성공 여부")
classes: List[str] = Field(..., description="지원되는 클래스 목록")
total_count: int = Field(..., description="총 클래스 수")
# 내부 사용 모델 (언리얼과 통신용)
class UnrealJsonRpcRequest(BaseModel):
"""언리얼로 보내는 JSON-RPC 2.0 요청 모델"""
jsonrpc: str = Field("2.0", description="JSON-RPC 버전")
id: str = Field(..., description="요청 ID")
method: str = Field(..., description="메서드 이름")
params: Dict[str, Any] = Field(..., description="메서드 파라미터")
class UnrealJsonRpcResponse(BaseModel):
"""언리얼에서 받는 JSON-RPC 2.0 응답 모델"""
jsonrpc: str = Field("2.0", description="JSON-RPC 버전")
id: str = Field(..., description="요청 ID")
result: Optional[Dict[str, Any]] = Field(None, description="성공 시 결과")
error: Optional[Dict[str, Any]] = Field(None, description="에러 시 에러 정보")
class UnrealJsonRpcError(BaseModel):
"""JSON-RPC 2.0 에러 정보 모델"""
code: int = Field(..., description="에러 코드")
message: str = Field(..., description="에러 메시지")
data: Optional[Any] = Field(None, description="추가 에러 데이터")