NCCU Moodle MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | Bind address for the HTTP server. Default: 127.0.0.1 | 127.0.0.1 |
| MCP_PORT | No | Port for the HTTP server. Default: 3033 | 3033 |
| MOODLE_SSO_URL | No | The NCCU SSO login URL. Normally auto-discovered from Moodle's login page; set this to skip discovery or pin it. | |
| MCP_ALLOWED_HOSTS | No | Comma-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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_coursesA | List the student's enrolled Moodle courses (with the user's role in each), filtered by semester. By default (no Each course is returned as an object with:
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. Searches ALL enrolled courses across every term by default, so a keyword finds the course whatever semester it is in. Pass Returns the same fields as list_courses: {id, name, url, semester, current, role}, newest term first. An empty 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}: 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 If Each tile: {discussion_id, course_id, course, subject, author, posted, replies, pinned, url}. 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 Posts are oldest-first; Returns {discussion_id, total, posts:[{post_id, parent_id, subject, author, posted, message}]}. 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:
Filter by date (ISO dates in Taipei time, e.g. "2026-09-08"): By default only courses where you are a STUDENT are included (your own homework); set Each assignment: {id, course_id, course, role, name, due, opens, cutoff, status, url}, where 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 Each section: {section_id, section, summary, modules:[{id, instance, name, type, url}]}. 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 By default only events from courses where you are a STUDENT are included; set Each event: {name, course_id, course, role, due, overdue, module, url}. 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
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. Credentials come from the MCP settings headers, not from you. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
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.
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.
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.
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.