reichman-courses-connector
v1.7.2
Published
Unofficial MCP connector that lets Reichman University students ask Claude, ChatGPT, Codex or Gemini about their own Moodle courses and syllabi.
Readme
Reichman Courses (unofficial)
Ask Claude about your own Reichman University courses, in plain language:
"What's the grade formula for Algorithms?" "What's due this week?" "Find Max's recitation 5 in probability and tell me if he covers the bell curve." "What did I get in Digital Systems?"
It runs on your own computer and signs in with your Reichman account. It reads Moodle (files, deadlines, forums, assignment feedback, quiz results, attendance, Zoom links), syllabi, the Student Info Station (grades, timetable, exams), Panopto recordings and Piazza.
It can also submit an assignment or post in a course forum, but never on its own: it first shows you exactly what it will send, and only does it after you say yes.
Unofficial student project. Not affiliated with or endorsed by Reichman University.
Install — Claude Desktop (no terminal)
- Install the free Claude Desktop app (Mac or Windows).
- Download
reichman-courses.mcpbfrom the latest release and double-click it. Click Install. - A sign-in page opens in your browser. Enter your Reichman username and password (it's checked on the spot). Add Piazza on the next step if you use it, or skip.
- In any chat: "list my courses", "what's due this week?"
To sign in again, change your login, or add Piazza later, ask Claude to "connect my Reichman account" (the connect_account tool reopens the sign-in page).
Updates are manual, on purpose. The connector never downloads or runs new code by itself. To update, download the latest reichman-courses.mcpb from the releases page and double-click it. Your login stays saved.
Install — ChatGPT app (Codex)
Needs Node.js (the LTS installer, once). Then, in the ChatGPT desktop app, open Codex and send this message:
Run
npx -y reichman-courses-connector@latest installand tell me what it printed.
Codex runs it (approve when asked). It registers the connector with the ChatGPT app. Quit ChatGPT completely and reopen it. The first time you ask about your courses, the same sign-in page opens in your browser. If you already signed in from Claude on this computer, it reuses that login. To update later, send the same message again.
To remove it: npx -y reichman-courses-connector uninstall.
Install — Claude Code (terminal)
The same one-liner also registers it with Claude Code (all projects) if Claude Code is installed. Ask Claude Code to run it, or run it yourself:
npx -y reichman-courses-connector@latest installThen start a new Claude Code session (or check with /mcp).
Both installs run the same npm package; the .mcpb is just the double-click wrapper Claude Desktop needs.
What it can do
Moodle: list courses, read the syllabus (grade formula, AI policy, attendance, reading list), browse course contents, read a PDF or slide, save course files to a folder on your computer (e.g. "download this week's slides into Desktop/Year 2/Algorithms"), upcoming deadlines, assignments, Moodle grades, announcements, search materials.
Lectures: search Panopto recordings and read their transcripts (with timestamps).
Student Info Station: official grades, exam schedule, weekly timetable.
Piazza (optional, separate login): list classes, search, read posts.
Plus connect_account (open the sign-in page) and forget_my_data (delete your saved login and cached data).
Courses can be named in Hebrew or English, by course number (77), or by Moodle id.
What happens when…
- You install it the first time: the sign-in page opens once in your browser. Reichman first (checked live), then Piazza (optional; skip it and add it any time).
- You install a new version, reinstall, or restart Claude: nothing to do. Your login is still in your computer's secure storage, so it signs in by itself in the background. No page opens.
- The Moodle session or token expires: it signs in again by itself with your saved login. You don't notice.
- You change your Reichman (or Piazza) password: the next request fails once. The connector marks the saved password as outdated and never tries it again (repeated wrong attempts can lock your account). Then the sign-in page opens, and Claude shows you the link. Enter the new password; everything works again without a restart.
- You want to add Piazza later, or switch accounts: ask Claude to "connect my Reichman account". It opens the page and shows the link.
- A new version comes out: nothing changes until you install it (double-click the new
.mcpb, or re-run the install command). Nothing is ever downloaded automatically. - You want everything gone: ask Claude to "forget my Reichman data" (deletes the saved logins and cached course data), then remove the extension. Removing the extension alone doesn't delete the saved login.
How sign-in works, and what happens to your password
Reichman doesn't offer outside apps a "Sign in with Reichman" button, and students can't generate a Moodle API token themselves. So the connector completes the normal university login for you, on your own computer.
- Your password is verified against Reichman's real login before anything is saved, then kept in your computer's own secure storage: macOS Keychain, Windows' encrypted user storage, or a private file on other systems. Like any saved login, it's protected from other users and other computers, not from programs you yourself run.
- It is only ever typed into Reichman's own login pages, over HTTPS, as a form post (never in a URL); a redirect can't carry it anywhere else. The Piazza password only ever goes to piazza.com.
- It is used only to sign in to Reichman (and Piazza, if you add it). It is never logged, never sent anywhere else, and a test asserts it never appears in any error or trace.
- The sign-in page runs locally (127.0.0.1), loads nothing external, and only works with a private key stored in your user folder, so websites, other programs and other users on the computer can't drive it or impersonate it.
- No automatic updates: the connector only ever runs the version you installed. New versions are published by this repository's release workflow (npm trusted publishing, provenance attached), and you decide whether to install them.
- Reading is the default. The only things that change anything (submitting an assignment, posting in a forum) need your explicit OK on an exact preview; each confirmation code works once and expires in 15 minutes. Files can only be submitted from inside your home folder.
forget_my_dataerases everything saved.
Your Reichman password also opens email and other university systems. This tool never keeps it anywhere but your own machine, but it is unofficial — use it on your own account only, if you're comfortable with that.
Releasing a new version
Set up once (see "First publish" below). After that, a release is:
- Bump
"version"inpackage.jsonandextension/manifest.json(the build refuses to run if they differ). - Commit and push to
main.
GitHub Actions (.github/workflows/release.yml) sees the new version, runs the tests, creates GitHub Release v<version> with the .mcpb attached, and publishes the npm package. No tags and no tokens: it uses npm's trusted publishing (GitHub's identity). Installed connectors don't change until each user installs the new version.
First publish (one time)
npm only lets you link a package to GitHub after it exists, so the very first version goes up by hand:
- Create an account at https://www.npmjs.com/signup and turn on two-factor authentication (avatar → Account → Two-Factor Authentication).
- In Terminal:
npm login(a browser window opens; approve it). npm publish ~/repos/runi-connector/dist/reichman-courses-connector-<version>.tgz --access public- On https://www.npmjs.com/package/reichman-courses-connector/access → Trusted Publisher → GitHub Actions: user
0xYoyo, repositoryruni-connector, workflowrelease.yml, environment empty. Save.
Deploy your own (Cloudflare Workers)
Currently blocked: Reichman's Moodle challenges requests from Cloudflare's servers (Reblaze bot protection). Kept for when official access is granted.
npm install
npx wrangler kv namespace create OAUTH_KV # paste the id into wrangler.jsonc
npx wrangler kv namespace create CACHE_KV # paste the id into wrangler.jsonc
# edit wrangler.jsonc: set PUBLIC_URL to your workers.dev URL, and MOODLE_BASE for the year
npm run deploy
# then set PUBLIC_URL again to the URL the deploy printed, and redeployMOODLE_BASE changes each academic year (.../2027, .../2028). Update it each October.
Then add <your PUBLIC_URL>/mcp as a custom connector in Claude (Settings → Connectors → Add custom connector), or the equivalent in ChatGPT, Codex or Gemini.
Check the login before deploying
Run once on your own machine to confirm the flow works, whether there's a 2FA step, and how long a token lasts:
npm run probe # prompts for your login, prints the step trace
npm run probe -- --verify # later: is a token still valid? (asks for it)The probe reads your password (and tokens) from a hidden prompt and never writes them anywhere.
Develop and test
npm test # tests against a fake Reichman (and a real headless Chromium for the sign-in page); no real login
npm run typecheck # worker + test typechecks
# optional full end-to-end against the OAuth flow:
npx tsx test/run-mock.ts # terminal 1: fake Reichman
npx wrangler dev --config wrangler.e2e.jsonc # terminal 2: the worker
npx tsx test/e2e.ts # terminal 3: the clientLayout
src/
browser.ts minimal cookie-jar HTTP client + HTML form parser (login flow)
reichman-login.ts walks Moodle → university login → Moodle app token
moodle.ts Moodle web-service REST client (token based)
syllabi.ts collects syllabus PDFs during sign-in, caches text in KV
documents.ts PDF and text extraction
tools.ts the MCP tools
pages.ts sign-in / message pages (no external resources)
index.ts OAuth provider + MCP endpoint wiringRoadmap
- Measure Moodle token lifetime; add silent refresh if the token allows it.
- Add a 2FA prompt to the sign-in page if Reichman enables 2FA.
- Once it has real users, propose official registration to Reichman IT for a password-free sign-in and a wider set of data (grades, exams and schedule from My RUNI).
License
MIT. Use at your own risk; this is not an official Reichman University product.
