Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MOODLE_WATCH_DBNoLedger path. Default: `<mirror>/moodle_watch.db`
MOODLE_WATCH_PORTNoHTTP port. Default: `3041`3041
MOODLE_WATCH_HOSTSNoComma-separated public host names
MOODLE_WATCH_MIRRORYesThe moodle-dl directory. Required.
MOODLE_WATCH_POLICYNoPolicy file. Default: `~/.config/moodle-watch/policy.toml`

Instructions

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

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

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

Tools

Functions exposed to the LLM to take actions

NameDescription
coursesA

List watched courses, with unhandled counts and the next deadline.

Each course carries the rule that decided its state, so "why does this course not show up" always has an answer. state is one of watch, ignore, or pending; a pending course has never been arbitrated by anyone.

whats_newA

What appeared, changed or vanished since since. The main tool.

since accepts last_run (the default), all, a duration like 7d or 48h, an ISO date like 2026-09-01, or an epoch integer.

Already handled items are hidden unless include_handled is true: the question asked is what remains, not what happened. The reply also carries deadline changes (a moved_from means the due date was shifted) and pending_courses, which need the user's arbitration.

deadlinesC

Upcoming deadlines, soonest first.

moved is true when the due date changed since it was first seen, and moved_from gives the previous one. No Moodle API reports this; it is known only because the ledger saw the earlier value.

course_treeA

Sections and modules of one course, each item annotated with its state.

Use this to navigate a course rather than to search it. For a whole-space lookup by name, use search.

searchA

Full-text search over course, section, module and file names.

Accent-insensitive: evaluation finds Évaluation. Supports FTS5 syntax, so dimension NEAR langagiere and program* work.

backlogB

Everything not handled yet, oldest first. The work queue.

An item leaves this list when mark_handled records a read, ingested or ignored action for it. Marking it todo keeps it here on purpose.

historyA

Every revision of one item, and everything that was done with it.

item_key comes from any other tool's output. Revisions follow the file across changes and moves, so this is the honest answer to "has this been updated since I read it".

read_documentA

Extract the text of one file, by its file_id.

Reads the local copy when the mirror has it, and downloads through the Moodle token otherwise. pages selects PDF pages, for example 1-5 or 3. Media files return their metadata and no text: a video is not summarised here.

mark_handledA

Record that these items were dealt with. Writes the ledger, not Moodle.

action is one of read, ingested, ignored, todo. by is free text naming who did it, for example nightly or alice. note is the right place for a link to whatever was produced.

Handling is per revision: if the file changes later, it returns to the backlog on its own.

set_course_policyA

Decide whether a course is watched. Use this to answer a pending course.

state is watch, ignore or pending. A decision made with a by other than policy is never overwritten by a policy rule afterwards, so the user's answer sticks.

syncA

Start a watch cycle in the background and return at once.

A full cycle takes minutes, so it never runs inside a tool call. Poll sync_status for the result. With download true it also fetches files, which takes considerably longer.

sync_statusA

The state of the most recent sync, running or finished.

finished null means it is still going. A non-null error starting with token_expired means the Moodle token must be renewed by hand; report the command rather than retrying.

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 12 tools

Disambiguation4/5

The tools are mostly distinct in purpose—listing courses, diffing changes, showing deadlines, searching, reading, handling, and syncing. A few overlaps exist, such as whats_new also surfacing deadline changes and pending courses, and backlog overlapping with whats_new's unhandled view, but the descriptions are explicit enough to resolve ambiguity.

Naming Consistency3/5

All names are lowercase and use underscores, but the convention is mixed: plural nouns (courses, deadlines), bare verbs (search, sync), and verb+noun compounds (read_document, mark_handled, set_course_policy) coexist. The names are readable but not predictable from a single pattern.

Tool Count5/5

Twelve tools is well-scoped for a Moodle change-watching service, covering distinct phases from course policy and syncing to change discovery, reading, history, and handling. Each tool earns its place without obvious bloat or trivial additions.

Completeness4/5

The core workflow is covered end-to-end: sync, see what changed, inspect course structure and content, read files, mark items handled, and set course policy. Minor workarounds exist, such as no explicit undo of a handling action, but they do not block the main use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues