Install
openclaw skills install moodle-connectorMoodle REST API client, batch downloader, and MCP server for Claude Code integration. SSO-enabled with support for Azure AD, Google, and SAML.
openclaw skills install moodle-connectorEnterprise-ready Moodle REST API client with SSO authentication, batch downloading, and MCP protocol support for Claude Code and OpenCode.
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
Once installed via clawhub install moodle-connector:
cd ./skills/moodle-connector
pip install -r requirements.txt
playwright install chromium
cp config.template.json config.json
# Edit config.json with your Moodle web service token
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
# 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
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
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
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
from moodle_connector import MoodleConnector
from pathlib import Path
connector = 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://...")
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
└── ...
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 exportconfig.json){
"moodle": {
"base_url": "https://mytimes.taylors.edu.my",
"web_service_token": "YOUR_TOKEN_HERE"
},
"cache": {
"api_ttl_seconds": 300
}
}
downloads.json){
"downloads": [
{
"module": "Machine Learning",
"course_id": 44864,
"files": [
{
"name": "Week1.zip",
"url": "https://mytimes.taylors.edu.my/webservice/pluginfile.php/..."
}
]
}
]
}
Tested with:
MOODLE_CRED_PASSWORD is required — no hardcoded defaultsMOODLE_CRED_PASSWORD env var for automationconfig.json with real tokensUse assignments() instead — gets same deadline info.
Run: python moodle_connector.py login for manual token retrieval.
Check network. Increase timeout in code or clear cache: rm -rf cache/
MIT — See LICENSE file for details. You are free to use, modify, and distribute this software.
Contributions welcome! Please:
Jabir Iliyas Suraj-Deen
GitHub: https://github.com/Jabir-Srj/moodle-connector Release: v2.0.0 (March 30, 2026)
✨ Enterprise SSO Support