Skip to main content
Glama

list_lessons

Read-onlyIdempotent

List non-draft lessons with optional filters by course, exact title, type, or update time. Paginated results require checking has_more and using next_cursor to see all lessons.

Instructions

List the organization's non-draft lessons, optionally filtered.

    Returns ONE PAGE. Check `has_more` - if it is true there are more lessons than
    you can see, and you must call again with `next_cursor` before telling the user
    how many lessons exist or that one is absent.

    `filter_course_id` is the obfuscated course id and is the usual way to get a
    single course's lessons. `filter_title` is an EXACT match, case-insensitive -
    unlike `list_courses`, which matches partially. `filter_type` must be one of
    ASSET, HTML, QUIZ, WEB_PACKAGE, VILT, IE_EXAM, WIDGET, MODULAR.
    `filter_updated_since` needs an ISO-8601 timestamp WITH a timezone offset; a
    naive one is rejected.

    Does not return lesson bodies - use `get_lesson` for `content_html`. Requires
    the `lessons:read` OAuth scope.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
page_sizeNo
filter_typeNo
page_cursorNo
filter_titleNo
filter_course_idNo
filter_updated_sinceNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteYes
lessonsYes
has_moreYes
next_cursorNo
Install Server

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't repeat those. It adds substantial behavioral context: pagination behavior (one page, has_more/next_cursor), exact-match case-insensitive filtering, rejection of naive timestamps, and the absence of lesson bodies. This goes beyond annotations, though it could mention what happens on invalid filter_type values.

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 efficient and front-loaded, starting with the core purpose. Each sentence adds distinct value: pagination, filter semantics, timestamp format, scope requirement. A minor deduction because the scope requirement is at the end, but the flow is logical and nothing is redundant.

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?

Given the output schema exists, the description doesn't need to explain return values beyond pagination hints, which it covers. It covers all six parameters semantically, the OAuth scope, and the non-draft default. It doesn't explicitly document page_size defaults or cursor format, but these are minor given the output schema and pagination explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of parameter documentation. It explains filter_course_id (obfuscated ID, usual way to get a single course's lessons), filter_title (exact match, case-insensitive, unlike list_courses), filter_type (must be one of the listed enum values), and filter_updated_since (ISO-8601 with timezone offset, naive rejected). page_size and page_cursor are implicitly covered via the pagination explanation.

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 clearly states it lists the organization's non-draft lessons with optional filtering. It includes specific verbs ('List'), the resource ('lessons'), and distinguishes itself from siblings like 'get_lesson' by explicitly noting it does not return lesson bodies, and from 'list_courses' by contrasting its filter matching behavior.

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?

The description provides explicit usage guidance: it explains when to use pagination ('if has_more is true... call again with next_cursor'), when to use get_lesson for content_html, and contrasts with list_courses on filter semantics. It also states the required OAuth scope, making alternatives and conditions clear.

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