Skip to main content
Glama
Dathis

ZHAW Moodle MCP Server

by Dathis

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ZHAW_MOODLE_MCP_CONFIGNoOptional path to a TOML configuration file. Overrides the default config location.

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
moodle_auth_statusA

Check whether a valid ZHAW Moodle session exists. Never returns credentials.

moodle_loginA

Log in to ZHAW Moodle. Opens a browser window where the USER signs in with SWITCH edu-ID (incl. MFA) themselves; returns once login is detected. Never ask the user for their password. Other tools log in automatically when needed.

    Args:
        force: open the login browser even if the current session is still valid
    
moodle_logoutA

Log out: end the Moodle session and delete the locally stored browser session and cookies. The next Moodle request will require a new login.

moodle_list_coursesA

List the user's ZHAW Moodle courses.

    Args:
        status: "active" (current semester, default), "past", "future" or "all"
    
moodle_get_courseA

Get the structure of a course: sections, nested subsections and all activities/materials (files, folders, links, pages, quizzes, assignments, ...). Text blocks (labels) include their text.

    Args:
        course_id: course id from moodle_list_courses
    
moodle_get_contentA

Read the text of a Moodle page ("Textseite") or text block ("Textfeld"/label) as Markdown, with the links it contains. Such texts often hold instructions, rules for assignments and exams, or reading lists. Opening a page counts as a view in Moodle.

    Args:
        activity_id: id (cmid) of a page or label from moodle_get_course or moodle_search
    
moodle_list_resourcesA

List learning materials of a course: files (pdf, powerpoint, word, excel, zip, ...), folders, external links and Moodle pages, with their section.

    Args:
        course_id: course id from moodle_list_courses
        include_folder_contents: also list the individual files inside folders
            (one extra request per folder)
    
moodle_download_resourceA

Download a file, all files of a folder, or files linked in a page/text block, and return the local paths.

    By default files go to the managed directory <download_directory>/<course>/<section>/,
    which moodle_sync_course also uses.

    Args:
        resource_id: id from moodle_list_resources ("<cmid>" or "<folder cmid>/<path>"),
            or a file link's resource_id from moodle_get_content ("<page/label id>/<file>");
            the id of a page or text block downloads all files linked in it
        destination: optional target directory; relative paths are resolved
            against the configured download directory
        overwrite: replace an existing local file (otherwise it is left as is)
    
moodle_sync_courseA

Synchronise all files of a course into the local download directory. Downloads new files, re-downloads changed ones and reports what changed. Files removed from Moodle are reported but never deleted locally.

    Args:
        course_id: course id from moodle_list_courses
        dry_run: only report what would change, download nothing
        update_changed: re-download files that changed on Moodle
    
moodle_sync_allA

Synchronise all active (current semester) courses into the local download directory and return a per-course summary. Same rules as moodle_sync_course.

    Args:
        dry_run: only report what would change, download nothing
        update_changed: re-download files that changed on Moodle
    
moodle_searchA

Search Moodle by name: courses, sections, materials (files, folders, links, pages), assignments, quizzes and files inside folders. Case- and umlaut-insensitive, tolerant to small typos; all words must match (e.g. "OR ZGB", "Übung 3", "Semesterprogramm").

    Args:
        query: words to look for
        course_id: restrict to one course
        kinds: restrict result kinds: course, section, module (activities/materials), file (in folders)
        source: "index" = local index of names (fast; current courses are refreshed automatically),
            "moodle" = Moodle's full-text search (also finds words inside text areas),
            "auto" = index first, Moodle full-text search if nothing matches
        limit: maximum number of hits
        refresh: re-read the courses from Moodle before searching
    
moodle_get_deadlinesA

Open to-dos with deadlines across all courses (assignment due dates, quiz closing times, ...), sorted by date. Answers "What do I need to submit this week?". Activities already completed are not listed.

    Args:
        days_ahead: how far to look ahead (days)
        course_id: restrict to one course
        include_overdue: also list overdue to-dos from the last 30 days
    
moodle_list_assignmentsA

Assignments with opening date, deadline, submission and grading status and description. Without course_id all current courses are included (one request per assignment).

    Args:
        course_id: restrict to one course
    
moodle_get_announcementsA

Recent announcements ("Ankündigungen") posted by lecturers, newest first, with the message text of the most recent ones.

    Args:
        course_id: restrict to one course (default: all current courses)
        since: only announcements newer than this: ISO date/datetime (2026-09-14) or relative (7d, 12h, 2w)
        limit: maximum number of announcements
    
moodle_get_recent_changesA

What changed in Moodle since a point in time: new or updated materials and activities, new announcements, and new or changed deadlines, grouped by course. Answers "What is new in Moodle since Monday?".

    Args:
        since: ISO date/datetime (2026-09-14, 2026-09-14T08:00) or relative (7d, 12h, 2w)
        course_id: restrict to one course (default: all current courses)
    

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 15 tools

Disambiguation4/5

Most tools target a distinct resource and action (auth, courses, files, deadlines, announcements), but a few have overlapping territory: get_recent_changes also surfaces announcements and deadlines, and get_course/list_resources/get_content all touch course content and text blocks. Descriptions are detailed enough that an agent can usually pick correctly, but there is some ambiguity.

Naming Consistency5/5

All tool names follow the moodle_ prefix with a clear verb_noun convention: login, list_courses, get_content, download_resource, sync_course, get_announcements. The pattern is consistent and predictable.

Tool Count5/5

Fifteen tools is at the upper edge of the ideal range but each one covers a distinct part of Moodle usage: session auth, course browsing, content/resource retrieval, syncing, search, and deadline/announcement queries. The count fits the scope of a Moodle assistant well.

Completeness4/5

The surface covers the main read-side workflows: exploring courses, reading materials, downloading/syncing files, searching, and checking deadlines/announcements. Minor gaps such as forum posts, grades, and assignment submission are absent, but agents can still accomplish most common Moodle tasks without dead ends.