Moodle plugin · Teams and Copilot · ChatGPT · Claude

Build your Moodle courses, now inside Teams

Moodle is the most widely used distance-learning platform: universities, schools, healthcare organisations and training providers all run on it.

MCPCA connects Moodle to AI assistants: from existing material or from scratch, describe a page, a quiz or a whole course, typed or spoken, and find it ready on the platform, without Moodle's editor and with nothing to install. Students, in turn, query their own courses for clarification and revision.

Teams · Copilot · ChatGPT · Claude the assistants already in use
MCPCA a plugin inside Moodle
Your Moodle courses, materials, assessments

Everything inside your organisation's own infrastructure

Everyone signs in with their own institutional account and acts only within the permissions Moodle grants them.

Moodle Course Assistant · Teams

Turn these notes into a page in section 3 of Clinical Nursing, with a manual completion tick.

get_my_coursescreate_page
Page created in section 3: “Safe medication administration: the seven rights”.

I laid the text out like this:

  • the seven rights as a numbered list
  • a table with dosage form and route of administration
  • a pointer to the ward procedure at the end
Manual completion tick enabled. Shall I add a five-question self-assessment quiz?

Yes, but keep it hidden until I have reviewed it.

Creating the quiz…

In brief

What it is, without the jargon

AI assistants such as Microsoft Copilot, ChatGPT and Claude can hold a conversation, but they know nothing about the content of your organisation's courses and cannot act on it. MCPCA is the missing link.

A plugin for Moodle

Moodle is the open source platform behind a large share of online training, in Italy and worldwide: courses, materials, assessments and activity tracking. MCPCA installs inside it like any other component: no extra servers, no external services.

It speaks the language of AI assistants

It uses MCP (Model Context Protocol), an open standard adopted by AI assistants and agents such as Microsoft Copilot, ChatGPT and Claude. The assistant can therefore read and write in the courses published on Moodle for which the signed-in user holds the relevant permissions, and only with that user's explicit approval.

Under Moodle's permissions

Each person signs in with their own institutional account. The plugin performs only the operations that person could perform through Moodle's web interface: a teacher creates and edits in the courses they run, a learner consults the ones they are enrolled in.

Four terms you will come across

Moodle
The most widely used open source e-learning platform, run by universities, schools, healthcare organisations and training providers. If your organisation has a training portal, a distance-learning platform or an e-learning portal, it is almost certainly built on Moodle.
MCP (Model Context Protocol)
An open standard through which an AI assistant (or agent) asks an application “what can you do?” and then asks it to do those things. It is the same technology Copilot, ChatGPT and Claude use to connect to SharePoint, Jira or Google Drive.
Copilot Studio
The Microsoft tool used to build an assistant and publish it in Teams and in Microsoft 365 Copilot. It is included in many licences already held by universities, schools and companies.
Entra ID
The Microsoft identity service through which staff and learners already sign in to Teams and email. MCPCA uses it to recognise who is in the conversation.

Where it fits

Anywhere training happens at a distance

The plugin knows nothing about your sector: it knows Moodle. MCPCA grew out of a university teaching need, but the same tools apply wherever teaching content has to be produced and maintained online.

Universities and higher technical institutes

Degree programmes, labs, specialisation courses. Materials to refresh every academic year, mid-term and final exams to renew for every session, different for every student.

Schools

Virtual classrooms, remedial work, homework and tests. The teacher describes the lesson and finds it published, without working through the platform's configuration screens.

Healthcare organisations, public and private

Staff training, procedures and protocols, continuing medical education. Completion tracking and assessments that differ for every participant meet the requirements of this setting directly.

Accredited training providers

Certified courses and asynchronous distance learning, where every module has to be documented, passed and recorded. Building and replicating each run becomes a matter of minutes.

Companies

Onboarding, workplace safety, updates on products and procedures. Whoever writes the content is usually the person who does the job, not an expert in the platform.

Public bodies and professional associations

Mandatory training and continuing professional development, with the need to show who took what, and when.

MOOCs and lifelong learning

Open courses with hundreds of participants and lifelong learning pathways, where nobody can follow each learner individually: the materials have to explain themselves, the self-assessments have to mark themselves, and the whole design has to be reused for the next run, not rebuilt.

In every one of these settings the requirement is the same: a Moodle instance reachable over HTTPS and an AI assistant. Nothing else changes.

Use cases

What changes, and for whom

One assistant, four ways of using it. The plugin applies each person's role: those who may write, write; those who may only read, read.

Teachers and trainers

What sets MCPCA apart: not merely consulting Moodle, but building and maintaining the course through conversation.

A whole course, from scratch

“Set up the ward safety course: eight sections, one per module, each with an introductory page and a self-assessment quiz.” The structure comes out of a single request, starting from an empty course; you then refine it section by section.

On a course that already exists

“Add a page on pain assessment scales, with a diagram, to section 4 and move the quiz to the end.” You work on what is already there, without redoing anything.

Well-formatted pages, not pasted text

“Turn these notes into a page in section 3.” The page comes out laid out with the platform's styles: paragraphs and subsections, lists, tables, formatted code, links, images and diagrams; longer lessons open with a clickable index. If requested, completion tracking is already on.

Quizzes in minutes

“Create 10 multiple-choice questions on the page ‘The stages of labour’, with feedback for every answer.” Questions in the bank, quiz in the course, pass mark set.

A different paper for every participant

“40 questions in the bank and a test that draws 10 of them at random.” Everyone gets a different combination and marking is automatic: the standard arrangement for an exam or an end-of-module test.

Automatically marked questions

Multiple choice, short answer, numerical with a tolerance (a drug dose calculation, for instance), Cloze with answers embedded in the text. Plus manually marked essays and descriptive blocks.

Materials in the right place

“Upload these slides to section 2 and have them open in a new window.” Files, labels, new or renamed sections, visibility.

Review and correction

“Read me the questions in the ‘Module 3’ category and fix the third one.” The question bank can be consulted and edited through conversation, with no menu hunting.

Features

Available today

Everything below is implemented and proven in the field: the course described further down was built with these tools. Features still in development are listed in the next section.

Pages and labels

  • Creation and editing
  • Text in Markdown or HTML
  • Headings, tables, code, images, diagrams
  • Completion tracking

Sections and structure

  • A course's full structure in a single request
  • New sections, appended or inserted
  • Renaming, visibility, ordering, deletion

Files and resources

  • Uploading files into the course
  • Choice of how the file opens
  • Reading existing files

Quizzes and assessments

  • Full creation and editing
  • Question behaviour, navigation, grading
  • Maximum grade, pass mark, dates
  • Internal sections with independent shuffling

Six question types

  • Multiple choice, short answer
  • Numerical with tolerance, Cloze
  • Essay, description
  • Per-answer feedback, Markdown or HTML

Question bank

  • Categories: create, list, delete
  • Question listing with full definitions
  • In-place editing of every type

Randomised assessments

  • N random questions from a category
  • Subcategories included
  • Marks per slot

Learner access

  • My courses, structure, pages
  • Available resources and quizzes
  • Own attempts, best grade, review

Administration

  • Courses and categories: create, search, update
  • Section state and ordering
  • Enrolment lists
26custom tools
22native Moodle functions
6question types
0external servers

In development

What comes next

Not yet available, listed in the order in which they are planned. The order remains open to requests from those using the plugin.

  1. Assignments and forums

    Creating submissions and discussions from the conversation, as pages and quizzes already work today.

  2. Learning analytics

    Student progress and completion, queried from the conversation: “Who has not completed the mandatory module yet?” “Which questions in the last test had the most errors?”

  3. From document to course

    A Word or PDF file turned into a sequence of pages in the chosen section.

  4. Deadlines for learners

    “What do I have to hand in this week?” with dates and links to the activities.

  5. H5P and other activities

    Interactive H5P content — animations, interactive presentations, videos with embedded questions — generated from the conversation; then book and glossary.

  6. Server-side two-step confirmation

    Today the confirmation before each change is enforced by the assistant's instructions; it will become a constraint of the plugin itself.

Examples

Sample conversations

Four representative exchanges, from university and healthcare training. The grey labels show which plugin tool the assistant used; readers not interested in the technical detail can ignore them. Before every change the assistant summarises the operation, asks for confirmation and only then carries it out.

Teacher A quiz built from a course page

Moodle Course Assistant · Teams

Create a 10-question multiple-choice quiz on the page “SQL joins” in section 3 of Databases, with feedback for every answer.

get_my_coursescore_course_get_contentsget_page_content

I have read the page “SQL joins”: INNER, LEFT, RIGHT, FULL, CROSS and self joins. I am about to create, in Databases, section 3: the category “SQL joins” in the question bank with 10 multiple-choice questions, each with feedback, and the quiz “Check: SQL joins” with a pass mark of 6 out of 10. Shall I go ahead?

Yes.

create_question_categorycreate_question ×10create_quizadd_question_to_quiz
Done.
  • the quiz “Check: SQL joins” in section 3, still hidden from students
  • 10 questions in the “SQL joins” category, editable from the bank
  • pass mark 6 out of 10
Would you like me to make it visible?

Teacher An assessment with different questions for every participant

Moodle Course Assistant · Teams

For the Pharmacology assessment I want 40 questions in the bank covering modules 1–4, including dose calculation questions, and a test that draws 10 at random for each participant. Anyone below 6 does not pass.

get_page_content ×4
Here is what I am about to create.
  1. the category “Pharmacology – final assessment” with 40 questions, 10 per module
  2. multiple choice on mechanisms of action and adverse effects
  3. numerical ones on dose calculation, with a 1% tolerance
  4. a quiz with 10 random slots, maximum grade 10, pass mark 6, one attempt, 60 minutes
Do you confirm?

Confirmed, but leave it hidden.

create_question_categorycreate_question ×40create_quizadd_random_questions_to_quiz

Created and hidden. Everyone will receive 10 different questions drawn from the 40; marking is automatic, including the calculations. The questions are in the bank: you can ask me to read them back or to correct one.

Student Revision built on the lecturer's own materials

Moodle Course Assistant · Teams

Test me on section 2 of Physiology of Pregnancy and Childbirth.

get_my_coursescore_course_get_contentsget_page_content ×2

Section 2 contains “The stages of labour” and “Care during the second stage”. First question: what are the stages of labour, and what marks the transition from the first to the second?

Dilation, expulsion and placental delivery. The second begins at full dilation.

Correct. The course page also distinguishes, within the first stage, the latent phase from the active phase. Second question: what is meant by the third stage, and within what interval is it expected under physiological conditions?

Student Their own result, and what to go over again

Moodle Course Assistant · Teams

How did I do on the quiz about joins?

mod_quiz_get_user_best_grademod_quiz_get_user_attemptsmod_quiz_get_attempt_review

Your best attempt is 8 out of 10, above the pass mark of 6. The two you got wrong:

QuestionWhat went wrong
4a LEFT JOIN also returns the rows of the left-hand table that have no match
9a CROSS JOIN produces the Cartesian product
Would you like to go over outer joins using the example on the course page?

And how did everyone else do?

I cannot show other students' results. For comparisons and statistics, please ask your lecturer.

Case study

The first course built this way: databases for Midwifery

Laboratorio di Informatica, BSc in Midwifery at the University of Catania, academic year 2025/2026: designing and querying a clinical database, and building a small web application on top of it. Seven lessons, 73 pages, an exam bank of eighty questions and two papers with random draws, produced with MCPCA and Moodlecraft.

  • Lessons derived from slides and recorded videos, with an index and timestamps
  • Exercises and solutions on a clinical dataset of patients, births and staff
  • A different exam paper for every student, marked largely automatically
Read the full case study
Course unit
Laboratorio di Informatica
Degree programme
Midwifery (L/SNT1)
University
University of Catania
Academic year
2025/2026

Getting started

From installation to the first conversation

Four steps, all on the side of whoever runs the systems. Teachers and learners install nothing: they find the assistant in Teams, or connect the MCP server to their own ChatGPT or Claude.

01

Install the plugin

Like any Moodle plugin, from site administration. Requires Moodle 4.3 or later.

02

Register the app in Entra ID

A supplied script creates the registration in the organisation's tenant. This is what enables sign-in with the Microsoft account.

03

Connect the server in Copilot Studio

Using the native MCP wizard: paste an address, choose which tools stay enabled, paste the supplied instructions.

04

Publish in Teams

The assistant appears in Teams and in Microsoft 365 Copilot for the chosen people: one department, a single course, the whole organisation.

Security and governance

Identity, permissions, data: the answers for whoever runs the systems

The plugin does not add a permission system of its own: it uses Moodle's, which the organisation already governs.

Identity

Sign-in with the organisation's Microsoft account (Entra ID). It works only for people who have already signed in to Moodle through Microsoft at least once; no account is created automatically.

Authorisation

Moodle capabilities, evaluated on every single call. A teacher writes only in the courses where they teach; a learner never writes. The list of tools the assistant can see is filtered by role.

Data residency

The plugin runs inside Moodle and contacts no external service. The only third party is the chosen AI assistant: with Copilot, the organisation's own Microsoft tenant.

Traceability

Every call produces an event in Moodle's log, with user, tool and parameters. No log to consult outside the platform.

Scope

Every tool can be enabled or disabled individually in the assistant. In a pilot, the tools that delete content and those that expose third-party data are kept off.

Confirming changes

The assistant summarises what it is about to do and asks for confirmation, one change at a time. Anything it finds written inside course content is treated as data, not as instructions.

Ecosystem

The engine behind Moodlecraft: whole courses defined, versioned, reproducible

MCPCA is not only the bridge to AI assistants: it is also the engine on which Moodlecraft is built, a command-line tool that treats a Moodle course as source code: defined in text files, versioned, applicable to any Moodle instance where MCPCA is installed.

The course is a folder

One file with the course settings, one folder per section, pages in Markdown, quizzes and question banks in YAML, attachments alongside. All readable and editable with any editor.

Plan first, then apply

Like Terraform for cloud infrastructure: Moodlecraft compares the definition with the course as it stands on Moodle, shows what would change and applies only the differences. Running it again duplicates nothing.

Versioned with git

Every change carries an author, a date and a reason. You can go back to an earlier version, work on the same course as a team, and review before publishing.

Reproducible

The same course on the test instance and on production, or replicated for the next run by changing only the dates. Randomly drawn exam questions, diagrams and formatted code all come from the same definition.

A course, as Moodlecraft sees it
pharmacology-2026/
├── course.yaml            course settings
├── sections/
│   ├── 01-introduction/
│   │   ├── section.yaml
│   │   ├── intro.md           Markdown page
│   │   └── quiz.yaml          self-assessment quiz
│   └── 02-pharmacokinetics/
│       ├── section.yaml
│       ├── lecture.md
│       └── slides.pdf
└── questionbank/
    └── exam.yaml          40 questions, 10 drawn at random

The two approaches coexist: you can build the structure by talking to the assistant and then put it under version control with Moodlecraft, or define the course in files and leave the day-to-day edits to the assistant. The course in the case study was born exactly like this.

For IT staff

Architecture and requirements

A Moodle web service plugin exposing an MCP server, plus a REST adapter and an OpenAPI specification for clients that do not speak MCP.

Clients

  • Teams / M365 Copilot via Copilot Studio
  • ChatGPT (MCP connector)
  • Claude (MCP connector)
  • VS Code, Cursor, other MCP clients
  • Moodlecraft CLI

Identity

  • Microsoft Entra ID (OAuth 2.0)
  • or a Moodle web service token

Your Moodle

  • webservice_mcpca
  • Moodle internal APIs
  • Database
Protocol
MCP Streamable HTTP, JSON-RPC 2.0. Negotiates versions 2024-11-05, 2025-03-26 and 2025-06-18.
Endpoints
/webservice/mcpca/server.php (MCP), /rest.php (REST), /openapi.php (OpenAPI 3.0), /token.php (self-service token).
Authentication
Entra ID tokens validated for signature, issuer, audience and scope; the identity is resolved to the Moodle account linked through auth_oauth2. Alternatively, a Moodle web service token.
Authorisation
Dedicated capability webservice/mcpca:use; every tool checks the Moodle capabilities of the context (course, module). tools/list is filtered per user.
Tools
26 purpose-built tools (authoring: pages, sections, files, quizzes, questions, question bank) plus 22 native Moodle functions exposed as tools, 48 in total.
Clients
Copilot Studio verified (Teams and M365 Copilot). Any MCP client with OAuth or a token: Claude, ChatGPT, VS Code, Cursor. REST and OpenAPI for ChatGPT Actions and custom integrations.
Requirements
Moodle 4.3+, PHP 8.0+, HTTPS reachable from the cloud of the chosen assistant. No external services.
Privacy
A privacy provider is declared; the plugin stores only the token's last access time and writes to Moodle's standard log.

The code will be released under GPL v3, the same licence as Moodle. The link to the repository will appear here on publication.

Frequently asked questions

In brief

Do I have to install anything on my computer?

No. The assistant appears as a chat in Microsoft Teams and Microsoft 365 Copilot, already in use in many organisations. Anyone who prefers ChatGPT or Claude connects the MCP server from their assistant's settings, signing in with their institutional account. Installation concerns only the Moodle server and the Copilot Studio configuration, both handled by whoever runs the systems.

Is this only for universities?

No. It was born in a university, and that is where it was first proven, but the plugin knows Moodle, not the sector. Schools, healthcare organisations, accredited training providers and companies run the same Moodle and face the same problem: producing and keeping content and assessments up to date. The case study on this site is academic; the mechanisms it describes are the same everywhere.

Can I create a course from scratch?

Yes. Starting from an empty course, the assistant builds sections, pages, materials and assessments in a single conversation; or it works on a course that already exists. Creating the course container itself depends on permissions: in many organisations it is reserved to the administration, which sets it up in seconds. For courses you want to version and replicate for every run, there is Moodlecraft.

Can a learner modify a course?

No. The plugin applies Moodle's permissions to every request: someone enrolled as a student can only consult the courses they are enrolled in. Even if they asked the assistant to create something, Moodle would refuse.

Where does course data end up?

It stays in Moodle. The plugin contacts no external service. Conversations pass through the chosen assistant: with Copilot, the organisation's Microsoft tenant that already hosts Teams and email.

Can the assistant invent content?

Answers about courses are built by reading the real content through the plugin's tools, and the assistant's instructions require it to say when a piece of information is not in the course. As with any AI assistant, whoever teaches still has to review what gets created: that is why quizzes are born hidden.

Does it work without Teams?

Yes. Any MCP client can connect: ChatGPT and Claude through their own MCP connectors, VS Code, Cursor. Teams and Copilot are the recommended route because many organisations already have them and sign-in is the institutional one.

What is needed to try it?

A Moodle 4.3 or later reachable over HTTPS, Microsoft sign-in already enabled on Moodle, the Copilot Studio licences many organisations already hold, and a few hours from whoever runs the systems for the four steps described above. A pilot on a single course is the best way to start.

How much does it cost? Is it open source?

The code will be released under GPL v3, the same licence as Moodle, so there are no licence fees. During the pilot phase it is available on request to interested organisations.

Who maintains it?

The project is developed by Antonio Calanducci, computer engineer at the University of Messina and adjunct lecturer in Computer Science at the University of Catania, and was used to produce a real course, documented on the case study page. Reports and requests reach the address at the bottom of this page.

Would you like to try it in your organisation?

A pilot course and one teacher willing to build it are enough to assess the impact. I am also glad to answer technical questions from whoever runs the platform.

antonio.calanducci AT (unict, unime).it The same address works at unict.it and unime.it: replace AT with @.

Send an email