Moodle Mate is a Python application that fetches notifications from a Moodle instance (e.g. a school or university) and delivers them to a notification platform (e.g. Discord). This allows you to stay up to date with your courses and activities without manually checking your email or Moodle.
Moodle Mate includes an optional AI-powered summarization feature that summarizes notifications and adds a short TL;DR. BYOK (Bring Your Own Key): you can use any AI provider that supports an OpenAI-compatible API. If you have privacy concerns, you can use a locally hosted model (e.g. with Ollama or other tools like LMStudio, vLLM etc. that have OpenAI-compatible APIs).
-
Notification Management
- Automatically fetches and processes notifications from Moodle, and saves current state on shutdown.
- Optional AI-based summarization creates quick TL;DRs for easier review.
- Converts HTML notifications to Markdown for improved readability using turndown-python for notification providers that do not support HTML.
-
Web Dashboard (Optional, currently in beta)
- Monitor system status, logs, and configuration.
- Planned live configuration editing for some settings.
- Send test notifications.
- Protected by optional authentication.
-
Multi-Platform Support
- Discord (via webhooks)
- Pushbullet (send to all your devices)
- Plugin system for custom notification providers
- Modular architecture for easy integration of new platforms
-
AI Integration
- Support for multiple OpenAI-API-compatible providers.
- Configurable models and parameters
- Optional summarization feature
- Python 3.11 or higher
- Internet connection (when your Moodle server or AI provider is not locally hosted)
- Moodle instance with REST API access enabled (this is not enabled by default)
-
Clone the Repository
git clone https://github.com/EvickaStudio/Moodle-Mate.git cd Moodle-Mate -
Install Dependencies
Recommended (uv):
uv sync --extra dev
Optional (Make shortcuts):
make install make run make test make ci-local make help
If you prefer a virtualenv:
python -m venv venv source venv/bin/activate # source venv/bin/activate.fish for fish shell pip install -r requirements.txt
-
Configure the Application
Create a
.envfile in the root directory. You can copy the example:cp example.env .env
Edit
.envwith your settings. Configuration uses environment variables with theMOODLEMATE_prefix.
-
Clone the Repository
git clone https://github.com/EvickaStudio/Moodle-Mate.git cd Moodle-Mate -
Configuration
Create and edit your
.envfile:cp example.env .env # Edit .env with your settings -
Build and Run with Docker
# Build the Docker image docker compose build # Run the container docker compose up -d
-
View Logs
docker compose logs -f
To start Moodle Mate, run:
uv run moodlemateWhen using Docker, the application starts automatically when you run:
docker compose up -dTo stop the application:
docker compose downWhen running, the application will:
- Validate your configuration.
- Start the Web Dashboard if enabled (default: http://localhost:9095).
- Connect to your Moodle instance.
- Continuously monitor for new notifications.
- Process and deliver notifications according to your settings.
Moodle Mate includes a built-in web dashboard for monitoring and configuration.
- URL:
http://127.0.0.1:9095(default) - Features:
- View current status and metrics.
- Trigger test notifications.
- Edit non-sensitive configuration live (Web UI auth required).
Security: MOODLEMATE_WEB__AUTH_SECRET is required when Web UI is enabled. The dashboard always requires login and sets secure session/CSRF cookies.
Colors differ across screenshots because different Termius themes were used.
Versions are slightly mixed up, sorry.
Running as Docker daemon, to see the logs run docker compose logs -f
When running as a standard Python application, logs appear in the terminal where you start the command. For KVM setups running Moodle Mate in the background, Docker is recommended, but you can also use tmux, screen, or tmuxinator.
See the Diataxis-based docs index at docs/README.md.
MoodleMate now supports a plugin system that allows you to easily create and add your own notification providers without modifying the core code.
-
Start from the template at
src/moodlemate/templates/notification_service_template.py. -
Copy it to
src/moodlemate/providers/notification/your_service_name/provider.pyand rename the class (e.g.,YourServiceNameProvider). -
Implement
send(self, subject, message, summary=None) -> boolwith your service’s API. -
Add configuration to your
.envfile:MOODLEMATE_YOUR_SERVICE_NAME__ENABLED=true MOODLEMATE_YOUR_SERVICE_NAME__API_KEY=your_key
-
Optionally verify with
uv run moodlemate --test-notification.
See detailed steps in How to add a custom notification provider.
We welcome contributions! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
Moodle Mate is licensed under the Apache License 2.0. See LICENSE.md for more details.
Created with ❤️ by EvickaStudio