KX

kad-xyz/spbstu-mcp

Developer tools
23 stars 0 forks Quality 73 Trend 43MIT

MCP server for SPbPU (Polytech) students: dl.spbstu.ru Moodle, university mail and openedu.ru for Claude

Overview

An MCP server for SPbPU student services: the dl.spbstu.ru Moodle, the university mailbox, openedu.ru and the timetable. You sign in with your university account; your password stays in your operating system's credential store. https://github.com/user-attachments/assets/79137c69-5d3f-4270-9164-e509f88c3535 "What's due this week?" · "Summarise the database course assignment and download its files." · "Did the teacher grade my coursework?" · "Draft a reply to the curator's email." in the operating system's credential store. LOGIN is your single university account, the one in [email protected]. Keep -w , so that security prompts for the password with hidden input; anything after -w would be stored as the password itself.

README

https://github.com/user-attachments/assets/79137c69-5d3f-4270-9164-e509f88c3535


“What’s due this week?” · “Summarise the database course assignment and download its files.” · “Did the teacher grade my coursework?” · “Draft a reply to the curator’s email.”

Contents

What it does

Service Read Write
🎓 dl.spbstu.ru, the Moodle LMS courses, course contents, assignments with full task text, deadlines, submission status and feedback, grades, forums, pages, files submit work to an assignment, post to forums with attachments
✉️ mail.spbstu.ru, Exchange list and search mail, read messages, save attachments write new messages and replies (saved as drafts by default), delete
📚 openedu.ru, Open edX enrolled courses, progress and grades, due dates, course outline, page text and attached files
🗓 ruz.spbstu.ru, the public timetable weekly timetable of any group or teacher
🧭 Everything at once study_overview: dl deadlines, openedu.ru progress and unread mail in one call
🏛 my.spbstu.ru, «Мой Политех» record book grades with semester averages, study plan, this year’s work plan
🔎 polyvsp.ru, polyphis.ru, student answer bases answers to test questions, with the source page

Quick start

1. Store your university login in the operating system’s credential store. LOGIN is your single university account, the one in [email protected].

The password is asked with hidden input in every case.

2. Install the server. With Homebrew (macOS, Linux):

brew install kad-xyz/tap/spbstu-mcp

Or download the archive for your system from Releases and put spbstu-mcp somewhere on disk, e.g. ~/.local/bin. On macOS, clear the download quarantine (the binary is not notarized):

xattr -d com.apple.quarantine ~/.local/bin/spbstu-mcp

3. Connect it to Claude.

Then just ask: “What’s going on with my studies?”

[!TIP] No account at hand? Start the server with -demo (claude mcp add spbstu-demo -- spbstu-mcp -demo): it serves a made-up student’s courses, deadlines and mail, touches no university service and needs no credentials.

Several accounts

The server can keep more than one university account, say yours and a classmate’s you are helping, and acts as one of them at a time, the active one. Ask “add the account ivanov.ii”: on macOS a system dialog asks for its password (paste it from the Passwords app), which goes straight to the keychain, never through the chat, and one sign-in checks it. Then “switch to ivanov.ii”, and back when you are done.

  • Every reply starts with Аккаунт: [email protected], the account it was made as.
  • Every account has its own sessions, so one person’s sign-in never serves another.
  • Tools marked ✍️ take an account argument and refuse to run unless it is the active account: a mail cannot go out from a classmate’s mailbox because the switch back was forgotten.
  • The active account is remembered after a restart.

On Linux and Windows account_add returns the secret-tool or cmdkey command that stores the password; run it, then call account_add again. The accounts live under the same credential store service, one item per account (on Windows, an extra account is the generic credential spbstu:[email protected]).

Tools

✍️ changes something on a university service; see Security and privacy.

How it works

flowchart LR
    C[Claude] -- MCP / stdio --> S[spbstu-mcp]
    K[(OS credential storeitem "spbstu")] -. login + password .-> S
    S -- SSO --> CAS[cas.spbstu.ru]
    CAS --> DL[dl.spbstu.ruMoodle mobile API]
    S -- SSO --> KC[sso.openedu.ru«Политех» provider] --> CAS
    KC --> OE[courses.openedu.ruOpen edX API]
    S -- EWS, Basic auth over TLS --> M[mail.spbstu.ruExchange]
    S  ST[(~/.config/spbstu-mcp/accountsone state.json per account, 0600)]
  • dl.spbstu.ru: signs in through the university SSO and obtains a Moodle mobile web service token, the same way the official Moodle app does.
  • openedu.ru: signs in through the «Политех» identity provider of the openedu.ru SSO, then reads the Open edX course APIs.
  • Mail: Exchange Web Services with the same account.
  • my.spbstu.ru: its own sign-in form, then the JSON endpoints its pages use.
  • Answer bases: public pages, cached for a week in ~/.config/spbstu-mcp/answers; when polyvsp.ru is down its web.archive.org copy is read.
  • Sessions (the Moodle token and cookies) are kept between runs, so the server signs in again only when a session has expired. University sites lock accounts after frequent sign-ins.

Security and privacy

  • 🔑 The password never leaves your Mac except to SPbPU and openedu.ru sign-in pages. It is read from the credential store at sign-in time and never appears in tool results.
  • 🗂 Sessions are stored in ~/.config/spbstu-mcp/accounts/[email protected]/state.json, one file per account, readable only by you. Delete a file to sign that account out everywhere.
  • 👥 Accounts don’t mix. Every write tool refuses to run unless its account argument is the active account; see Several accounts.
  • ✋ Writes need your confirmation. The descriptions of dl_submit_assignment, dl_forum_* and mail_send tell the model to act only after you have confirmed exactly what goes where. mail_send only saves a draft unless asked to send.
  • 🚫 No exams. Timed and proctored exams open only in the browser. Test answers are only saved; submitting them is up to you.

[!WARNING] This is an unofficial project, not affiliated with SPbPU or openedu.ru. Use it with your own account only.

Configuration

Flag Default Description
-keychain-service spbstu Name of the credential store service with the university logins, one item per account.
-downloads ~/Downloads/spbstu Where downloaded files and attachments are saved.
-group Default group for schedule, e.g. 5130902/30201.
-demo false Serve made-up data instead of the university services; no credentials needed.

Troubleshooting

Symptom Fix
keychain item "spbstu" not found (or Secret Service item, credential) Create it, see Quick start.
CAS rejected the credentials Check the stored password length; re-create the item with -w last.
mail.spbstu.ru rejected the credentials The keychain account must be the full address, [email protected].
refused: account is …, but the active account is … A write was asked as another account. Switch with account_switch if that is what you meant.
Sign-in keeps failing after many attempts The site may have locked sign-ins for a while. Wait, then try once.
macOS: “cannot be opened because the developer cannot be verified” xattr -d com.apple.quarantine ~/.local/bin/spbstu-mcp

Development

go test ./...                    # offline unit tests
SPBSTU_LIVE=1 go test ./...      # plus checks against the live services (needs the credential item)
go build -o bin/spbstu-mcp ./cmd/spbstu-mcp
cmd/spbstu-mcp     MCP tools (dl, mail, openedu, overview, accounts)
internal/accounts  added accounts, the active one, per-account session stores
internal/cas       university SSO sign-in
internal/moodle    dl.spbstu.ru client
internal/ews       Exchange Web Services client
internal/openedu   openedu.ru and Open edX client
internal/mypoly    my.spbstu.ru client
internal/ruz       public timetable client
internal/answers   polyvsp.ru and polyphis.ru answer bases
internal/keychain  credential stores: macOS keychain, Secret Service, Windows Credential Manager
internal/state     persisted sessions and cookie jar

Releases are built by GitHub Actions on every v* tag.

Contributing

Contributions are welcome, in English or Russian: read CONTRIBUTING.md first. Security issues go through private advisories, not public issues.

License

MIT

View the full README on GitHub

Install

This server does not publish a one-line install command.

Open the repository installation guide New to MCP? Start with the mcpskill.org guide →

Configuration

{ "mcpServers": { "spbstu": { "command": "/Users/YOU/.local/bin/spbstu-mcp" } } }