Changelog
Alle wesentlichen Änderungen an Maschinchenring werden hier dokumentiert.
Doku aus Nutzer-Sicht neu geschrieben
/docs komplett umgeschrieben: Community-Idee, Rollen
(Mieter / Vermieter), Warum-Freischaltung, FAQ (Haftung, Versicherung,
Absagen, No-Shows) statt Tech-Stack- und Infrastruktur-Details - Neuer Abschnitt "Was darf hier angeboten werden?":
kein Marktplatz, keine Dienstleistungen, keine alkoholischen /
pornografischen / illegalen Inhalte — Meldung fragwürdiger
Angebote per E-Mail mit Link zum Gerät
- Gewerbetreibende ausdrücklich erlaubt (keine Haftung, egal ob
privat oder gewerblich)
- Kaution im Mieter- und Vermieter-Flow erwähnt — Übergabe direkt
zwischen den Parteien, keine Zahlungsabwicklung über die Plattform
- Betreiber-Hinweis (Levin Keller, Impressum) und Kontakt
(
post@levinkeller.de) ergänzt /docs/mcp-tools entschlackt: als API-Referenz aus Sicht
des Clients positioniert, Implementierungs-Details (Suche, Bilder-Pipeline)
entfernt, Admin-Tools aus der öffentlichen Referenz genommen,
"Owner" → "Vermieter" vereinheitlicht
Vermieter-Status sichtbar im Chat
get_profile gibt jetzt lender, admin,
lenderStatus (approved / pending /
none) und profileComplete zurück — der Chat-Assistent
kann den Vermieter-Status damit direkt auslesen statt zu raten request_lender_status ist jetzt auch im Web-Chat (Haiku) als Tool
verfügbar; vorher fehlte es in den Chat-Tool-Definitionen - Tool-Beschreibungen für den Vermieter-Flow geschärft
server/src/mcp/tools.ts in Domänen-Module aufgeteilt
(tools/items.ts, tools/bookings.ts,
tools/profile.ts, tools/admin.ts,
tools/deps.ts)
Vermieter-Flow & User-Cleanup
- Neues MCP-Tool
request_lender_status: User beantragt Vermieter-Freischaltung
(Profil-Check, 1h-Cooldown, E-Mail an alle Admins) - Admin-UI unter
/admin/lender-requests/:userId (Cookie-Auth, GET + POST approve/reject) - DB-Rename:
can_upload → lender, is_admin → admin - Spalte
lender_requested_at als Spam-Schutz - Tote Spalten
github_id / google_id entfernt, User-IDs sind jetzt opaque UUIDs - GitHub-OAuth übergibt
randomUUID() statt GitHub-Login als ID; Profile werden weiterhin per E-Mail gematcht
Öffentliche Dokumentation
- Neue Dokumentationsseiten unter
/docs hinzugefügt - Vollständige MCP-Tools-Referenz unter
/docs/mcp-tools - Changelog unter
/docs/changelog - Footer-Link zur Dokumentation ergänzt
Chat-Rework
- Chat-Interface überarbeitet und stabilisiert
- Konversationsverwaltung verbessert
Semantische Suche
search_items-Tool mit Hybrid-Suche (semantisch + lexikal) - Jina Embeddings für Geräte-Beschreibungen
- 70% semantisches Gewicht, 30% lexikal
Bild-Upload und imgproxy
- Bild-Upload-Endpoint
POST /images/upload (S3/MinIO) - imgproxy-Integration für optimierte, HMAC-signierte Bild-URLs
attach_image_to_item-Tool zum Verknüpfen von Bildern - Uploader-Berechtigung (
can_upload) für Vermieter
Gerätesets
- Sets: Bündel aus mehreren Geräten zu einem Tagespreis
list_sets-Tool - Sets-Übersicht auf der Webseite
Chat-Assistent
- Chat-Interface mit Claude (SSE-Streaming)
- Konversationspersistenz in SQLite
- Konversationstitel via
set_conversation_title-Tool
Admin-Tools und Vermieter-Verwaltung
admin_approve_uploader, admin_revoke_uploader, admin_list_users - Vermieter-Whitelist (
can_upload-Flag) - Admin-Flag (
is_admin) für Nutzerverwaltung
OAuth PKCE für MCP-Clients
- OIDC-Provider mit Authorization Code + PKCE
- Dynamic Client Registration (
POST /oauth/register) - Kompatibel mit Claude Desktop und anderen MCP-Clients
Buchungsfluss
- Buchungsanfragen via MCP-Tool
create_booking - Owner-Benachrichtigung per E-Mail (Approve/Reject-Links)
- Stornierung durch Mieter und Owner
- Status:
pending → approved / rejected / cancelled
Authentifizierung
- GitHub OAuth (arctic)
- Magic Link per E-Mail
- JWT RS256 (jose) als Cookie
MCP-Server und Webseite
- Initiale Implementierung des MCP-Servers (Streamable HTTP)
- Astro SSR Website mit Geräteübersicht und Detailseiten
- Verfügbarkeitskalender
- SQLite-Datenbankschema (Migrationen)
- Deployment auf k3s (ARM, Traefik, cert-manager)