Skip to main content
Glama

Recommend courses matching constraints

recommend_courses
Read-onlyIdempotent

Find and rank courses for a term by GE category, days, time, seats, and historical GPA. Filter by department, level, and availability to identify high-GPA or open-seat options.

Instructions

The 'find me a class' tool. Combines the live schedule with historical grade data to rank candidate courses for a term. Filter by GE category, department, level, days of week, time window and seat availability; results are ranked by historical average GPA (or by open seats). Ideal for 'find me an easy GE-2 with open seats that doesn't meet before 10am'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
geNoGE category to satisfy.
daysNoMust meet on at least ONE of these days (not all), e.g. "TuTh".
termYesRequired, e.g. "2026 Fall".
limitNoMax courses to return (default 20).
minGPANoOnly show courses whose historical average GPA is at least this.
sortByNoRanking. Default gpa.
divisionNoCourse level.
endBeforeNoMust end at or before, e.g. "5pm".
departmentNoRestrict to a department.
startAfterNoMust start at or after, e.g. "10am".
availabilityNoSeat filter. Default OpenOnly.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context by explaining that it combines live schedule data with historical grades and ranks by historical GPA or open seats, which goes beyond the structured hints. It does not describe edge cases or output format, but the key behavioral traits are disclosed without contradicting annotations.

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 four sentences and every sentence contributes: the 'find me a class' hook, the data-combination mechanism, the filter and ranking behavior, and a realistic example. The opening tag is slightly redundant with the tool name, but it is short and immediately frames the tool's role. Overall it is tight and front-loaded.

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 tool with 11 parameters and no output schema, the description supplies enough high-level context about what the tool does and how results are ordered. It does not detail the exact result shape, pagination, or data freshness caveats, but the phrase 'rank candidate courses' plus the example covers the agent's core decision needs. The rich annotations also carry part of the contextual burden.

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 every parameter already carries its own meaning and examples. The description adds a high-level grouping of filters (GE category, department, level, days, time window, seat availability) and clarifies ranking options (GPA or open seats), but it does not add syntax or format details beyond the schema. This matches the baseline-3 expectation for fully documented parameters.

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-resource pair: it 'rank[s] candidate courses' by combining live schedule data with historical grade data. It clearly differentiates itself from siblings like search_courses and course_grades by emphasizing the ranking and recommendation behavior, and the 'find me a class' tagline makes its purpose instantly recognizable. The example query reinforces the exact job this tool performs.

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 a concrete ideal use case: "find me an easy GE-2 with open seats that doesn't meet before 10am". This tells an agent when the tool is appropriate for natural-language-style course recommendation. It does not explicitly name sibling tools or state when NOT to use it, so it stops short of full exclusion guidance.

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