@jamestesting888/tum-mcp 0.7.0 → 0.8.1
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 +14 -0
- package/README.md +5 -3
- package/docs/development.md +1 -1
- package/docs/setup.md +9 -7
- package/docs/tum-mcp.md +17 -13
- package/npm/backend/manifest.json +2 -2
- package/npm/backend/{tum_mcp-0.7.0-py3-none-any.whl → tum_mcp-0.8.1-py3-none-any.whl} +0 -0
- package/npm/tum-mcp.mjs +19 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
+
## 0.8.1 — 2026-10-26
|
|
4
|
+
|
|
5
|
+
- Give every doctor/update status a dot: yellow for unverified or attention-needed
|
|
6
|
+
states, green for ready/updated, neutral for information/disabled, and red only
|
|
7
|
+
for failures. Keep status labels readable with terminal colors disabled.
|
|
8
|
+
|
|
9
|
+
## 0.8.0 — 2026-10-26
|
|
10
|
+
|
|
11
|
+
- Read Artemis courses, lectures, exercises, own feedback and accessible Zulip
|
|
12
|
+
channels after sign-in without separate local scope grants. Preserve server
|
|
13
|
+
permissions, bounded queries and disabled remote writes.
|
|
14
|
+
- Keep standard `--help` for command discovery and guide agents toward relevant
|
|
15
|
+
current-semester metadata before retrieving course content.
|
|
16
|
+
|
|
3
17
|
## 0.7.0 — 2026-10-26
|
|
4
18
|
|
|
5
19
|
- Share one course app between Study and Exercises, with a single workspace
|
package/README.md
CHANGED
|
@@ -30,11 +30,13 @@ npm install --global @jamestesting888/tum-mcp@latest
|
|
|
30
30
|
tum-mcp setup --client codex
|
|
31
31
|
tum-mcp connect
|
|
32
32
|
tum-mcp doctor
|
|
33
|
+
tum-mcp --help
|
|
33
34
|
```
|
|
34
35
|
|
|
35
36
|
Select services with **Space**, then **Enter**. Choose an installed browser and
|
|
36
37
|
complete sign-in there. Only selected tabs open; Zulip needs no API key.
|
|
37
|
-
|
|
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.
|
|
38
40
|
|
|
39
41
|
Choose a client with `--client`: `codex`, `claude`, `cursor` or `antigravity`.
|
|
40
42
|
Setup configures MCP and installs all six skills; follow any activation or
|
|
@@ -132,7 +134,7 @@ See [publishing details](docs/study.md#publish-a-study-website).
|
|
|
132
134
|
Sign-in and MFA happen in a temporary browser window. Only service-owned session
|
|
133
135
|
cookies are retained; identity-provider cookies are discarded when it closes.
|
|
134
136
|
Sessions stay on your computer in encrypted files with owner-restricted keys.
|
|
135
|
-
Configured local clients share those connections and
|
|
137
|
+
Configured local clients share those connections and saved preferences.
|
|
136
138
|
|
|
137
139
|
## Your study project
|
|
138
140
|
|
|
@@ -173,7 +175,7 @@ tum-mcp update
|
|
|
173
175
|
same npm location and refreshes configured clients. It never downgrades a newer
|
|
174
176
|
installation. Use `tum-mcp update --local` to refresh the installed version without checking npm.
|
|
175
177
|
From 0.6.0 or earlier, upgrade the npm package once to obtain this command.
|
|
176
|
-
Sessions,
|
|
178
|
+
Sessions, preferences and downloads carry forward. User-edited entries and skills are
|
|
177
179
|
preserved and reported for review. Reload the client; refresh its cached plugin
|
|
178
180
|
if needed. Study sites are updated separately through the study workflows.
|
|
179
181
|
|
package/docs/development.md
CHANGED
|
@@ -56,7 +56,7 @@ CI runs macOS, Windows and Linux, plus both distribution engines on WSL 3.x.
|
|
|
56
56
|
Consumer checks install the actual npm artifact, discover tools, build a study
|
|
57
57
|
site and test available Chromium browsers with temporary profiles and synthetic
|
|
58
58
|
pages. WSL verifies Windows browser transport. No live account is used.
|
|
59
|
-
Upgrade checks cover public 0.
|
|
59
|
+
Upgrade checks cover public 0.8.0, client refresh, customized-file conflicts,
|
|
60
60
|
failed preparation, runtime repair and removal that preserves work/credentials.
|
|
61
61
|
The package-lifecycle check uses a local synthetic registry and real isolated
|
|
62
62
|
global npm prefixes to verify downloads, backend validation, replacement,
|
package/docs/setup.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Setup and troubleshooting
|
|
2
2
|
|
|
3
|
-
[README](../README.md) · [Tools and
|
|
3
|
+
[README](../README.md) · [Tools and access](tum-mcp.md) · [Development](development.md)
|
|
4
4
|
|
|
5
5
|
Use the latest package for the connection, managed update and removal flows below.
|
|
6
6
|
|
|
@@ -16,6 +16,7 @@ npm install --global @jamestesting888/tum-mcp@latest
|
|
|
16
16
|
tum-mcp setup --client codex
|
|
17
17
|
tum-mcp connect
|
|
18
18
|
tum-mcp doctor
|
|
19
|
+
tum-mcp --help
|
|
19
20
|
```
|
|
20
21
|
|
|
21
22
|
Use `--client claude`, `cursor`, `antigravity`, or `generic` for another client.
|
|
@@ -46,10 +47,11 @@ For another Chromium build, set `TUM_MCP_BROWSER` to its executable path before
|
|
|
46
47
|
running connect. Compatible builds must allow Playwright automation. Safari and
|
|
47
48
|
Firefox are not supported.
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
After sign-in, Artemis and Zulip can read content available to your campus account.
|
|
51
|
+
No local course/channel grants are required. Your agent uses status/discover and
|
|
52
|
+
course metadata to find relevant current-semester material, then makes bounded reads.
|
|
52
53
|
An account ID identifies a saved service connection; it is not your TUM login.
|
|
54
|
+
`tum-mcp --help` lists commands; `tum-mcp study build --help` shows command options.
|
|
53
55
|
|
|
54
56
|
## WSL
|
|
55
57
|
|
|
@@ -102,7 +104,7 @@ browser discovery still requires functioning interop.
|
|
|
102
104
|
The [publishing workflow](study.md#publish-a-study-website) uses private repositories
|
|
103
105
|
with public Pages websites and requires an eligible paid GitHub plan.
|
|
104
106
|
- An expired session uses the same `tum-mcp connect` selector. Reconnecting the
|
|
105
|
-
same identity preserves
|
|
107
|
+
same identity preserves saved preferences.
|
|
106
108
|
- If no browser appears, check its installation or `TUM_MCP_BROWSER`. A managed
|
|
107
109
|
or incompatible Chromium build may prevent automation; try another browser.
|
|
108
110
|
- Git and Docker are optional. Neither is needed for course reads or the
|
|
@@ -111,7 +113,7 @@ browser discovery still requires functioning interop.
|
|
|
111
113
|
|
|
112
114
|
Sessions are encrypted with owner-restricted local key files. This avoids native
|
|
113
115
|
credential-store prompts, but anyone obtaining both key and ciphertext can
|
|
114
|
-
decrypt them. [Storage locations and recovery](tum-mcp.md#connections-and-
|
|
116
|
+
decrypt them. [Storage locations and recovery](tum-mcp.md#connections-and-read-access)
|
|
115
117
|
explain where sessions are saved and how to back them up.
|
|
116
118
|
|
|
117
119
|
## Update and remove
|
|
@@ -123,7 +125,7 @@ tum-mcp update
|
|
|
123
125
|
From 0.6.1, `update` retrieves the latest npm release, validates its backend in a
|
|
124
126
|
temporary installation, replaces the invoked package and refreshes previously
|
|
125
127
|
configured clients. It preserves the installation prefix and global/local mode.
|
|
126
|
-
It does not connect services, change
|
|
128
|
+
It does not connect services, change preferences or register additional clients.
|
|
127
129
|
It never downgrades a newer installation. `update --local` skips npm and repairs
|
|
128
130
|
or refreshes the installed version. Source/pinned builds use this local mode;
|
|
129
131
|
temporary npx and linked source installations are not replaced automatically.
|
package/docs/tum-mcp.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# TUM MCP guide
|
|
2
2
|
|
|
3
3
|
Package: `@jamestesting888/tum-mcp`, CLI: `tum-mcp`, backend: Python 3.13.
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
The package combines read-only course retrieval, managed client installation and
|
|
5
|
+
six local course workflows.
|
|
6
6
|
|
|
7
7
|
## Current capabilities
|
|
8
8
|
|
|
9
9
|
The sixteen `moodle_*` tools provide materials, announcements, forums and
|
|
10
|
-
|
|
10
|
+
own grades, feedback and submission reads. Artemis adds
|
|
11
11
|
available-course metadata, lectures and learning units, student PDF attachments,
|
|
12
12
|
released non-quiz statements and permitted exact-commit feedback. Zulip provides
|
|
13
|
-
|
|
13
|
+
bounded channel/topic search and cited discussion reads.
|
|
14
14
|
|
|
15
15
|
Website access is read-only. There are no public exercise workspace, test-run,
|
|
16
16
|
submission, start, deployment, rebuild or push workflows.
|
|
@@ -28,7 +28,7 @@ Lecture routes were checked against the
|
|
|
28
28
|
[Artemis source](https://github.com/ls1intum/Artemis/blob/88824427f7ea38512606824c58b8858e539eb2eb/src/main/java/de/tum/cit/aet/artemis/lecture/web/LectureResource.java)
|
|
29
29
|
and the
|
|
30
30
|
[student file boundary](https://github.com/ls1intum/Artemis/blob/88824427f7ea38512606824c58b8858e539eb2eb/src/main/java/de/tum/cit/aet/artemis/core/web/FileResource.java).
|
|
31
|
-
Synthetic fixtures are the default. Live checks remain private and
|
|
31
|
+
Synthetic fixtures are the default. Live checks remain private and relevant to the requested task.
|
|
32
32
|
|
|
33
33
|
## Build and test the local package
|
|
34
34
|
|
|
@@ -91,15 +91,17 @@ Python 3.13+, uv, and Git: run `uv sync --locked`, then
|
|
|
91
91
|
`uv run tum-mcp setup --client generic` from the checkout. An installed Chromium browser is needed for
|
|
92
92
|
browser onboarding. See [setup](setup.md) for browser choices and WSL.
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
<a id="connections-and-scopes"></a>
|
|
95
|
+
|
|
96
|
+
## Connections and read access
|
|
95
97
|
|
|
96
98
|
```sh
|
|
97
99
|
tum-mcp connect
|
|
98
100
|
tum-mcp status
|
|
99
101
|
tum-mcp discover artemis ACCOUNT_ID
|
|
100
102
|
tum-mcp discover zulip ACCOUNT_ID
|
|
101
|
-
tum-mcp
|
|
102
|
-
tum-mcp
|
|
103
|
+
tum-mcp --help
|
|
104
|
+
tum-mcp study build --help
|
|
103
105
|
```
|
|
104
106
|
|
|
105
107
|
`connect` takes no arguments or connection options. Move with up/down, toggle
|
|
@@ -119,10 +121,12 @@ when the temporary browser closes. Existing browser profiles are never imported.
|
|
|
119
121
|
Zulip uses its read-only `/json/` routes with the browser session; no API key is
|
|
120
122
|
required. Reconnect through the same selector when a session expires.
|
|
121
123
|
See [Zulip's dispatcher](https://github.com/zulip/zulip/blob/12.0/zerver/lib/rest.py).
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
Read access follows the authenticated account's server permissions. No local course,
|
|
125
|
+
channel, private-channel or personal-feedback grant is required. Older saved grant
|
|
126
|
+
fields remain readable for compatibility and do not restrict read access. Agents
|
|
127
|
+
prefer relevant current-semester courses and channels, inspect metadata first, and
|
|
128
|
+
page through only the content needed for the request. Explicit older-course requests
|
|
129
|
+
remain supported. Server-denied content, staff-only material and remote writes stay unavailable.
|
|
126
130
|
|
|
127
131
|
Settings live outside the installed package in `TUMMCP/config/preferences.json`.
|
|
128
132
|
Moodle sessions live under `TUMMoodle/local-session/`; Artemis and Zulip credentials
|
|
@@ -156,7 +160,7 @@ from activation; the host must confirm a running MCP connection after setup.
|
|
|
156
160
|
Use `doctor --live` for bounded authenticated identity checks on saved local
|
|
157
161
|
sessions and optional GitHub CLI authentication. Campus checks read Moodle's
|
|
158
162
|
course overview and Artemis/Zulip identity only;
|
|
159
|
-
it does not
|
|
163
|
+
it does not change server permissions. `doctor --json` emits schema-versioned JSON
|
|
160
164
|
without terminal styling; combine both flags for live automation. Paths appear
|
|
161
165
|
in JSON for troubleshooting. Default diagnostics do not create state folders.
|
|
162
166
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"wheel": "tum_mcp-0.
|
|
3
|
-
"wheelSha256": "
|
|
2
|
+
"wheel": "tum_mcp-0.8.1-py3-none-any.whl",
|
|
3
|
+
"wheelSha256": "eb55c85f6b1edfb538ff19ddad3b020625dbaf91df7790f5efd4294f337363d8",
|
|
4
4
|
"requirementsSha256": "25f9efa7a4ffb0b97abcfeb9d4706d04808273ab1b35abcfaa1ef0b66e87591b"
|
|
5
5
|
}
|
|
Binary file
|
package/npm/tum-mcp.mjs
CHANGED
|
@@ -9,7 +9,25 @@ let args = process.argv.slice(2);
|
|
|
9
9
|
const version = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
|
|
10
10
|
try {
|
|
11
11
|
if (args.length === 0 || (args.length === 1 && ['--help', '-h'].includes(args[0]))) {
|
|
12
|
-
console.log(`TUM MCP ${version}
|
|
12
|
+
console.log(`TUM MCP ${version}
|
|
13
|
+
Usage: tum-mcp COMMAND [OPTIONS]
|
|
14
|
+
|
|
15
|
+
setup Configure your coding client and managed runtime
|
|
16
|
+
connect Sign in to selected campus services
|
|
17
|
+
status Show saved connections
|
|
18
|
+
discover List accessible courses or channels
|
|
19
|
+
doctor Check installation and authentication
|
|
20
|
+
update Update the package and configured clients
|
|
21
|
+
uninstall Remove managed setup and the npm package
|
|
22
|
+
logout Remove one saved connection
|
|
23
|
+
serve Run the MCP server over stdio
|
|
24
|
+
version Show the installed version
|
|
25
|
+
skills Manage local workflow skills
|
|
26
|
+
study Prepare, preview and publish a course app
|
|
27
|
+
|
|
28
|
+
Use --help for options, for example: tum-mcp study build --help
|
|
29
|
+
Run setup to provision the managed backend, then connect to sign in.
|
|
30
|
+
Reads use your campus account permissions; no local scope selection is needed.`);
|
|
13
31
|
} else if (['--version', 'version'].includes(args[0])) {
|
|
14
32
|
console.log(version);
|
|
15
33
|
} else if (['setup', 'update', 'uninstall'].includes(args[0]) && args.some(arg => ['--help', '-h'].includes(arg))) {
|