"""
공통 유틸리티: 일관된 TextContent 응답 생성 및 입력 검증
"""
from __future__ import annotations
import json
from typing import Any, Dict, List, Optional
from mcp.types import TextContent
def _dumps(data: Dict[str, Any]) -> str:
return json.dumps(data, ensure_ascii=False, indent=2)
def text(data: Dict[str, Any]) -> TextContent:
"""dict를 JSON 문자열로 감싼 TextContent 생성"""
return TextContent(type="text", text=_dumps(data))
def ok(payload: Dict[str, Any], message: Optional[str] = None) -> List[TextContent]:
body: Dict[str, Any] = {"ok": True}
if message:
body["message"] = message
body.update(payload)
return [text(body)]
def error(message: str, code: Optional[str] = None, details: Optional[Dict[str, Any]] = None) -> List[TextContent]:
body: Dict[str, Any] = {"ok": False, "error": message}
if code:
body["code"] = code
if details:
body["details"] = details
return [text(body)]
def clamp_int(value: Any, default: int, *, min_value: Optional[int] = None, max_value: Optional[int] = None) -> int:
"""정수 변환 및 범위 제한"""
try:
ivalue = int(value)
except Exception:
ivalue = default
if min_value is not None and ivalue < min_value:
ivalue = min_value
if max_value is not None and ivalue > max_value:
ivalue = max_value
return ivalue