kit-campus-mcpSAFE
MCP server for the KIT Campus portal: exam results, registrations, study progress, timetables, and module catalogues.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Getting started · Features
An MCP server for the KIT Campus portal (campus.studium.kit.edu). It reads exam results, exam registrations, study progress, your timetable and the public module catalogue, and it can report which results are new since the last check - which is what a notification bot needs.
How it works
campus.studium.kit.edu is only a KIT-branded frame. The application behind it is CAS Campus at https://cascampus.studium.kit.edu, and the frame's own kit-frame-config.js maps every portal page to a backend URL. This server talks to those backend URLs directly.
Two access levels:
The account side is the interesting part. campus.kit.edu's own login page (campus/login/chooseCampusUser.asp) no longer exists on KIT's server - it returns a 404 - so logging in there directly is impossible. What the portal actually does:
- authenticate against the portal's SP:
campus.studium.kit.edu/Shibboleth.sso/Login -> idp.scc.kit.edu -> SAML POST back
- call
campus.studium.kit.edu/token.php, which returns a short-lived
tokenA plus the account's name and matriculation number
- pass that token to the backend as
login-token+login-tson any
cascampus.studium.kit.edu URL, which is what creates the CAS Campus session
This server does the same three steps. Cookies and the token are cached, so repeated polls do not re-run the SSO chain.
Install
git clone https://github.com/OutBlade/kit-campus-mcp.git cd kit-campus-mcp uv venv uv pip install -e .
Copy .env.example to .env and fill in your KIT account:
KIT_USERNAME=ab1234 KIT_PASSWORD=...
KIT_USERNAME is the short KIT account (ab1234), not y
accdb8424481OBSERVED · 2026-10-10Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add kit-campus-mcp --env KIT_CAMPUS_STATE_KEY=${KIT_CAMPUS_STATE_KEY} --env KIT_PASSWORD=${KIT_PASSWORD} --env TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} -- uvx kit-campus-mcp{
"mcpServers": {
"kit-campus-mcp": {
"command": "uvx",
"args": [
"kit-campus-mcp"
],
"env": {
"KIT_CAMPUS_STATE_KEY": "${KIT_CAMPUS_STATE_KEY}",
"KIT_PASSWORD": "${KIT_PASSWORD}",
"TELEGRAM_BOT_TOKEN": "${TELEGRAM_BOT_TOKEN}"
}
}
}
}Exposed tools (11)
11 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
kit_check_new_results | read | Report exam results that appeared or changed since the previous check. |
kit_check_session | read | Verify that login works and list the degree programmes on the account. |
kit_fetch_page | read | Fetch any Campus page and return its parsed tables. Use for pages without a dedicated tool. |
kit_get_grades | read | Read the Notenspiegel: every recorded exam result, grade and credit total. |
kit_get_module | read | Full detail for one module, including scheduled exam dates. No login needed. |
kit_get_study_progress | read | Read the Studienverlauf: programme structure with modules and credits. |
kit_get_timetable | read | Read the personal timetable (Stundenplan) with its appointments. |
kit_list_programs | read | List KIT degree programmes from the public catalogue. No login needed. |
kit_list_registered_exams | read | List the exams the account is currently registered for, with dates. |
kit_search_events | read | Search the public course catalogue (Vorlesungsverzeichnis). No login needed. |
kit_search_modules | read | Search the public KIT module catalogue (Modulhandbuch). No login needed. |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (1 observation(s))
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (1)
Gates applied: no_behavioural_pass, no_license.
accdb8424481full audit observations/trust-audit/mcp-server/outblade__kit-campus-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | accdb8424481 | SAFE | B | 89 | first audit |
Questions
What is the kit-campus-mcp MCP server?
MCP server for the KIT Campus portal: exam results, registrations, study progress, timetables, and module catalogues.
What tools does kit-campus-mcp expose?
11 in total: 11 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is kit-campus-mcp safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.
What credentials does kit-campus-mcp need?
It reads KIT_CAMPUS_STATE_KEY, KIT_PASSWORD and TELEGRAM_BOT_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (accdb8424481), read on 2026-10-10. The repository is watched and re-audited when it changes.