Moodle Connector
by @jabir-srj
Moodle REST API client, batch downloader, and MCP server for Claude Code integration. SSO-enabled with support for Azure AD, Google, and SAML.
clawhub install moodle-connectorπ About This Skill
name: moodle-connector description: "Moodle REST API client, batch downloader, and MCP server for Claude Code integration. SSO-enabled with support for Azure AD, Google, and SAML." metadata: { "author": "Jabir Iliyas Suraj-Deen", "license": "MIT", "homepage": "https://github.com/Jabir-Srj/moodle-connector", "repository": "https://github.com/Jabir-Srj/moodle-connector.git", "tags": ["moodle", "education", "lms", "api", "batch-download", "mcp", "claude-code", "sso", "azure-ad", "oauth", "saml"] }
Moodle Connector
Enterprise-ready Moodle REST API client with SSO authentication, batch downloading, and MCP protocol support for Claude Code and OpenCode.
Features
Complete Moodle API Access
π Enterprise SSO Support (v2.0.0)
Multiple Integration Modes
python moodle_connector.py coursesfrom moodle_connector import MoodleConnectorGeneric Batch Downloader
Security
Installation
Once installed via clawhub install moodle-connector:
cd ./skills/moodle-connector
pip install -r requirements.txt
playwright install chromium
Quick Start
1. Setup Moodle Token
cp config.template.json config.json
Edit config.json with your Moodle web service token
2. Use CLI
python moodle_connector.py courses # List all courses
python moodle_connector.py grades # Check grades
python moodle_connector.py assignments # View assignments
python moodle_connector.py materials --course-id 44864
python moodle_connector.py download "https://mytimes.taylors.edu.my/..." --output myfile.pdf
python moodle_connector.py summary # Full markdown export
π SSO Authentication (v2.0.0)
Azure AD / Entra ID
# Set environment variables
export MOODLE_SSO_PROVIDER="azure"
export MOODLE_SSO_TENANT_ID="your-tenant-id"
export MOODLE_SSO_CLIENT_ID="your-client-id"
export MOODLE_SSO_CLIENT_SECRET="your-client-secret"Run with SSO
python moodle_connector.py courses
Browser opens automatically for login
Google OAuth
export MOODLE_SSO_PROVIDER="google"
export MOODLE_SSO_CLIENT_ID="your-client-id.apps.googleusercontent.com"
export MOODLE_SSO_CLIENT_SECRET="your-client-secret"python moodle_connector.py courses
SAML Provider
export MOODLE_SSO_PROVIDER="saml"
export MOODLE_SSO_IDP_URL="https://your-idp.example.com"
export MOODLE_SSO_ENTITY_ID="your-moodle-entity-id"python moodle_connector.py courses
Headless/CI-CD Deployment
Use Tampermonkey helper script for automated workflows:
export MOODLE_HEADLESS=true
export MOODLE_SSO_PROVIDER="azure"
Token is saved to config.json automatically
Run in CI/CD
python moodle_connector.py summary > report.md
3. Use Python Library
from moodle_connector import MoodleConnector
from pathlib import Pathconnector = MoodleConnector(
config_path=Path('config.json'),
password='encryption-password'
)
courses = connector.courses()
grades = connector.grades()
assignments = connector.assignments()
materials = connector.materials()
deadlines = connector.deadlines()
announcements = connector.announcements()
content = connector.summary()
Download with caching
file_content = connector.download("https://...")
4. Batch Download (Any Module)
cp downloads.example.json downloads.json
Edit downloads.json to add modules and file URLs
python batch_downloader.py
Output Structure:
downloads/
βββ Your_Module_Name_1/
β βββ file1.pdf
β βββ file2.zip
β βββ ...
βββ Your_Module_Name_2/
βββ lecture.pdf
βββ ...
MCP Integration (Claude Code / OpenCode)
REQUIRED: Set MOODLE_CRED_PASSWORD environment variable before starting Claude Code.
Add to your claude_desktop_config.json:
{
"mcpServers": {
"moodle-connector": {
"command": "python",
"args": ["./skills/moodle-connector/mcp_server.py"],
"env": {
"MOODLE_CRED_PASSWORD": "your-encryption-password"
}
}
}
}
Important: Replace your-encryption-password with your actual encryption password used in config.json.
Restart Claude Code. All 8 Moodle functions are now available as native MCP tools:
courses() β List enrolled coursesgrades() β Get gradesassignments() β Get assignmentsmaterials() β Get course materialsdeadlines() β Get upcoming deadlinesannouncements() β Get course newsdownload(url, output?) β Download filessummary() β Get complete data exportConfiguration
Moodle Token (config.json)
{
"moodle": {
"base_url": "https://mytimes.taylors.edu.my",
"web_service_token": "YOUR_TOKEN_HERE"
},
"cache": {
"api_ttl_seconds": 300
}
}
Batch Downloader (downloads.json)
{
"downloads": [
{
"module": "Machine Learning",
"course_id": 44864,
"files": [
{
"name": "Week1.zip",
"url": "https://mytimes.taylors.edu.my/webservice/pluginfile.php/..."
}
]
}
]
}
Requirements
Supported Moodle Instances
Tested with:
Security Notes
MOODLE_CRED_PASSWORD is required β no hardcoded defaultsMOODLE_CRED_PASSWORD env var for automationconfig.json with real tokensTroubleshooting
"Invalid parameter value detected" for calendar API
Useassignments() instead β gets same deadline info.Browser MFA not triggering
Run:python moodle_connector.py login for manual token retrieval.File download stuck
Check network. Increase timeout in code or clear cache:rm -rf cache/License
MIT β See LICENSE file for details. You are free to use, modify, and distribute this software.
Contributing
Contributions welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Submit a pull request 4. Agree to license your work under GPLv3
Author
Jabir Iliyas Suraj-Deen
GitHub: https://github.com/Jabir-Srj/moodle-connector Release: v2.0.0 (March 30, 2026)
What's New in v2.0.0
β¨ Enterprise SSO Support
π‘ Examples
1. Setup Moodle Token
cp config.template.json config.json
Edit config.json with your Moodle web service token
2. Use CLI
python moodle_connector.py courses # List all courses
python moodle_connector.py grades # Check grades
python moodle_connector.py assignments # View assignments
python moodle_connector.py materials --course-id 44864
python moodle_connector.py download "https://mytimes.taylors.edu.my/..." --output myfile.pdf
python moodle_connector.py summary # Full markdown export
βοΈ Configuration
Moodle Token (config.json)
{
"moodle": {
"base_url": "https://mytimes.taylors.edu.my",
"web_service_token": "YOUR_TOKEN_HERE"
},
"cache": {
"api_ttl_seconds": 300
}
}
Batch Downloader (downloads.json)
{
"downloads": [
{
"module": "Machine Learning",
"course_id": 44864,
"files": [
{
"name": "Week1.zip",
"url": "https://mytimes.taylors.edu.my/webservice/pluginfile.php/..."
}
]
}
]
}
π Tips & Best Practices
"Invalid parameter value detected" for calendar API
Useassignments() instead β gets same deadline info.Browser MFA not triggering
Run:python moodle_connector.py login for manual token retrieval.File download stuck
Check network. Increase timeout in code or clear cache:rm -rf cache/