Skip to main content
Glama
__init__.py3.2 kB
""" MCP 캘린더 시스템의 기본 모델들 """ from datetime import datetime from enum import Enum from typing import Optional, Union from pydantic import BaseModel, Field, field_validator, ConfigDict, field_serializer class EventCategory(str, Enum): """이벤트 카테고리""" STUDY = "STUDY" # 학습 WORK = "WORK" # 업무 REST = "REST" # 휴식 ACTIVITY = "ACTIVITY" # 활동 class EventStatus(str, Enum): """이벤트 상태""" PLANNED = "PLANNED" # 계획됨 COMPLETED = "COMPLETED" # 완료됨 CANCELED = "CANCELED" # 취소됨 class CalendarEvent(BaseModel): """캘린더 이벤트 엔티티""" id: int user_id: int title: str description: Optional[str] = None location: Optional[str] = None start_time: datetime duration: int = Field(gt=0, description="지속 시간(분)") category: EventCategory stamina_cost: int = Field(ge=0, default=0, description="스태미나 소모량") status: EventStatus = EventStatus.PLANNED stamina_after_completion: Optional[int] = None created_at: datetime @field_validator('start_time', 'created_at') @classmethod def validate_datetime(cls, v): if isinstance(v, str): return datetime.fromisoformat(v.replace('Z', '+00:00')) return v @field_validator('duration') @classmethod def validate_duration(cls, v): if v <= 0: raise ValueError("지속 시간은 0보다 커야 합니다") return v class CalendarEventRequest(BaseModel): """캘린더 이벤트 생성/수정 요청""" title: str description: Optional[str] = None location: Optional[str] = None start_time: datetime duration: int = Field(gt=0, description="지속 시간(분)") category: EventCategory stamina_cost: int = Field(ge=0, default=0, description="스태미나 소모량") created_at: Optional[datetime] = None status: Optional[EventStatus] = None @field_validator('start_time', 'created_at') @classmethod def validate_datetime(cls, v): if v is None: return v if isinstance(v, str): return datetime.fromisoformat(v.replace('Z', '+00:00')) return v class CalendarEventResponse(BaseModel): """캘린더 이벤트 응답""" id: int title: str description: Optional[str] = None location: Optional[str] = None start_time: datetime duration: int category: EventCategory stamina_cost: int status: EventStatus stamina_after_completion: Optional[int] = None created_at: datetime @field_serializer('start_time', 'created_at') def serialize_datetime(self, value: datetime) -> str: return value.isoformat() class ApiResponse(BaseModel): """API 응답 기본 형태""" success: bool message: Optional[str] = None data: Optional[Union[CalendarEventResponse, list[CalendarEventResponse]]] = None error_code: Optional[int] = None class McpResult(BaseModel): """MCP 작업 결과""" success: bool data: Optional[Union[CalendarEvent, list[CalendarEvent]]] = None error: Optional[str] = None

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/highthon-16/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server