Home
Softono

Claude Moodle Dev

Open source MIT Python
20
Stars
1
Forks
0
Issues
2
Watchers
3 months
Last Commit

 About Claude Moodle Dev

Moodle development toolkit for AI coding assistants. Skills for XMLDB, Hooks API, PHPUnit, Behat, AMD, privacy/GDPR, security, accessibility. Native Claude Code plugin + adapters.

Platforms

Web Self-hosted

Languages

Python

Links

Need Help Installing Claude Moodle Dev?

We provide expert installation service for this software. Our team will install, configure, and secure Claude Moodle Dev on your server. plans start at just $30.

Claude Moodle Dev

View on GitHub

moodle-dev

The most complete Moodle development toolkit for AI coding assistants β€” skills, slash commands, and subagents that turn your assistant into a Moodle expert. Native plugin for Claude Code; ships with adapters for Cursor, GitHub Copilot, Aider, Continue, and a paste-anywhere bundle.

License: MIT Version Claude Code Plugin Cursor Copilot Aider Continue Moodle 4.x MCP companion PRs Welcome

Scaffolds plugins, writes XMLDB upgrades, audits privacy/security, generates PHPUnit + Behat tests, builds AMD modules, reviews PRs β€” all following official Moodle coding standards (PSR-4, frankenstyle, MOODLE_INTERNAL, GPL headers, get_string, $DB).

πŸ”Œ Companion MCP server: moodle-mcp β€” live moodledev.io documentation search inside Claude Desktop / Code, Cursor, Continue, Cline. pipx install moodle-mcp.


Why this plugin

Claude already knows PHP. It does not know:

  • Moodle's frankenstyle conventions (local_<name>, mod_<name>, block_<name>, ...)
  • XMLDB editor workflow + upgrade_plugin_savepoint rules
  • Privacy API contracts (null_provider vs request\plugin\provider)
  • Capability + sesskey + require_login security pattern
  • Moodle 4.4+ Hooks API vs legacy lib.php callbacks
  • pluginfile.php file-serving callback
  • Behat + PHPUnit Moodle harness (resetAfterTest, generators, tags)
  • AMD/RequireJS + grunt build
  • Mobile app remote templates + get_remote_addons

This plugin teaches Claude all of it. Auto-activates when Claude detects Moodle work.


Install

Claude Code (native plugin)

/plugin marketplace add https://github.com/SaadRahman01/claude-moodle-dev
/plugin install moodle-dev@moodle-dev

(If [email protected] SSH auth fails, use the full https:// URL as shown above.)

Local dev: /plugin marketplace add /absolute/path/to/claude-moodle-dev. Verify: /plugin list.

One-liner installer (any non-Claude assistant)

./install.sh <cursor|copilot|aider|continue|generic> [--dest <path>]

Defaults to current directory. Or copy manually as below.

Cursor

Copy adapters/cursor/.cursor/ into your project (or ~/.cursor/ for global use). Each skill becomes an on-demand rule; agents and commands surface via @<name> mentions in chat.

GitHub Copilot

Copy adapters/copilot/.github/ into your repo. copilot-instructions.md is applied to every chat in the repo; per-skill chatmodes appear in the chat-mode picker.

Aider

Drop adapters/aider/CONVENTIONS.md into your project root and add it to .aider.conf.yml:

read:
  - CONVENTIONS.md

Load individual skills on demand with /read-only adapters/aider/skills/<name>.md.

Continue.dev

Copy adapters/continue/ into ~/.continue/ (merge with existing config.yaml). Skills load as rules; commands appear as slash prompts.

Any other assistant

Paste relevant sections from adapters/generic/PROMPTS.md β€” it's one self-contained markdown file with every skill, agent, and command. Works with anything that takes a system prompt.


Companion MCP server: live Moodle docs

moodle-mcp is a separate Model Context Protocol server that gives any MCP-capable client (Claude Desktop / Code, Cursor, Continue, Cline, Windsurf) live access to the canonical Moodle developer documentation. The skills here teach conventions; the MCP server provides authoritative lookups.

What it adds

Tool What it returns
search_moodle_docs(query, limit, offset) Top hits on moodledev.io with title, URL, headings, excerpt. Synonym expansion (capβ†’capability, wsβ†’webservice, hook↔listener), quoted-phrase boost, BM25 scoring, pagination.
fetch_moodle_page(url) Full body + headings for one page β€” follow-up after a search.
get_hooks_api_listeners() Core Hooks API index + detected hook classes.
get_capability_docs(component?) Access API + RISK_* quick-reference; optional component scope.
lookup_db_xmldb(query) XMLDB / schema / upgrade.php patterns.
list_plugin_types() Every Moodle plugin type with one-line hint + docs URL.
get_version_info() Current Moodle versions parsed from /general/releases.
search_tracker(query, limit) Issue search against tracker.moodle.org (Jira).

Plus MCP resources (moodle://docs/apis/...) and prompts (moodle-plugin-skeleton, moodle-capability-review, moodle-hooks-migration).

No API keys. Sitemap + disk cache + conditional GET. Pairs cleanly with this plugin.

Install (Claude Code)

Auto-wired when installing this plugin via marketplace. Requires uv on PATH:

brew install uv      # or: pip install uv

The plugin's mcpServers entry runs uvx --from git+https://github.com/SaadRahman01/moodle-mcp moodle-mcp on demand β€” no manual pipx install needed.

Manual install (any client):

pipx install moodle-mcp
claude mcp add moodle moodle-mcp

Other clients: see moodle-mcp README.


What's inside

Skills (auto-activate)

Skill Triggers on
moodle-plugin-development Creating/modifying any plugin (all types)
moodle-phpunit-testing Writing/running PHPUnit tests
moodle-behat-testing Writing/running Behat acceptance tests
moodle-amd-javascript AMD modules, ES6, grunt build
moodle-web-services REST/AJAX/external functions, tokens
moodle-security-audit Security review, capability/sesskey audit
moodle-privacy-gdpr Privacy provider, GDPR compliance
moodle-performance MUC caching, query tuning, ad-hoc tasks
moodle-accessibility WCAG 2.1 AA, ARIA, screen reader checks
moodle-theme-development Boost child themes, SCSS, layouts
moodle-upgrade-migration Cross-version upgrades, deprecations
moodle-mobile-app Mobile app remote templates, addons
moodle-hooks-api 4.4+ Hooks API: authoring, listening, migrating magic callbacks

Slash commands

Command What it does
/moodle-new-plugin Scaffold a new plugin (asks type + name)
/moodle-bump-version Bump version.php + add upgrade step
/moodle-privacy-audit Check privacy provider correctness
/moodle-security-review Run security checklist on a file/plugin
/moodle-string-check Find hard-coded English needing get_string
/moodle-codestyle Run phpcs with Moodle ruleset
/moodle-mustache-lint Lint Mustache templates: a11y, security, hard-coded strings
/moodle-capability-audit Cross-check db/access.php against runtime has_capability use

Subagents

Agent Use case
moodle-reviewer Deep PR review against Moodle coding standards
moodle-scaffolder Generates a plugin skeleton from a brief

Example: from prompt to plugin

You:

Build a local_attendance_export plugin that lets teachers export per-course attendance as CSV. Needs a capability, a settings page, and a CLI script.

Claude (with this plugin loaded) generates:

local/attendance_export/
β”œβ”€β”€ version.php                            # 2026050200, requires 2024042200
β”œβ”€β”€ settings.php                           # admin_setting_configtext for default delimiter
β”œβ”€β”€ lib.php                                # local_attendance_export_extend_navigation()
β”œβ”€β”€ cli/export.php                         # require($CFG->libdir . '/clilib.php'); cli params
β”œβ”€β”€ classes/
β”‚   β”œβ”€β”€ exporter.php                       # business logic, uses $DB
β”‚   β”œβ”€β”€ output/renderer.php
β”‚   └── privacy/provider.php               # null_provider (no user data stored)
β”œβ”€β”€ db/
β”‚   β”œβ”€β”€ access.php                         # local/attendance_export:export
β”‚   └── install.xml                        # (empty β€” no tables)
β”œβ”€β”€ lang/en/local_attendance_export.php    # pluginname, capability, settings strings
└── tests/exporter_test.php                # PHPUnit, resetAfterTest, generator

Every file follows Moodle conventions. require_capability + require_sesskey wired. PHPUnit test uses $this->getDataGenerator(). Privacy provider declared. version.php bumped correctly.


Example prompts

See EXAMPLES.md for 30+ prompts covering scaffolding, upgrades, testing, security audits, performance tuning, theme work, and mobile app integration.


Comparison

Vanilla Claude + moodle-dev
Knows frankenstyle naming partial yes
Bumps version.php correctly no yes
Adds upgrade_plugin_savepoint no yes
Writes privacy provider rarely always
Adds require_sesskey on POST no yes
Uses $DB not raw SQL partial yes
Uses get_string() not English literals no yes
Generates passing PHPUnit + Behat no yes
Knows Moodle 4.4 Hooks API no yes
Generates pluginfile.php callback no yes
Mobile app remote templates no yes

Repository layout

.claude-plugin/         # Claude Code plugin manifest
skills/                 # canonical skills (Claude reads these directly)
agents/                 # canonical subagents
commands/               # canonical slash commands

adapters/               # generated per-assistant β€” DO NOT hand-edit
  cursor/.cursor/rules/*.mdc
  copilot/.github/copilot-instructions.md + chatmodes/*.chatmode.md
  aider/CONVENTIONS.md + skills/ + commands/
  continue/config.yaml + rules/ + prompts/
  generic/PROMPTS.md    # paste-anywhere single-file bundle

scripts/build-adapters.py   # regenerates adapters/ from canonical files
install.sh                  # one-liner adapter installer for non-Claude assistants
tests/run.sh                # structural test harness (run before commit)
docs/ADAPTER_AUTHORING.md   # how to add a new assistant
.githooks/pre-commit        # phpcs + PHPUnit + version.php monotonicity (install: git config core.hooksPath .githooks)
.github/workflows/lint.yml     # CI: JSON, frontmatter, adapter sync, links, spellcheck, actionlint
.github/workflows/release.yml  # tag-driven release: bundle + changelog extraction + GH release
.github/CODEOWNERS          # auto-review routing
.github/dependabot.yml      # weekly GitHub Actions updates
SECURITY.md                 # vulnerability disclosure policy

Editing workflow

  1. Edit canonical files under skills/, agents/, or commands/.
  2. Run python3 scripts/build-adapters.py to regenerate adapters.
  3. Commit both. CI fails if adapters/ drifts from canonical source.

Compatibility

Moodle Status
5.2 supported (PHP 8.3 min, /public doc-root, React core, Oracle dropped β€” releases 2026-04-20)
5.1 supported (PHP 8.2 min, /public doc-root introduced, Routing Engine)
5.0 supported
4.5 supported (LTS)
4.4 supported (Hooks API)
4.3 supported (legacy callbacks)
4.2 supported (core_external namespace)
≀ 4.1 best-effort (older external_api)

PHP support: 8.1+ for Moodle 4.x, 8.2+ for 5.0/5.1, 8.3+ for 5.2. PHP 8.4 tested on 5.1+. Some skills note Moodle-version-specific differences.


Roadmap

  • moodle-question-bank skill (qtype/qbank deeper coverage)
  • moodle-h5p skill
  • moodle-lti-tool skill (LTI 1.3 tool/provider)
  • moodle-analytics skill (analytics models)
  • moodle-cli-script slash command
  • moodle-translation-export slash command
  • MCP server wrapping moodledev.io docs search
  • MCP server for live Moodle dev instance (XMLDB editor, purge caches)

Vote / request: open an issue.


Contributing

PRs welcome β€” see CONTRIBUTING.md. Quick path:

  1. Fork
  2. Add a skill: skills/<name>/SKILL.md with name + description frontmatter
  3. Add a command: commands/<name>.md with frontmatter
  4. Add an agent: agents/<name>.md with frontmatter
  5. PR β€” CI lints JSON + frontmatter automatically

License

MIT β€” see LICENSE.

Code Claude generates with these skills should ship as GPL-3.0-or-later to be Moodle plugin directory compatible.


Credits

Built by Saad Rahman. Powered by Claude Code and the Moodle Developer Documentation.

If this saves you time, ⭐ the repo β€” helps others find it.