Moodle Activity Connector
Connects to a Moodle instance via its REST web services to retrieve active assignments, quizzes, and other course activities, including course names, deadlines, descriptions, links, enrolled courses, course contents, assignment submission status, and quiz access/attempt information. Supports an optional separate Moodle exam instance.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Moodle Activity Connector
A read-only Moodle connector for ChatGPT and other MCP clients, with an optional daily email digest. It finds active assignments, quizzes and other activities that Moodle exposes, with course names, deadlines, descriptions and links. Each person runs their own copy and signs in using a Moodle security key or a supported browser-based mobile sign-in.
This project is independent of Moodle, OpenAI and TU Darmstadt. See the publication plan for what a hosted directory plugin would require.
1. Get authorized Moodle access
Security key: Sign in to your school's Moodle and check Preferences → Security keys. If you don't have a key for an appropriate web service, ask your Moodle administrator for a REST token with the read permissions below. Keep your token out of chats, command-line arguments and shared files.
The Moodle web service guide explains how administrators configure REST services and issue tokens. If support asks which functions are needed, send this list:
core_webservice_get_site_infocore_calendar_get_action_events_by_timesortcore_enrol_get_users_coursescore_course_get_contentsmod_assign_get_submission_statusmod_quiz_get_quiz_access_informationmod_quiz_get_user_attempts
TU Darmstadt runs Moodle Exam separately. For coverage on any separate exam instance, configure both MOODLE_EXAM_URL and an authorized MOODLE_EXAM_TOKEN. Leave them blank if you do not have access. The connector does not read external registration systems or exam questions.
Related MCP server: Moodle Study MCP
2. Preview what it finds
With Node.js 22 or later, open a terminal in the cloned or extracted folder:
npm ci
umask 077
cp -n .env.example .env
chmod 600 .envOpen .env locally in your text editor and set MOODLE_URL to your Moodle home URL and, if you have a security key, set MOODLE_TOKEN. Include the installation path if Moodle lives in a subdirectory. For TU Darmstadt, use https://moodle.tu-darmstadt.de/; if authorized separately, the exam URL is https://moodle-exam.tu-darmstadt.de/.
Browser sign-in instead: If your institution allows browser-based Moodle mobile login, leave MOODLE_TOKEN blank. With Google Chrome installed, run:
npm run loginSign in to your institution in the temporary Chrome window. The CLI checks read access and saves the web service token to your local .env file. It does not take your password, read browser cookies, or use an existing Chrome profile. The window closes after sign-in. Repeat the command if the token expires. If the site uses a forced app callback or doesn't support this flow, use an authorized security key or ask your institution for access. If you have a separate exam URL, the equivalent command is npm run login -- --exam.
Check coverage with:
npm run digest -- --previewCompare the preview with your Moodle Dashboard and course pages. The preview does not send mail. If you see invalidtoken, verify the token and its site with support. If you see accessexception for a specific function, check whether your service includes that function. A partial check identifies coverage issues in the result.
3. Connect to ChatGPT
ChatGPT on the web: Use an OpenAI Secure MCP Tunnel with its local stdio profile. Set the MCP command to the absolute path to this folder's start-mcp.sh. The launcher expects node on the tunnel client's PATH. The guide explains creating the tunnel, granting access, and running the tunnel client. Then follow Add custom MCP server: open ChatGPT Plugins, add a custom MCP server, choose Tunnel, and select your tunnel. Name it Moodle Activity Connector, install it, and select it in a Work chat. This single-account server relies on tunnel access controls; use a private tunnel with access limited to you and do not share the plugin or expose it through a public URL. The local machine and tunnel client must be running for the web plugin to work. Availability depends on your workspace permissions and Platform tunnel access.
ChatGPT desktop with local MCP: In Settings → MCP servers → Add server, choose STDIO, use the absolute path to start-mcp.sh as the command, and restart as prompted. If the app can't find Node, set the command to the absolute path printed by command -v node, and pass --env-file=/absolute/path/to/.env and /absolute/path/to/server.mjs as two arguments. See ChatGPT Learn: Model Context Protocol.
Try: “Use Moodle Activity Connector to list my open activities, sorted by deadline. Show the course, what I need to do, and the link. Fetch the next page if needed and tell me if any sources were unavailable.”
4. Enable the daily email
Fill in the SMTP fields in .env with your provider's settings and set MAIL_TO to your own email address. Run this once when you're ready to receive the digest:
npm run digest -- --sendOnce that works, schedule this command daily in this folder using a local scheduler, such as a Codex automation. The digest uses Europe/Berlin unless you change DIGEST_TIMEZONE. It does not send on days when there are no active activities. It labels partial results in the subject and uses a local receipt to avoid another send that day. If the process was interrupted during delivery, check your inbox before clearing that day's receipt in .digest-state/ and retrying. Keep the scheduler's machine available at the scheduled time. ChatGPT does not have to be open to use the email runner independently of the connector.
Coverage
The connector can only report work Moodle exposes to the configured account and enabled API functions. It uses Moodle's actionable Timeline for dated work and checks certain activities outside Timeline for unfinished work. It may miss work with no Timeline action, no useful completion status, a restricted exam window, or dates only announced in a PDF, message, calendar-only event, or a different service. Some activities genuinely have no Moodle deadline; the digest says so instead of guessing. Use your official course and exam pages for authoritative dates.
Run npm test for the fixture-based and MCP protocol checks. No live student data is used in the tests.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only access to Epivo's live course catalogue for AI agents.
LearnWorlds MCP server for ChatGPT, Claude and any AI agent: list users, list course learners, enroll users, unenroll users, update tags, send message, suspend user and grade assessment in your own LearnWorlds account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to LearnWorlds yourself; Cotlet does not store your password and you need no LearnWorlds API key. About the official LearnWorlds API: LearnWorlds has a REST API (v2) for courses, users, bundles, subscriptions, promotions, payments and certifications, but it comes with the Learning Center plan and higher, and you need your own code to use it (checked 5 Nov 2026). LearnWorlds has no official MCP server. Setup and FAQ: https://cotlet.dev/integrations/learnworlds-api-mcp-server
iSpring Learn (iSpring LMS) MCP server for ChatGPT, Claude and any AI agent: enroll users in courses, list enrollments, get learner progress report, cancel enrollment, reset enrollment progress, add users by email, deactivate users and list courses in your own iSpring Learn (iSpring LMS) account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to iSpring Learn (iSpring LMS) yourself; Cotlet does not store your password and you need no iSpring Learn (iSpring LMS) API key. About the official iSpring Learn (iSpring LMS) API: iSpring Learn has a REST API, but only with the Business subscription, and no official MCP server (checked 20 Oct 2026). The API covers users, departments, courses, enrollments and results, so an agent needs custom code and a token; the Zapier app covers users, departments and enrollments but has no progress or report actions. Setup and FAQ: https://cotlet.dev/integrations/ispring-api-mcp-server
Absorb LMS MCP server for ChatGPT, Claude and any AI agent: list users, list course enrollments, list overdue learners, approve enrollment request, enroll users in a course, message learners, create user and deactivate user in your own Absorb LMS account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Absorb LMS yourself; Cotlet does not store your password and you need no Absorb LMS API key. About the official Absorb LMS API: Absorb LMS has an Integration API, a REST API with JSON for learners, courses, departments and grades, but it needs a private key tied to your portal that your Absorb account team provides, and your own code (checked 20 Oct 2026). Absorb's Aura MCP for Claude and ChatGPT is planned for 27 Oct 2026 and is read and answer only. Setup and FAQ: https://cotlet.dev/integrations/absorb-lms-api-mcp-server
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with Moodle via web services, allowing tasks like listing courses, assignments, events, and downloading files.1052 PyPI4MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to read your Moodle courses, list materials, quizzes, and search content to plan exam preparation through natural language.1-
- AlicenseNot gradedqualityBmaintenanceEnables LLM agents and automation tools to interact with Moodle through a permission-checked MCP endpoint, covering courses, activities, question banks, enrolments, and administrative operations via 240 external functions.4GPL 3.0
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query and manage Moodle LMS data, including assignment deadlines, unread messages, unfinished quizzes, and enrolled courses, using natural language via OpenAI or local LLMs.-