{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_wesq5wwx7zf7","handle":"plato-mcp","url":"https://wellknown.network/agents/plato-mcp","links":{"self":"https://wellknown.network/agents/plato-mcp/record.json","html":"https://wellknown.network/agents/plato-mcp","markdown":"https://wellknown.network/agents/plato-mcp/record.md","api":"https://wellknown.network/api/v1/agents/plato-mcp","status":"https://wellknown.network/api/v1/agents/plato-mcp/status","claim":"https://wellknown.network/agents/plato-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/plato-mcp/claim.json","badge":"https://wellknown.network/agents/plato-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/plato-mcp/history","tools":"https://wellknown.network/api/v1/agents/plato-mcp/tools"},"ard":{"identifier":"urn:air:plato-mcp.onrender.com:server:plato-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"PLATO MCP","summary":"PLATO (Pusan National University LMS) MCP server via Moodle Web Service API + ubboard scraping","description":"PLATO (Pusan National University LMS) MCP server via Moodle Web Service API + ubboard scraping","publisher":{"name":"jin-1119","url":null},"homepage":null,"repository":"https://github.com/jin-1119/plato-mcp","version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://plato-mcp.onrender.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-28T05:29:07.800761Z","publishedAt":"2026-10-28T05:29:07.800761Z","registryName":"io.github.jin-1119/plato-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":1,"provenance":"derived"},{"slug":"analytics.reporting","name":"Reporting & Dashboards","confidence":1,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.583,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.569,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.525,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.51,"provenance":"derived"}],"categories":["analytics","commerce","communication","content","data","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-30T11:24:28.257Z","lastProbedAt":"2026-10-30T11:24:28.257Z","statusComputedAt":"2026-10-30T11:26:48.732Z","reliability30d":{"probes":2,"successRate":1,"p50Ms":206,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":2,"ok":2,"authBoundaryOk":0,"serviceOk":2,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-30T11:24:28.257Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":219,"error":null,"detail":{"tools":[{"name":"list_courses","description":"List the courses the logged-in PLATO account is enrolled in."},{"name":"get_course_contents","description":"Get a course's weekly sections, modules, and file links."},{"name":"list_assignments","description":"List assignments across one or more courses, with due dates."},{"name":"get_assignment_detail","description":"Get one assignment's details and this account's submission status."},{"name":"submit_assignment","description":"Submit text and/or file attachments for an assignment. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the"},{"name":"remove_submission","description":"Withdraw/clear this account's own submission for an assignment.\n        IRREVERSIBLE and DESTRUCTIVE once dry_run=False -- this discards\n        already-submitt"},{"name":"get_grades","description":"Get this account's grade items for a course, if visible."},{"name":"get_grades_access_info","description":"Check what grade-related permissions this account has in a\n        course -- e.g. whether it can see its own grades vs. (as a\n        teacher/TA) everyone's gra"},{"name":"list_calendar_events","description":"List upcoming calendar events within the next `days_ahead` days."},{"name":"get_calendar_access_info","description":"Check this account's calendar-management permissions -- a\n        student account can typically manage its own personal entries\n        only, not course/group e"},{"name":"create_calendar_event","description":"Create a personal calendar entry. IRREVERSIBLE once dry_run=False.\n        Only personal (\"user\") events are supported -- course/group events\n        are not so"},{"name":"delete_calendar_event","description":"Delete a personal calendar entry this account owns. IRREVERSIBLE\n        once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview t"},{"name":"get_unread_messages","description":"Get this account's unread PLATO notifications."},{"name":"get_unread_notification_count","description":"Get a count of this account's unread notifications (a cheaper\n        check than get_unread_messages when you don't need the content).\n        Note: PLATO has p"},{"name":"list_notices","description":"List announcements posted to a course's Notices board."},{"name":"get_notice_detail","description":"Get the full text of one notice/announcement."},{"name":"list_qna","description":"List questions posted to a course's Q&A board."},{"name":"get_qna_detail","description":"Get one Q&A question's text. Does not include replies -- see issue #23."},{"name":"post_qna_question","description":"Post a new question to a course's Q&A board. IRREVERSIBLE and VISIBLE\n        to the instructor once dry_run=False (posted as private/secret by default).\n\n     "},{"name":"download_course_file","description":"Download a course file (the `fileurl` from get_course_contents).\n\n        Running locally (stdio, e.g. Claude Code/Desktop): saves the file to\n        `save_pat"},{"name":"get_course_completion_status","description":"Get this account's overall course-completion status, if the course\n        has course-level completion criteria configured. Most courses on\n        this platfor"},{"name":"get_activity_completion_status","description":"Get this account's completion status for every activity/module in\n        a course -- richer than get_course_contents's per-module `completed`\n        flag (inc"},{"name":"get_upcoming_action_events","description":"Get Moodle's own \"what needs action soon\" feed -- assignments due,\n        video lectures with a watch deadline, etc. -- sorted by urgency, from\n        now onw"},{"name":"get_courses_by_timeline","description":"List enrolled courses filtered by Moodle's own timeline\n        classification (in-progress/future/past), based on course start/end\n        dates. Unlike list_c"},{"name":"get_grades_overview","description":"Get this account's overall grade for every enrolled course in one\n        call. For the individual grade *items* within one course (e.g. each\n        assignment"},{"name":"list_quizzes","description":"List quizzes across one or more courses."},{"name":"get_quiz_attempts","description":"Get this account's past attempts at one quiz."},{"name":"get_quiz_best_grade","description":"Get this account's best grade on one quiz, if any attempt has\n        been graded."},{"name":"get_quiz_access_information","description":"Check whether this account can currently attempt a quiz, and\n        why not if blocked (e.g. time window, password, previous\n        attempts exhausted). UNVER"},{"name":"get_quiz_required_qtypes","description":"List the question types used in a quiz (e.g. 'multichoice',\n        'truefalse', 'essay') -- useful to know what kind of answers\n        to expect before starti"},{"name":"get_quiz_feedback_for_grade","description":"Get the grade-boundary feedback text configured for a quiz at\n        a given grade (e.g. 'You passed!' / 'Please review chapter 3')."},{"name":"get_quiz_combined_review_options","description":"Check which review details (marks, feedback, right answers) this\n        account is allowed to see for a quiz's attempts."},{"name":"start_quiz_attempt","description":"Start a new attempt at a quiz. IRREVERSIBLE once dry_run=False --\n        consumes one of the quiz's limited attempts. UNVERIFIED against a\n        real quiz --"},{"name":"get_quiz_attempt_data","description":"Get the questions for one page of an in-progress quiz attempt.\n        Each question's `html` is Moodle's own rendered question form --\n        parse it for the"},{"name":"get_quiz_attempt_summary","description":"Get a summary of all questions in an attempt (answered/\n        unanswered), across all pages. UNVERIFIED against a real quiz."},{"name":"get_quiz_attempt_review","description":"Get the grade and per-question review for a finished quiz\n        attempt. UNVERIFIED against a real quiz."},{"name":"save_quiz_attempt_responses","description":"Save in-progress answers WITHOUT finishing the attempt -- can\n        still be changed later. UNVERIFIED against a real quiz.\n\n        Call with dry_run=True (d"},{"name":"process_quiz_attempt","description":"Submit answers for a quiz attempt. IRREVERSIBLE once\n        dry_run=False AND finish_attempt=True -- that is the final,\n        graded submission and cannot be"},{"name":"list_forums","description":"List standard Moodle forums across one or more courses. NOT the\n        same as PLATO's notice/Q&A board (use list_notices/list_qna for\n        that) -- this co"},{"name":"get_forum_discussions","description":"List discussion threads in one standard Moodle forum."},{"name":"get_discussion_posts","description":"Get all posts in one forum discussion thread."},{"name":"add_discussion","description":"Start a new discussion thread in a forum. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the user,\n      "},{"name":"add_discussion_post","description":"Reply to a forum discussion thread. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the user,\n        and "},{"name":"get_course_updates_since","description":"Get what changed in a course since a given time -- configuration,\n        completion, grades, submissions, etc. Only reports modules that\n        implement Mood"},{"name":"get_course_module","description":"Resolve a single course module by its id directly, without\n        fetching and filtering the whole course's contents."},{"name":"search_courses","description":"Search PLATO's entire course catalog by name -- not limited to\n        this account's enrolled courses (use list_courses for that)."},{"name":"get_recent_courses","description":"Get this account's recently-accessed courses, most recent first."},{"name":"get_recent_items","description":"Get this account's recently-accessed course modules (files,\n        assignments, etc.) across all courses, most recent first."},{"name":"get_starred_courses","description":"Get this account's starred/favourited courses, if any."},{"name":"list_video_conferences","description":"List BigBlueButton video-conference activities across one or\n        more courses. Joining a meeting is not supported by this server --\n        this tool is rea"},{"name":"list_lessons","description":"List Lesson activities across one or more courses. Taking a\n        lesson (answering pages) is not supported by this server -- this\n        tool is read-only c"},{"name":"list_workshops","description":"List Workshop (peer assessment) activities across one or more\n        courses. Submitting or assessing work is not supported by this\n        server -- this tool"},{"name":"list_feedbacks","description":"List Feedback (survey) activities across one or more courses.\n        Responding to a survey is not supported by this server -- this\n        tool is read-only c"},{"name":"list_choices","description":"List Choice (single-question poll) activities across one or\n        more courses. Voting is not supported by this server -- this\n        tool is read-only cover"},{"name":"list_surveys","description":"List Survey activities across one or more courses. Answering is\n        not supported by this server -- this tool is read-only coverage\n        only."},{"name":"list_scorms","description":"List SCORM packaged-content activities across one or more\n        courses. Launching/tracking a SCORM attempt is not supported by\n        this server -- this to"},{"name":"list_h5p_activities","description":"List H5P interactive-content activities across one or more\n        courses. Attempt results are not supported by this server -- this\n        tool is read-only c"},{"name":"list_glossaries","description":"List Glossary activities across one or more courses. Reading/\n        adding entries is not supported by this server -- this tool is\n        read-only coverage "},{"name":"list_database_activities","description":"List Database (\"mod_data\") activities across one or more\n        courses. Reading/adding entries is not supported by this server --\n        this tool is read-on"},{"name":"list_wikis","description":"List Wiki activities across one or more courses. Reading/\n        editing pages is not supported by this server -- this tool is\n        read-only coverage only."},{"name":"list_chats","description":"List Chat (real-time chat room) activities across one or more\n        courses. Reading/sending chat messages is not supported by this\n        server -- this too"},{"name":"get_user_profile","description":"Get a user's profile, scoped to a shared course (not a global\n        user search -- see docs/pii_review.md)."},{"name":"get_private_files_info","description":"Get a summary (file/folder count, total size) of this account's\n        Moodle private files area."},{"name":"get_user_preferences","description":"Get this account's Moodle user preferences. Note: most of these\n        are internal UI state (e.g. which dashboard sections are\n        collapsed), not informa"},{"name":"add_private_file","description":"Upload a file to this account's Moodle private files area.\n        IRREVERSIBLE once dry_run=False -- no delete tool exists for\n        private files yet, so th"},{"name":"get_my_course_groups","description":"Get the groups this account belongs to within a course, if any."},{"name":"get_enrolled_users","description":"Get the list of users enrolled in a course (classmates and\n        instructors), with their role. Same data visible in PLATO's own\n        participant list to a"}],"toolCount":67,"toolsHash":"dc7f7dff2acf84ebf10b1f0cb842f18fb87b5a3c510e58b14cbfe9652b832289","serverName":"plato-mcp","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}},{"at":"2026-10-30T04:26:45.891Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":193,"error":null,"detail":{"tools":[{"name":"list_courses","description":"List the courses the logged-in PLATO account is enrolled in."},{"name":"get_course_contents","description":"Get a course's weekly sections, modules, and file links."},{"name":"list_assignments","description":"List assignments across one or more courses, with due dates."},{"name":"get_assignment_detail","description":"Get one assignment's details and this account's submission status."},{"name":"submit_assignment","description":"Submit text and/or file attachments for an assignment. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the"},{"name":"remove_submission","description":"Withdraw/clear this account's own submission for an assignment.\n        IRREVERSIBLE and DESTRUCTIVE once dry_run=False -- this discards\n        already-submitt"},{"name":"get_grades","description":"Get this account's grade items for a course, if visible."},{"name":"get_grades_access_info","description":"Check what grade-related permissions this account has in a\n        course -- e.g. whether it can see its own grades vs. (as a\n        teacher/TA) everyone's gra"},{"name":"list_calendar_events","description":"List upcoming calendar events within the next `days_ahead` days."},{"name":"get_calendar_access_info","description":"Check this account's calendar-management permissions -- a\n        student account can typically manage its own personal entries\n        only, not course/group e"},{"name":"create_calendar_event","description":"Create a personal calendar entry. IRREVERSIBLE once dry_run=False.\n        Only personal (\"user\") events are supported -- course/group events\n        are not so"},{"name":"delete_calendar_event","description":"Delete a personal calendar entry this account owns. IRREVERSIBLE\n        once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview t"},{"name":"get_unread_messages","description":"Get this account's unread PLATO notifications."},{"name":"get_unread_notification_count","description":"Get a count of this account's unread notifications (a cheaper\n        check than get_unread_messages when you don't need the content).\n        Note: PLATO has p"},{"name":"list_notices","description":"List announcements posted to a course's Notices board."},{"name":"get_notice_detail","description":"Get the full text of one notice/announcement."},{"name":"list_qna","description":"List questions posted to a course's Q&A board."},{"name":"get_qna_detail","description":"Get one Q&A question's text. Does not include replies -- see issue #23."},{"name":"post_qna_question","description":"Post a new question to a course's Q&A board. IRREVERSIBLE and VISIBLE\n        to the instructor once dry_run=False (posted as private/secret by default).\n\n     "},{"name":"download_course_file","description":"Download a course file (the `fileurl` from get_course_contents).\n\n        Running locally (stdio, e.g. Claude Code/Desktop): saves the file to\n        `save_pat"},{"name":"get_course_completion_status","description":"Get this account's overall course-completion status, if the course\n        has course-level completion criteria configured. Most courses on\n        this platfor"},{"name":"get_activity_completion_status","description":"Get this account's completion status for every activity/module in\n        a course -- richer than get_course_contents's per-module `completed`\n        flag (inc"},{"name":"get_upcoming_action_events","description":"Get Moodle's own \"what needs action soon\" feed -- assignments due,\n        video lectures with a watch deadline, etc. -- sorted by urgency, from\n        now onw"},{"name":"get_courses_by_timeline","description":"List enrolled courses filtered by Moodle's own timeline\n        classification (in-progress/future/past), based on course start/end\n        dates. Unlike list_c"},{"name":"get_grades_overview","description":"Get this account's overall grade for every enrolled course in one\n        call. For the individual grade *items* within one course (e.g. each\n        assignment"},{"name":"list_quizzes","description":"List quizzes across one or more courses."},{"name":"get_quiz_attempts","description":"Get this account's past attempts at one quiz."},{"name":"get_quiz_best_grade","description":"Get this account's best grade on one quiz, if any attempt has\n        been graded."},{"name":"get_quiz_access_information","description":"Check whether this account can currently attempt a quiz, and\n        why not if blocked (e.g. time window, password, previous\n        attempts exhausted). UNVER"},{"name":"get_quiz_required_qtypes","description":"List the question types used in a quiz (e.g. 'multichoice',\n        'truefalse', 'essay') -- useful to know what kind of answers\n        to expect before starti"},{"name":"get_quiz_feedback_for_grade","description":"Get the grade-boundary feedback text configured for a quiz at\n        a given grade (e.g. 'You passed!' / 'Please review chapter 3')."},{"name":"get_quiz_combined_review_options","description":"Check which review details (marks, feedback, right answers) this\n        account is allowed to see for a quiz's attempts."},{"name":"start_quiz_attempt","description":"Start a new attempt at a quiz. IRREVERSIBLE once dry_run=False --\n        consumes one of the quiz's limited attempts. UNVERIFIED against a\n        real quiz --"},{"name":"get_quiz_attempt_data","description":"Get the questions for one page of an in-progress quiz attempt.\n        Each question's `html` is Moodle's own rendered question form --\n        parse it for the"},{"name":"get_quiz_attempt_summary","description":"Get a summary of all questions in an attempt (answered/\n        unanswered), across all pages. UNVERIFIED against a real quiz."},{"name":"get_quiz_attempt_review","description":"Get the grade and per-question review for a finished quiz\n        attempt. UNVERIFIED against a real quiz."},{"name":"save_quiz_attempt_responses","description":"Save in-progress answers WITHOUT finishing the attempt -- can\n        still be changed later. UNVERIFIED against a real quiz.\n\n        Call with dry_run=True (d"},{"name":"process_quiz_attempt","description":"Submit answers for a quiz attempt. IRREVERSIBLE once\n        dry_run=False AND finish_attempt=True -- that is the final,\n        graded submission and cannot be"},{"name":"list_forums","description":"List standard Moodle forums across one or more courses. NOT the\n        same as PLATO's notice/Q&A board (use list_notices/list_qna for\n        that) -- this co"},{"name":"get_forum_discussions","description":"List discussion threads in one standard Moodle forum."},{"name":"get_discussion_posts","description":"Get all posts in one forum discussion thread."},{"name":"add_discussion","description":"Start a new discussion thread in a forum. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the user,\n      "},{"name":"add_discussion_post","description":"Reply to a forum discussion thread. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the user,\n        and "},{"name":"get_course_updates_since","description":"Get what changed in a course since a given time -- configuration,\n        completion, grades, submissions, etc. Only reports modules that\n        implement Mood"},{"name":"get_course_module","description":"Resolve a single course module by its id directly, without\n        fetching and filtering the whole course's contents."},{"name":"search_courses","description":"Search PLATO's entire course catalog by name -- not limited to\n        this account's enrolled courses (use list_courses for that)."},{"name":"get_recent_courses","description":"Get this account's recently-accessed courses, most recent first."},{"name":"get_recent_items","description":"Get this account's recently-accessed course modules (files,\n        assignments, etc.) across all courses, most recent first."},{"name":"get_starred_courses","description":"Get this account's starred/favourited courses, if any."},{"name":"list_video_conferences","description":"List BigBlueButton video-conference activities across one or\n        more courses. Joining a meeting is not supported by this server --\n        this tool is rea"},{"name":"list_lessons","description":"List Lesson activities across one or more courses. Taking a\n        lesson (answering pages) is not supported by this server -- this\n        tool is read-only c"},{"name":"list_workshops","description":"List Workshop (peer assessment) activities across one or more\n        courses. Submitting or assessing work is not supported by this\n        server -- this tool"},{"name":"list_feedbacks","description":"List Feedback (survey) activities across one or more courses.\n        Responding to a survey is not supported by this server -- this\n        tool is read-only c"},{"name":"list_choices","description":"List Choice (single-question poll) activities across one or\n        more courses. Voting is not supported by this server -- this\n        tool is read-only cover"},{"name":"list_surveys","description":"List Survey activities across one or more courses. Answering is\n        not supported by this server -- this tool is read-only coverage\n        only."},{"name":"list_scorms","description":"List SCORM packaged-content activities across one or more\n        courses. Launching/tracking a SCORM attempt is not supported by\n        this server -- this to"},{"name":"list_h5p_activities","description":"List H5P interactive-content activities across one or more\n        courses. Attempt results are not supported by this server -- this\n        tool is read-only c"},{"name":"list_glossaries","description":"List Glossary activities across one or more courses. Reading/\n        adding entries is not supported by this server -- this tool is\n        read-only coverage "},{"name":"list_database_activities","description":"List Database (\"mod_data\") activities across one or more\n        courses. Reading/adding entries is not supported by this server --\n        this tool is read-on"},{"name":"list_wikis","description":"List Wiki activities across one or more courses. Reading/\n        editing pages is not supported by this server -- this tool is\n        read-only coverage only."},{"name":"list_chats","description":"List Chat (real-time chat room) activities across one or more\n        courses. Reading/sending chat messages is not supported by this\n        server -- this too"},{"name":"get_user_profile","description":"Get a user's profile, scoped to a shared course (not a global\n        user search -- see docs/pii_review.md)."},{"name":"get_private_files_info","description":"Get a summary (file/folder count, total size) of this account's\n        Moodle private files area."},{"name":"get_user_preferences","description":"Get this account's Moodle user preferences. Note: most of these\n        are internal UI state (e.g. which dashboard sections are\n        collapsed), not informa"},{"name":"add_private_file","description":"Upload a file to this account's Moodle private files area.\n        IRREVERSIBLE once dry_run=False -- no delete tool exists for\n        private files yet, so th"},{"name":"get_my_course_groups","description":"Get the groups this account belongs to within a course, if any."},{"name":"get_enrolled_users","description":"Get the list of users enrolled in a course (classmates and\n        instructors), with their role. Same data visible in PLATO's own\n        participant list to a"}],"toolCount":67,"toolsHash":"dc7f7dff2acf84ebf10b1f0cb842f18fb87b5a3c510e58b14cbfe9652b832289","serverName":"plato-mcp","capabilities":["prompts","resources","tools"],"serverVersion":"","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_courses","description":"List the courses the logged-in PLATO account is enrolled in."},{"name":"get_course_contents","description":"Get a course's weekly sections, modules, and file links."},{"name":"list_assignments","description":"List assignments across one or more courses, with due dates."},{"name":"get_assignment_detail","description":"Get one assignment's details and this account's submission status."},{"name":"submit_assignment","description":"Submit text and/or file attachments for an assignment. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the"},{"name":"remove_submission","description":"Withdraw/clear this account's own submission for an assignment.\n        IRREVERSIBLE and DESTRUCTIVE once dry_run=False -- this discards\n        already-submitt"},{"name":"get_grades","description":"Get this account's grade items for a course, if visible."},{"name":"get_grades_access_info","description":"Check what grade-related permissions this account has in a\n        course -- e.g. whether it can see its own grades vs. (as a\n        teacher/TA) everyone's gra"},{"name":"list_calendar_events","description":"List upcoming calendar events within the next `days_ahead` days."},{"name":"get_calendar_access_info","description":"Check this account's calendar-management permissions -- a\n        student account can typically manage its own personal entries\n        only, not course/group e"},{"name":"create_calendar_event","description":"Create a personal calendar entry. IRREVERSIBLE once dry_run=False.\n        Only personal (\"user\") events are supported -- course/group events\n        are not so"},{"name":"delete_calendar_event","description":"Delete a personal calendar entry this account owns. IRREVERSIBLE\n        once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview t"},{"name":"get_unread_messages","description":"Get this account's unread PLATO notifications."},{"name":"get_unread_notification_count","description":"Get a count of this account's unread notifications (a cheaper\n        check than get_unread_messages when you don't need the content).\n        Note: PLATO has p"},{"name":"list_notices","description":"List announcements posted to a course's Notices board."},{"name":"get_notice_detail","description":"Get the full text of one notice/announcement."},{"name":"list_qna","description":"List questions posted to a course's Q&A board."},{"name":"get_qna_detail","description":"Get one Q&A question's text. Does not include replies -- see issue #23."},{"name":"post_qna_question","description":"Post a new question to a course's Q&A board. IRREVERSIBLE and VISIBLE\n        to the instructor once dry_run=False (posted as private/secret by default).\n\n     "},{"name":"download_course_file","description":"Download a course file (the `fileurl` from get_course_contents).\n\n        Running locally (stdio, e.g. Claude Code/Desktop): saves the file to\n        `save_pat"},{"name":"get_course_completion_status","description":"Get this account's overall course-completion status, if the course\n        has course-level completion criteria configured. Most courses on\n        this platfor"},{"name":"get_activity_completion_status","description":"Get this account's completion status for every activity/module in\n        a course -- richer than get_course_contents's per-module `completed`\n        flag (inc"},{"name":"get_upcoming_action_events","description":"Get Moodle's own \"what needs action soon\" feed -- assignments due,\n        video lectures with a watch deadline, etc. -- sorted by urgency, from\n        now onw"},{"name":"get_courses_by_timeline","description":"List enrolled courses filtered by Moodle's own timeline\n        classification (in-progress/future/past), based on course start/end\n        dates. Unlike list_c"},{"name":"get_grades_overview","description":"Get this account's overall grade for every enrolled course in one\n        call. For the individual grade *items* within one course (e.g. each\n        assignment"},{"name":"list_quizzes","description":"List quizzes across one or more courses."},{"name":"get_quiz_attempts","description":"Get this account's past attempts at one quiz."},{"name":"get_quiz_best_grade","description":"Get this account's best grade on one quiz, if any attempt has\n        been graded."},{"name":"get_quiz_access_information","description":"Check whether this account can currently attempt a quiz, and\n        why not if blocked (e.g. time window, password, previous\n        attempts exhausted). UNVER"},{"name":"get_quiz_required_qtypes","description":"List the question types used in a quiz (e.g. 'multichoice',\n        'truefalse', 'essay') -- useful to know what kind of answers\n        to expect before starti"},{"name":"get_quiz_feedback_for_grade","description":"Get the grade-boundary feedback text configured for a quiz at\n        a given grade (e.g. 'You passed!' / 'Please review chapter 3')."},{"name":"get_quiz_combined_review_options","description":"Check which review details (marks, feedback, right answers) this\n        account is allowed to see for a quiz's attempts."},{"name":"start_quiz_attempt","description":"Start a new attempt at a quiz. IRREVERSIBLE once dry_run=False --\n        consumes one of the quiz's limited attempts. UNVERIFIED against a\n        real quiz --"},{"name":"get_quiz_attempt_data","description":"Get the questions for one page of an in-progress quiz attempt.\n        Each question's `html` is Moodle's own rendered question form --\n        parse it for the"},{"name":"get_quiz_attempt_summary","description":"Get a summary of all questions in an attempt (answered/\n        unanswered), across all pages. UNVERIFIED against a real quiz."},{"name":"get_quiz_attempt_review","description":"Get the grade and per-question review for a finished quiz\n        attempt. UNVERIFIED against a real quiz."},{"name":"save_quiz_attempt_responses","description":"Save in-progress answers WITHOUT finishing the attempt -- can\n        still be changed later. UNVERIFIED against a real quiz.\n\n        Call with dry_run=True (d"},{"name":"process_quiz_attempt","description":"Submit answers for a quiz attempt. IRREVERSIBLE once\n        dry_run=False AND finish_attempt=True -- that is the final,\n        graded submission and cannot be"},{"name":"list_forums","description":"List standard Moodle forums across one or more courses. NOT the\n        same as PLATO's notice/Q&A board (use list_notices/list_qna for\n        that) -- this co"},{"name":"get_forum_discussions","description":"List discussion threads in one standard Moodle forum."},{"name":"get_discussion_posts","description":"Get all posts in one forum discussion thread."},{"name":"add_discussion","description":"Start a new discussion thread in a forum. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the user,\n      "},{"name":"add_discussion_post","description":"Reply to a forum discussion thread. IRREVERSIBLE once dry_run=False.\n\n        Call with dry_run=True (default) first, show the preview to the user,\n        and "},{"name":"get_course_updates_since","description":"Get what changed in a course since a given time -- configuration,\n        completion, grades, submissions, etc. Only reports modules that\n        implement Mood"},{"name":"get_course_module","description":"Resolve a single course module by its id directly, without\n        fetching and filtering the whole course's contents."},{"name":"search_courses","description":"Search PLATO's entire course catalog by name -- not limited to\n        this account's enrolled courses (use list_courses for that)."},{"name":"get_recent_courses","description":"Get this account's recently-accessed courses, most recent first."},{"name":"get_recent_items","description":"Get this account's recently-accessed course modules (files,\n        assignments, etc.) across all courses, most recent first."},{"name":"get_starred_courses","description":"Get this account's starred/favourited courses, if any."},{"name":"list_video_conferences","description":"List BigBlueButton video-conference activities across one or\n        more courses. Joining a meeting is not supported by this server --\n        this tool is rea"},{"name":"list_lessons","description":"List Lesson activities across one or more courses. Taking a\n        lesson (answering pages) is not supported by this server -- this\n        tool is read-only c"},{"name":"list_workshops","description":"List Workshop (peer assessment) activities across one or more\n        courses. Submitting or assessing work is not supported by this\n        server -- this tool"},{"name":"list_feedbacks","description":"List Feedback (survey) activities across one or more courses.\n        Responding to a survey is not supported by this server -- this\n        tool is read-only c"},{"name":"list_choices","description":"List Choice (single-question poll) activities across one or\n        more courses. Voting is not supported by this server -- this\n        tool is read-only cover"},{"name":"list_surveys","description":"List Survey activities across one or more courses. Answering is\n        not supported by this server -- this tool is read-only coverage\n        only."},{"name":"list_scorms","description":"List SCORM packaged-content activities across one or more\n        courses. Launching/tracking a SCORM attempt is not supported by\n        this server -- this to"},{"name":"list_h5p_activities","description":"List H5P interactive-content activities across one or more\n        courses. Attempt results are not supported by this server -- this\n        tool is read-only c"},{"name":"list_glossaries","description":"List Glossary activities across one or more courses. Reading/\n        adding entries is not supported by this server -- this tool is\n        read-only coverage "},{"name":"list_database_activities","description":"List Database (\"mod_data\") activities across one or more\n        courses. Reading/adding entries is not supported by this server --\n        this tool is read-on"},{"name":"list_wikis","description":"List Wiki activities across one or more courses. Reading/\n        editing pages is not supported by this server -- this tool is\n        read-only coverage only."},{"name":"list_chats","description":"List Chat (real-time chat room) activities across one or more\n        courses. Reading/sending chat messages is not supported by this\n        server -- this too"},{"name":"get_user_profile","description":"Get a user's profile, scoped to a shared course (not a global\n        user search -- see docs/pii_review.md)."},{"name":"get_private_files_info","description":"Get a summary (file/folder count, total size) of this account's\n        Moodle private files area."},{"name":"get_user_preferences","description":"Get this account's Moodle user preferences. Note: most of these\n        are internal UI state (e.g. which dashboard sections are\n        collapsed), not informa"},{"name":"add_private_file","description":"Upload a file to this account's Moodle private files area.\n        IRREVERSIBLE once dry_run=False -- no delete tool exists for\n        private files yet, so th"},{"name":"get_my_course_groups","description":"Get the groups this account belongs to within a course, if any."},{"name":"get_enrolled_users","description":"Get the list of users enrolled in a course (classmates and\n        instructors), with their role. Same data visible in PLATO's own\n        participant list to a"}],"package":null,"toolSurface":{"id":"ts_byb4kdgd6zf4","endpointId":"ep_df2v2m3t8jem","hash":"dc7f7dff2acf84ebf10b1f0cb842f18fb87b5a3c510e58b14cbfe9652b832289","toolCount":67,"serverName":"plato-mcp","serverVersion":"","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-30T04:26:45.896Z","lastSeenAt":"2026-10-30T11:24:28.264Z","observations":2,"toolNames":["list_courses","get_course_contents","list_assignments","get_assignment_detail","submit_assignment","remove_submission","get_grades","get_grades_access_info","list_calendar_events","get_calendar_access_info","create_calendar_event","delete_calendar_event","get_unread_messages","get_unread_notification_count","list_notices","get_notice_detail","list_qna","get_qna_detail","post_qna_question","download_course_file","get_course_completion_status","get_activity_completion_status","get_upcoming_action_events","get_courses_by_timeline","get_grades_overview","list_quizzes","get_quiz_attempts","get_quiz_best_grade","get_quiz_access_information","get_quiz_required_qtypes","get_quiz_feedback_for_grade","get_quiz_combined_review_options","start_quiz_attempt","get_quiz_attempt_data","get_quiz_attempt_summary","get_quiz_attempt_review","save_quiz_attempt_responses","process_quiz_attempt","list_forums","get_forum_discussions","get_discussion_posts","add_discussion","add_discussion_post","get_course_updates_since","get_course_module","search_courses","get_recent_courses","get_recent_items","get_starred_courses","list_video_conferences","list_lessons","list_workshops","list_feedbacks","list_choices","list_surveys","list_scorms","list_h5p_activities","list_glossaries","list_database_activities","list_wikis","list_chats","get_user_profile","get_private_files_info","get_user_preferences","add_private_file","get_my_course_groups","get_enrolled_users"],"distinctSurfaces":1},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.jin-1119/plato-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.jin-1119%2Fplato-mcp","firstSeenAt":"2026-10-30T03:20:13.090Z","fetchedAt":"2026-10-30T03:20:13.090Z","normalizedAt":"2026-10-30T03:20:13.090Z"}]},"firstSeenAt":"2026-10-30T03:20:13.090Z","updatedAt":"2026-10-30T11:27:55.082Z"}