@jamestesting888/tum-mcp 0.5.0 → 0.6.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/docs/setup.md CHANGED
@@ -2,8 +2,7 @@
2
2
 
3
3
  [README](../README.md) · [Tools and scopes](tum-mcp.md) · [Development](development.md)
4
4
 
5
- These instructions apply to **0.5.0**. Upgrade older installations before using
6
- the interactive connection flow below.
5
+ Use the latest package for the connection, managed update and removal flows below.
7
6
 
8
7
  ## Install
9
8
 
@@ -13,7 +12,7 @@ targets are macOS ARM64/x64, Windows ARM64/x64 and glibc Linux ARM64/x86_64.
13
12
  Linux needs a graphical desktop for native browser sign-in; WSL can use Windows.
14
13
 
15
14
  ```sh
16
- npm install --global @jamestesting888/tum-mcp@0.5.0
15
+ npm install --global @jamestesting888/tum-mcp@latest
17
16
  tum-mcp setup --client codex
18
17
  tum-mcp connect
19
18
  tum-mcp doctor
@@ -21,8 +20,10 @@ tum-mcp doctor
21
20
 
22
21
  Use `--client claude`, `cursor`, `antigravity`, or `generic` for another client.
23
22
  Codex needs the plugin enabled and a restart when prompted. Cursor and
24
- Antigravity need their MCP servers reloaded. Generic setup writes configuration
25
- for manual installation. Setup preserves unrelated settings and refuses to
23
+ Antigravity setup installs all five skills and MCP configuration; restart each
24
+ client afterward. Existing MCP-only setups gain the skills through `tum-mcp update`
25
+ or another setup run. Generic setup writes configuration for manual installation.
26
+ Setup preserves unrelated settings and refuses to
26
27
  replace customized entries. It does not authenticate or fetch courses.
27
28
 
28
29
  ## Connect
@@ -60,7 +61,7 @@ release; distributions still use engine 1 or 2. See Microsoft's
60
61
  Both engines have dedicated CI checks on the current WSL 3.x runner image.
61
62
 
62
63
  ```sh
63
- npm install --global @jamestesting888/tum-mcp@0.5.0
64
+ npm install --global @jamestesting888/tum-mcp@latest
64
65
  tum-mcp setup --client cursor --host windows
65
66
  tum-mcp connect
66
67
  tum-mcp doctor
@@ -95,13 +96,18 @@ browser discovery still requires functioning interop.
95
96
  tools. Saved sessions are **Not verified** until checked; registration alone
96
97
  does not prove a desktop client is running the server.
97
98
  - `tum-mcp doctor --live` verifies saved local sessions with bounded service
98
- reads. `--json` provides structured output; combine the flags if needed.
99
+ reads and checks optional GitHub CLI authentication. `--json` provides structured
100
+ output; combine the flags if needed. Default doctor checks only CLI availability.
101
+ - For optional study publishing, install GitHub CLI and complete
102
+ `gh auth login --hostname github.com` interactively on the agent's execution host.
103
+ The [publishing workflow](study.md#publish-a-study-website) uses private repositories
104
+ with public Pages websites and requires an eligible paid GitHub plan.
99
105
  - An expired session uses the same `tum-mcp connect` selector. Reconnecting the
100
106
  same identity preserves course/channel scopes.
101
107
  - If no browser appears, check its installation or `TUM_MCP_BROWSER`. A managed
102
108
  or incompatible Chromium build may prevent automation; try another browser.
103
- - Git is optional for assignment workspaces. Docker is optional for approved
104
- isolated tests. Missing either does not prevent course reads.
109
+ - Git and Docker are optional. Neither is needed for course reads or the
110
+ GitHub CLI based study publisher.
105
111
  - Do not paste passwords, cookies, MFA codes or API keys into chat or bug reports.
106
112
 
107
113
  Sessions are encrypted with owner-restricted local key files. This avoids native
@@ -111,12 +117,70 @@ explain migration and backup. Existing Moodle data and downloads are preserved.
111
117
 
112
118
  ## Update and remove
113
119
 
114
- Update with `npm install --global @jamestesting888/tum-mcp@latest`, then rerun
115
- setup. Review conflicts instead of deleting customized client configuration.
116
- `tum-mcp uninstall --client cursor` (or your client) removes unchanged managed
117
- registration while retaining sessions, downloads and personal work. Codex plugin
118
- removal uses its Plugins UI. Remove the npm package separately with
119
- `npm uninstall --global @jamestesting888/tum-mcp`.
120
+ ```sh
121
+ npm install --global @jamestesting888/tum-mcp@latest
122
+ tum-mcp update
123
+ ```
124
+
125
+ `update` activates the backend bundled in the invoked npm package and refreshes
126
+ previously configured clients. It does not fetch a newer npm version itself,
127
+ connect services, change scopes or register additional clients. `setup --client
128
+ NAME` explicitly registers one client and can also refresh that client's managed
129
+ files. WSL Windows registrations keep their distribution/user/data paths.
130
+
131
+ Ownership receipts track the entries and files installed by TUM MCP. Unchanged
132
+ managed files advance; unrelated settings and extra files stay intact. Direct
133
+ edits to an entry or skill stop that client's update and are reported for review;
134
+ other clients can still advance. Old runtime generations remain available for
135
+ existing pinned clients. Interrupted setup can recover a stopped lock owner;
136
+ an ownerless/unknown legacy lock requires local review. A failed new runtime is
137
+ not selected, and a damaged runtime is repaired into a fresh generation. A newer
138
+ managed client is not silently downgraded by an older package; intentional
139
+ rollback starts by unregistering that client, then registering the reviewed version.
140
+
141
+ 0.4.1/0.5.0 installations without receipts are adopted only after matching their
142
+ retained runtime's canonical client output. The seven former workflow skills and the three website skills are replaced by
143
+ `read-content`, `sync-study` and `prepare-study`; `audio-notes` adds
144
+ spoken lessons derived from the prepared website. Personal overrides
145
+ under retired names remain in the config `skills/` directory; review and merge
146
+ retrieval guidance into `read-content` before exporting a replacement pack.
147
+ Reload MCP servers in Cursor/Antigravity, restart Claude as appropriate, and
148
+ update/reinstall TUM MCP from the personal source in Codex Plugins if its cached
149
+ copy still shows the older skills. Writing source files does not activate a host.
150
+
151
+ Remove a single client with `tum-mcp uninstall --client cursor` (replace the
152
+ client as needed; add `--host windows` from WSL for a Windows client). To remove
153
+ all managed registrations before uninstalling npm:
154
+
155
+ ```sh
156
+ tum-mcp uninstall --all
157
+ npm uninstall --global @jamestesting888/tum-mcp
158
+ ```
159
+
160
+ Custom edits and user-added files are preserved. Codex's local source/catalog
161
+ entry can be removed, but its cached/active plugin must also be removed or
162
+ disabled through Codex Plugins. No npm uninstall hook deletes user data.
163
+
164
+ For explicit cleanup, **close coding clients first**, then run:
165
+
166
+ ```sh
167
+ tum-mcp uninstall --all --purge-runtime --forget-credentials
168
+ npm uninstall --global @jamestesting888/tum-mcp
169
+ ```
170
+
171
+ `--purge-runtime` deletes verified managed runtime generations after the Python
172
+ helper exits, and removes unchanged managed bootstrap/browser-driver caches.
173
+ Active tracked backends or unrecognized runtime files stop automatic removal.
174
+ Paths overlapping configured assignment work, downloads or Moodle data are
175
+ protected. `--forget-credentials` removes local encrypted service sessions, keys
176
+ and participation Git tokens; it does not revoke remote credentials. Native
177
+ Keychain/Credential Manager/Secret Service records and legacy Moodle sessions
178
+ stay intact. Settings, custom skills, course cache, downloads and assignment
179
+ work are retained by these commands. No command recursively deletes the campus
180
+ data root. Course audio and optional shared speech models/runtimes also remain.
181
+ Remove a shared speech cache only when explicitly requested and no other course
182
+ needs it; its host paths are documented in the audio skill. If removal is
183
+ interrupted, run npm `setup` to recover before reuse.
120
184
 
121
185
  ## Existing Moodle-only installations
122
186
 
package/docs/study.md ADDED
@@ -0,0 +1,325 @@
1
+ # Course study projects
2
+
3
+ The five reading, study, audio and publishing skills ship with version **0.6.0**.
4
+ They run in your local agent, using the connected
5
+ MCP tools to read course sources. The CLI validates and stores the resulting local
6
+ files; it does not run an AI model.
7
+
8
+ ## Publish a study website
9
+
10
+ The optional `publish-study` skill makes a prepared site accessible from a phone
11
+ or another computer. Its GitHub repository is private; the Pages website is
12
+ public. An eligible paid GitHub plan is required for Pages from private repositories.
13
+ This workflow does not provide private website access. Review lesson text,
14
+ quotations and source links for the intended public audience before publishing.
15
+
16
+ Install GitHub CLI on the execution host and run `gh auth login --hostname github.com`.
17
+ `tum-mcp doctor` checks CLI availability without network access; `doctor --live`
18
+ also verifies GitHub authentication. It does not publish anything, open sign-in
19
+ automatically, extract tokens, or change Git credential settings.
20
+
21
+ ```sh
22
+ # Preview the chosen name and hosting requirements without GitHub mutations.
23
+ tum-mcp study publish --project PROJECT
24
+ # After choosing public website content; the repository stays private.
25
+ tum-mcp study publish --project PROJECT --public-site
26
+ # Optional account/name override on first setup:
27
+ tum-mcp study publish --project PROJECT --public-site --repository OWNER/NAME
28
+ ```
29
+
30
+ Names use `study-<course>-<semester>` in lowercase with hyphens. A collision gets
31
+ a stable course suffix; existing repositories are never made public. Settings in
32
+ `.study/github.json` bind updates to that course, semester and repository. A
33
+ failed setup retries the same saved repository rather than creating duplicates.
34
+
35
+ Only the generated website renderer and lesson data are uploaded. Downloaded
36
+ originals, credentials, AGENTS.md, study inventory, passage comments, progress,
37
+ audio and arbitrary files stay local. Git itself is not required: the publisher
38
+ uses authenticated GitHub API calls through `gh`. Local publication settings do
39
+ not contain credentials.
40
+
41
+ After setup, successful `tum-mcp study build PROJECT` commands update that same
42
+ repository automatically. Unchanged verified exports require no network calls
43
+ or commits. The study skills finish related edits in one build. Remote edits
44
+ are preserved for review; the publisher never force-pushes.
45
+
46
+ ```sh
47
+ tum-mcp study publish status PROJECT
48
+ tum-mcp study publish sync PROJECT # retry pending/failed deployment
49
+ tum-mcp study publish pause PROJECT # pause future automatic uploads
50
+ tum-mcp study publish resume PROJECT
51
+ tum-mcp study build PROJECT --local-only # skip uploading this build
52
+ ```
53
+
54
+ Uploads are verified against the Pages build and GitHub checks for the exact
55
+ commit. Pending deployment exits with code 2 and is resumable; a successful
56
+ repository update alone is not a deployed site. Authentication, plan or network
57
+ failures preserve the local build. Polling has a budget of at most 60 seconds,
58
+ in addition to bounded API requests.
59
+ The `tum-mcp study` launcher prints local, hosted and repository URLs, plus pending
60
+ or paused status. Study progress remains per browser; passage comments require
61
+ the local preview and are disabled in the hosted export. Device synchronization
62
+ and offline support are not included.
63
+
64
+ ## Start with one course
65
+
66
+ Use `sync-study` for both initial setup and later source updates. For a new project,
67
+ provide the course title and semester when known. The agent verifies
68
+ its availability, resolves source IDs and asks about ambiguous mappings. A project
69
+ cannot switch course or semester. Use a separate directory for another course.
70
+
71
+ ```text
72
+ Initialize ./pse-ws26 for Patterns in Software Engineering (WS26/27).
73
+ Use its available Artemis teaching material and record any missing sources.
74
+ ```
75
+
76
+ The agent inventories Moodle materials, announcements and forums; Artemis
77
+ lectures, learning units, student slides and statements; and mapped Zulip course
78
+ discussions. It reads only enabled sources. An unavailable login or partially
79
+ retrieved source is recorded as a gap rather than an empty course.
80
+
81
+ ```text
82
+ pse-ws26/
83
+ AGENTS.md Course knowledge and current inventory
84
+ materials/
85
+ content/ Lectures, slides and reading
86
+ exams/ Available revision material
87
+ exercises/ Released statements and practice references
88
+ other/ Announcements and course information
89
+ .study/state.json Course binding, source versions and coverage
90
+ study/ Optional interactive study website
91
+ audio/ Optional category audio derived from the prepared website
92
+ ```
93
+
94
+ `AGENTS.md` contains a concise prerequisite/notation map, verified assessment facts,
95
+ source locations, coverage and next actions. Detailed source content stays in
96
+ materials. Existing user instructions are preserved; source text is untrusted data.
97
+
98
+ ## State-based workflow
99
+
100
+ `sync-study` starts with `tum-mcp study status PROJECT`, a read-only local check:
101
+
102
+ | Mode | Action |
103
+ | --- | --- |
104
+ | `initialize` | Verify the chosen available course, then initialize its inventory. |
105
+ | `sync` | Reuse the bound course/semester and known source IDs; check the requested changes. |
106
+ | `recover` | Inspect incomplete, damaged or conflicting local state before writing. |
107
+
108
+ Existing material without state is inspected before adoption. Damaged state and
109
+ customized instructions are preserved; they are never treated as an empty project.
110
+ The status check does not authenticate services or prove upstream freshness.
111
+ The underlying `study init` and `study sync` commands remain separate.
112
+
113
+ ## Keep it current
114
+
115
+ Ask `sync-study` to compare the project with connected upstream sources. It
116
+ reuses the saved course, semester, source IDs and reliable revisions. It retrieves
117
+ changed material and updates course knowledge. Incomplete listings never imply withdrawal. Withdrawn sources
118
+ keep their local originals; edited or deleted managed files are reported for review.
119
+ Unchanged payloads can be reused when their source binding, URL, locator and
120
+ reliable revision match. Pending content stays pending across repeated checks;
121
+ a metadata-only check cannot make unfetched content current.
122
+
123
+ The agent updates course facts outside the inventory block. The helper checks
124
+ that its managed block has not been edited before replacing it. LF/CRLF
125
+ conversions are accepted, and synchronization preserves the existing line-ending style. A failed write
126
+ restores files when possible and reports any remaining conflict.
127
+
128
+ ## Prepare the website
129
+
130
+ Ask `prepare-study` to create or extend `study/`. Units follow the course's
131
+ lecture/week sequence when useful, or use consistent topics. For a single course, use a flat list or one category level followed by topics,
132
+ including several topics in one week. The multi-area demo also exercises deeper
133
+ legacy hierarchies. Every unit has:
134
+
135
+ - A concise explanation with source links, assumptions and worked examples.
136
+ - Editable LaTeX formulas and inline variables, diagrams, code or comparison tables where they explain the concept.
137
+ - Flip cards with arrow navigation, Space to flip and 1/2 for Again/Got it.
138
+ - Practice questions with exactly four options, one justified answer and feedback for every option.
139
+
140
+ The agent uses stored material first, so local content edits work offline. Ask for
141
+ an upstream refresh when you want new course content; an existing check is reused
142
+ within the same request. Unchanged units and reviewed material are retained.
143
+
144
+ The skill audits objective coverage, technical accuracy and distractors. Its
145
+ STE-inspired English uses short, direct sentences while retaining necessary terms
146
+ and conditions. The design contract uses TUM blue/navy with quiet reading surfaces,
147
+ local fonts, light/dark themes, keyboard navigation and a phone layout. The outline
148
+ collapses using a midpoint boundary arrow revealed on hover or keyboard focus;
149
+ touch screens keep a visible control. On phones it opens a viewport overlay from
150
+ any reading position, with its own scroll and Escape to close. Theme stays in the
151
+ outline; the reset icon is on the course home. A Next link follows the active
152
+ activity at the end of each view.
153
+
154
+ Revision combines flashcards and practice from topics you select. Open Revision in
155
+ the outline, choose topics and collapse the checklist when ready. It reuses the
156
+ course's categories; selecting a category includes all its topics, and a mixed
157
+ checkbox shows a partly selected category. Revision reuses the
158
+ original items, sources and progress; selecting or removing topics never clears
159
+ your results. The topic selection is remembered locally for this course.
160
+
161
+ The topic picker and its nested categories collapse independently. You can select a
162
+ whole category while it is closed; its count and mixed state reflect the selection.
163
+ At End of set, outlined question rows include a Review action and chevron. Click
164
+ one to review it in a popup. Closing the popup returns
165
+ you to the same results row without changing progress.
166
+
167
+ The website uses Atkinson Hyperlegible Next for headings, explanations and controls.
168
+ Code and mathematical notation retain their specialist fonts. Equations adapt to
169
+ their container and keep local horizontal scrolling for indivisible wide expressions.
170
+ Use `\(v_i\)` in teaching text for inline variables and short expressions (JSON:
171
+ `"Use \\(v_i\\)."`). They compile locally to native MathML, including in tables,
172
+ glossaries, cards, questions and feedback. Code and dollar signs stay literal.
173
+
174
+ Select text in Content, Flashcards or Practice, then click **Comment** to record what is unclear.
175
+ You can also use Ctrl/Command+Alt+M after selecting text. The local preview saves
176
+ notes in `.study/comments.json`, separately from learning progress. Click a
177
+ numbered passage marker or highlighted text to open its notes beside the quote.
178
+ Markers sit beside section headings or the current card/question position.
179
+ Notes can be edited, resolved or reopened; changed passages retain their original quotes.
180
+ Revision notes retain their original topic and card/question identity.
181
+
182
+ Tell your agent: **“Address the open comments in this study project.”** The skill
183
+ reads the notes, checks the cited material, improves the affected explanation and
184
+ verifies the result before recording a resolution. Notes and status changes sync
185
+ automatically while the preview is open. Your draft is kept if a note changes
186
+ elsewhere; choose Use latest or Keep mine before saving. Reload after the agent
187
+ rebuilds the teaching content.
188
+
189
+ Content lives in `study/content.json`; shared renderer modules and CSS keep the
190
+ site extensible. Source hashes identify affected units. A stale source stops a
191
+ build until the explanation is reviewed. Unchanged units retain their revision;
192
+ revised questions receive separate progress. Customized templates are preserved
193
+ and reported, so the agent must review compatibility when extending them.
194
+
195
+ ```sh
196
+ tum-mcp study inspect ./pse-ws26
197
+ tum-mcp study build ./pse-ws26
198
+ ```
199
+
200
+ From the course project folder, launch the prepared app with:
201
+
202
+ ```sh
203
+ tum-mcp study
204
+ ```
205
+
206
+ It opens the default browser at `http://127.0.0.1:8765`. Keep the terminal open;
207
+ press Ctrl+C to stop. In WSL, it opens the Windows browser through Windows interop.
208
+ If automatic opening is unavailable, open the printed URL. For a different project
209
+ or an unattended preview, use `tum-mcp study serve ./pse-ws26 --port 8765`.
210
+ If port 8765 is busy, stop the other preview or choose `tum-mcp study --port 8766`.
211
+ Keep the same address and port between sessions so browser progress remains available.
212
+
213
+ The preview binds `127.0.0.1`, serves `study/` and saves comments through a bounded
214
+ same-origin endpoint. It makes no campus requests.
215
+ No course credentials are copied into the website. Browser storage holds progress
216
+ locally. Nothing is published by these commands.
217
+
218
+ ## Create and maintain audio notes
219
+
220
+ Use `prepare-study` to author the interactive course, then ask `audio-notes` to
221
+ convert that prepared content into spoken lessons. For example:
222
+
223
+ ```text
224
+ Create audio notes from this prepared study website, one file per category.
225
+ Keep course outputs under audio/; prefer free ElevenLabs with local Kokoro fallback.
226
+ ```
227
+
228
+ Audio Notes reads `study/content.json`, retaining the course's language, examples,
229
+ assumptions and limitations. It turns tables, formulas, code and diagram sequences
230
+ into explanations that work without a screen. It does not independently research
231
+ the course or create new subject matter. An audio-only request reuses the prepared
232
+ course; it does not refresh campus sources or rebuild the website automatically.
233
+
234
+ Before synthesis, Audio Notes consolidates repeated explanations and reviews the
235
+ script for coverage, clear terminology, concise examples and useful recall. It
236
+ preserves distinct ideas and conditions rather than targeting a fixed duration.
237
+ Teaching reviews are tied to the script and narration-guidance fingerprints;
238
+ updated guidance prompts a review of existing scripts without automatically
239
+ regenerating unchanged speech. These checks do not establish learning outcomes.
240
+
241
+ All course-specific audio files stay inside the project's `audio/` directory:
242
+
243
+ ```text
244
+ audio/
245
+ scripts/01_category.txt Editable narration, matching the track name
246
+ tracks/01_category.m4a One final AAC M4A per category
247
+ chapters/01_category.json Section titles and measured timestamps
248
+ manifest.json Last verified published coverage and fingerprints
249
+ plan.json Current categories and missing/changed/pending work
250
+ voice.json Actual provider, voice and settings; no credentials
251
+ playlist.m3u Tracks in the intended study order
252
+ README.md Playback, durations and update details
253
+ SOURCES.md Prepared content and original source locators
254
+ COVERAGE.md Source concepts mapped to narration and audio
255
+ .build/ Candidates, resumable chunks, downloads and QA
256
+ archive/ Recoverable superseded versions
257
+ ```
258
+
259
+ Names remain stable across updates, using prefixes and slugs such as
260
+ `01_security-foundations`. New content within a category updates that complete
261
+ track; a new category receives a new track. Existing audio is compared with
262
+ semantic content and file hashes, so unchanged speech can be reused. Scripts alone
263
+ do not count as completed audio coverage. Manual edits are preserved and reconciled.
264
+
265
+ The skill prefers free ElevenLabs when custom-text generation and downloading work.
266
+ Its anonymous website and authenticated API have different access requirements.
267
+ If free usage runs out or that route is unavailable, local Kokoro is the automatic
268
+ fallback unless the user explicitly restricts the provider. Affected categories
269
+ are regenerated with one Kokoro profile; completed categories remain intact.
270
+ Each category keeps its actual profile on later updates, and mixed providers across
271
+ categories are disclosed. Usage limits are respected; no paid usage or quota
272
+ workarounds are implied. Only reviewed narration goes to a cloud speech provider.
273
+
274
+ Kokoro weights, voices and pronunciation assets are cached once per execution
275
+ host/user, outside the course, with a reusable isolated runtime. The skill specifies
276
+ Windows, macOS and Linux locations, version/hash verification and safe cache reuse.
277
+ Course manifests record portable dependency identities rather than requiring a
278
+ previous machine's model paths. Setup is lazy, only when local synthesis is needed.
279
+ Actual OS/architecture, runtime and course-language compatibility are checked before
280
+ generation; unsupported or restricted hosts retain pending work with an explanation.
281
+
282
+ Candidates are validated before replacing usable tracks. Incomplete generations
283
+ remain pending with reusable work under `.build/`. Ask **“Complete the audio notes
284
+ for the updated study website”** to reconcile added, changed, removed or moved
285
+ material with the previous verified coverage. This is an agent skill, not a new
286
+ `tum-mcp study` CLI subcommand or a built-in speech service.
287
+
288
+ ## Packaged app template
289
+
290
+ The complete web-app template is packaged with `prepare-study` in `assets/site/`.
291
+ It includes the shell, navigation, flip cards, practice, diagrams and styling.
292
+ Agents author course content in `study/content.json`; `study build` installs the
293
+ shared template, preserves customized files and checks sources. This keeps new
294
+ course sites consistent without rebuilding the interface. `tum-mcp study template`
295
+ shows the bundled files and their combined revision for reproducible development.
296
+
297
+ ## Try the synthetic example
298
+
299
+ After installing a locally built development artifact:
300
+
301
+ ```sh
302
+ tum-mcp study demo ./algorithms-demo
303
+ tum-mcp study serve ./algorithms-demo
304
+ ```
305
+
306
+ This creates a clearly labelled synthetic course on graphs, BFS and DFS, including
307
+ LaTeX rendered as native MathML, a step-through graph, comparison tables, flashcards and practice.
308
+ It uses no campus account. An existing edited demo is preserved.
309
+
310
+ ## Local helper inputs
311
+
312
+ Agents use `tum-mcp study schema snapshot` and `tum-mcp study schema content` for
313
+ validated input schemas. After authenticated tools verify availability, the agent
314
+ stages a source snapshot with exact course identity, coverage and resource revisions.
315
+ The helper does not authenticate the snapshot or grant any campus access itself.
316
+
317
+ ```sh
318
+ tum-mcp study init PROJECT --course "Exact course title" --snapshot snapshot.json
319
+ tum-mcp study sync PROJECT --snapshot snapshot.json
320
+ ```
321
+
322
+ Import paths are confined to the snapshot directory. Data is stored under the
323
+ bound project; credentials and unrelated personal records must never enter it.
324
+ Keep real course projects private and out of package artifacts. Uninstalling the
325
+ package preserves projects; remove your own project directory separately when wanted.