{
 "categories": [
  "education"
 ],
 "deployment": "hybrid",
 "evidence": [
  {
   "date": "2026-09-08",
   "fact": "homepage",
   "note": "Moodle Pty Ltd presents Moodle LMS as a customisable learning management system with integrations, WCAG 2.2 AA accessibility, a Moodle App, MoodleCloud hosting, and certified-partner services. Homepage marketing counters that rendered as 0+ on moodle.com were not copied.",
   "source": "https://moodle.com/solutions/lms/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "deployment",
   "note": "The LMS page documents MoodleCloud as a ready-to-use hosted option and points administrators to Moodle Docs for self-hosted configuration. The download site separately ships server packages and Git installs.",
   "source": "https://moodle.com/solutions/lms/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "platforms",
   "note": "The Moodle App page documents a first-party mobile client for Apple App Store and Google Play, plus the responsive web LMS. Offline access and push notifications are App features, not web-service facts.",
   "source": "https://moodle.com/app/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "license",
   "note": "Moodle developer resources state that the Moodle software package is provided under the GNU GPL: version 2 for Moodle 1.x, version 3 for Moodle 2.x, or any later version. The GPL applies to the Moodle platform core, not automatically to third-party plugins.",
   "source": "https://moodledev.io/general/license",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.api.exists",
   "note": "Moodle Developer Resources (main 5.3, last updated 13 Apr 2026) document a full-featured Web Service framework and External API with endpoints and self-describing classes. Moodle uses these services internally for AJAX and for the official Moodle Mobile App. Per-site API documentation lives at Site administration > Server > Web services > API Documentation.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.api.kinds[0]",
   "note": "Moodle 5.2 stable ships public/webservice/rest/server.php as the REST web-service entry point. The protocol must be enabled; the server is constructed with WEBSERVICE_AUTHMETHOD_PERMANENT_TOKEN.",
   "source": "https://raw.githubusercontent.com/moodle/moodle/MOODLE_502_STABLE/public/webservice/rest/server.php",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.api.kinds[1]",
   "note": "The same Moodle 5.2 stable tree ships public/webservice/soap/server.php as a SOAP web-service entry point. The SOAP protocol must be enabled; authentication is via the same permanent-token method.",
   "source": "https://raw.githubusercontent.com/moodle/moodle/MOODLE_502_STABLE/public/webservice/soap/server.php",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.api.auth[0]",
   "note": "File-handling docs require a valid web-service token for /webservice/upload.php (query parameter token=) and /webservice/pluginfile.php. The REST and SOAP server.php files in MOODLE_502_STABLE state that authentication is done via tokens.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/files",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.api.coverage",
   "note": "External functions declare type read or write, optional capability lists, and optional attachment to MOODLE_OFFICIAL_MOBILE_SERVICE. Administrators choose which functions belong to a service, so the callable surface is a per-site subset rather than every LMS UI action.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/writing-a-service",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.mcp.first_party",
   "note": "Opened Moodle Developer Resources welcome page, LMS product page, and Workplace page. None of those vendor pages declare a Moodle-owned MCP server. Absence is not treated as first_party false.",
   "source": "https://moodledev.io/general/documentation",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.mcp.third_party[0]",
   "note": "Opened the onbirdev/moodle-webservice_mcp repository and README. It is a Moodle webservice_mcp protocol plugin that exposes enabled external functions as MCP tools over JSON-RPC 2.0 with Moodle tokens. GitHub reported not archived; last push 2026-07-23. Moodle Marketplace listed a release about one month before this pass.",
   "source": "https://github.com/onbirdev/moodle-webservice_mcp",
   "tier": "community"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.mcp.third_party[1]",
   "note": "The official MCP registry query for moodle returned an active io.github.csmediapro/moodle-mcp-server-aql listing (latest 0.1.3, updated 2026-09-08) pointing at https://github.com/csmediapro/moodle-mcp-server, plus a com.moodlemcp/moodle remote listing with no repository URL, which is not copied as a third_party entry.",
   "source": "https://registry.modelcontextprotocol.io/v0.1/servers?search=moodle",
   "tier": "scraped"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.mcp.third_party[1].repo",
   "note": "Opened the csmediapro/moodle-mcp-server repository and README. It is a read-only Node MCP server over Moodle web services (MOODLE_URL and MOODLE_TOKEN), listed as io.github.csmediapro/moodle-mcp-server-aql. GitHub reported not archived; last push 2026-09-08.",
   "source": "https://github.com/csmediapro/moodle-mcp-server",
   "tier": "community"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.extensibility.scripting[0]",
   "note": "Moodle documents a wide plugin-type table (activity modules, enrolment, authentication, themes, local plugins, webservice protocols, and others) as the primary extensibility model.",
   "source": "https://moodledev.io/docs/5.3/apis/plugintypes",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.extensibility.scripting[1]",
   "note": "Plugin types include ltisource and ltiservice paths that implement IMS LTI providers and LTI services. Moodle's certified-integrations FAQ also states that some integrations use LTI without shipping PHP code.",
   "source": "https://moodledev.io/docs/5.3/apis/plugintypes",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.extensibility.scripting[2]",
   "note": "Plugins declare external functions in db/services.php and implement them as External API classes, which web-service servers then expose.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/writing-a-service",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.data_access.export[0]",
   "note": "The Backup API documents Moodle 2.0+ course backup plans that write plugin data to XML (backup/moodle2). Restore is referenced as the matching import path; the dedicated Restore API page was not opened in this pass.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/backup",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.data_access.export[1]",
   "note": "Web-service clients download files through /webservice/pluginfile.php (or /tokenpluginfile.php) when the service allows file download.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/files",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.data_access.import[0]",
   "note": "Clients POST files to /webservice/upload.php with a web-service token; uploaded files land in the user draft file area and are then consumed by write functions such as mod_assign_save_submission.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/files",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "modalities.agent_docs.llms_txt",
   "note": "Bounded 2026-09-08 fetches of https://moodle.com/llms.txt, https://moodledev.io/llms.txt and https://moodle.org/llms.txt returned 404. docs.moodle.org/llms.txt returned 403 from Cloudflare.",
   "source": "https://moodle.com/llms.txt",
   "tier": "scraped"
  },
  {
   "date": "2026-09-08",
   "fact": "verdict.scores.api",
   "note": "The web-service surface is documented, token-authenticated, used by the official Moodle App, and supports read and write functions plus file endpoints. Per-site service allowlists, administrator enablement, RPC-style REST, and the lack of a single public OpenAPI catalog keep the score at 7 rather than 8.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "verdict.scores.mcp",
   "note": "Two maintained third-party implementations were opened (a Moodle protocol plugin and a registry-listed read-only Node server). That matches the several-useful-third-party band. Neither is vendor-owned, and one is read-only, so the score is 5 rather than 6.",
   "source": "https://registry.modelcontextprotocol.io/v0.1/servers?search=moodle",
   "tier": "scraped"
  },
  {
   "date": "2026-09-08",
   "fact": "freshness.watch[0].url",
   "note": "Opened as the current Moodle 5.3 External Services overview on Moodle Developer Resources.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "freshness.watch[1].url",
   "note": "Opened as the current web-service file upload and download documentation, including token authentication.",
   "source": "https://moodledev.io/docs/5.3/apis/subsystems/external/files",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "freshness.watch[2].url",
   "note": "Opened the current latest-release download page. It listed Moodle 5.2.2 (8 Aug 2026) and a later 5.2.2+ weekly build.",
   "source": "https://download.moodle.org/releases/latest/",
   "tier": "declared"
  },
  {
   "date": "2026-09-08",
   "fact": "freshness.watch[3].url",
   "note": "Opened the official MCP registry search for moodle and recorded the returned server list.",
   "source": "https://registry.modelcontextprotocol.io/v0.1/servers?search=moodle",
   "tier": "scraped"
  },
  {
   "date": "2026-09-08",
   "fact": "freshness.watch[4].url",
   "note": "Opened as the current Moodle GPL license statement for the platform core.",
   "source": "https://moodledev.io/general/license",
   "tier": "declared"
  }
 ],
 "freshness": {
  "last_verified": "2026-09-08",
  "volatility": "medium",
  "watch": [
   {
    "type": "docs",
    "url": "https://moodledev.io/docs/5.3/apis/subsystems/external/"
   },
   {
    "type": "docs",
    "url": "https://moodledev.io/docs/5.3/apis/subsystems/external/files"
   },
   {
    "type": "changelog",
    "url": "https://download.moodle.org/releases/latest/"
   },
   {
    "type": "registry",
    "url": "https://registry.modelcontextprotocol.io/v0.1/servers?search=moodle"
   },
   {
    "type": "docs",
    "url": "https://moodledev.io/general/license"
   }
  ]
 },
 "homepage": "https://moodle.com/solutions/lms/",
 "id": "moodle-lms",
 "license": "open-source",
 "modalities": {
  "agent_docs": {
   "llms_txt": false
  },
  "api": {
   "auth": [
    "token"
   ],
   "coverage": "partial",
   "docs": "https://moodledev.io/docs/5.3/apis/subsystems/external/",
   "exists": true,
   "kinds": [
    "rest",
    "soap"
   ]
  },
  "cli": {
   "exists": "unknown"
  },
  "computer_use": {
   "issues": [],
   "viability": "unknown"
  },
  "data_access": {
   "export": [
    "moodle2-backup",
    "webservice-files"
   ],
   "import": [
    "webservice-upload"
   ]
  },
  "extensibility": {
   "scripting": [
    "plugins",
    "lti-services",
    "external-functions"
   ],
   "webhooks": "unknown"
  },
  "integrations": {
   "make": "unknown",
   "n8n": "unknown",
   "power_automate": "unknown",
   "zapier": "unknown"
  },
  "mcp": {
   "first_party": "unknown",
   "third_party": [
    {
     "maintained": true,
     "registries": [
      "github"
     ],
     "repo": "https://github.com/onbirdev/moodle-webservice_mcp"
    },
    {
     "maintained": true,
     "registries": [
      "official-mcp-registry",
      "github"
     ],
     "repo": "https://github.com/csmediapro/moodle-mcp-server"
    }
   ],
   "verdict": "unknown"
  },
  "rpa": {
   "drivability": "unknown",
   "notes": "No repeatable UI probe was run. Moodle's web-service REST and SOAP endpoints, token-authenticated file upload and download scripts, plugin types, LTI services, and course backup machinery cover LMS automation without browser control. Pupil and staff data are regulated; browser control is not a substitute for a scoped web-service token on an administrator-enabled service.\n",
   "ui_stack": [
    "web-dom"
   ],
   "vendor_support": []
  },
  "sdk": {
   "exists": "unknown",
   "languages": [],
   "official": "unknown"
  }
 },
 "name": "Moodle LMS",
 "platforms": [
  "web",
  "ios",
  "android"
 ],
 "related": {
  "alternatives": [
   "canvas-lms",
   "itslearning"
  ],
  "our_products": []
 },
 "schema_version": 1,
 "score_version": 1,
 "status": "active",
 "vendor": "Moodle Pty Ltd",
 "verdict": {
  "best_path": "api",
  "scores": {
   "api": 7,
   "cli": null,
   "computer_use": null,
   "integrations": null,
   "mcp": 5,
   "overall": 7,
   "rpa": null
  },
  "summary": "Moodle LMS is automatable today through Moodle's web-service framework. Current developer docs on moodledev.io describe a full External API and protocol endpoints used internally for AJAX and for the official Moodle App. The REST entry point authenticates with a permanent web-service token; SOAP uses the same token method. Administrators enable web services, enable a protocol, define an external service and its functions, then issue a token. Live function documentation is generated per site under Site administration > Server > Web services > API Documentation rather than as one public OpenAPI catalog, so coverage is the subset each site exposes. Functions are typed read or write. Dedicated endpoints upload files to a user draft area and download files with the same token. Moodle LMS is GNU GPL open-source software that can be self-hosted or run on MoodleCloud. Moodle Workplace stays in this family: developer docs address LMS and Workplace together, and no separate Workplace API was opened. Workplace itself is licensed partner software, not GPL. Vendor pages do not settle first-party MCP ownership. Two maintained third-party MCP implementations were opened: a Moodle web-service protocol plugin that exposes enabled external functions as MCP tools, and a read-only Node server listed in the official MCP registry. Zapier, Make, Power Automate, and n8n catalogs were not opened. No official client SDK or general-purpose product CLI was established. This record is not Instructure Canvas and not itslearning. Computer-use viability is unassessed. API scores 7 and is the best path.\n"
 }
}