tue-api-wrapper Python package
Python SDK, FastAPI server, and local MCP server for University of Tübingen study systems.
The package has three entry points:
TuebingenPublicClient: public data that does not need credentialsTuebingenAuthenticatedClient: private university data with explicit credentialstue-mcp: local MCP server for agents and LLM tools
Install for local development
cd package
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
Install MCP support when you want the agent server:
pip install -e ".[mcp]"
Public data example
from tue_api_wrapper import TuebingenPublicClient
client = TuebingenPublicClient()
modules = client.alma.search_modules("machine learning", max_results=10)
events = client.campus.events(query="AI", limit=5)
gym = client.campus.gym_occupancy()
canteens = client.campus.canteens()
recordings = client.timms.search("theoretische informatik", limit=5)
Authenticated data example
Load credentials with the standard Python environment API and pass them explicitly:
import os
from tue_api_wrapper import TuebingenAuthenticatedClient
client = TuebingenAuthenticatedClient.login(
username=os.environ["UNI_USERNAME"],
password=os.environ["UNI_PASSWORD"],
)
profile = client.alma.profile()
timetable = client.alma.timetable("Sommer 2026")
documents = client.alma.studyservice_documents()
tasks = client.ilias.tasks()
deadlines = client.moodle.deadlines(days=30)
inbox = client.mail.inbox(limit=5)
In a local shell:
export UNI_USERNAME=your-zdv-id
export UNI_PASSWORD=your-password
PPI exam protocols
PPI has its own account and password. Do not pass your university/ZDV password to it.
from tue_api_wrapper import PpiClient
ppi = PpiClient()
# Creates a PPI account and sends an activation link to the corresponding
# <ZDV username>@student.uni-tuebingen.de mailbox.
signup = ppi.signup("zxabc12", "a-separate-ppi-password")
ppi.login("zxabc12", "a-separate-ppi-password")
catalog = ppi.fetch_lecture_catalog()
borrowed = ppi.fetch_borrowed_lectures()
lecture = next(item for item in borrowed.lectures if item.download_available and item.id is not None)
archive = ppi.download_lecture(lecture.id)
ppi.close()
The local API server reads PPI_USERNAME and PPI_PASSWORD for authenticated
PPI routes. Signup uses POST /api/ppi/signup; catalog, borrowing, downloads,
and token requests are available below /api/ppi/.
Local MCP server
cd package
pip install -e ".[mcp]"
tue-mcp
Use stdio for most local agent clients. For HTTP-based clients:
tue-mcp --transport streamable-http --host 127.0.0.1 --port 8765
FastAPI server
tue-api-server
The API starts on http://127.0.0.1:8000 and exposes OpenAPI docs at /docs.
Publishing
Install the published package from PyPI:
pip install tue-api-wrapper
Install with MCP extras:
pip install "tue-api-wrapper[mcp]"
You can also install directly from GitHub:
pip install "tue-api-wrapper @ git+https://github.com/SebastianBoehler/tue-api-wrapper.git#subdirectory=package"
MCP extras from GitHub:
pip install "tue-api-wrapper[mcp] @ git+https://github.com/SebastianBoehler/tue-api-wrapper.git#subdirectory=package"
Release steps live in ../docs/release-pypi.md.
More docs
Release files for tue-api-wrapper 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tue_api_wrapper-0.4.1.tar.gz | 226.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tue_api_wrapper-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 464.8 kB
Release files / tue_api_wrapper-0.4.1.tar.gz
| Download URL | tue_api_wrapper-0.4.1.tar.gz |
|---|---|
| Size | 226.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c4029d84e30ac85bd3b7d262c6765cec24a3c91544b67e54a9c398849b1e3ec
|
|
BLAKE2b-256 checksum How to use checksums |
38cf27f47058ae3b42563ea5c4019626f0107944cfa211b9c6e83f60bd22403f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logRelease files / tue_api_wrapper-0.4.1-py3-none-any.whl
| Download URL | tue_api_wrapper-0.4.1-py3-none-any.whl |
|---|---|
| Size | 238.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86f5ee1c5f96ca793b5e7507a13261b12f5ad6afe1a4759920fdd183c4e70808
|
|
BLAKE2b-256 checksum How to use checksums |
abf5b7edeaf80c040843b627b3211e48383c84f3c401e6149b31e36c14053478
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency log