npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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)

  1. Install the free Claude Desktop app (Mac or Windows).
  2. Download reichman-courses.mcpb from the latest release and double-click it. Click Install.
  3. 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.
  4. 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 install and 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 install

Then 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_data erases 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:

  1. Bump "version" in package.json and extension/manifest.json (the build refuses to run if they differ).
  2. 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:

  1. Create an account at https://www.npmjs.com/signup and turn on two-factor authentication (avatar → Account → Two-Factor Authentication).
  2. In Terminal: npm login (a browser window opens; approve it).
  3. npm publish ~/repos/runi-connector/dist/reichman-courses-connector-<version>.tgz --access public
  4. On https://www.npmjs.com/package/reichman-courses-connector/access → Trusted Publisher → GitHub Actions: user 0xYoyo, repository runi-connector, workflow release.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 redeploy

MOODLE_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 client

Layout

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 wiring

Roadmap

  • 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.