@jamestesting888/tum-mcp 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Changes
2
2
 
3
+ ## 0.9.0 — 2026-10-26
4
+
5
+ - Add read-only TUMonline study, public catalog and partial curriculum-position
6
+ tools, with separate account permissions, verified identity and bounded paging.
7
+ - Add optional Studocu search and reviewed personal PDF collection through
8
+ `tum-mcp install studocu`. Preserve originals, course bindings and recovery
9
+ history; supplementary personal-use sources are excluded from publication.
10
+ - Add optional `tum-mcp install lecture` and Prepare Lecture for timestamped
11
+ Lecture Notes in the existing course app. Prefer transcripts and supplied
12
+ materials, skip whole-silent recordings, preserve original-time coverage and
13
+ request only critical video frames. Publication remains an explicit opt-in.
14
+ - Support isolated, pinned CPU recognition on Windows x64, Intel Mac and supported
15
+ Linux/WSL hosts, alongside Apple Silicon MLX acceleration. Keep heavy recognizer
16
+ dependencies optional; captions/imported WebVTT need no recognizer installation.
17
+ - Handle persistent Studocu SSE replies, enforce response IDs/search limits and
18
+ bound TUMonline policy reads and catalog output. Unify extension status/removal
19
+ and verify both optional workflows together. Shorten the getting-started guide.
20
+ - Preserve existing Moodle compatibility tools, sessions, downloads, customized
21
+ skills and existing course layouts during installation and upgrades.
22
+
23
+ ## 0.8.1 — 2026-10-26
24
+
25
+ - Give every doctor/update status a dot: yellow for unverified or attention-needed
26
+ states, green for ready/updated, neutral for information/disabled, and red only
27
+ for failures. Keep status labels readable with terminal colors disabled.
28
+
3
29
  ## 0.8.0 — 2026-10-26
4
30
 
5
31
  - Read Artemis courses, lectures, exercises, own feedback and accessible Zulip
package/README.md CHANGED
@@ -1,196 +1,97 @@
1
1
  # TUM MCP
2
2
 
3
- Connect your coding agent to Moodle, Artemis and Zulip. Read course content and
4
- build a private, source-backed study workspace. Unofficial; independent of TUM.
3
+ Connect your coding agent to **Moodle, Artemis, Zulip and TUMonline**. Read course
4
+ sources with citations and turn them into a private study app. Unofficial and
5
+ independent of TUM.
5
6
 
6
- **Package: [@jamestesting888/tum-mcp](https://www.npmjs.com/package/@jamestesting888/tum-mcp).**
7
- [Release notes](CHANGELOG.md).
7
+ [**npm package**](https://www.npmjs.com/package/@jamestesting888/tum-mcp) ·
8
+ [Release notes](CHANGELOG.md) · [Setup guide](docs/setup.md)
8
9
 
9
- ## Agent setup
10
+ ## Get started
10
11
 
11
- Paste this into your coding agent to install the published package:
12
-
13
- ```text
14
- Install @jamestesting888/tum-mcp on this computer. Check Node.js is 22.14+.
15
- Run npm install --global @jamestesting888/tum-mcp@latest, then:
16
- tum-mcp setup --client codex
17
- Use --client claude, cursor, antigravity, or generic for a different client.
18
- Preserve existing settings and customized skills. Follow the activation steps.
19
- Help me run tum-mcp connect in an interactive terminal and choose services.
20
- I will complete sign-in/MFA in the browser. Never request secrets in chat.
21
- Run tum-mcp doctor to explain what is available and what still needs setup.
22
- ```
23
-
24
- ## Connect
25
-
26
- You need **Node.js 22.14+**, **a Chromium browser**, and your TUM account.
12
+ Requires **Node.js 22.14+**, a Chromium browser and your TUM account.
27
13
 
28
14
  ```sh
29
15
  npm install --global @jamestesting888/tum-mcp@latest
30
16
  tum-mcp setup --client codex
31
17
  tum-mcp connect
32
18
  tum-mcp doctor
33
- tum-mcp --help
34
19
  ```
35
20
 
36
- Select services with **Space**, then **Enter**. Choose an installed browser and
37
- complete sign-in there. Only selected tabs open; Zulip needs no API key.
38
- Read access follows your campus account's permissions; no course/channel scope setup is needed.
39
- Use `tum-mcp study build --help` for a command's options.
40
-
41
- Choose a client with `--client`: `codex`, `claude`, `cursor` or `antigravity`.
42
- Setup configures MCP and installs all six skills; follow any activation or
43
- restart prompts. Use `generic` for manual MCP setup.
44
-
45
- For existing Cursor and Antigravity setups, run `tum-mcp update` to add the skills.
46
- Updates and uninstall preserve customized files and report them for review.
47
-
48
- Supports macOS, Windows, glibc Linux x86_64/ARM64 and WSL 3.x. In WSL, sign-in
49
- opens a Windows browser. Add `--host windows` to setup for a Windows client that
50
- uses the WSL backend. [Browser and WSL setup](docs/setup.md#wsl).
21
+ Choose `codex`, `claude`, `cursor`, `antigravity` or `generic` as the client.
22
+ Follow the activation/restart instructions. In `connect`, select services with
23
+ **Space**, then **Enter**, and complete sign-in/MFA in the browser. Never paste
24
+ credentials into chat. Setup supplies its own Python runtime; Git, Docker and a
25
+ native keyring are unnecessary.
51
26
 
52
- Setup supplies a private Python runtime. Connections use encrypted local
53
- files and need no native keyring, Git or Docker.
27
+ Works on macOS, Windows, glibc Linux x86_64/ARM64 and WSL. For a Windows client
28
+ using a WSL backend, add `--host windows` to setup.
29
+ [Browser and platform details](docs/setup.md).
54
30
 
55
31
  ## Read and study
56
32
 
57
- | Source | Available content |
58
- | --- | --- |
59
- | Moodle | Materials, pages, announcements, forums, original downloads and cited PDF pages |
60
- | Artemis | Lectures, text/online/video units, student slide PDFs, released exercise statements and permitted own feedback |
61
- | Zulip | Selected course channels, discussion search and cited catch-up |
62
-
63
- Campus access is read-only. Exercise start, deployment, execution, submission,
64
- posting and read-state changes are unavailable.
65
-
66
- ### Skills and example requests
67
-
68
- The package includes six skills. Once you've chosen a course from
69
- your connections, try requests like these:
70
-
71
- | Skill | Use it to | Example request |
72
- | --- | --- | --- |
73
- | `read-content` | Read and explain course sources with citations | "Can you explain what we covered in last week's lecture?" |
74
- | `sync-course` | Create or refresh a course project | "Set up a study project for this course." |
75
- | `prepare-study` | Build lessons, flashcards and practice | "Make me a study website with flashcards and practice questions." |
76
- | `prepare-exercises` | Prepare optional hints, checks and worked solutions | "Help me work through this week's exercises in the same app." |
77
- | `publish-course` | Put a prepared website on GitHub Pages | "Put my study site online so I can open it on my phone." |
78
- | `audio-notes` | Save spoken lessons under `audio/` | "Turn this into audio notes I can listen to on the go." |
79
-
80
- Useful follow-ups in an existing project:
33
+ Ask your agent to explain course material, find announcements or catch up on a
34
+ Zulip channel. Campus access is read-only and follows your account permissions;
35
+ submissions, posting and exercise execution are unavailable.
81
36
 
82
- - "Did I miss anything important on Zulip this week?"
83
- - "There's new course material. Can you update my study site?"
84
- - "I've left some comments on the site. Can you fix those parts?"
85
- - "Can you update the audio notes too?"
86
-
87
- Client setup installs managed copies of the
88
- [skill sources](src/tum_mcp/bundled/skills/). Develop or review skills in this repository.
89
-
90
- ### Recommended study flow
91
-
92
- 1. **`sync-course`**: Set up a project for your course and collect its material.
93
- Use it again when new material is available.
94
- 2. **`prepare-study`**: Turn that material into a study website with explanations,
95
- flashcards and practice questions. Use **`prepare-exercises`** for released sheets
96
- with prepared interactive guidance. Both workspaces share one app; either can come first.
97
- 3. **`publish-course`** (optional): Put the website online so you can study on your
98
- phone. Check the [publishing requirements](#publish-for-phone-access-optional) first.
99
- 4. **`audio-notes`** (optional): Turn the prepared content into spoken lessons.
100
- Use them to revisit prepared topics while walking or commuting.
101
-
102
- Each project holds one course. To open the website locally, run this from the
103
- course project folder:
37
+ | Workflow | Example request |
38
+ | --- | --- |
39
+ | `read-content` | “Explain this week's lecture with source citations.” |
40
+ | `sync-course` | “Set up a project for this course and collect its materials.” |
41
+ | `prepare-study` | “Build lessons, flashcards and practice in a study website.” |
42
+ | `prepare-exercises` | “Add guided exercises from this week's released sheet.” |
43
+ | `audio-notes` | “Turn the prepared lessons into audio notes.” |
44
+ | `publish-course` | “Publish my reviewed study site for phone access.” |
104
45
 
105
- ```sh
106
- tum-mcp study
107
- ```
46
+ Each project holds one course. Run `tum-mcp study` in its folder to open the app.
47
+ Ask the agent to refresh it when sources change or address comments left in the
48
+ app. [Study guide and demo](docs/study.md).
108
49
 
109
- Your browser opens at `http://127.0.0.1:8765`. Press **Ctrl+C** in the terminal to stop.
110
- See the [study guide and local demo](docs/study.md) for more examples.
50
+ TUMonline currently provides study names/degrees, public course catalog metadata
51
+ and partial course curriculum positions. The catalog does not show enrollments.
52
+ Grades, exams, progress and full curricula are unavailable. Review its local
53
+ account policy with `tum-mcp manage tumonline`.
54
+ [TUMonline permissions](docs/tum-mcp.md#tumonline-permissions).
111
55
 
112
- ### Publish for phone access (optional)
56
+ ## Optional extensions
113
57
 
114
- Publishing requires [GitHub CLI](https://cli.github.com/) on the computer where
115
- your agent runs and an eligible paid GitHub plan. Sign in locally, then check it:
58
+ Install only the workflows you need, then reload your client:
116
59
 
117
60
  ```sh
118
- gh auth login --hostname github.com
119
- tum-mcp doctor --live
120
- ```
121
-
122
- `doctor` checks CLI availability; `--live` also verifies GitHub authentication.
123
- A coding platform's GitHub connector does not sign in the local CLI. No token
124
- needs to be pasted into the agent or stored by TUM MCP.
125
-
126
- **The repository is private. The website is public.** Review the lesson text,
127
- quotations and source links before asking your agent to publish.
128
-
129
- Later builds update the same site. `tum-mcp study` also prints its hosted URL.
130
- See [publishing details](docs/study.md#publish-a-study-website).
131
-
132
- ## Sign-in and session privacy
133
-
134
- Sign-in and MFA happen in a temporary browser window. Only service-owned session
135
- cookies are retained; identity-provider cookies are discarded when it closes.
136
- Sessions stay on your computer in encrypted files with owner-restricted keys.
137
- Configured local clients share those connections and saved preferences.
138
-
139
- ## Your study project
140
-
141
- The agent keeps each course in its own folder. After preparing the website,
142
- your project looks like this, with audio added when requested:
143
-
144
- ```text
145
- my-course/
146
- ├── AGENTS.md Your rules and a short pointer to agent context
147
- ├── materials/
148
- │ ├── content/ Lectures, slides and reading
149
- │ ├── exercises/ Exercise sheets and practice material
150
- │ ├── exams/ Available exam and revision material
151
- │ └── other/ Announcements and course information
152
- ├── app/
153
- │ ├── content.json Lessons, flashcards and practice questions
154
- │ └── index.html Your study website
155
- ├── audio/ Optional audio notes
156
- │ ├── scripts/ Narration text
157
- │ └── tracks/ Audio lessons
158
- └── .tum-mcp/
159
- ├── course.md Cited course orientation, rules and unknowns
160
- ├── state.json Course identity and source versions
161
- └── comments.json Passage comments, when added
61
+ tum-mcp install lecture # Prepare Lecture + TUM-Live tools and local ASR
62
+ tum-mcp install lecture --no-asr # Use captions/imported WebVTT instead
63
+ tum-mcp install studocu # Supplementary Studocu collection workflow
64
+ tum-mcp extensions status
162
65
  ```
163
66
 
164
- Your agent uses your configured AI provider to work with course material.
165
- Publishing uploads only the generated website; materials, audio and comments
166
- stay local. Study progress is saved in your browser.
67
+ **Lecture Notes** captures the professor's extra explanations, examples and
68
+ caveats, with timestamp links. It starts with transcripts and lecture materials;
69
+ only critical visuals need recording frames. Local recognition uses Apple Silicon
70
+ acceleration or a separate CPU runtime on supported hosts.
71
+ [Lecture Notes and recognizer requirements](docs/lecture-notes.md).
167
72
 
168
- ## Update
73
+ **Studocu** adds public search and reviewed import of permitted original PDFs you
74
+ save in your browser. Search coverage is incomplete; browser credentials stay out
75
+ of the integration. These supplementary materials remain for personal use and
76
+ cannot be included in published sites. [Studocu workflow](docs/study.md#studocu-materials).
169
77
 
170
- ```sh
171
- tum-mcp update
172
- ```
78
+ Remove either extension with `tum-mcp uninstall lecture` or
79
+ `tum-mcp uninstall studocu`. Notes, evidence and customizations are preserved.
173
80
 
174
- `update` downloads the latest release, validates its backend, installs it in the
175
- same npm location and refreshes configured clients. It never downgrades a newer
176
- installation. Use `tum-mcp update --local` to refresh the installed version without checking npm.
177
- From 0.6.0 or earlier, upgrade the npm package once to obtain this command.
178
- Sessions, preferences and downloads carry forward. User-edited entries and skills are
179
- preserved and reported for review. Reload the client; refresh its cached plugin
180
- if needed. Study sites are updated separately through the study workflows.
81
+ ## Privacy, updates and removal
181
82
 
182
- ## Remove
83
+ Sessions are encrypted locally. Your agent uses your configured AI provider to
84
+ process selected material. Publishing requires local GitHub CLI authentication
85
+ and an eligible GitHub plan: **the repository is private; the website is public**.
86
+ Review content before publishing. [Publishing details](docs/study.md#publish-a-study-website).
183
87
 
184
88
  ```sh
89
+ tum-mcp update # Upgrade the package and refresh managed clients
185
90
  tum-mcp uninstall
186
91
  ```
187
92
 
188
- The npm package, managed registrations and unchanged skills are removed. Settings, sessions,
189
- downloads and study projects are preserved. After closing clients, add
190
- `--purge-runtime` to remove generated runtimes or `--forget-credentials` to
191
- remove saved local credentials. [Removal details](docs/setup.md#update-and-remove).
192
- Use `--client NAME` to remove just one client, or `--keep-package` to retain npm.
193
-
194
- [Guide](docs/tum-mcp.md) · [Setup](docs/setup.md) · [Study workflows](docs/study.md) · [Development](docs/development.md)
93
+ Sessions, downloads, course projects and edited skills are preserved. Reload the
94
+ client after updates. [Update and removal options](docs/setup.md#update-and-remove).
195
95
 
96
+ [Command guide](docs/tum-mcp.md) · [Development](docs/development.md) ·
196
97
  [MIT](LICENSE) · [NOTICE](NOTICE) · [Report a problem](https://github.com/jamestesting0/tum-mcp/issues)
@@ -22,6 +22,9 @@ npm run test:package-lifecycle
22
22
 
23
23
  Python 3.13 is the managed runtime. Install Tesseract for OCR tests. Default tests
24
24
  use synthetic sources and credentials. No language-server installation is needed.
25
+ Studocu fixtures must likewise use synthetic documents and local transports, never
26
+ browser cookies, personal account details or live downloaded PDFs. The extension
27
+ is off by default; validate both selected and unselected skill packs.
25
28
  Set `TUM_MOODLE_SYSTEM_KEYRING=1` for a unique synthetic native-store round trip.
26
29
  The ordinary campus runtime uses encrypted local files and owner-restricted keys.
27
30
  Set `TUM_MCP_BROWSER_INTEGRATION=1` to include the real HTTP static-export browser
@@ -56,12 +59,20 @@ CI runs macOS, Windows and Linux, plus both distribution engines on WSL 3.x.
56
59
  Consumer checks install the actual npm artifact, discover tools, build a study
57
60
  site and test available Chromium browsers with temporary profiles and synthetic
58
61
  pages. WSL verifies Windows browser transport. No live account is used.
59
- Upgrade checks cover public 0.7.0, client refresh, customized-file conflicts,
62
+ Upgrade checks cover public 0.8.0 and 0.8.1, client refresh, customized-file conflicts,
60
63
  failed preparation, runtime repair and removal that preserves work/credentials.
61
64
  The package-lifecycle check uses a local synthetic registry and real isolated
62
65
  global npm prefixes to verify downloads, backend validation, replacement,
63
66
  failure ordering and one-command removal. It does not publish a test release.
64
67
  All five jobs must pass on the exact pushed commit before completion is claimed.
68
+ Desktop jobs additionally install the optional hash-locked CPU recognizer and
69
+ transcribe the synthetic speech fixture; supported Apple Silicon runners also
70
+ exercise MLX. This explicit test downloads public pinned model files, never campus
71
+ recordings. Ordinary test runs skip it unless `TUM_MCP_LECTURE_ASR_INTEGRATION=1`.
72
+ Recognition runs before package lifecycle checks to expose native dependency
73
+ failures early. Windows also runs the affected browser/UTF-8 fixture checks first.
74
+ Its complete job budget is 35 minutes for native ACL and subprocess coverage;
75
+ the macOS and Linux budgets remain 25 minutes.
65
76
 
66
77
  Live Moodle checks are opt-in: `TUM_MOODLE_LIVE=1 uv run pytest tests/live -q`.
67
78
  They use the developer's selected course and saved session. Keep them out of CI.
@@ -129,3 +140,20 @@ Chromium sign-in/MFA, read a PDF and forum, download a file, then restart and ch
129
140
  session reuse. Automated synthetic sign-in does not certify human SSO on every OS.
130
141
  For UI changes, exercise the generated app at narrow/wide widths in both themes;
131
142
  check keyboard navigation, reduced motion, source links and retained progress.
143
+
144
+ ## Optional Lecture extension
145
+
146
+ Base setup exposes six workflows and no `tum_live_*` tools. `install lecture`
147
+ records explicit selection, refreshes managed clients and provisions the optional
148
+ recognizer only when requested/supported. `--no-asr` keeps captions/imported WebVTT.
149
+ Heavy recognition dependencies and model weights stay outside the base environment
150
+ and package artifacts. `lecture_processing/` owns bounded media/ASR evidence;
151
+ `lecture_content.py`, `lecture_data.py` and `lecture_assets.py` validate the notes
152
+ and figures used by the static app. See [the workflow guide](lecture-notes.md).
153
+
154
+ Use `skills validate --all` to check the packaged optional workflow without installing
155
+ it; default validation checks the selected six/seven. Activation statistics remain
156
+ unmeasured until genuine fresh-session trial records exist. Default tests use
157
+ synthetic media and course data. `test:consumer` and `test:upgrade` exercise optional
158
+ install/update/export/removal from an actual local npm artifact. Never publish or
159
+ stage npm as a test.
@@ -0,0 +1,138 @@
1
+ # Lecture Notes
2
+
3
+ Install the optional extension only when needed:
4
+
5
+ ```sh
6
+ tum-mcp install lecture
7
+ # Captions/imported WebVTT without provisioning recognition:
8
+ tum-mcp install lecture --no-asr
9
+ ```
10
+
11
+ Restart the coding client to load Prepare Lecture and the three TUM-Live metadata
12
+ tools. Base setup keeps its six skills and existing services. Removing the option
13
+ with `tum-mcp uninstall lecture` preserves course notes, evidence, sessions,
14
+ model caches and customizations. Reinstalling can reuse them.
15
+
16
+ Ask: “Prepare Lecture Notes from this recording and these slides, focusing on
17
+ what the professor explains beyond the material.” It adds Lecture Notes to the
18
+ same course app, alongside Study and Exercises. Notes have coherent explanations,
19
+ examples, important qualifications, formulas, selective source images and direct
20
+ timestamp access. Attribution review stays private, so the reading flow is clean.
21
+ Lecture Notes has no quizzes or flashcards; broader teaching/practice stays in Study.
22
+
23
+ ## Processing order and cost
24
+
25
+ 1. Validate the selected recording. Whole-recording silence markers make it invalid;
26
+ stop before content, including cached transcripts/images. Missing duration can
27
+ be resolved from bounded playlist metadata. Partial silence/cuts retain the
28
+ original recording clock.
29
+ 2. Prefer existing captions or supplied original-time WebVTT. Otherwise the optional
30
+ pinned local recognizer scans retained audio in resumable chunks. It checks all
31
+ channels, preserves coverage gaps and flags uncertain/repetitive recognition.
32
+ Three quiet samples alone cannot invalidate a recording.
33
+ 3. Read compact transcript passages, map the full retained lecture and compare with
34
+ verified slides/materials. Select additional reasoning, examples, corrections,
35
+ caveats and advice; do not claim novelty when comparison materials are missing.
36
+ 4. Use only a few critical recording frames when text/materials leave a consequential
37
+ visual question unresolved. No default previews or frame-by-frame model calls.
38
+ Captures use measured times and verified image bytes. Supporting diagrams use
39
+ normal content blocks, with private attribution review.
40
+ 5. Review the notes, citations and selected figures, then build a coherent batch.
41
+
42
+ Vision cost depends on the chosen model and image size. This workflow reduces
43
+ unnecessary images and model context; it does not promise a fixed price or a
44
+ measured accuracy improvement. In the selected 81-minute retained-audio experiment,
45
+ compact text for 200 passages used 39,412 bytes versus 372,519 with word details,
46
+ with identical text/times. An unchanged preparation reused 12 recognition
47
+ checkpoints with zero inference and fetched about 456 KB of playlist metadata.
48
+ These are observations from that source and cache, not universal benchmarks.
49
+ A direct media playlist offered no separate audio rendition; the processor used
50
+ bounded muxed segments rather than guessing alternative download URLs.
51
+
52
+ ## Host commands
53
+
54
+ Use the existing course binding and campus connection. Authentication is separate
55
+ from HTTP media retrieval; do not export cookies or pass signed URLs to download
56
+ commands. Captions and imported original-time WebVTT work without a recognizer.
57
+ Automatic ASR installs separately with hash-locked CPython 3.13 wheels and lazy,
58
+ revision-pinned public model weights; neither is part of the base runtime.
59
+
60
+ | Host | Local recognizer |
61
+ | --- | --- |
62
+ | Apple Silicon macOS 15+ | MLX acceleration by default |
63
+ | Apple Silicon macOS 14 | CPU int8 |
64
+ | Intel macOS 13+ | CPU int8 |
65
+ | Windows x64 | CPU int8; Microsoft Visual C++ runtime required |
66
+ | Linux/WSL x86_64 or ARM64, glibc 2.28+ | CPU int8 |
67
+
68
+ Native Windows ARM64, 32-bit systems and musl Linux have no supported locked
69
+ runtime. Use captions/imported WebVTT there. CPU inference requires compatible
70
+ CTranslate2 instructions (SSE4.1 on x86); installation verifies native imports and
71
+ int8 support before selecting the runtime. See the upstream
72
+ [CTranslate2 requirements](https://opennmt.net/CTranslate2/installation.html).
73
+ Windows, Linux x64 and Apple Silicon recognition have native CI smoke checks;
74
+ Intel Mac and Linux ARM64 compatibility also depends on the published wheels.
75
+
76
+ FFmpeg and ffprobe must be on PATH for recording audio extraction or selected
77
+ video frames. They are unnecessary for imported captions and cached text.
78
+ `lecture runtime status` reports the selected engine and missing prerequisites.
79
+ Use `lecture runtime install` to retry after fixing a prerequisite. Advanced users
80
+ can set `TUM_MCP_LECTURE_ENGINE=cpu` consistently for installation and preparation
81
+ to bypass Metal; the default `auto` retains existing MLX runtimes and model caches.
82
+ An engine switch uses separate caches. No cloud transcription API is configured.
83
+
84
+ CPU decoding uses int8, one worker and at most four threads. It consumes the full
85
+ retained audio, with word timestamps and no VAD retiming. ASR remains fallible,
86
+ especially for names and notation; compare important wording with slides and the
87
+ recording rather than treating confidence scores as proof.
88
+
89
+ ```sh
90
+ tum-mcp lecture inspect PROJECT
91
+ tum-mcp lecture runtime status
92
+ tum-mcp lecture prepare PROJECT --recording URL
93
+ # One selected recording with supplied captions:
94
+ tum-mcp lecture prepare PROJECT --recording URL --transcript lecture.vtt
95
+ # Read bounded compact pages; continue with returned next_offset:
96
+ tum-mcp lecture transcript PROJECT --recording KEY --start 0 --end 28800 --limit 200 --offset 0
97
+ # Only after identifying an unresolved visual question:
98
+ tum-mcp lecture prepare PROJECT --recording URL --frame-at SECONDS
99
+ tum-mcp lecture frames PROJECT --recording KEY --start START --end END
100
+ ```
101
+
102
+ `--words` adds word alignment details to transcript reads. `prepare --previews`
103
+ explicitly requests approximate seek candidates; they are not verified capture
104
+ times. `--language en` is appropriate only for a known English recording.
105
+
106
+ Prepared media, raw transcripts, receipts and review notes stay under `.tum-mcp/`.
107
+ Safe source receipts can be reconciled into the shared inventory:
108
+
109
+ ```sh
110
+ tum-mcp lecture export-snapshot PROJECT --output snapshot.json
111
+ tum-mcp study sync PROJECT --snapshot snapshot.json
112
+ tum-mcp study schema lectures
113
+ tum-mcp study build PROJECT --local-only
114
+ tum-mcp study inspect PROJECT
115
+ ```
116
+
117
+ The agent authors `app/lectures.json` using real source hashes and coverage; the
118
+ legacy `study/` layout stays supported. Captured images stage in
119
+ `.tum-mcp/lecture-assets/` and copy only when selected. Source freshness and note
120
+ semantic revision are separate, preserving passage comments through harmless
121
+ receipt/image updates. Local comments support `--view lectures --lecture KEY`.
122
+
123
+ Open with `tum-mcp study` from the course folder. For a credential-free synthetic
124
+ preview after installing the extension, use `tum-mcp study demo PROJECT --lectures`.
125
+ The default demo still has only Study and Exercises. Synthetic teaching/timestamps
126
+ exercise the product and do not establish real lecture accuracy.
127
+
128
+ ## Publication
129
+
130
+ Lecture Notes is excluded from publication by default, including old saved
131
+ configurations. After reviewing public exposure, use the existing publish-course
132
+ workflow with `--include-lectures`; Exercises has a separate choice. Exclusion
133
+ removes lecture text, lecture-only sources/math and referenced images from exports,
134
+ and removes previously managed remote images while preserving unrelated files.
135
+ Raw media/transcripts, comments and private review metadata are never exported.
136
+ The entire export, including its ownership marker, must fit 16 MiB and 100 files.
137
+ Essential figures are not silently omitted/compressed; a notes-only app excluded
138
+ from publication cannot produce an empty site.
package/docs/setup.md CHANGED
@@ -21,9 +21,15 @@ tum-mcp --help
21
21
 
22
22
  Use `--client claude`, `cursor`, `antigravity`, or `generic` for another client.
23
23
  Codex needs the plugin enabled and a restart when prompted. Cursor and
24
- Antigravity setup installs all six skills and MCP configuration; restart each
24
+ Antigravity setup installs all six base skills and MCP configuration; restart each
25
25
  client afterward. Existing MCP-only setups gain the skills through `tum-mcp update`
26
26
  or another setup run. Generic setup writes configuration for manual installation.
27
+
28
+ Studocu is optional: run `tum-mcp install studocu`, then reload the client. The
29
+ extension adds the `sync-studocu` skill and its tools. `tum-mcp extensions status`
30
+ reports the local selection; `tum-mcp extensions remove studocu` disables it and
31
+ preserves course materials and customized files. Generic clients use
32
+ `tum-mcp skills export DESTINATION` to install the active pack manually.
27
33
  Setup preserves unrelated settings and refuses to
28
34
  replace customized entries. It does not authenticate or fetch courses.
29
35
 
@@ -31,12 +37,12 @@ replace customized entries. It does not authenticate or fetch courses.
31
37
 
32
38
  Run **`tum-mcp connect`**, with no arguments, in an interactive terminal:
33
39
 
34
- 1. Use up/down to move and Space to select Moodle, Artemis and/or Zulip.
40
+ 1. Use up/down to move and Space to select Moodle, Artemis, Zulip and/or TUMonline.
35
41
  2. Press Enter. If several browsers are installed, choose one and press Enter.
36
42
  3. Complete TUM sign-in/MFA in the opened window. Only selected service tabs open.
37
43
  4. Return to the terminal for the saved-connection result.
38
44
 
39
- All three services use the same sign-in and encrypted session storage flow.
45
+ The services use the same temporary-browser sign-in and encrypted session storage flow.
40
46
  No API key or native credential-store prompt is needed. A temporary browser
41
47
  profile keeps the connection separate from your everyday browser. Ctrl+C closes it and preserves
42
48
  connections that already completed. A dumb terminal uses numbered prompts.
@@ -51,6 +57,12 @@ After sign-in, Artemis and Zulip can read content available to your campus accou
51
57
  No local course/channel grants are required. Your agent uses status/discover and
52
58
  course metadata to find relevant current-semester material, then makes bounded reads.
53
59
  An account ID identifies a saved service connection; it is not your TUM login.
60
+ TUMonline additionally has a local policy: `tum-mcp manage tumonline --show`
61
+ shows it, `tum-mcp manage tumonline` changes the studies and courses permission,
62
+ and `tum-mcp manage tumonline --disconnect` removes its saved local session.
63
+ Use `--account ACCOUNT_ID` if more than one TUMonline account is configured.
64
+ Study names, public course metadata and public course curriculum positions are available by default; full curriculum and
65
+ grades or progress are not yet available. [Details and limitations](tum-mcp.md#tumonline-permissions).
54
66
  `tum-mcp --help` lists commands; `tum-mcp study build --help` shows command options.
55
67
 
56
68
  ## WSL
package/docs/study.md CHANGED
@@ -1,6 +1,37 @@
1
1
  # Course study projects
2
2
 
3
- Six focused skills cover source reading, course sync, Study preparation, Exercises preparation, audio and publishing.
3
+ Six base skills cover source reading, course sync, Study preparation, Exercises preparation, audio and publishing.
4
+ The optional `prepare-lecture` skill adds a Lecture Notes workspace; install it with
5
+ `tum-mcp install lecture`. See [Lecture Notes](lecture-notes.md).
6
+ The optional `sync-studocu` skill collects selected student-uploaded material separately.
7
+
8
+ ## Studocu materials
9
+
10
+ Install the optional extension with `tum-mcp install studocu` and reload your
11
+ client. Ask `sync-studocu` to collect materials for a course project. It can
12
+ initialize a Studocu-only project with a verified course and semester.
13
+ Search is anonymous and bounded; a limited result set is not a complete inventory.
14
+ `tum-mcp studocu connect` explains how to sign in to Studocu in your own browser.
15
+ The extension cannot infer account entitlement or download original files through
16
+ the public MCP. Save an original that your account permits in the browser.
17
+
18
+ The skill records a reviewed selection with `tum-mcp studocu plan PROJECT
19
+ --selection FILE` and tracks it with `tum-mcp studocu status PROJECT --json`.
20
+ Import a selected original with `tum-mcp studocu import PROJECT --document-id ID
21
+ --file FILE`. The document-to-file association is user-selected. Originals go to
22
+ `materials/studocu/summaries`, `materials/studocu/exams` (including mocks and
23
+ solutions), or `materials/studocu/other`. Files remain local and retain their
24
+ original bytes. Consult the skill's collection reference for the selection schema.
25
+ Exact matches in the same group, type and known year share one original through
26
+ a private alias. Each selected document retains its own source identity and URL.
27
+ Changing a document's classification or refreshing its original separates aliases
28
+ when they no longer match; previous versions remain in private history.
29
+ When an existing selection is planned again, unchanged duplicate originals are
30
+ consolidated. Edited or missing files are preserved for review.
31
+
32
+ Local study material can cite student uploads. Publishing rejects included
33
+ Studocu-backed sources; this source check cannot identify uncited copied text or
34
+ replace a review of the published content.
4
35
  They run in your local agent, using the connected
5
36
  MCP tools to read course sources. The CLI validates and stores the resulting local
6
37
  files; it does not run an AI model.
@@ -35,8 +66,10 @@ failed setup retries the same saved repository rather than creating duplicates.
35
66
  Study is the default hosted workspace, including for old settings. Exercise
36
67
  statements, hints and full solutions need explicit `--include-exercises` on the
37
68
  publish command after reviewing their public exposure. `--exclude-exercises`
38
- returns a combined site to Study only, using the same repository and URL. An
39
- Exercises-only site also requires explicit inclusion.
69
+ removes Exercises from subsequent eligible exports, using the same repository and URL. An
70
+ Exercises-only site also requires explicit inclusion. Lecture Notes separately requires
71
+ `--include-lectures`; old settings default to exclusion. `--exclude-lectures` also removes
72
+ previously managed lecture images. A notes-only export with notes excluded is refused.
40
73
 
41
74
  Only the selected generated website renderer and data are uploaded. Downloaded
42
75
  originals, credentials, AGENTS.md, study inventory, passage comments, progress,
@@ -96,7 +129,7 @@ pse-ws26/
96
129
  course.md Cited course structure, logistics, rules and unknowns
97
130
  state.json Course binding, source versions and coverage
98
131
  notes/ Detailed course/agent notes when needed
99
- app/ Shared Study and Exercises website
132
+ app/ Shared Study, Exercises and optional Lecture Notes website
100
133
  content.json Optional source-backed Study content
101
134
  exercises.json Optional prepared exercise guidance
102
135
  audio/ Optional category audio derived from the prepared website
package/docs/tum-mcp.md CHANGED
@@ -107,7 +107,7 @@ tum-mcp study build --help
107
107
  `connect` takes no arguments or connection options. Move with up/down, toggle
108
108
  services with Space, and press Enter. Choose a browser when more than one is
109
109
  installed. Only selected tabs open in one temporary browser context. Moodle,
110
- Artemis and Zulip all follow this flow.
110
+ Artemis, Zulip and TUMonline all follow this flow.
111
111
  Sign-in/MFA stays in the browser. `TERM=dumb` uses numbered prompts. Ctrl+C
112
112
  cancels and retains completed connections.
113
113
 
@@ -121,15 +121,53 @@ when the temporary browser closes. Existing browser profiles are never imported.
121
121
  Zulip uses its read-only `/json/` routes with the browser session; no API key is
122
122
  required. Reconnect through the same selector when a session expires.
123
123
  See [Zulip's dispatcher](https://github.com/zulip/zulip/blob/12.0/zerver/lib/rest.py).
124
- Read access follows the authenticated account's server permissions. No local course,
124
+ For Moodle, Artemis and Zulip, read access follows the authenticated account's server permissions. No local course,
125
125
  channel, private-channel or personal-feedback grant is required. Older saved grant
126
126
  fields remain readable for compatibility and do not restrict read access. Agents
127
127
  prefer relevant current-semester courses and channels, inspect metadata first, and
128
128
  page through only the content needed for the request. Explicit older-course requests
129
129
  remain supported. Server-denied content, staff-only material and remote writes stay unavailable.
130
130
 
131
+ ### TUMonline permissions
132
+
133
+ TUMonline has a separate, account-specific policy. New connections allow study
134
+ names and degrees, public course catalog metadata and public curriculum positions
135
+ for a selected course by default. The position endpoint is anonymous: no student
136
+ session or identifier is sent. These positions are a partial view, not a full
137
+ program curriculum or personal enrollment list; page order can change upstream.
138
+ Course catalog searches accept a title or course number using 2–80 letters,
139
+ numbers, spaces, dots, underscores, plus signs, slashes or hyphens; continue pages
140
+ with the same query.
141
+ Full curriculum structure is unavailable because its public API requires a separate
142
+ service account. Grades and progress need
143
+ separate consent, but their readers are not yet available; exams, admission,
144
+ account, other IT and miscellaneous readers are also unavailable. No campus write
145
+ operations are provided.
146
+
147
+ Run `tum-mcp manage tumonline --show` to inspect the policy and
148
+ `tum-mcp manage tumonline` in a terminal to select permissions with Space and
149
+ save with Enter. Studies and courses can be allowed or revoked; the remaining
150
+ categories are shown as unavailable and cannot be selected. On basic terminals,
151
+ the command offers a numbered text prompt instead.
152
+ When multiple accounts exist, add `--account ACCOUNT_ID`. Reconnecting preserves
153
+ the policy. `tum-mcp manage tumonline --disconnect` removes the local TUMonline
154
+ credential and retains the policy; it does not revoke remote sessions. An expired
155
+ session requires `tum-mcp connect` again. If the policy is missing or corrupt, use
156
+ `tum-mcp manage tumonline --account ACCOUNT_ID --disconnect` to remove that saved
157
+ session without resetting permissions or affecting other providers.
158
+
159
+ The policy governs what these TUMonline tools return to all MCP clients sharing
160
+ the same local configuration. A local program running as the same user can access
161
+ local files independently, and this policy does not govern other providers' tools,
162
+ including Moodle's own grades tools. Study names are personal and permitted results
163
+ may be transmitted to your configured agent or its AI provider. TUMonline's study
164
+ chooser can contain extra personal fields in its upstream response; the integration
165
+ holds that bounded response only in memory, projects the permitted fields, and does
166
+ not save the response body. Revoking a permission prevents subsequent reads, but
167
+ cannot recall a response already delivered to a client.
168
+
131
169
  Settings live outside the installed package in `TUMMCP/config/preferences.json`.
132
- Moodle sessions live under `TUMMoodle/local-session/`; Artemis and Zulip credentials
170
+ Moodle sessions live under `TUMMoodle/local-session/`; Artemis, Zulip and TUMonline credentials
133
171
  live under `TUMMCP/credentials/local/`. Each directory has an independent `session.key`.
134
172
  Encrypted records and keys have owner-only permissions: 0700 directories / 0600
135
173
  keys on POSIX; protected current-user DACLs on Windows through PowerShell. No
@@ -1,5 +1,5 @@
1
1
  {
2
- "wheel": "tum_mcp-0.8.0-py3-none-any.whl",
3
- "wheelSha256": "30615a22c87ec1bf74ca02b6adb1c7345f066a5d3c0047beabe60e1472fa7fdd",
4
- "requirementsSha256": "25f9efa7a4ffb0b97abcfeb9d4706d04808273ab1b35abcfaa1ef0b66e87591b"
2
+ "wheel": "tum_mcp-0.9.0-py3-none-any.whl",
3
+ "wheelSha256": "0af36e0b89e055a49ae7a8cfa144ff98fdd4feb9e82b724e6ee629f8f4e51b7b",
4
+ "requirementsSha256": "39a401b6e606d3292eb91b8fe9ef60367d4852f203eb409dc52f38b76e513ccf"
5
5
  }
@@ -342,6 +342,10 @@ latex2mathml==3.81.1 \
342
342
  --hash=sha256:c337668441b71c819b6733905a8058ba9a9d767bae11a0c5fdacb3aff31361bd \
343
343
  --hash=sha256:c95add0c0fcdecad2d70567e0643050d5ea1149fb2e98a5d5792fb1c8eea2ed5
344
344
  # via tum-mcp
345
+ m3u8==6.0.0 \
346
+ --hash=sha256:566d0748739c552dad10f8c87150078de6a0ec25071fa48e6968e96fc6dcba5d \
347
+ --hash=sha256:7ade990a1667d7a653bcaf9413b16c3eb5cd618982ff46aaff57fe6d9fa9c0fd
348
+ # via tum-mcp
345
349
  markdown-it-py==4.2.0 \
346
350
  --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \
347
351
  --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a
@@ -368,6 +372,10 @@ opentelemetry-api==1.45.1 \
368
372
  --hash=sha256:aa38ed19bcc084ba42782a73255b3582283eced7ad6dddbd6695189e69adfb75 \
369
373
  --hash=sha256:b31553efa588ae44bc306f863c785c5333a9ecc091248c6ee68b4b6c87fdedfb
370
374
  # via mcp
375
+ packaging==26.3 \
376
+ --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \
377
+ --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c
378
+ # via tum-mcp
371
379
  pillow==12.3.0 \
372
380
  --hash=sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59 \
373
381
  --hash=sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45 \
package/npm/tum-mcp.mjs CHANGED
@@ -13,6 +13,7 @@ try {
13
13
  Usage: tum-mcp COMMAND [OPTIONS]
14
14
 
15
15
  setup Configure your coding client and managed runtime
16
+ install Install an optional extension: lecture or studocu
16
17
  connect Sign in to selected campus services
17
18
  status Show saved connections
18
19
  discover List accessible courses or channels
@@ -23,6 +24,8 @@ Usage: tum-mcp COMMAND [OPTIONS]
23
24
  serve Run the MCP server over stdio
24
25
  version Show the installed version
25
26
  skills Manage local workflow skills
27
+ extensions Manage optional extensions
28
+ studocu Manage selected Studocu materials
26
29
  study Prepare, preview and publish a course app
27
30
 
28
31
  Use --help for options, for example: tum-mcp study build --help
@@ -30,7 +33,9 @@ Run setup to provision the managed backend, then connect to sign in.
30
33
  Reads use your campus account permissions; no local scope selection is needed.`);
31
34
  } else if (['--version', 'version'].includes(args[0])) {
32
35
  console.log(version);
33
- } else if (['setup', 'update', 'uninstall'].includes(args[0]) && args.some(arg => ['--help', '-h'].includes(arg))) {
36
+ } else if (args[0] === 'install' && args.some(arg => ['--help', '-h'].includes(arg))) {
37
+ console.log('Usage: tum-mcp install lecture [--asr|--no-asr] | tum-mcp install studocu\nInstall an optional Lecture or Studocu workflow and its tools. Lecture recognition dependencies are isolated; models load on demand.');
38
+ } else if (['setup', 'update', 'uninstall'].includes(args[0]) && !['lecture', 'studocu'].includes(args[1]) && args.some(arg => ['--help', '-h'].includes(arg))) {
34
39
  const help = {
35
40
  update: 'Usage: tum-mcp update [--local]\nInstall the latest npm release and refresh configured clients.\n--local refreshes this installed version without contacting npm.',
36
41
  setup: 'Usage: tum-mcp setup [--client codex|claude|cursor|antigravity|generic] [--host local|windows]\nProvision the managed runtime and register explicitly selected clients.',
@@ -38,12 +43,13 @@ Reads use your campus account permissions; no local scope selection is needed.`)
38
43
  };
39
44
  console.log(help[args[0]]);
40
45
  } else {
46
+ if (args[0] === 'install' && !['lecture', 'studocu'].includes(args[1])) throw new Error('Usage: tum-mcp install lecture [--asr|--no-asr] | tum-mcp install studocu.');
41
47
  let packageAction = args[0] === 'update';
42
48
  if (args[0] === 'update') {
43
49
  if (args.length > 2 || (args.length === 2 && args[1] !== '--local')) throw new Error('Usage: tum-mcp update [--local]. Use --help for details.');
44
50
  if (args[1] === '--local') { packageAction = false; args = ['update']; }
45
51
  }
46
- if (args[0] === 'uninstall') {
52
+ if (args[0] === 'uninstall' && !['lecture', 'studocu'].includes(args[1])) {
47
53
  const { values } = parseArgs({ args: args.slice(1), options: {
48
54
  all: { type: 'boolean' }, client: { type: 'string' }, host: { type: 'string' },
49
55
  'keep-package': { type: 'boolean' }, 'purge-runtime': { type: 'boolean' }, 'forget-credentials': { type: 'boolean' },
@@ -58,7 +64,7 @@ Reads use your campus account permissions; no local scope selection is needed.`)
58
64
  if (packageAction) {
59
65
  process.exitCode = await managePackage(args[0], args.slice(1), dataRoot());
60
66
  } else {
61
- let python = ['setup', 'update'].includes(args[0]) ? await ensureRuntime() : currentPython();
67
+ let python = ['setup', 'update', 'install'].includes(args[0]) ? await ensureRuntime() : currentPython();
62
68
  if (args[0] === 'uninstall' && !python) python = await ensureRuntime();
63
69
  if (!python) throw new Error('SETUP_REQUIRED: Run tum-mcp setup first.');
64
70
  const forwarded = args;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jamestesting888/tum-mcp",
3
- "version": "0.8.0",
4
- "description": "Read-only TUM Moodle, Artemis and Zulip integration with source-backed study workflows",
3
+ "version": "0.9.0",
4
+ "description": "Read-only TUM campus tools and source-backed study, exercise and lecture workflows",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
@@ -28,7 +28,8 @@
28
28
  "docs/setup.md",
29
29
  "docs/development.md",
30
30
  "docs/tum-mcp.md",
31
- "docs/study.md"
31
+ "docs/study.md",
32
+ "docs/lecture-notes.md"
32
33
  ],
33
34
  "scripts": {
34
35
  "prepack": "node npm/build.mjs",
@@ -54,6 +55,9 @@
54
55
  "moodle",
55
56
  "artemis",
56
57
  "zulip",
57
- "codex"
58
+ "codex",
59
+ "tumonline",
60
+ "studocu",
61
+ "lecture-notes"
58
62
  ]
59
63
  }