get_events_by_category
Retrieve events by specific category using the MCP Calendar Server. Filter and manage STUDY, WORK, REST, and ACTIVITY events for organized scheduling and stamina tracking.
Instructions
카테고리별로 이벤트를 조회합니다.
Args:
category: 카테고리 (STUDY, WORK, REST, ACTIVITY)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes |
Implementation Reference
- src/main.py:223-248 (handler)Primary handler for the MCP tool 'get_events_by_category'. Decorated with @mcp.tool() for automatic registration. Validates input category, fetches all user events, filters matching category, converts to CalendarEventResponse, and returns the list.@mcp.tool() def get_events_by_category(category: str) -> List[CalendarEventResponse]: """ 카테고리별로 이벤트를 조회합니다. Args: category: 카테고리 (STUDY, WORK, REST, ACTIVITY) """ try: if category not in [cat.value for cat in EventCategory]: raise InvalidEventData("category", category) result = calendar_service.fetch_events(DEFAULT_USER_ID) if result.success and result.data: filtered_events = [ event for event in result.data if event.category == category ] return [calendar_service.to_response(event) for event in filtered_events] return [] except CalendarException: raise except Exception as e: raise Exception(f"카테고리별 이벤트 조회 중 오류가 발생했습니다: {str(e)}")
- http_server.py:186-202 (handler)Handler implementation within the HTTP server's function dispatcher for tool calls to 'get_events_by_category'. Validates input, filters events by category, and returns list of serialized response dicts.elif function_name == "get_events_by_category": category_str = args.get("category") if not category_str: raise ValueError("category is required") if category_str not in [cat.value for cat in EventCategory]: raise ValueError(f"Invalid category: {category_str}") result = calendar_service.fetch_events(DEFAULT_USER_ID) if result.success and result.data: filtered_events = [ event for event in result.data if event.category == category_str ] return [calendar_service.to_response(event).dict() for event in filtered_events] return []
- src/models/__init__.py:10-15 (schema)Pydantic Enum schema defining valid input categories for the get_events_by_category tool, used for validation in both handlers.class EventCategory(str, Enum): """이벤트 카테고리""" STUDY = "STUDY" # 학습 WORK = "WORK" # 업무 REST = "REST" # 휴식 ACTIVITY = "ACTIVITY" # 활동
- src/models/__init__.py:79-95 (schema)Pydantic model defining the output schema (CalendarEventResponse) returned by the get_events_by_category tool handlers.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()
- Supporting service method fetch_events called by tool handlers to retrieve all events for the user before client-side filtering by category.def fetch_events(self, user_id: int) -> McpResult: """사용자의 모든 이벤트 조회""" try: user_events = [ event for event in self.events_db.values() if event.user_id == user_id ] return McpResult(success=True, data=user_events) except Exception as e: return McpResult(success=False, error=str(e))