Skip to main content

Moodle MCP for Swiss universities

PyPI CI License: MIT

Use your university's Moodle from Claude: courses, materials, downloads, deadlines and announcements. Works with ZHAW, FHNW, ETH, EPFL and the other Swiss universities below, and with any other Moodle 4 site. You log in yourself (usually with SWITCH edu-ID) — your password is never seen or stored, and everything stays on your computer.

Unofficial student project, not affiliated with any university. Course material is for personal study only.

Formerly zhaw-moodle-mcp. Existing setups keep working: uvx zhaw-moodle-mcp now installs this package, and your login and settings stay where they are. For the Claude Desktop extension, install the new swiss-moodle-<version>.mcpb over the old one.

Quick start

  1. Download swiss-moodle-<version>.mcpb from the latest release.
  2. Double-click it, or in Claude Desktop open Settings → Extensions → Advanced settings → Install Extension… and pick the file. Click Install.
  3. Enter your university under University: its short name from the table below (e.g. fhnw) or the web address of your Moodle. You can also leave it empty and simply tell Claude in the chat which university you study at.
  4. Open a new chat and ask "Which Moodle courses do I have?". The first start takes a few seconds; then a browser opens for the login.

To switch universities later, change University in the extension's settings (or, if you left it empty, ask Claude to switch). In the chat's + → prompts menu you find ready-made study sessions: study assistant, last lecture summary, deadlines overview, what's new, exam preparation.

Claude Code

Install uv, then (with your university's short name):

claude mcp add moodle -e MOODLE_MCP_INSTITUTION=fhnw -- uvx swiss-moodle-mcp@latest

Ask Claude

"Summarise the last lecture of Software Engineering 1", "Show all my deadlines as a table", "Sync all my courses", "What's new since Monday?". Files go to a folder named after your university in your home directory (e.g. ~/FHNW).

Universities

University Short name Moodle Status
ZHAW zhaw moodle.zhaw.ch tested
BFH bfh moodle.bfh.ch not tested yet
EPFL epfl moodle.epfl.ch not tested yet
ETH ethz moodle-app2.let.ethz.ch not tested yet
FFHS ffhs moodle.ffhs.ch not tested yet
FHGR fhgr moodle.fhgr.ch not tested yet
FHNW fhnw moodle.fhnw.ch not tested yet
HES-SO hes-so cyberlearn.hes-so.ch not tested yet
HFTM hftm moodle.hftm.ch not tested yet
OST ost moodle.ost.ch not tested yet
PHLU phlu moodle.phlu.ch not tested yet
UNIFR unifr moodle.unifr.ch not tested yet
UNIGE unige moodle.unige.ch not tested yet
UNIL unil moodle.unil.ch not tested yet
UNINE unine moodle.unine.ch not tested yet
USI usi www.icorsi.ch not tested yet
SUPSI supsi www.icorsi.ch not tested yet

"Not tested yet": the site runs Moodle 4, but nobody has used this server there yet. It should work - you can help by running uvx swiss-moodle-mcp doctor, which tries every feature on one of your courses and prints a report without course names or personal data, and posting it as a compatibility report.

Not listed? Use the address of your Moodle instead of a short name (copy it from the browser while you are on your Moodle). The Moodle must be version 4.0 or newer; other learning platforms (ILIAS, OLAT, Canvas) are not supported.

Good to know

  • Browser: login uses your default browser if it is Chrome, Edge, Brave or Vivaldi, otherwise another installed one (Firefox and Safari are not supported).
  • Updates: the extension is updated by installing a newer .mcpb; with uvx ...@latest (Claude Code) updates install automatically when Claude starts.
  • Extension does not start: it runs with uv. If Claude Desktop reports that uv is missing, install uv and restart Claude completely (also from the tray).
  • Sync never deletes local files. Logging out (ask Claude, or uvx swiss-moodle-mcp logout) removes the stored session and the login browser profile; a running server notices it.
  • Session and settings live in ~/.swiss-moodle-mcp on Windows (outside AppData, so Claude from the Microsoft Store and the command line share them) and in the usual app folders on macOS/Linux, with a separate instances/<moodle host> folder per Moodle site. Folders named zhaw-moodle-mcp from older versions keep being used.

Configuration

Choose your university once with uvx swiss-moodle-mcp setup (a list to pick from, or setup fhnw, or setup <address of your Moodle>); uvx swiss-moodle-mcp universities lists the known ones and uvx swiss-moodle-mcp status shows what is set. You can also just tell Claude your university ("I study at FHNW"); it stores the choice for you. If you used this server before v0.5, ZHAW stays selected.

The extension asks for the university, download folder and browser in its settings. Otherwise run uvx swiss-moodle-mcp config-path to see where config.toml goes:

[moodle]
institution = "zhaw"  # or bfh, epfl, ethz, ffhs, fhgr, fhnw, hes-so, hftm, ost, phlu, unifr,
                      # unige, unil, unine, usi, supsi - or the address of any other Moodle
# download_directory = "~/Studium/{short}"  # default ~/ZHAW, ~/FHNW, ...

[browser]
name = "auto"  # or "chrome", "msedge", "brave", "vivaldi"
# executable_path = "C:/path/to/browser.exe"  # any other Chromium-based browser

Development

uv sync
uv run pytest
uv run ruff check .

In this folder Claude Code picks up the server from .mcp.json, plus a study assistant subagent (copy it to ~/.claude/agents/ to use it everywhere). Build the Claude Desktop extension with uv run python scripts/build_extension.py (needs Node.js). Pushing a vX.Y.Z tag that matches pyproject.toml publishes to PyPI and attaches the .mcpb to a GitHub release.

Release files for swiss-moodle-mcp 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for swiss-moodle-mcp 0.5.0
File Size Uploaded
swiss_moodle_mcp-0.5.0.tar.gz 67.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for swiss-moodle-mcp 0.5.0
File Interpreter ABI Platform
swiss_moodle_mcp-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 156.0 kB

Release files / swiss_moodle_mcp-0.5.0.tar.gz

Download URL swiss_moodle_mcp-0.5.0.tar.gz
Size 67.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e74c201cf9b9e01f61def219bd9b15f9d9461b015a5315612707e4296294510b
BLAKE2b-256 checksum
How to use checksums
5a2ed6ac0d78c759a0142e0bf471ba82816a3daf0d0137976e1c5211ac578ee3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / swiss_moodle_mcp-0.5.0-py3-none-any.whl

Download URL swiss_moodle_mcp-0.5.0-py3-none-any.whl
Size 88.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7d8ee635dab981d02465f6387c502465ccbd66466f2e2e81e4f5d708ddb92f52
BLAKE2b-256 checksum
How to use checksums
814a5532c6dad8c4aaa0f8745d5477c1435c2ef1726cc780b2b5d40a69cf4226
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page