Skip to main content
Glama
highthon-16

MCP Calendar Server

by highthon-16

create_calendar_event

Create new calendar events with title, time, duration, category, and optional stamina tracking to organize schedules systematically.

Instructions

새로운 캘린더 이벤트를 생성합니다.

Args:
    title: 이벤트 제목
    start_time: 시작 시간 (ISO 형식: 2025-08-02T10:00:00)
    duration: 지속 시간(분)
    category: 카테고리 (STUDY, WORK, REST, ACTIVITY)
    description: 이벤트 설명 (선택)
    location: 장소 (선택)
    stamina_cost: 스태미나 소모량 (기본값: 0)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYes
start_timeYes
durationYes
categoryYes
descriptionNo
locationNo
stamina_costNo

Implementation Reference

  • The primary handler function for the 'create_calendar_event' MCP tool. It validates inputs, constructs a CalendarEventRequest, calls the CalendarService to create the event, and returns a CalendarEventResponse.
    @mcp.tool()
    def create_calendar_event(
        title: str,
        start_time: str,
        duration: int,
        category: str,
        description: Optional[str] = None,
        location: Optional[str] = None,
        stamina_cost: int = 0
    ) -> CalendarEventResponse:
        """
        새로운 캘린더 이벤트를 생성합니다.
        
        Args:
            title: 이벤트 제목
            start_time: 시작 시간 (ISO 형식: 2025-08-02T10:00:00)
            duration: 지속 시간(분)
            category: 카테고리 (STUDY, WORK, REST, ACTIVITY)
            description: 이벤트 설명 (선택)
            location: 장소 (선택)
            stamina_cost: 스태미나 소모량 (기본값: 0)
        """
        try:
            # 카테고리 유효성 검사
            if category not in [cat.value for cat in EventCategory]:
                raise InvalidEventData("category", category)
            
            # 시간 파싱
            try:
                parsed_start_time = datetime.fromisoformat(start_time.replace('Z', '+00:00'))
            except ValueError:
                raise InvalidEventData("start_time", start_time)
            
            request = CalendarEventRequest(
                title=title,
                description=description,
                location=location,
                start_time=parsed_start_time,
                duration=duration,
                category=EventCategory(category),
                stamina_cost=stamina_cost
            )
            
            result = calendar_service.create_event(request, DEFAULT_USER_ID)
            if result.success and result.data:
                return calendar_service.to_response(result.data)
            
            raise Exception(result.error or "이벤트 생성에 실패했습니다")
            
        except CalendarException:
            raise
        except Exception as e:
            raise Exception(f"이벤트 생성 중 오류가 발생했습니다: {str(e)}")
  • Pydantic model defining the input schema (CalendarEventRequest) used by the create_calendar_event handler for validation and type definitions.
    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
  • Enum defining valid categories for calendar events, used in input validation.
    class EventCategory(str, Enum):
        """이벤트 카테고리"""
        STUDY = "STUDY"      # 학습
        WORK = "WORK"        # 업무
        REST = "REST"        # 휴식
        ACTIVITY = "ACTIVITY" # 활동
  • Helper method in CalendarService that implements the core event creation logic, including time conflict detection and in-memory storage.
    def create_event(self, request: CalendarEventRequest, user_id: int) -> McpResult:
        """새 이벤트 생성"""
        try:
            # 시간 충돌 검사
            if self._has_time_conflict(request.start_time, request.duration, user_id):
                return McpResult(
                    success=False, 
                    error="해당 시간에 이미 다른 일정이 있습니다"
                )
            
            event = CalendarEvent(
                id=self.next_id,
                user_id=user_id,
                title=request.title,
                description=request.description,
                location=request.location,
                start_time=request.start_time,
                duration=request.duration,
                category=request.category,
                stamina_cost=request.stamina_cost,
                status=request.status or EventStatus.PLANNED,
                created_at=request.created_at or datetime.now()
            )
            
            self.events_db[self.next_id] = event
            self.next_id += 1
            
            return McpResult(success=True, data=event)
            
        except Exception as e:
            return McpResult(success=False, error=str(e))
  • Helper method to convert internal CalendarEvent entity to the CalendarEventResponse used in tool output.
    def to_response(self, event: CalendarEvent) -> CalendarEventResponse:
        """Entity를 Response로 변환"""
        return CalendarEventResponse(
            id=event.id,
            title=event.title,
            description=event.description,
            location=event.location,
            start_time=event.start_time,
            duration=event.duration,
            category=event.category,
            stamina_cost=event.stamina_cost,
            status=event.status,
            stamina_after_completion=event.stamina_after_completion,
            created_at=event.created_at
        )

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