Skip to main content
Glama
NCCU-AI-SYSTEM

NCCU Moodle MCP

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_HOSTNoBind address for the HTTP server. Default: 127.0.0.1127.0.0.1
MCP_PORTNoPort for the HTTP server. Default: 30333033
MOODLE_SSO_URLNoThe NCCU SSO login URL. Normally auto-discovered from Moodle's login page; set this to skip discovery or pin it.
MCP_ALLOWED_HOSTSNoComma-separated list of allowed Host header values (DNS-rebinding guard). Default: '*' (any host).*

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
list_coursesA

List the student's enrolled Moodle courses (with the user's role in each), filtered by semester.

By default (no sem), returns ONLY the latest semester's courses (the current term). Pass sem as an NCCU term code (e.g. "1142") to get that semester; pass "all" to return every enrolled course.

Each course is returned as an object with:

  • id (int) Moodle course id, usable in other course tools

  • name (str) full course title

  • url (str) direct link to the course

  • semester (str) NCCU term code the course belongs to (e.g. "1151")

  • current (bool) true if it is in the current (latest) semester

  • role (str) the user's role: 'student', 'teacher', 'editingteacher', 'teachingassistant', … (null if unknown)

Credentials come from the MCP settings headers, not from you.

search_coursesA

Search the user's enrolled courses by keyword — the Moodle app's "filter my courses" box. query is matched as a case-insensitive substring of each course name, which contains the NCCU term code, the Chinese title and the English title — so a course code, a Chinese word or an English word all work (e.g. "物件導向", "Object-oriented", "703009").

Searches ALL enrolled courses across every term by default, so a keyword finds the course whatever semester it is in. Pass sem as a term code (e.g. "1142") to scope the search to one semester, or "latest" for the current term only.

Returns the same fields as list_courses: {id, name, url, semester, current, role}, newest term first. An empty query returns everything in scope (same as list_courses).

Credentials come from the MCP settings headers, not from you.

get_course_roleA

Get the user's role in one course (by Moodle course id, from list_courses): 'student', 'teacher' (often the TA/助教), 'editingteacher' (instructor), 'teachingassistant', 'manager', etc.

Returns {course_id, role, roles}: role is the primary role shortname, roles all of them (a user can hold more than one).

Credentials come from the MCP settings headers, not from you.

list_announcementsA

List announcement TILES (headers only, no message body) from a course's "Announcements" forum — like scanning the forum page. To read one, take its discussion_id and call get_announcement.

If course_id is given, lists that course's announcements; otherwise aggregates across the current (latest) semester's courses. limit/offset paginate the newest-first list.

Each tile: {discussion_id, course_id, course, subject, author, posted, replies, pinned, url}. posted is Taipei time 'YYYY-MM-DD HH:MM'.

Credentials come from the MCP settings headers, not from you.

get_announcementA

Open ONE announcement and read its thread — the original post plus any replies — given a discussion_id from list_announcements.

Posts are oldest-first; limit/offset paginate long threads.

Returns {discussion_id, total, posts:[{post_id, parent_id, subject, author, posted, message}]}. posted is Taipei time 'YYYY-MM-DD HH:MM'.

Credentials come from the MCP settings headers, not from you.

list_assignmentsA

List assignments (with due dates and submission status) for the student's courses.

Scope, in priority order:

  • course_ids: if given, list assignments for exactly those Moodle course ids (from list_courses); sem is ignored.

  • sem: otherwise filter all enrolled courses by NCCU term code. Default (neither given) = latest semester; "1142" = that term; "all" = every course.

Filter by date (ISO dates in Taipei time, e.g. "2026-09-08"): due_from/due_to bound the DUE date, opens_from/opens_to bound the OPEN (submissions-from) date. Give any subset; compute ranges from today for 'due this week', 'opened last week', etc. This is the best way to answer 'what's due/opened in some period', since it also carries submission status.

By default only courses where you are a STUDENT are included (your own homework); set include_all_role true to also include courses where you are a teacher/TA.

Each assignment: {id, course_id, course, role, name, due, opens, cutoff, status, url}, where role is the user's role in that course (student/teacher/…) and status is 'graded' / 'submitted' / 'not submitted'. Times are Taipei time 'YYYY-MM-DD HH:MM'; null means unset. Sorted by due date.

Credentials come from the MCP settings headers, not from you.

get_course_contentsA

Get everything the teacher posted in one course (by Moodle course id, from list_courses), grouped by section — NCCU names sections by week, so this is the week-by-week list of materials, links, forums and assignments.

The summary is the teacher's text for that section/week (readings, plan, notes) — many NCCU weeks have only a summary and no attached items. By default a section is shown if it has items OR a summary; only truly blank sections are dropped. Set include_empty true for the full week skeleton including blank weeks.

Each section: {section_id, section, summary, modules:[{id, instance, name, type, url}]}. type is the Moodle module (assign, resource, url, forum, quiz, page, folder, label, …); id is the course-module id (cmid) and instance the activity id — use them to open an item with other tools (e.g. an assign instance is the course_id-independent assignment id, a forum instance feeds get_announcement's forum).

Credentials come from the MCP settings headers, not from you.

upcoming_deadlinesA

List the student's upcoming action events (assignment due dates, quiz closings, etc.) across courses within the next days (default 14). This is the best 'what's due soon' overview.

By default only events from courses where you are a STUDENT are included; set include_all_role true to also include courses where you are a teacher/TA. (Personal/site events are always kept.)

Each event: {name, course_id, course, role, due, overdue, module, url}. due is Taipei time 'YYYY-MM-DD HH:MM'. Sorted soonest first.

Credentials come from the MCP settings headers, not from you.

get_gradesA

Get the student's own grade items for one course (by Moodle course id, from list_courses).

Each item: {item, grade, percentage, range, feedback, type}. A '-' grade means not yet graded.

Credentials come from the MCP settings headers, not from you.

get_moduleA

Open ONE item a teacher posted and return its content, given its cmid (course-module id — the id in a /mod//view.php?id= link, or from get_course_contents). course_id is OPTIONAL — omit it and it's resolved from the cmid, so a bare cmid/link is enough. It detects the item type and returns:

  • resource/folder -> files:[{filename, mimetype, size, url}] (open the url/view_url in a browser to download; no direct download here yet)

  • url -> external_url

  • page -> html (plain text)

  • label -> text

  • forum -> forum_id + intro + discussions[] (read one with get_announcement)

  • assign -> description (instructions), attachments, due/opens/cutoff, grade_max, status, submission{submitted_at,files,text}, feedback{grade,grade_display,graded_at,comment,files}

  • quiz -> metadata + attempts · otherwise -> description

Always includes {course_id, cmid, instance, type, name, view_url}.

Credentials come from the MCP settings headers, not from you.

get_notificationsA

Get the student's Moodle notifications (the notification bell): assignment due reminders, grading, forum posts, etc.

Each notification: {subject, message, posted, read, url}, newest first. limit caps the count. The result also reports how many are unread.

Credentials come from the MCP settings headers, not from you.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct resources (courses, announcements, assignments, grades, modules, notifications). However, list_courses/search_courses overlap as both enumerate courses with different filters, and list_assignments/upcoming_deadlines both surface due-date information, creating minor ambiguity.

Naming Consistency4/5

Tool names consistently use snake_case with a clear verb_noun pattern (list_*, get_*, search_courses). The only deviation is upcoming_deadlines, which is a noun phrase rather than verb_noun, but it remains predictable and readable.

Tool Count5/5

11 tools is well-scoped for a student-facing Moodle assistant. Each tool has a clear, useful purpose, and the set is neither bloated nor too thin.

Completeness4/5

The set covers core read-only student workflows: courses, announcements, assignments, deadlines, grades, and course content. Write operations like submitting assignments are missing, but these appear outside the server's apparent purpose, so the gap is minor.

Maintenance

ActivityMaintained
ResponsivenessNo issues