Sign inSign up

udondan/lanis

By udondan

•Updated about 21 hours ago

CLI und MCP-Server für das Schulportal Hessen (Lanis): Vertretungsplan, Kalender, Aufgaben

Image
Machine learning & AI
Developer tools
0

337

udondan/lanis repository overview

⁠lanis

Zugriff auf das Schulportal Hessen (Lanis)⁠ aus dem Terminal und aus KI-Assistenten: Vertretungsplan, Stundenplan, Kalender, Hausaufgaben, Nachrichten, Dateien und mehr.

Das Image enthält die Kommandozeile lanis und den MCP-Server für KI-Assistenten wie Claude. lanis liest nur, es verändert keine Daten im Schulportal.

Quellcode, vollständige Dokumentation und das Python-Paket: github.com/udondan/lanis⁠

⁠Tags

  • latest: neuestes Release
  • X.Y.Z: genau diese Version
  • X.Y, X: neuestes Release dieser Minor- bzw. Major-Version

Plattformen: linux/amd64 und linux/arm64.

⁠Anmeldung

Die Zugangsdaten kommen aus Umgebungsvariablen:

VariableBedeutung
LANIS_SCHOOL_IDSchul-ID (siehe unten)
LANIS_USERNAMEBenutzername, z. B. vorname.nachname
LANIS_PASSWORDPasswort
LANIS_DATA_DIRoptional: Verzeichnis für die Session

Weitere Varianten (Schule nach Name und Stadt, Session-Cookie statt Passwort) stehen im README⁠.

Die Schul-ID findest du ohne Anmeldung:

docker run --rm udondan/lanis --format markdown schools | grep -i "musterstadt"

⁠Kommandozeile

Das Image führt den Befehl lanis aus. -e NAME ohne Wert übernimmt die Variable aus deiner Shell:

docker run --rm -e LANIS_SCHOOL_ID -e LANIS_USERNAME -e LANIS_PASSWORD udondan/lanis substitutions

Mit einem Volume für die Session und einem Alias verhält sich das Image wie ein installiertes lanis:

alias lanis='docker run --rm -e LANIS_SCHOOL_ID -e LANIS_USERNAME -e LANIS_PASSWORD -e LANIS_DATA_DIR=/data -v lanis-data:/data udondan/lanis'

lanis --format markdown tasks
lanis calendar --start 2026-11-01 --end 2026-11-30

Die Ausgabe ist JSON, mit --format markdown lesbarer Text. lanis --help zeigt alle Befehle: substitutions, timetable, calendar, tasks, conversations, files, file-distribution, votes, learning-groups und weitere.

⁠MCP-Server

Ohne Argument startet das Image den MCP-Server (stdio). Eintrag für Claude Desktop:

{
  "mcpServers": {
    "lanis": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "-e", "LANIS_SCHOOL_ID", "-e", "LANIS_USERNAME", "-e", "LANIS_PASSWORD", "udondan/lanis"],
      "env": {
        "LANIS_SCHOOL_ID": "1234",
        "LANIS_USERNAME": "vorname.nachname",
        "LANIS_PASSWORD": "dein-passwort"
      }
    }
  }
}
⁠Docker MCP Toolkit

Mit dem Docker MCP Toolkit liegen die Zugangsdaten als Secrets in Docker Desktop statt im Klartext in der Client-Konfiguration:

mkdir -p ~/.docker/mcp/catalogs
curl -fsSL https://raw.githubusercontent.com/udondan/lanis/main/docker-mcp.yml -o ~/.docker/mcp/catalogs/lanis.yml
docker mcp profile create --name lanis --id lanis --server "file://$HOME/.docker/mcp/catalogs/lanis.yml"

docker mcp secret set lanis.school_id=1234
docker mcp secret set lanis.username=vorname.nachname
docker mcp secret set lanis.password=dein-passwort

docker mcp client connect claude-desktop --profile lanis

Details im README⁠.

⁠Signatur

Die Images sind mit cosign⁠ signiert, über den Release-Workflow auf GitHub:

cosign verify udondan/lanis:latest \
  --certificate-identity-regexp '^https://github\.com/udondan/(py)?lanis/\.github/workflows/publish\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

Jedes Image enthält außerdem SBOM und Provenance-Attestierungen.

⁠Sicherheit

Der Container läuft als unprivilegierter Benutzer (UID 10001). Das Image basiert auf dem offiziellen Python-Image für Alpine, ohne pip.

⁠Lizenz

MIT⁠

Tag summary

Content type

Image

Digest

sha256:d51eaf4cf…

Size

43.8 MB

Last updated

about 21 hours ago

docker pull udondan/lanis