MCP server for u:find, the University of Vienna course catalogue (courses, programmes, departments, staff, exams)
Strong tool naming (all verb-noun pattern), comprehensive parameter descriptions, and good schema coverage. All 13 tools have clear descriptions (avg ~150 chars) and input schemas with types. Semester parameter is well-designed with smart defaults and semantic aliases ('current', 'next', 'previous'). However, output schemas are not formally documented, responses are rendered as plain text strings rather than structured objects. Error handling is minimal; no recovery guidance or actionable error messages visible. Missing per-tool error documentation and output field specifications.
Everything about one course: type, ECTS, groups, lecturers, all dates with rooms, curriculum placement, plus description, assessment, registration window and exam dates.
Dates, times and rooms of a course group, as a weekday summary plus every single date, or as an iCal feed to subscribe to.
The complete course list a department or degree programme offers in one semester, grouped by curriculum module, in one request. Use this for "what does department/programme X offer in semester Y".
The module structure of a degree programme: all curriculum modules with their descriptions and entry points, in one request.
Full profile of one staff member: name, title, contact details, affiliations and roles.
Full profile of one organisational unit: name, hierarchy, locations, website.
Output schemas not documented. All tools return plain text strings (via fmt.render_*) rather than structured JSON objects. LLMs cannot parse fields or chain results to downstream tools. No field definitions, types, or examples provided.
No error handling or recovery guidance. Tools return plain text on success but no visible error classification, actionable messages, or retry hints. LLMs cannot distinguish retryable failures from user-fixable ones.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
All top-level units of the Vorlesungsverzeichnis for a semester: the 'Studienprogrammleitung' (SPL) departments plus special categories, each with the VVZ path needed to list its courses.
Degree programmes and extension curricula (Bachelor, Master, Doktorat, Erweiterungscurriculum) offered in a semester, optionally filtered by department or name.
All semesters with data in u:find, with the current and next semester highlighted.
Free-text search over all u:find courses (Lehrveranstaltungen). Matches titles, LV numbers, lecturer names and semester codes. Use for "is there a course about X" or "what does lecturer Y teach".
Free-text search over exam records: find exam dates by course name, lecturer or LV number.
Free-text search over all staff members at the University of Vienna.
Free-text search over all organisational units (departments, institutes, centres, etc.).
Pagination not visible. search_courses, search_staff, search_units, search_exams all have 'limit' params but no 'offset', 'page', or 'next_cursor' for continuation. Large result sets cannot be paginated; context window exhaustion risk.
Staff and unit lookups require opaque IDs (staff ID, unit ID) but no discovery tool returns these IDs in a machine-readable format. Users must search first, then manually extract IDs from rendered text, breaks tool chaining.
Semester parameter accepts semantic aliases ('current', 'next', 'previous') but no tool documents what 'current' means (today's date? semester start?). Ambiguity in resolve_semester() logic not exposed to LLM.