Skip to main content
Glama

ufind-mcp

u:find를 위한 MCP 서버로, University of Vienna의 강좌 목록입니다. 어시스턴트에게 학과가 이번 학기에 무엇을 제공하는지, 강좌가 언제 열리는지, 누가 가르치는지, 또는 강의실이 어디인지 물어보세요. 읽기 전용이며 계정이나 API 키가 필요 없습니다.

설치

git clone https://github.com/ParadoxTR/ufind-mcp.git
cd ufind-mcp
uv sync

Claude Code에 추가하세요:

claude mcp add ufind --scope user -- uv --directory /absolute/path/to/ufind-mcp run ufind-mcp

또는 Claude Desktop, Cursor 또는 다른 MCP 클라이언트에 추가하세요:

{
  "mcpServers": {
    "ufind": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/ufind-mcp", "run", "ufind-mcp"]
    }
  }
}

Related MCP server: University Course Catalog MCP Server

무엇을 물어볼 수 있나요

Bachelor Informatik 프로그램은 2026W에 어떤 강좌를 제공하나요?

180013은 언제, 어디서 열리며, 누가 가르치나요?

다음 학기에 3 ECTS 미만인 논리학 강좌를 찾아주세요.

Benjamin Schnieder는 이번 겨울에 무엇을 가르치나요?

Master Philosophie 교육과정의 모듈 구조를 알려주세요.

도구

도구

기능

search_courses

제목, LV 번호, 강사 및 학기별 자유 텍스트 강좌 검색

get_course

강좌 하나 전체: 그룹, 강사, 모든 날짜와 강의실, 교육과정 배치, 설명, 등록 기간, 시험

get_course_schedule

그룹의 주간 패턴과 모든 날짜, 또는 원시 iCal 피드

list_departments

한 학기의 Vorlesungsverzeichnis에 있는 모든 최상위 단위

list_programs

Bachelor, Master, Doktorat 및 확장 교육과정, 학과 또는 이름으로 필터링 가능

get_program_courses

학과나 프로그램이 한 학기에 제공하는 모든 강좌를 모듈별로 그룹화

get_program_modules

강좌가 없는 교육과정 구조

search_staff, get_staff

방, 이메일 및 소속 정보가 포함된 교직원 조회

search_units, get_unit

연구소, 학과 및 단과대학

search_exams

시험 기록이 있는 강좌

list_semesters

존재하는 학기 코드와 현재 학기 코드

학기는 2026W(2026/27년 겨울) 또는 2027S로 표기합니다. 모든 도구는 current, next, previous를 허용합니다.

구성

변수

기본값

의미

UFIND_MCP_LANG

de

en으로 설정하면 영어 페이지와 제목이 표시됩니다

UFIND_MCP_CACHE_DIR

~/.cache/ufind-mcp

응답이 캐시되는 위치

UFIND_MCP_NO_CACHE

unset

1로 설정하면 캐시를 사용하지 않습니다

UFIND_MCP_TIMEOUT_S

60

요청 시간 제한, 교직원 검색 페이지는 느릴 수 있습니다

UFIND_MCP_MIN_GAP_S

0.25

요청 사이 최소 대기 시간

UFIND_MCP_USER_AGENT

ufind-mcp/0.1 ...

u:find로 전송되는 사용자 에이전트

알아두면 좋은 점

u:find에는 공개 API가 없습니다. 이 서버는 모바일 클라이언트가 사용하는 XML 엔드포인트와, 해당 엔드포인트가 다루지 않는 부분은 공개 웹 페이지를 읽습니다. 즉, 대학교가 예고 없이 내용을 변경할 수 있습니다. 요청은 짧은 대기 시간을 두고 한 번에 하나씩 전송되며 모든 응답은 디스크에 캐시되므로, 일반적인 사용은 서버에 부담을 주지 않습니다.

아직 시작되지 않은 학기는 불완전합니다. 강좌 설명, 등록 기간, 시험 날짜는 학기가 시작될 때까지 비어 있는 경우가 많습니다.

목록 경로는 특정 학기에 한정되므로, 프로그램의 id는 2026W와 2026S에서 다릅니다. 서버는 요청한 학기에 대해 프로그램을 이름으로 확인하며, 경로가 다른 학기에 속한 경우 경고합니다.

여러 모듈에 해당하는 강좌는 프로그램 목록에서 모듈마다 한 번씩 표시됩니다. 출력에는 항상 항목 수와 서로 다른 강좌 수가 명시됩니다.

테스트

uv run python tests/smoke.py      # live data, parsing and completeness
uv run python tests/mcp_smoke.py  # calls every tool over the MCP protocol

면책 조항

이 프로젝트는 University of Vienna와 제휴되어 있지 않으며, University of Vienna의 보증이나 지원을 받지 않습니다. 이 프로젝트는 문서화된 공개 API의 일부가 아닌 엔드포인트를 읽기 때문에 언제든지 작동이 중단될 수 있습니다. 자신의 학업 목적으로 사용하고 기본 요청 속도 제한을 유지하세요. 보장된 액세스가 필요하다면 대학교에 문의하세요.

라이선스

MIT

Available Tools

13 tools
get_courseA
Read-only

Everything about one course: type, ECTS, groups, lecturers, all dates with rooms, curriculum placement, plus description, assessment, registration window and exam dates.

NameRequiredDescriptionDefault
lvYesLV number, e.g. "180013" or "051010".
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester.
include_descriptionNoAlso read the course web page for description, registration window and exam dates (one extra request).

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover the read-only and open-world aspects, so the description need not repeat safety. It adds value by disclosing the breadth of data (groups, lecturers, rooms, curriculum placement, assessment, exam dates), but it does not flag that some fields depend on the include_description parameter triggering an extra request; that nuance lives only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence with a front-loaded purpose phrase and a scannable comma-separated list of content areas. Every word earns its place; no redundant or tangential information appears.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 100% parameter schema, readOnly/openWorld annotations, and a declared output schema, the description does not need to explain return formats or parameter behavior. It provides a complete inventory of the returned data and is sufficient for an agent to decide to call this tool, though it would benefit from naming a sibling alternative for fuller guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description does not meaningfully expand on lv, semester, or include_description beyond what the schema states. It implicitly connects to the lv parameter by referring to 'one course' but adds no semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as returning comprehensive details for a single course, enumerating specific fields such as ECTS, groups, lecturers, dates, and curriculum placement. This distinguishes it from siblings like search_courses (search) and get_course_schedule (schedule-only), though it lacks an explicit verb like 'retrieve'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for obtaining full course details when you have a specific course identifier, but it never states explicit when-to-use conditions or names alternative tools. The wide scope ('everything') and the listing of fields subtly differentiate it from schedule-only or search tools, but the guidance is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_course_scheduleA
Read-only

Dates, times and rooms of a course group, as a weekday summary plus every single date, or as an iCal feed to subscribe to.

NameRequiredDescriptionDefault
lvYesLV number.
groupNoGroup number, e.g. "1". Omit for all groups.
as_icalNoReturn the raw .ics feed instead of a summary.
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description need not repeat that. It adds value by specifying the two output formats (summary and iCal feed), which is behavioral context beyond the schema. However, it does not disclose other behaviors like error handling or pagination, but given the read-only nature, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. It efficiently communicates the core purpose and output options, earning a perfect score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool, full schema coverage, and annotations covering safety and open-world behavior, the description is nearly complete. It does not mention the optional group and semester parameters, but those are clearly documented in the schema. The description adequately conveys the essential purpose and output options.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description does not add any additional parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves dates, times, and rooms for a course group, and distinguishes between two output formats (summary vs iCal). It is specific about the resource and the two modes, which differentiates it from siblings like get_course (course details) and search_courses (search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by stating what it returns, but it does not explicitly mention when to use this tool versus alternatives or when not to use it. There are no exclusions, but the context is clear enough for an agent to infer its use for schedule lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_program_coursesA
Read-only

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".

NameRequiredDescriptionDefault
limitNoMaximum course entries to print.
moduleNoOnly courses whose module trail contains this text, e.g. "StEOP".
programYesProgramme or department: name ("Bachelor Informatik", "SPL 18 Philosophie") or a VVZ path ("341848").
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester.
with_detailsNoInclude groups, lecturers and weekly times inline.
group_by_moduleNoPrint module headings.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description claims the tool returns the 'complete course list', but the annotations include openWorldHint=true, which signals the result set may not be exhaustive. This is a direct contradiction. Additionally, the default limit of 400 and maximum of 2000 mean the response can be truncated, making 'complete' potentially misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core functionality is front-loaded, and the usage example is placed at the end to reinforce when to use the tool. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main use case and scope, and the output schema plus parameter schema provide much of the remaining context. However, the 'complete course list' claim is unreliable given the openWorldHint and limit parameter, so an agent could be misled about exhaustiveness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description adds some semantic mapping by tying 'department or degree programme' to program and 'semester Y' to semester, but it does not add meaningful parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource: a complete course list for a department or degree programme in a semester, grouped by module. It also includes a concrete query template ('what does department/programme X offer in semester Y') that distinguishes it from broad search tools like search_courses and single-course tools like get_course.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case with the 'Use this for...' phrasing, which clearly tells an agent when to invoke it. It does not name alternatives or state when not to use it, but the use case is specific enough to route most calls correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_program_modulesA
Read-only

Module tree of a programme or department without any courses, a cheap overview of how a curriculum is structured.

NameRequiredDescriptionDefault
programYesProgramme/department name or VVZ path.
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint, so the description only needs to add non-annotation-redundant context. It does add that the result excludes courses and is cheap, which sets expectations about content and performance, but does not discuss error handling, semester interpretation, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The sentence is front-loaded with the main resource 'Module tree of a programme or department', and the exclusion 'without any courses' is integrated right away. The phrase 'a cheap overview...' adds a little extra but does not feel padded, so the description is short and stays focused.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and the annotations already present, the description covers the basic shape of what is returned. It is simple enough that this explanation suffices, though it could mention that program codes also correspond to department names and that the semester parameter is optional but can affect results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema description coverage is 100%, and the description only restates that the program can be a programme/department name or VVZ path, which is already present in the schema. It adds no further details about the semester format or the relationship between modules and curriculum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as a module tree and scopes it to a programme or department, and explicitly notes 'without any courses', which differentiates it from the sibling get_program_courses. It lacks an explicit verb like 'retrieves' or 'lists', so the action is not stated as directly as it could be.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies when to use the tool, 'a cheap overview of how a curriculum is structured', and tells you the result contains no courses, suggesting this is the lightweight structure-level option. However, it never names the alternatives or gives an explicit when-not-to-use condition, so the guidance remains mostly inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_staffA
Read-only

Contact details, room and affiliations of one person.

NameRequiredDescriptionDefault
idYesPerson id from search_staff, e.g. "36131".

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations readOnlyHint=true and openWorldHint=true, the agent knows it is safe and that the results may be incomplete. The description adds no behavioral details beyond what is already in the annotations. It does not contradict the annotations, but adds no extra context such as that the person might not be found or that data may vary.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that efficiently conveys the tool's purpose. It is appropriately sized and front-loaded, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, schema coverage complete, output schema present, and annotations covering safety), the description is adequate. However, it does not mention what the return value will look like, even though an output schema exists. It also does not mention that the person might not be found or how to handle that, but the openWorldHint may imply data is world-open. Overall, it is minimal but not dangerously incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of parameters, and the schema already provides a helpful example ('36131'). The description adds no additional meaning beyond the schema, but since schema coverage is complete, the baseline is 3. The description does not explain the semantics of the fields returned, but parameter semantics for the id is well-covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and the resource 'one person', specifying that it returns 'Contact details, room and affiliations'. It is concise and unambiguous; however, it does not explicitly differentiate from sibling tools like search_staff, though the distinction is inferable from the name and the singular resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. It implies usage by describing the output, but there are no alternative names or conditions. The sibling tool search_staff likely returns a list of people, and this tool gets details for one, but this is not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_unitB
Read-only

One institute/department: name, website, locations and place in the university hierarchy.

NameRequiredDescriptionDefault
idYesUnit id from search_units, e.g. "464".

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds return-field details beyond what annotations convey lacks explicit notes on null behavior, not-found handling, or side effects online. However, the read-only annotation covers the main behavioral risk, and the description adds no detail about it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that avoids redundancy and front-loads the core meaning. No filler or unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple lookup tool with a single ID parameter and a well-defined output schema, the description is mostly adequate. However, it does not mention likely usage context or error/edge-case behavior, leaving some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents the single 'id' parameter well, and schema coverage is high. The description does not need to restate the parameter, though it also adds no extra semantic guidance such as where the ID comes from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description makes clear this is a single-unit retrieval by describing it as 'one institute/department' and listing the returned fields. It does not explicitly use a verb like 'get' or contrast itself with list/search siblings, but the intent is still evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool instead of alternatives like search_units, list_units, or list_departments. The 'from search_units' relationship is only mentioned in the parameter schema, not in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_departmentsA
Read-only

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.

NameRequiredDescriptionDefault
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description need not restate safety. It adds useful behavioral context: the result includes the VVZ path needed for course listing, and the set is described as 'all top-level units' plus 'special categories', which clarifies the open-world nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core purpose and adds necessary detail about what is included. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no nested objects, output schema present), the description is nearly complete. It could explicitly mention that the output is a list of department names with paths, but the output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the semester parameter fully, including examples and defaults. The description adds no additional parameter semantics, which is acceptable given the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('list') and resource ('top-level units of the Vorlesungsverzeichnis'), and clarifies what those units are (SPL departments plus special categories) and what each entry includes (the VVZ path needed to list its courses). This distinguishes it from sibling tools like search_units or get_unit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: to get top-level departments and their VVZ paths before listing courses. It does not explicitly name alternatives or exclusions, but the context of siblings and the clear scope provide adequate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_programsA
Read-only

Degree programmes and extension curricula (Bachelor, Master, Doktorat, Erweiterungscurriculum) offered in a semester, optionally filtered by department or name.

NameRequiredDescriptionDefault
limitNoMaximum entries.
queryNoFilter by programme name, e.g. "Master Informatik".
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester.
departmentNoRestrict to one department: name ("Informatik") or VVZ path.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint=true and openWorldHint=true, the description does not need to state the operation is safe. It adds context that the tool returns programmes/semesters and allows filtering, which is useful operational context beyond the annotations, but it does not mention pagination, result ordering, or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that goes straight from the resource to the filtering options. The parenthetical list of degree types adds a little length but is arguably useful for disambiguating the scope and does not repeat the schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and full parameter documentation, the description covers the essential semantics without needing to explain return values. It optionally mentions a semester scope but does not mention edge cases like default semester; these are already captured by the parameter descriptions. It leaves some sibling relationships but not structurally missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description adds that the list is filterable by department and by name, which mirrors the schema's query and department fields, but it does not add details beyond the schema for limit, semester, or default behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (degree programmes and extension curricula) and the scope (offered in a semester) with optional filters, giving an agent a clear sense of the tool's output. It distinguishes the tool from sibling resource types (courses, staff, exams), though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when a list of degree programmes or curricula is needed, optionally filtered by department or name. It does not explicitly contrast with siblings like search_courses or get_program_courses, leaving the comparison to the agent, but the semantic focus on programmes gives reasonable context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_semestersA
Read-only

Which semester codes to use, and which one counts as 'current'. Past semesters are archived; a semester more than one term ahead is usually still empty.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral caveats beyond the annotations: past semesters are archived and future semesters beyond one term are usually empty. This is valuable expectation-setting for a read-only tool and does not contradict the readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the essential purpose, and has no filler. Every sentence adds useful information: the first gives the core purpose, the second explains relevant behavioral edge cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-parameter list tool with an output schema, the description is nearly complete: it explains the purpose, current-semester semantics, and the caveats around archived/empty semesters. The only minor gap is that it does not specify how the current semester is determined, but that is not needed to call the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so there is no parameter documentation burden. The description provides helpful context about semester codes and current/empty states, which more than satisfies the baseline for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool tells the agent which semester codes to use and which one is current, naming the resource 'semesters' and the two key questions. It is distinct from sibling tools like search_courses or list_departments, though it lacks an explicit verb like 'lists'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: use this to understand semester codes and identify the current term. It also warns about archived past semesters and usually-empty future ones, which helps the agent decide when to query those semesters. It does not explicitly name alternatives, so it misses full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_coursesA
Read-only

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".

NameRequiredDescriptionDefault
limitNoMaximum courses.
queryYesKeywords, e.g. "logik", "180013", "Schnieder sprachphilosophie".
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester. Pass "" to search all semesters.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions that it searches over multiple fields and defaults to the current semester, which is useful. It also notes that passing an empty semester searches all semesters knowledge not in annotations. However, it doesn't detail result ordering or that it's a free-text fuzzy search, but the annotation openWorldHint=true indicates infeasible queries may return empty results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three well-structured lines. It front-loads the primary purpose and then provides field scope and usage examples. Every sentence delivers value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple with 1 required parameter, and the schema covers all parameters. The description gives enough context for an agent to construct queries and handle the semester filter. However, it doesn't mention what the output contains (though an output schema exists), nor discuss potential latency or rate limits, but that's acceptable given the output schema exists and the operational context is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are described in the schema with examples (e.g., 'logik', '180013', semester codes). The description adds minimal extra meaning beyond the schema because the schema already covers coverage 100%. The description's mention of semester defaults and the empty string for all semesters is also found in the schema, so the extra value is limited.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: free-text search over u:find courses, matching titles, LV numbers, lecturer names, and semester codes. It distinguishes itself from sibling tools by specifying the search scope and fields, and contrasts with structured lookups like get_course.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides specific use cases ('is there a course about X' or 'what does lecturer Y teach'), which helps an agent know when to invoke it. However, it doesn't explicitly state when not to use it or mention alternatives like get_course for exact lookups, but the examples are sufficient for many scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_examsA
Read-only

Courses with matching exam records (Prüfungstermine). Returns the courses; call get_course for the concrete exam dates.

NameRequiredDescriptionDefault
limitNoMaximum courses.
queryYesKeywords, LV number or lecturer name.
semesterNoSemester code such as "2026W" (winter 2026/27) or "2027S". Also accepts "current", "next", "previous". Defaults to the current semester. Pass "" for all semesters.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the tool returns courses rather than exam dates, which is a useful behavioral clarification. However, it doesn't disclose details like pagination, result ordering, or how the open-world hint affects results, so it adds only moderate value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The core purpose is front-loaded, and the follow-up instruction is placed immediately after, making it easy for an agent to parse and act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a rich output schema and full parameter documentation, so the description doesn't need to explain return values. The only minor gap is not explicitly contrasting with search_courses, but the exam-specific focus and the get_course pointer make the tool's role clear enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description doesn't add parameter-level detail beyond what the schema provides, but it does clarify the overall return semantics (courses, not dates). Baseline 3 is appropriate since the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches for courses with matching exam records (Prüfungstermine), using a specific verb and resource. It also distinguishes itself from get_course by noting that concrete exam dates require a follow-up call, which helps differentiate it from sibling tools like search_courses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to call get_course for concrete exam dates, providing a clear next step and implicit alternative. It doesn't explicitly state when to use search_exams versus search_courses, but the exam-specific focus and the pointer to get_course give adequate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_staffA
Read-only

Find university staff by name; returns ids, unit, email and room where published.

NameRequiredDescriptionDefault
limitNoMaximum people.
queryYesName or part of a name.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, lowering the burden on the description. The description adds useful behavioral and data-scope context by noting that results include email and room only where published, which is valuable beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the operation and follows with the return shape. Every word contributes meaning, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with one required parameter, a defaulted limit, rich annotations, and an output schema, the description is complete enough for an agent to select and invoke it correctly. It states what to search by, what results look like, and the relevant scope caveat.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents query as 'Name or part of a name' and limit as 'Maximum people.' The description does not add additional parameter-level detail, but the schema carries the burden adequately, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (find) and resource (university staff), and clarifies the search is by name. It also lists the returned fields (ids, unit, email, room), making the tool's scope and output clear and distinguishable from search tools for other entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the use case: finding staff by name. It does not explicitly name alternatives such as get_staff or explain when to prefer one over the other, so it stops short of full exclusion guidance, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_unitsB
Read-only

Find institutes, departments and faculties (addresses, website, hierarchy).

NameRequiredDescriptionDefault
limitNoMaximum units.
queryYese.g. "Philosophie", "Translationswissenschaft".

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint and openWorldHint annotations already cover the safety profile, so the description only needs to add context beyond them. It adds scope (which unit types and fields are involved), but it does not disclose match semantics, pagination, result limits, or exact-match behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word earns its place, and the parenthetical is compact yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, read-only annotations, and fully documented parameters, the description is mostly complete for selection and invocation. The only notable gap is the lack of explicit usage guidance relative to sibling unit tools like list_departments or get_unit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both query and limit already documented. The description does not add parameter-level detail, but because the schema carries the full burden, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Find') and resource ('institutes, departments and faculties'), with a useful parenthetical about returned fields. It is distinct from course, staff, and exam search siblings, but it does not explicitly differentiate itself from list_departments or get_unit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use search_units versus alternatives like list_departments or get_unit. The description relies on the tool name and required query parameter to imply a keyword-search use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.0
    • First observedget_course
    • First observedget_course_schedule
    • First observedget_program_courses
    • First observedget_program_modules
    • First observedget_staff
    • First observedget_unit
    • First observedlist_departments
    • First observedlist_programs
    • First observedlist_semesters
    • First observedsearch_courses
    • First observedsearch_exams
    • First observedsearch_staff
    • First observedsearch_units

TDQS

A4/5.0

Scored across 13 tools

Disambiguation4/5

Most tools are clearly separated by resource and action (courses, programs, staff, units, exams), and descriptions clarify purpose. The main overlap is get_course and get_course_schedule, since get_course already includes dates and rooms, though the schedule tool's iCal/group focus gives it a distinct use case.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using search_, get_, and list_. The verbs align predictably with behavior: search for discovery, get for details, list for enumerations.

Tool Count5/5

13 tools is well-scoped for a university course and directory server. Each tool covers a meaningful part of the domain without redundancy or bloat.

Completeness5/5

The surface covers the full browse-and-search lifecycle for courses, schedules, programs, staff, units, exams, and semester metadata. Since this is a read-only university directory, CRUD gaps are not applicable, and the available operations support realistic queries without dead ends.

Maintenance

ActivityStale
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers