Skip to main content
Glama

Learning Units

learning_units
Read-only

What courses does this institution publish? Filter by subject abbreviation, course code (spaces and case ignored; any number the course prints), or title words; each course carries its published credit string verbatim (ranges stay ranges), edition, and the captured page. Current courses by default: archived_matching counts the archived ones apart, and archived true lists them, marked. Or an exam board's exams: courseatlas_id names the board by its CourseAtlas institution id (a board has no UNITID), and every exam of the board is listed by title, page by page. Each row names its source: CourseShelf's exam learning units where it holds the board, CourseAtlas read live otherwise; College Board's AP and CLEP come only through CourseAtlas. Each row names its current FORM's wording source: source_url, capture_file, catalog_year and source_catalog_name are that one source's, never the record's whole span. A row whose record holds more than one form or more than one source also carries version_count, source_count, first_edition_seen and last_edition_seen, and one sentence saying so in words; a record with one form and one source carries none of them and reads exactly as it always has. The forms themselves, each with its own content and its own sources, come from the one-record get, never from a list. A record last seen in an older edition says so, because the Union keeps a record no current catalog prints.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "learning_units"
  }
}

Input Schema

NameRequiredDescriptionDefault
codeNoOptional course code, e.g. BIO 201
limitNoOptional page size (default 50, at most 100)
queryNoOptional title words
offsetNoOptional: the next_offset from a previous answer
unitidNoThe institution's IPEDS UNITID; or courseatlas_id for an exam board
subjectNoOptional subject abbreviation, e.g. BIO
archivedNoOptional: true lists the school's archived courses instead of its current ones
unit_typeNoOptional learning-unit type, one of the answer's unit_types, e.g. course
courseatlas_idNoOr: an exam board by its CourseAtlas institution id, e.g. 4427 (International Baccalaureate), 3999 (AP) or 4000 (CLEP); lists the board's exams

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / courseatlas_id
      Added value: +{
      +  "description": "Or: an exam board by its CourseAtlas institution id, e.g. 4427 (International Baccalaureate), 3999 (AP) or 4000 (CLEP); lists the board's exams",
      +  "examples": [
      +    "4427"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / unitid / description
      Previous value: -"The institution's IPEDS UNITID"New value: +"The institution's IPEDS UNITID; or courseatlas_id for an exam board"
    • removedInput schema / required
      Removed value: -[
      -  "unitid"
      -]
  2. Changed1 schema field changed
    • addedInput schema / properties / archived
      Added value: +{
      +  "description": "Optional: true lists the school's archived courses instead of its current ones",
      +  "type": "boolean"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / unit_type
      Added value: +{
      +  "description": "Optional learning-unit type, one of the answer's unit_types, e.g. course",
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • addedInput schema / properties / subject / examples
      Added value: +[
      +  "RNSG"
      +]
    • addedInput schema / properties / unitid / examples
      Added value: +[
      +  "225070"
      +]
  5. Added

TDQS

A4.2/5.0
Behavior4/5

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

Beyond readOnlyHint, it discloses defaults (current courses), archived behavior, source attribution rules, multi-form/multi-source marker fields, and the fact that records from old editions can remain. Some phrasing is confusing, especially the unexplained archived_matching reference, but the overall behavioral context is substantial.

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

Conciseness3/5

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

The purpose is front-loaded, but the description is dense and meandering, with long clauses about source provenance and form-level fields. Phrases such as 'archived_matching' and 'reads exactly as it always has' add confusion rather than clarity.

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 9-parameter read-only list tool with no output schema, it explains defaults, filtering, exam-board mode, and row-level source/version behavior fairly completely. It still leaves the exact row shape and the archived_matching reference somewhat unclear, so it is not fully complete.

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?

Schema coverage is already 100%, but the description adds useful semantics: code matching ignores spaces and case and accepts any printed course number, archived=true switches to archived courses, and courseatlas_id identifies an exam board rather than a UNITID institution. It also explains that limit/offset follow the answer's next_offset indirectly through schema descriptions.

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 resource and verb-like operation: it lists published courses and exams for an institution or exam board, with filters. It also explicitly distinguishes the list tool from get_learning_unit, which is where the individual forms come from.

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 conditions: current courses by default, archived courses when archived=true, and exam-board exams when courseatlas_id is supplied. It explicitly directs users to get_learning_unit for individual forms, though it does not mention the closely related search_programs_and_learning_units sibling.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.