Skip to main content

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 credentials
  • TuebingenAuthenticatedClient: private university data with explicit credentials
  • tue-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)

Source distribution for tue-api-wrapper 0.4.1
File Size Uploaded
tue_api_wrapper-0.4.1.tar.gz 226.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tue-api-wrapper 0.4.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page