score_sessions
Generate personalized session rankings for KubeCon attendees based on their role, interests, experience level, and preferences using a structured scoring rubric.
Instructions
Get sessions ready for personalized scoring, with a scoring rubric.
Returns scorable sessions (logistics events filtered out) along with a structured scoring rubric. You (the AI agent) should apply the rubric to rank sessions for the attendee.
Scoring rubric is based on the kubecon-event-scorer project by Fredrik Carlsson.
Args: role: Attendee's job title (e.g., "Platform Engineer", "SRE", "Developer"). interests: Comma-separated interests (e.g., "eBPF, security, AI on Kubernetes"). day: Optional day filter: "monday", "tuesday", "wednesday", "thursday". experience_level: "beginner", "intermediate", "advanced", or "expert". priorities: Comma-separated goals (e.g., "evaluate service mesh tools, learn GitOps"). prefer_hands_on: Boost hands-on workshops and labs. prefer_deep_dives: Boost deep technical talks over intros. avoid_vendor_pitches: Penalize vendor-heavy marketing sessions. limit: Max sessions to return (default 30).
Returns: JSON with attendee profile, scoring rubric, and session list to score.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| interests | Yes | ||
| day | No | ||
| experience_level | No | intermediate | |
| priorities | No | ||
| prefer_hands_on | No | ||
| prefer_deep_dives | No | ||
| avoid_vendor_pitches | No | ||
| limit | No |
Implementation Reference
- src/kubecon_eu_mcp/server.py:271-343 (handler)The score_sessions tool is registered with @mcp.tool() and implemented as an async function in server.py, which takes user preferences and profile information to retrieve and score sessions.
@mcp.tool() async def score_sessions( role: str, interests: str, day: str = "", experience_level: str = "intermediate", priorities: str = "", prefer_hands_on: bool = False, prefer_deep_dives: bool = False, avoid_vendor_pitches: bool = False, limit: int = 30, ) -> str: """Get sessions ready for personalized scoring, with a scoring rubric. Returns scorable sessions (logistics events filtered out) along with a structured scoring rubric. You (the AI agent) should apply the rubric to rank sessions for the attendee. Scoring rubric is based on the kubecon-event-scorer project by Fredrik Carlsson. Args: role: Attendee's job title (e.g., "Platform Engineer", "SRE", "Developer"). interests: Comma-separated interests (e.g., "eBPF, security, AI on Kubernetes"). day: Optional day filter: "monday", "tuesday", "wednesday", "thursday". experience_level: "beginner", "intermediate", "advanced", or "expert". priorities: Comma-separated goals (e.g., "evaluate service mesh tools, learn GitOps"). prefer_hands_on: Boost hands-on workshops and labs. prefer_deep_dives: Boost deep technical talks over intros. avoid_vendor_pitches: Penalize vendor-heavy marketing sessions. limit: Max sessions to return (default 30). Returns: JSON with attendee profile, scoring rubric, and session list to score. """ sessions = await data_service.get_scorable_sessions(day=day or None, limit=limit) if not sessions: return json.dumps({"message": "No scorable sessions found."}) prefs = [] if prefer_hands_on: prefs.append("Prefers hands-on workshops and demos") if prefer_deep_dives: prefs.append("Prefers deep technical dives over introductory content") if avoid_vendor_pitches: prefs.append("Penalize vendor-heavy marketing talks") result = { "attendee_profile": { "role": role, "interests": [i.strip() for i in interests.split(",")], "experience_level": experience_level, "priorities": [p.strip() for p in priorities.split(",") if p.strip()] if priorities else [], "preferences": prefs, }, "scoring_rubric": { "description": "Score each session 0-100 across three dimensions. Based on kubecon-event-scorer by Fredrik Carlsson.", "dimensions": { "role_relevance": { "max": 35, "description": "How relevant is this session to the attendee's role?", "scale": { "30-35": "Directly addresses core job functions", "20-29": "Strongly related to role", "10-19": "Tangentially related", "0-9": "Not relevant to role", }, }, "topic_alignment": { "max": 35, "description": "How well does the topic match the attendee's interests?", "scale": {