NTNU Courses (unofficial)
Server Details
Unofficial NTNU course data: search, timetables, grades, course info, and exam logistics.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- MartinSA04/ntnu-mcp
- GitHub Stars
- 1
- Server Listing
- ntnu-mcp
Available Tools
12 toolscheck_timetable_conflictsAInspect
Checks a set of NTNU courses for the same year for clashing lecture/lab times and colliding exam dates — a clash check to run before registering for courses. Accepts bare course codes. Each side of a conflict carries its activity 'kind': a lecture-vs-lecture clash is unavoidable, while one involving an exercise or lab often has alternative groups. Exam dates come from the catalog, which does not mark deferred (utsatt/kont) sittings.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| course_codes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses behavioral traits such as accepting bare course codes, interpreting activity kinds, and noting that exam dates from the catalog do not mark deferred sittings. This adds useful context beyond a simple 'check conflicts' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, covering purpose, usage hints, and behavioral notes in a single paragraph. It is front-loaded with the main action and adds specific details without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of checking conflicts with activity kinds and exam dates, and the absence of an output schema, the description should explain what the tool returns (e.g., a list of conflicts). Without that, an agent may not know how to process the output. Additional completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning no parameter descriptions in the schema. The description adds minimal parameter info: 'Accepts bare course codes' implies format but doesn't explain the 'year' parameter or the exact expected string format for course codes. More detail is needed to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks for clashing lecture/lab times and colliding exam dates for a set of NTNU courses. It specifies the scope (same year) and distinguishes itself from sibling tools by focusing on conflict detection rather than general information retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('a clash check to run before registering for courses') and explains how to interpret conflict kinds. It does not explicitly exclude other scenarios or mention alternatives, but the guidance is sufficient for basic usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_coursesAInspect
Side-by-side comparison of NTNU courses for a given year — campus, exam dates, weekly teaching hours, and latest grade distribution — to help choose between courses. Accepts bare course codes.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| course_codes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It mentions 'accepts bare course codes' (a specific format requirement) and lists compared attributes, but does not disclose behavior like data freshness, error handling for invalid codes, or whether results are sorted. This is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the key action ('side-by-side comparison') and specific attributes. Every word adds value; no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description lists the compared attributes (campus, exam dates, etc.), giving a clear idea of the return content. However, it omits details like the maximum number of courses that can be compared, result ordering, or pagination. This is mostly complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds context for course_codes ('bare course codes') and implies year is for a specific year. However, it does not explain the format of course codes (e.g., 'TDT4100') or any constraints on year (e.g., integer range). It provides some value but falls short of fully documenting the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a 'side-by-side comparison' of NTNU courses, listing specific attributes (campus, exam dates, weekly teaching hours, grade distribution) and the goal to 'help choose between courses'. This distinguishes it from sibling tools like get_course_info (single course) or get_grade_distribution (single attribute).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for comparing courses to make a choice, but it does not explicitly state when not to use or mention alternatives among sibling tools. For example, it does not say 'use get_course_info for detailed info on one course' or 'use get_grade_distribution for just grades'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_infoAInspect
Everything about an NTNU course except exam logistics: credits, level, campus, language of instruction, prerequisites, mandatory activities, course content / learning outcomes, credit reductions ('studiepoengreduksjon'), which study programs the teaching is planned for, contacts, and any alert notices (e.g. 'no longer taught'). English text by default; pass language 'nb' for Norwegian. Omit year for the current study year. For exam dates, times, aid codes, and rooms use get_exam_info.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| language | No | ||
| course_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It discloses default language behavior, the effect of omitting year, and the scope of returned data. It does not mention permissions or side effects, which are minimal for a read operation, but still provides strong transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive—two substantive sentences plus a clear pointer to sibling. Key information is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich data returned and no output schema, the description is impressively complete, listing many field categories and edge cases (alert notices). It could mention course_code format, but the current detail is still high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully: it explains language as English by default with 'nb' option, year as current if omitted, and course_code as required. This adds essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifically lists all fields returned (credits, level, campus, etc.) and explicitly states what is excluded (exam logistics). It distinguishes itself from sibling tool get_exam_info, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use (getting course details) and when-to-use-alternative (exam info → get_exam_info). It also gives practical tips on language and year parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_scheduleBInspect
Every dated teaching activity (lectures, labs) for a course in a year, with Oslo-local times and rooms. Long output for large courses — prefer get_weekly_timetable for a compact recurring-week overview.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| course_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description warns about long output for large courses but does not disclose whether it is read-only, requires auth, or any other behavioral traits. Lacks full transparency expected without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences, front-loaded with core purpose, followed by a helpful usage hint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and incomplete parameter info, the description lacks details on output structure, pagination, time zone handling, or date formats. The hint about long output is useful but overall incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no information about the parameters (course_code, year) beyond their names. No mention of format, range, or examples, leaving the agent with insufficient guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states the tool retrieves all dated teaching activities (lectures, labs) for a course in a year with Oslo-local times and rooms. It clearly distinguishes from sibling get_weekly_timetable by noting the long output and suggesting the alternative for compact overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: use for detailed schedule, prefere get_weekly_timetable for compact recurring-week overview. However, no explicit when-not or prerequisites beyond this single alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_versionsBInspect
The DBH-versioned course codes (like 'TDT4100-1') that exist for a bare NTNU course code. Useful when grade lookups come back empty.
| Name | Required | Description | Default |
|---|---|---|---|
| course_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description implies a read-only operation by retrieving codes, but it does not disclose what happens if the course_code is invalid, whether there are any side effects, or how results are structured. The behavioral disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that convey the core purpose and a use case without any unnecessary words. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and no annotations, the description is somewhat lacking. It explains the purpose and provides a use case, but it does not describe the return format or handle edge cases. For a simple lookup tool, it is minimally adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions for parameters). The description adds meaning by specifying that course_code is a 'bare' NTNU course code (without version suffix) and gives an example. This compensates for the lack of schema descriptions, though it could be more detailed about format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves DBH-versioned course codes for a bare NTNU course code, with an example. It distinguishes from siblings like get_course_info by focusing on version codes, though it does not explicitly contrast with all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests using the tool when grade lookups come back empty, providing one use case. However, it does not specify when not to use it or mention alternative tools for other scenarios, leaving the agent without clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exam_infoAInspect
Exam logistics for one or more NTNU courses in a single call: every exam occasion (ordinary / re-sit) with date, start time, duration, permitted-aids code ('hjelpemiddelkode') with its meaning, exam system, and assigned rooms. The way to answer 'when and where are my exams and what can I bring' for a whole semester at once. Rooms are only published days before the exam; unpublished fields are null. Omit year for the current study year.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| language | No | ||
| course_codes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that rooms may be null when not yet published, and implies a read-only operation. It does not cover authentication needs or rate limits, but the behavioral traits relevant to invocation are adequately described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: one detailing the tool's output, one summarizing the use case, and one covering edge cases (room publication date, year omission). Every sentence adds essential information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description effectively enumerates return fields (date, start time, duration, aids code, system, rooms) and notes null behavior for rooms. It is complete enough for the tool's complexity, though it does not address error handling or input validation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It clarifies that 'course_codes' are for NTNU courses (array of strings) and that 'year' can be omitted for the current year. However, the 'language' parameter is not mentioned, leaving its intent undocumented. The description adds moderate value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves exam logistics for one or more NTNU courses, listing specific fields (date, start time, duration, aids code, rooms). It distinguishes itself from sibling tools like get_course_info by focusing exclusively on exam details and answering a specific user question ('when and where are my exams and what can I bring').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance: it can handle multiple courses in a single call, advises omitting year for the current study year, and explains that rooms are only published days before (unpublished fields are null). However, it does not explicitly contrast with sibling tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grade_distributionAInspect
Historical grade distribution for an NTNU course (per year and semester, with counts and percentages; grades A-F, or pass/fail codes). Accepts bare codes like 'TDT4100'. Omit years to get all recorded years. Small counts may be privacy-masked. Data comes from Norway's official DBH statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | ||
| course_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It reveals behavioral traits: small counts may be privacy-masked, the data source (DBH statistics), and the default behavior of returning all years if omitted. This is comprehensive transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with three sentences that front-load the main purpose and add important details. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers core functionality, data source, and privacy masking. It lacks explicit details about the return format (e.g., JSON structure), but the tool is simple enough that an agent can infer the output from the description. Minor completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description adds meaning by explaining the 'course_code' format (bare codes like 'TDT4100') and the 'years' parameter behavior (omit for all years). It could be improved by explicitly stating that years are integer values (e.g., 2023), but overall it compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves historical grade distributions for an NTNU course, specifying data granularity (per year/semester), grade categories, and acceptance of bare course codes. It differentiates from sibling tools like get_course_info and get_exam_info by focusing specifically on grade distribution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage guidance by explaining how to format course codes and the effect of omitting the 'years' parameter. While it does not explicitly state when to use this tool versus alternatives, the context makes it clear; the lack of explicit exclusions is acceptable given the clear purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_semestersAInspect
NTNU's terms (semesters) with ids like '26h' (autumn 2026) / '26v' (spring), teaching weeks, exam-period dates, and which term is current.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It clearly states the tool returns various semester-related data without side effects. However, it does not mention that the tool has no parameters or that it's a read-only operation, which would be helpful but is implicitly understood.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence that is front-loaded with the key purpose and details. Every word adds value; no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description adequately explains the return content. It could specify the format (e.g., array of objects) but the details given are sufficient for a simple data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description cannot add parameter-specific meaning. Per guidelines, baseline for zero parameters is 4, and the description does not detract from this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('get') and resource ('semesters'), and explicitly lists the data returned (IDs, teaching weeks, exam-period dates, current term). It clearly distinguishes itself from sibling tools that deal with courses or schedules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While it's implied for retrieving semester information, there is no mention of contexts where it should not be used or any comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_study_planAInspect
The official study plan for an NTNU program and cohort intake year: which courses (codes, credits, mandatory/elective) belong to each semester, and the specialization choice points with their course groups. The bridge from 'I study X' to concrete course codes — feed them to get_weekly_timetable, check_timetable_conflicts, or get_exam_info. cohort_year is the year the student STARTED (defaults to the current cohort); students in their Nth year started N-1 years ago.
| Name | Required | Description | Default |
|---|---|---|---|
| cohort_year | No | ||
| program_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the return structure (courses per semester, specialization points) and the cohort_year default. While it doesn't mention auth or rate limits, for a read-only query tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each adding value. It is front-loaded with the main purpose and includes essential details without redundancy. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description thoroughly explains what is returned (courses, codes, credits, mandatory/elective, semesters, specialization groups) and how to use the output. It even notes the cohort_year default. No output schema exists, but the description compensates fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains cohort_year in detail, including its default and how to compute it. Program_code is implied by context. Both parameters are effectively described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the official study plan for an NTNU program and cohort, detailing courses per semester and specialization choices. It uses specific verbs and nouns and distinguishes itself from siblings by explaining how the output can be fed to other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool (as a bridge from program to course codes) and explains the cohort_year parameter's meaning and default. It suggests downstream tools, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weekly_timetableAInspect
The recurring weekly timetable grid for a course in a year: weekday, times, ISO-week ranges, rooms, and a classified 'kind' per slot (lecture / exercise / lab / seminar / unknown). The compact way to answer 'when are the lectures for X' — filter on kind == 'lecture', since NTNU's own activity titles are free-form Norwegian text.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | ||
| course_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the output structure and the fact that activity titles are free-form text, which is important for proper use. While it doesn't discuss side effects or errors, the tool is a simple read operation and the description adequately covers expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no fluff: the first sentence defines the output, and the second provides a specific usage tip. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with two parameters, the description covers output fields, a filtering strategy, and a warning about free-form text. It lacks explicit year formatting but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage and no parameter descriptions, the description only implies course_code and year by saying 'for a course in a year.' It does not explain year format or any constraints, leaving the agent to infer meaning from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns the recurring weekly timetable grid with specific fields (weekday, times, ISO-week ranges, rooms, kind). It distinguishes from siblings like get_course_schedule by emphasizing the compact grid format and the classified 'kind' field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: answering 'when are the lectures for X' by filtering on kind=='lecture'. It also warns about free-form Norwegian text in activity titles. However, it does not explicitly exclude other use cases or mention when not to use this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_coursesAInspect
Search NTNU's course catalog for a given year (server-side free-text search over course names and codes; Norwegian terms often match best, e.g. 'maskinlæring' rather than 'machine learning'). Call this first when you don't know the exact course code. Returns course codes, Norwegian names, campus, and exam dates.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| year | Yes | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the search as server-side free-text and mentions return fields, which is useful. However, it lacks details about pagination behavior despite the page parameter, and does not address potential errors or rate limits. With no annotations, the description could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the primary action. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simple search with 3 parameters, no output schema), the description provides adequate context about what is returned. It could be slightly improved by mentioning pagination and the default page size, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description partially explains the 'year' and 'query' parameters but does not mention the 'page' parameter at all. With 0% schema description coverage, the description should cover all parameters to help the agent use the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool searches NTNU's course catalog for a given year using free-text search over course names and codes. Distinguishes itself from sibling tools by being the initial search entry point for unknown course codes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to call this first when the exact course code is unknown. Provides a practical tip about Norwegian terms matching best, which helps the agent choose this tool over alternatives like get_course_info that require a course code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_study_programsAInspect
Search NTNU's study-program catalog (~400 programs) by free text (name, code, keywords), study level (e.g. 'bachelor', 'master', 'ph.d'), and/or city (Trondheim, Gjøvik, Ålesund). Returns program codes like 'MTDT' — the input for get_study_plan. Call this first when you only know a program's name.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| level | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers search capabilities and output codes but omits details like result limits, pagination, or error handling. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-loading purpose and usage, no fluff. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 optional parameters, no output schema, and no annotations, the description covers main use and parameters adequately. Could mention result count or pagination, but generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description explains query as free text, level with examples (bachelor, master, ph.d), and city with examples (Trondheim, Gjøvik, Ålesund), adding meaning beyond bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches NTNU's study-program catalog by free text, study level, and city, distinguishing it from siblings like search_courses and get_study_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to call this first when only a program name is known and notes that returned codes feed into get_study_plan, giving clear context. It lacks explicit when-not-to-use guidance but is still good.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Norwegian transport (Entur) and geodata (Kartverket): trips, departures, addresses, elevation.
Provides data for LEGO sets, minifigures, parts and elements. Not affiliated with LEGO® Group.
Norwegian price tracking: search Elkjøp, Komplett, Power and 400+ stores, get price-drop alerts.
Entur MCP — Norway public transport, nationwide, all modes (developer.entur.org)
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server exposing NTNU course data (search, schedules, grades, semesters) as tools for LLM agents.162MIT
- AlicenseAqualityCmaintenanceEnables AI clients to read DTU Learn classes, assignments, deadlines, exams, and recent calendar changes through a local MCP server, using a cached SQLite store for fast and resilient queries.6MIT
- AlicenseAqualityCmaintenanceEnables searching and retrieving course details, schedules, prerequisites, and instructor information from the CMU course catalog via the ScottyLabs API.92MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a distinct aspect of NTNU course data: scheduling, exams, grades, comparisons, search, etc. Overlaps like get_course_schedule and get_weekly_timetable are clearly differentiated by granularity, with descriptions guiding usage.
All tools follow a verb_noun pattern in snake_case, using simple verbs like 'get', 'search', 'check', and 'compare'. The naming is uniform and predictable across all 12 tools.
12 tools is well-scoped for an informational server covering courses, schedules, exams, grades, study plans, and search. Each tool serves a clear purpose without unnecessary redundancy.
The tool set covers core CRUD-like operations for course data, including search, info retrieval, scheduling, exams, grades, and study plans. Minor gaps exist, such as no dedicated tool for study program details or room information, but overall the surface is comprehensive for the domain.