Skip to main content
Glama

list_enrollments

Read-onlyIdempotent

Fetch Skilljar course enrollments and course-level progress, filtered by student, course, status, domain, or dates, with paging for complete totals before confirming non-enrollment.

Instructions

Find who is enrolled in what, and how far they have got.

    Returns ONE PAGE, one row per enrolment. Check `has_more` and call again with
    `next_cursor` before telling the user a total or that someone is not enrolled -
    an organization can have tens of thousands of enrolments.

    `filter_active` means active AND not expired; omit it to get both. Omitting it
    is usually right when auditing, and wrong when reporting current access.
    `filter_progress_status` is a comma-separated subset of completed, in_progress,
    not_started. `filter_domains` is comma-separated domain names. `include` accepts
    purchase, student, certificate.

    This is COURSE-level progress. Per-lesson progress is not available in Skilljar's
    v2 API at all; do not claim a learner's position within a course from this.

    Requires the `enrollments:read` OAuth scope.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
includeNo
page_sizeNo
page_cursorNo
filter_activeNo
filter_domainsNo
filter_course_idNo
filter_student_idNo
filter_enrolled_gteNo
filter_enrolled_lteNo
filter_completed_gteNo
filter_completed_lteNo
filter_student_emailNo
filter_progress_statusNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteYes
has_moreYes
enrollmentsYes
next_cursorNo
Install Server

TDQS

A4.6/5.0
Behavior5/5

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

Despite readOnly/idempotent annotations already declaring safety, the description adds significant behavioral context: pagination is one page at a time, filter_active means 'active AND not expired', output has has_more/next_cursor semantics, requires the enrollments:read OAuth scope, and a hard API limitation on per-lesson data. This goes well beyond the annotations and is not contradicted by them.

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

Conciseness5/5

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

The description is front-loaded with the purpose, uses short labeled paragraphs for pagination, filters, scope, and limitation. Every sentence carries operational information, and there is no filler or repetition of schema details. It is dense but well-organized.

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?

Covers the most important operational context: pagination with has_more/next_cursor, interpretation of filter_active, OAuth scope, and the course-level limitation. It is slightly incomplete on date parameter formats and the relationship between filters, but the existence of an output schema and self-explanatory property names mitigate the gaps. Given the tool's 13 optional parameters, this is a strong but not perfect description.

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 0%, so the description is the only source of parameter meaning. It clearly explains filter_active, filter_progress_status (including exact accepted values), filter_domains, and include (accepted values). However, it leaves several parameters unexplained—page_size, page_cursor, filter_course_id, filter_student_id, filter_enrolled_gte/lte, filter_completed_gte/lte, filter_student_email—so the agent still lacks format/semantics for a majority of the 13 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 opens with a clear purpose: 'Find who is enrolled in what, and how far they have got.' It then states it returns one row per enrolment, and explicitly scopes it to course-level progress, distinguishing it from per-lesson progress tools. This gives an agent a clear, differentiated understanding of the operation.

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?

Provides explicit usage guidance: check has_more and use next_cursor before drawing conclusions; omit filter_active for auditing; include it for current access; and warns not to claim per-lesson progress. These are concrete when-to-use and when-not-to-use rules, plus a caveat about a limitation.

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

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CloudSecurityAlliance/csa-skilljar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server