Skip to main content
Glama

get_program_courses

Read-only

Retrieve a department’s or degree programme’s complete course list for a semester, grouped by curriculum module. Enter programme and semester to see all offered courses at once.

Instructions

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

Input Schema

TableJSON Schema
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

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

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.