Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
UNW_AUTO_LOGINNoSet to 0 to guarantee no command starts a browser login.
PYTHONUNBUFFEREDNoSet to 1 to keep Python output unbuffered, as shown in the MCP registration example.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

UNW planner: Degree Works audit + Banner 9 class search + planning tools.

START HERE

  • Call unw_session() first. If authenticated=false, try one read tool (unw_profile/unw_terms); reads may work when degraded. Stop only on auth/session errors or before a write, then use fix_command; never improvise a login.

  • Then unw_profile() and unw_remaining(). The audit already knows the student's majors, minors, catalog year, classifications and advisors: never ask the student for facts the audit can answer.

  • DO confirm declared programs against what the student says. They diverge often (e.g. a student says "ministry minor" while the audit says "Bible"). Report the discrepancy, do not silently pick one.

ASK BEFORE ASSUMING

  • Credit budget, blocked days/times, earliest start, latest end, summer willingness, and graduation target. unw_roadmap and unw_plan_draft have defaults; defaults are not the student's preferences.

PLANNING ORDER

  1. Scarce major-required courses first. Check unw_offering_matrix before proposing any course: never propose a fall-only course for spring (or vice versa).

  2. Then the major credit pool / electives.

  3. Then gen-ed slots, choosing the highest RMP rating among eligible sections.

  • Never propose two sections with a time conflict. Use unw_conflicts on the final CRN set and show the ASCII grid.

  • Flag NOT_YET_OPEN / CLOSED sections, single-section courses, unassigned faculty ("Staff"), and variable-credit rows. Seats are a 15-minute snapshot.

RATINGS

  • Unrated is unknown, not bad: null is never 0.0. Prefer rated instructors but say when the evidence is thin (n<3 is weak). Match confidence reflects name ambiguity, not teaching quality.

BANNER PLANS (term-scoped)

  • Plans belong to one term. unw_banner_plans(term) returning [] means "no plans for THIS term", not "no plans exist". Other terms' plans are invisible.

  • Confirmation is ENFORCED by the server, not advisory. Every write tool requires confirm=true; unw_banner_plan_delete also requires confirm_name equal to the plan's exact name. Calling without them returns refused=true, the intended effect and the current plan state, and performs no write.

  • Still show that intended effect to the user and get explicit approval before re-calling with confirmation. Add/remove need a plan id or exact name; ambiguous names are rejected with candidates, never guessed.

  • Every successful write returns a read-back before/after diff (rows, credits). Report it.

  • Do not create/delete plans just to test something: the student's plans are real.

REGISTRATION

  • unw_register_preview is a DRY RUN. It never POSTs add/drop/register. Use unw_registration_window for time tickets; report Banner's eligibility failure text verbatim instead of implying registration can proceed.

OUTPUT

  • Always show the ASCII grid and a one-line rationale per pick. Report discrepancies (already-completed course, requirement the plan drops, audit vs catalog conflicts) instead of quietly resolving them.

CACHING

  • Term snapshots are cached for 15 minutes. Pass refresh=true only when the user needs current seats. unw_offering_matrix reads historical snapshots and is the right tool for "can this course be taken next term?".

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
unw_sessionA

Check the UNW session: authenticated (live check), degraded (state exists but the live check failed), state-file age, cookie count and earliest cookie expiry (values are never exposed), plus read_hint/write_hint and the exact packaged CLI command that repairs an expired session. Call this before any other tool. If unauthenticated but degraded, try one read tool before asking for a login.

unw_profileB

Student profile from Degree Works: name, id, classification, degree/school, catalog year(s), majors, minors, programs, college, advisors, credits earned and in progress, GPA, percent complete, anticipated graduation, academic standing and holds. Holds are not exposed by the mapped APIs: null = unknown.

unw_auditB

Structured degree-audit requirement tree (groups -> blocks -> course options, with applied/in-progress/transfer flags). group filters by a case-insensitive substring of a group title/kind or block label.

unw_remainingA

Unmet requirements only: id, title, parent group, kind, credits remaining, pick-N progress, course/attribute/wildcard options, status, priority class and shared_title_with (other ids with the same title/options: double-counting risk). This is the authoritative "what is left" list.

unw_termsA

Banner term codes with descriptions plus is_next, is_current, view_only and registration_eligible flags. Eligibility is probed through Banner's own mode=registration response (cached per process); refresh=True re-probes it. Failures are included verbatim.

unw_searchA

Search one term's sections (normalised rows: CRN, course, title, credits, seats, days/times, faculty, attributes, availability). Banner ignores the attribute/instructor/open-only query parameters, so filtering happens client-side over a cached term snapshot. limit is capped at 200; when limit_capped is true follow next_offset to page through the rest.

unw_courseB

Full detail for one CRN: meetings, faculty with RMP evidence, attributes, catalog description, prerequisite/corequisite/restriction text plus the parsed prerequisite codes, linked lecture/lab CRNs, enrollment text and availability.

unw_candidatesA

Resolve unmet requirements to sections offered in term (wraps the catalog resolver). requirement matches an id, title, parent group or target; omit it for every unmet requirement. Every empty result carries the reason (never offered / all closed / already completed). limit caps candidates per requirement (0=all); compact omits repeated section detail. One requirement can be large, so prefer compact/limit for broad queries.

unw_ratingsA

Batch Rate My Professors lookup. Accepts "Last, First" or "First Last". Unrated professors return rating=null (never 0.0); weak_evidence flags n<3. Cache entries expire after 7 days; refresh=True refetches now. Transient RMP failures are never cached.

unw_conflictsB

Pairwise time conflicts for a CRN set, plus the ASCII week grid and the list of unscheduled (TBA/asynchronous) sections. Half-open intervals; linked lecture/lab pairs are exempt.

unw_plan_draftA

Draft a conflict-free term plan from the audit, prioritizing major-required courses, then major pools, then gen-ed by RMP rating.

required_crns/required_courses pin sections the student insists on; each pin reports placed/unavailable/conflict/prereq_blocked/excluded/budget and a failed pin makes ok=false. exclude_crns/exclude_courses remove candidates. min_credits keeps filling elective pools until the load is met (and reports min_credits_met). hours maps a CRN to the credit hours to reserve for a variable-credit section (default: the low end). Pins apply to this single-term draft only, not to unw_roadmap. include_summer=True also drafts the following summer for requirements that did not fit.

unw_roadmapA

Multi-term plan starting at start_term (default: the start term plus three non-summer terms; summer only when include_summer). Carries requirements and prerequisites forward, reports terms with no published catalog, and returns graduation-risk notes against the audit's anticipated graduation term. Course pins, minimum-load and instructor exclusions are draft-only: use unw_plan_draft for those.

unw_offering_matrixA

Offering pattern per course/attribute across every observed term: every-term, fall-only, spring-only, summer-only or never observed, with section counts, open counts and instructors per term. Accepts "CYS 4245", "ATTRIBUTE NATS" or "DAL *". Omit courses for every unmet requirement target. Use this before proposing a course for a future term.

unw_banner_plansA

List the student's Banner Plan Ahead worksheets for one term. Plans are TERM-SCOPED: this list only contains plans whose planHeader.term equals term; an empty list means "no plans for THIS term", not "no plans exist" (check other terms, and remember the session term must be bound).

unw_banner_plan_createA

Create a named Banner Plan Ahead worksheet for term (writes to Banner).

Confirmation is ENFORCED, not advisory: confirm is required and must be true, otherwise the tool returns the intended effect and the current plan count without writing. Verify the effect with the user first. The student may hold at most five plans per term; names cannot be renamed later.

unw_banner_plan_addA

Add a section (crn) or a course (subject+number) to a Banner plan (writes to Banner).

Confirmation is ENFORCED: confirm is required and must be true, otherwise the tool names the exact section/course and current plan state and performs no write. plan is an id or exact name; ambiguous names are rejected with candidates. Successful writes return a before/after diff read back from Banner.

unw_banner_plan_removeA

Remove one course row from a Banner plan (writes to Banner).

Confirmation is ENFORCED: confirm is required and must be true, otherwise the tool names the exact row and projected credits and performs no write. Identify the row by crn or subject+number; plan is an id or exact name. Successful writes return a before/after diff read back from Banner.

unw_banner_plan_deleteA

Delete an entire Banner plan (writes to Banner, irreversible).

Confirmation is ENFORCED twice: confirm must be true AND confirm_name must equal the plan's exact name. Otherwise the tool reports the intended deletion and current plan state and performs no write. Successful deletion returns the removed plan, remaining plan count and a before/after diff read back from Banner.

unw_register_previewA

DRY RUN ONLY: never posts add/drop/register. Returns Banner's real term eligibility flags and failure text for term, then local checks for the requested CRNs: seats/availability, time conflicts and prerequisites (prereq_ok is null when unverified). If Banner reports the term as ineligible, treat its failure text as the answer; never attempt real registration.

unw_registration_windowA

READ-ONLY registration time-ticket window(s). With term, returns that term's window; without it, returns the configured current term and the next selectable term. Each row carries Banner's verbatim eligibility failure text, parse_status (parsed/no_ticket/not_eligible/unknown), America/Chicago start/end, seconds until opening and a countdown. It NEVER registers, adds, drops or withdraws; parse_status=unknown must be reported from raw_text.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target a clearly distinct resource or action, and the descriptions explicitly draw boundaries where overlap exists (unw_audit vs unw_remaining is 'authoritative what-is-left', unw_search vs unw_candidates is 'wraps the resolver', unw_plan_draft vs unw_roadmap is 'single-term with pins vs multi-term'). The remaining soft overlaps — unw_register_preview re-checking seats/conflicts/prereqs that unw_search and unw_conflicts already surface, and unw_banner_plans vs the local draft tools — are workable but could still cause misselection.

Naming Consistency4/5

Nearly all names share the unw_ prefix and snake_case noun-oriented pattern, with the five banner_plan tools forming an internally consistent verb-suffixed cluster. Minor deviations: unw_search is the lone bare verb, unw_plan_draft uses a noun+noun order unlike its sibling unw_roadmap, and unw_register_preview vs unw_registration_window use different stems for the same domain.

Tool Count4/5

Twenty tools is slightly above the comfortable range, but the surface spans several genuinely separate concerns (auth, audit, catalog search, RMP, drafting, Banner worksheet CRUD, registration checks), and each tool maps to a real operation. The only marginal additions are the near-paired audit/remaining and search/candidates tools.

Completeness4/5

The lifecycle is well covered: state check, profile, audit and unmet requirements, term catalog and course detail, candidate resolution, ratings, conflict checking, single- and multi-term planning, Banner worksheet create/add/remove/delete, and registration eligibility previews. The notable gap is that nothing ever performs a real add/drop/register or waitlist action — a deliberate safety boundary, but it leaves an agent at a dead end for the final registration step, and there is no schedule export.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues