search_sessions
Find KubeCon Europe sessions by keyword, topic, speaker, or technology. Filter by day and track to locate relevant presentations quickly.
Instructions
Search conference sessions by keyword, topic, speaker name, or technology.
Args: query: Search query (e.g., "eBPF", "security", "AI agents", "platform engineering"). day: Optional day filter: "monday", "tuesday", "wednesday", "thursday". track: Optional track filter (e.g., "Keynote", "Tutorial", "Breakout"). limit: Maximum number of results to return (default 20).
Returns: JSON array of matching sessions with title, speakers, time, room, and URL.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| day | No | ||
| track | No | ||
| limit | No |
Implementation Reference
- src/kubecon_eu_mcp/server.py:57-88 (handler)The MCP tool handler for 'search_sessions', which delegates the search logic to the data_service.
@mcp.tool() async def search_sessions( query: str, day: str = "", track: str = "", limit: int = 20, ) -> str: """Search conference sessions by keyword, topic, speaker name, or technology. Args: query: Search query (e.g., "eBPF", "security", "AI agents", "platform engineering"). day: Optional day filter: "monday", "tuesday", "wednesday", "thursday". track: Optional track filter (e.g., "Keynote", "Tutorial", "Breakout"). limit: Maximum number of results to return (default 20). Returns: JSON array of matching sessions with title, speakers, time, room, and URL. """ results = await data_service.search_sessions( query=query, day=day or None, track=track or None, limit=limit, ) if not results: return json.dumps( { "message": f"No sessions found for '{query}'.", "suggestion": "Try broader terms or remove day/track filters.", } ) return json.dumps([s.to_dict() for s in results], indent=2) - The actual implementation of the session search logic, residing within the DataService class.
async def search_sessions( self, query: str, day: str | None = None, track: str | None = None, limit: int = 20, ) -> list[Session]: """Search sessions by keyword, optionally filtered by day and track.""" sessions = await self.get_sessions() if day: all_sessions = sessions + ( await self.get_colocated_sessions() if day == "monday" else [] ) else: all_sessions = sessions + await self.get_colocated_sessions() query_lower = query.lower() results = [] for s in all_sessions: if day and s.day != day.lower(): continue if track and track.lower() not in s.category.lower(): continue # Search across title, description, speakers, category searchable = ( f"{s.title} {s.description} {' '.join(s.speakers)} {s.category}".lower() ) if query_lower in searchable: results.append(s) return results[:limit]