Skip to main content
Glama

Get Outcome Mastery Distribution

get_outcome_mastery_distribution
Read-only

Get a mastery-level histogram for outcomes in a course — how many students fall into each rating band — optionally filtered by outcome_ids and student_ids and excluding missing user rollups or missing outcome results.

Instructions

Get a mastery-level histogram for outcomes in a course — how many students fall into each rating band — optionally filtered by outcome_ids and student_ids and excluding missing user rollups or missing outcome results. Set include_alignment_distributions to also break down scores by contributing alignment. Use get_outcome_rollups instead for each student's individual aggregated score, or get_outcome_results for the raw per-alignment scores.

Input Schema

NameRequiredDescriptionDefault
excludeNoOptional exclusions for missing users or missing outcome results.
course_idYesThe Canvas course ID.
outcome_idsNoOptional outcome IDs to restrict the distribution results.
student_idsNoOptional Canvas student IDs (pass large IDs as strings) or SIS user IDs prefixed with "sis_user_id:".
add_defaultsNoInclude default mastery colors and levels when Canvas supports it.
only_assignment_alignmentsNoWhen including alignment distributions, limit them to assignments only.
show_unpublished_assignmentsNoInclude unpublished assignments in alignment distributions.
include_alignment_distributionsNoInclude contributing score distributions for alignments.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv1.18.15
    • addedInput schema / properties / course_id / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "pattern": "^[1-9][0-9]{0,18}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / course_id / type
      Removed value: -"number"
    • addedInput schema / properties / outcome_ids / items / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "pattern": "^[1-9][0-9]{0,18}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / outcome_ids / items / type
      Removed value: -"number"
    • changedInput schema / properties / student_ids / description
      Previous value: -"Optional Canvas student IDs or SIS user IDs prefixed with \"sis_user_id:\"."New value: +"Optional Canvas student IDs (pass large IDs as strings) or SIS user IDs prefixed with \"sis_user_id:\"."
    • addedInput schema / properties / student_ids / items / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "pattern": "^[1-9][0-9]{0,18}$",
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^sis_user_id:[\\s\\S]+$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / student_ids / items / type
      Removed value: -[
      -  "number",
      -  "string"
      -]
  2. Changed1 schema field changedv1.18.11
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. Changed2 schema fields changedv1.18.8
    • removedInput schema / properties / student_ids / items / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / student_ids / items / type
      Added value: +[
      +  "number",
      +  "string"
      +]
  4. First observedv1.18.0

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real behavioral context beyond that: the optional exclusion of missing user rollups/results, and the effect of include_alignment_distributions on the returned shape. It does not mention pagination or result-size limits, which is the remaining gap.

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?

Front-loaded with the primary purpose, then filtering, then alternatives. Dense but nearly every clause carries information; only minor redundancy between the description's mention of outcome_ids/student_ids and the schema.

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 an 8-parameter read tool with no output schema, the description covers what is returned, the main optional filters, and routing to alternatives. It could say more about how the alignment distributions interact with the other flags (e.g., only_assignment_alignments/show_unpublished_assignments), but it is largely sufficient.

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 100%, so the baseline is 3. The description goes beyond the schema by explaining the purpose of the exclude filters and clarifying that include_alignment_distributions breaks scores down by contributing alignment, which the schema one-liner does not convey.

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?

States a specific verb and resource ('Get a mastery-level histogram for outcomes in a course') and explains what the output represents ('how many students fall into each rating band'). It explicitly differentiates itself from get_outcome_rollups and get_outcome_results by naming them.

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?

Names two alternative siblings and the exact condition that selects each: get_outcome_rollups for per-student aggregated scores, get_outcome_results for raw per-alignment scores. Nothing is left to inference about when to pick this tool.

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