Skip to main content
Glama

Get My Course Requirements

get_my_course_requirements
Read-only

What the authenticated student still has to DO in one course: a per-module requirement graph where every row names the Canvas endpoint and field its verdict came from.

Instructions

What the authenticated student still has to DO in one course: a per-module requirement graph where every row names the Canvas endpoint and field its verdict came from. Richer than list_modules plus list_module_items, which return a raw completion_requirement without the cross-references that make it truthful; for grade outcomes use project_grade or explain_grade instead, and for cross-course context list_my_planner_items. Five things to read before acting on the output: (1) unknown is a real state and is NOT "unsatisfied" — Canvas attaches completion_requirement.completed only where it loaded a module progression, which happens only for a student caller, so an educator or admin token gets unknown on every row rather than a course full of incomplete work. (2) A module with requirement_type: "one" is COMPLETE as soon as any single requirement is met, so counting its unsatisfied rows invents work. (3) summary gives five counts and never one "things left to do" number: that number cannot be computed honestly across mixed requirement_type values and a non-zero unknown count. (4) Numeric threshold rows are re-evaluated by Canvas on every pass and can revert from met to unmet with no student action (a regrade, a posting-policy change); the other four requirement types latch. (5) canvas_state and derived_state are both reported and a mismatch is flagged in state_disagreement rather than resolved. Read-only and current-user-only: no student_id parameter, no attempt started, no LTI launch, nothing marked as viewed or done.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "course_id": "<course_id>"
    },
    "name": "get_my_course_requirements"
  }
}

Input Schema

NameRequiredDescriptionDefault
course_idYesCanvas course ID.
max_modulesNoMaximum modules to walk (default 50, maximum 200). When the limit is reached, `truncated` is true and `truncation_note` says what to change.
include_contextNoAttach planner context (`plannable_date`, submission status) to each row. Default false. Context NEVER changes a row’s state — it is attached after the state is decided. Note Canvas’s planner defaults to a ~2-week window, so most rows will have `context: null` even with this on.
include_discussionsNoAdd the discussion obligations that are not module completion requirements: the `require_initial_post` row (derived from the topic’s `require_initial_post` and `user_can_see_posts`, valid only for a student caller) and the two rows of a checkpointed discussion. Default true. Costs one course-level discussions call, plus one call per group the student owns a child topic in.

Output Schema

NameRequiredDescriptionDefault
notesYes
modulesYes
summaryYes
course_idYes
truncatedYes
course_nameYes
truncation_noteYes
caller_is_studentYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.18.19

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, yet the description adds substantial non-structured behavior: 'unknown' is not 'unsatisfied' and only appears for student callers, 'one' requirement_type completes on any single row, thresholds can revert while other types latch, and state disagreements are surfaced rather than resolved. No contradictory claims about mutability.

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 core purpose and sibling routing are front-loaded before the five numbered cautions, and each numbered point carries a distinct pitfall (unknown vs unsatisfied, 'one' semantics, summary counts, re-evaluation, state_disagreement). It is dense and long, but nearly every sentence earns its place; the density is justified by the output's semantic traps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 4-parameter schema, full schema coverage, an output schema present, and readOnly/openWorld annotations, the description still covers the traps an agent needs to interpret the output correctly (unknown state, mismatch flag, threshold re-evaluation). Nothing needed to call and correctly read the tool is missing.

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% and each parameter (course_id, max_modules, include_context, include_discussions) already carries rich documentation, including the planner ~2-week window caveat. The description adds almost no parameter-level meaning beyond the schema, so the baseline 3 applies.

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 opening sentence names a specific verb and resource ('what the authenticated student still has to DO in one course') and describes the return shape as a per-module requirement graph with endpoint provenance. It explicitly distinguishes itself from list_modules/list_module_items, project_grade/explain_grade, and list_my_planner_items, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternatives and the condition that selects each: use project_grade or explain_grade for grade outcomes, list_my_planner_items for cross-course context, and this tool only for per-module completion requirements in a single course. The 'read-only and current-user-only' statement plus the absent student_id parameter tells the agent when it is the wrong tool (educator/admin token yields 'unknown').

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

Deploy Server

Other Tools