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
- Quick start
- Several accounts
- Tools
- How it works
- Security and privacy
- Configuration
- Troubleshooting
- Development
- Contributing
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
accountargument 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
accountargument is the active account; see Several accounts. - ✋ Writes need your confirmation. The descriptions of
dl_submit_assignment,dl_forum_*andmail_sendtell the model to act only after you have confirmed exactly what goes where.mail_sendonly 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
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" }
}
}