Release 0.7.3

This commit is contained in:
hnzio committed 2026-10-27 00:59:39 +01:00
1 parent d5b1c58ba2
commit 21c0de7dd9
31 files changed
+1582 -15

No files matched your search

+23
View File
@@ -1,5 +1,28 @@
# Abnahme
## Lesender MCP-Zugang 0.7.3
| Bereich | Nachweis | Stand |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | --------------------- |
| OAuth-Discovery und anonymer Schutz | Reale lokale HTTP-Anfrage erhält 401 mit `resource_metadata`; Discovery-Routen sind im Produktionsbuild enthalten | erfüllt am 27.10.2026 |
| DCR, Zustimmung und PKCE | Isolierter HTTP-Ablauf registriert Client, lädt Zustimmung, erhält Code mit `state`/`iss` und tauscht per S256 | erfüllt am 27.10.2026 |
| Nutzer-, Scope- und Ressourcenbindung | Ausgestellter Token ist gehasht persistiert und wird bei jedem Aufruf gegen Nutzer, Scope, Ablauf und `/mcp` geprüft | erfüllt am 27.10.2026 |
| MCP-Kompatibilität | Legacy-Initialisierung `2025-11-25` sowie `server/discover` und `tools/list` mit `2026-07-28` über HTTP | erfüllt am 27.10.2026 |
| Tatsächliche Leseanfrage | `tools/call` auf `list_pieces` liefert aus einer temporären Seed-Datenbank reale Pieces | erfüllt am 27.10.2026 |
| Schreibschutz und Datenminimierung | Nur fünf Lese-Tools; Positivprojektionen ohne E-Mail, Uploadnamen, Dateipfade und Werkzeug-Arbeitsdaten | erfüllt am 27.10.2026 |
| ChatGPT- und Cloudron-Verbindung | Kein Deployment und keine externe Clientumgebung vorhanden | offen |
- `npm run check`: 0 Fehler und 0 Warnungen.
- Gezielter isolierter HTTP-Ablauf: OAuth Code Flow, PKCE, anonymer Challenge,
Legacy-Initialisierung, aktuelle Discovery, Toolliste und echte
`list_pieces`-Anfrage erfolgreich.
- `npm run build`: erfolgreich mit `@sveltejs/adapter-node`.
- Keine weitere Verhaltenstest- oder Browsermatrix gemäß Auftrag ausgeführt;
die Zustimmungsseite wurde im HTTP-Ablauf geladen, aber nicht visuell geprüft.
- Echte ChatGPT-Verbindung, öffentliche HTTPS-Erreichbarkeit und Cloudron-
Reverse-Proxy-Verhalten bleiben bis zu einem ausdrücklich freigegebenen
Deployment offen.
## Wartungsrelease 0.7.2
| Bereich | Nachweis | Stand |
+33
View File
@@ -481,3 +481,36 @@ Name und Umfang des bestehenden gehashten Tokens und wird auditiert. Die
Live-Route projiziert zusätzlich nur, ob der feste Ausgabekanal getrennt, mit
dieser oder mit einer anderen Sendung verbunden ist. Das Öffnen von Menü und
Ausgabedetails führt selbst keine Mutation aus.
## Lesender MCP-Zugang 0.7.3
`/mcp` ist ein stateless Streamable-HTTP-Adapter über `content.ts` und
`shows.ts`. Er unterstützt die aktuelle per Request deklarierte MCP-Fassung
`2026-07-28` einschließlich `server/discover`, Header-/Body-Abgleich und
`resultType`. Für derzeitige OpenAI-Clients bleiben die Initialisierungsfassungen
`2025-11-25`, `2025-06-18` und `2025-03-26` verfügbar. Es gibt keine
MCP-Sitzung und keinen unabhängigen SSE-Strom; jede Anfrage trägt erneut ihre
Authentifizierung.
Die fünf Werkzeuge sind ausschließlich lesend. Eigene Positivprojektionen
lassen Mediennamen, interne Speicherpfade und Werkzeug-Arbeitsdaten aus. Die
Detailprojektionen dürfen nach ausdrücklicher Zustimmung redaktionell private
Recherche, Moderation, eigene Notizen, Quellen und Reserveinhalte enthalten.
Keine MCP-Methode ruft Mutationsdienste auf.
Sendewerk ist zugleich OAuth-Autorisierungs- und Ressourcenserver. Geschützte
Ressourcen- und Authorization-Server-Metadaten verweisen ausschließlich auf die
konfigurierte Origin. Öffentliche PKCE-Clients werden per begrenztem DCR
registriert; die Autorisierung verlangt exakte Redirect-URI, `S256`, den Scope
`sendewerk:read` und den exakten Ressourcenindikator `<Origin>/mcp`. Codes sind
fünf Minuten, Zugriffstokens eine Stunde gültig. SQLite speichert nur SHA-256-
Hashes. Tokens sind direkt an Nutzer, Client, Scope und Ressource gebunden;
Kontosperre und Passwortwechsel widerrufen sie, und jeder MCP-Aufruf verbindet
erneut den aktuellen Nutzerzustand.
DCR ist für die von OpenAI weiterhin unterstützte Kompatibilität vorhanden,
aber pro Quelladresse und insgesamt begrenzt. Clientnamen sind nicht verifiziert;
der Zustimmungsdialog kennzeichnet dies und zeigt die genaue Rücksprung-Domain.
Öffentliche Produktion verlangt HTTPS, während HTTP nur an Loopback-Adressen
zulässig bleibt. Der bestehende technische REST-Token wird weder gelesen noch
weitergereicht.
+38
View File
@@ -532,3 +532,41 @@ seinen ausschließlich gehasht gespeicherten Token und erzeugt ein Auditereignis
Das Live-Menü zeigt einen rein gelesenen Verbindungsstatus des Ausgabekanals.
Nur die bereits vorhandenen expliziten Verbinden-, Rotieren- und Trennenaktionen
verändern öffentliche Ausgabe. Navigation zur Planung bleibt davon getrennt.
## D-034: Nutzergebundener OAuth-Zugang statt Token-Passthrough
Der bestehende technische REST-Zugang kann und darf nicht für ChatGPT
weitergereicht werden: Sein Klartexttoken ist nach der Erstellung nicht mehr
verfügbar, und MCP verbietet Token-Passthrough. Sendewerk stellt deshalb einen
eigenen OAuth-2.1-Authorization-Code-Flow für öffentliche Clients bereit. PKCE
`S256`, exakte Redirect-URIs und der auf `<Origin>/mcp` gebundene
Ressourcenindikator sind verpflichtend. Codes und einstündige Zugriffstokens
liegen ausschließlich gehasht vor und sind direkt an ein aktives Nutzerkonto
gebunden.
Die Autorisierungsserver-Metadaten bieten das von OpenAI unterstützte Dynamic
Client Registration als Kompatibilitätsweg an. Die aktuelle MCP-Fassung stuft
DCR zugunsten von Client ID Metadata Documents als veraltet ein. Ein allgemeiner
CIMD-Abruf würde jedoch eine neue SSRF- und Cache-Sicherheitsgrenze eröffnen;
für diese private Anwendung bleibt DCR deshalb eng mengen- und ratenbegrenzt.
Der Zustimmungsdialog behandelt den selbst gemeldeten Clientnamen ausdrücklich
als unverifiziert und zeigt dessen Rücksprung-Domain.
Der MCP-Adapter unterstützt sowohl die aktuelle stateless Fassung `2026-07-28`
als auch die von OpenAI weiterhin dokumentierten Initialisierungsfassungen bis
`2025-03-26`. Tooldaten werden aus bestehenden Diensten positiv projiziert.
Der einzige Scope `sendewerk:read` ist im Dialog ausdrücklich einschließlich
privater redaktioneller Recherche beschrieben; E-Mail, Uploadnamen,
Speicherpfade und Werkzeug-Arbeitsdaten werden nicht ausgegeben. Alle Werkzeuge
sind als lesend markiert und haben keinen Pfad zu Mutationsdiensten.
Quellen, geprüft am 27. Oktober 2026:
- <https://developers.openai.com/apps-sdk/build/auth>
- <https://developers.openai.com/apps-sdk/deploy/connect-chatgpt>
- <https://platform.openai.com/docs/mcp>
- <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization>
- <https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http>
- <https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning>
- <https://modelcontextprotocol.io/specification/2026-07-28/server/discover>
- <https://modelcontextprotocol.io/specification/2026-07-28/server/tools>
+31
View File
@@ -1,5 +1,36 @@
# Release Notes
## 0.7.3 - Lesender MCP-Zugang mit OAuth 2.1
Veröffentlicht am 27. Oktober 2026
- Der öffentliche Streamable-HTTP-Endpunkt `/mcp` bietet fünf ausschließlich
lesende Werkzeuge für Kontoidentität, Pieces, Sendungen und vollständige
Abläufe. Er verwendet die bestehenden Inhalts- und Sendungsdienste und keine
parallele Datenhaltung.
- OAuth-2.1-Discovery, begrenzte dynamische Clientregistrierung,
Authorization Code, PKCE `S256`, exakte Redirect-URI und Ressourcenbindung
ermöglichen die von OpenAI dokumentierte Kontoverknüpfung. Codes und
einstündige Tokens werden nur gehasht gespeichert.
- Nutzerzustand, Sperren und Rollen werden bei jedem MCP-Aufruf erneut gelesen.
Passwortwechsel und Kontosperre widerrufen bestehende OAuth-Tokens. Der
vorhandene technische REST-Token wird weder offengelegt noch weitergereicht.
- MCP `2026-07-28` und die weiterhin von OpenAI verwendeten älteren
Initialisierungsfassungen werden am selben stateless Endpunkt unterstützt.
Private redaktionelle Details sind erst nach ausdrücklicher Zustimmung
lesbar; E-Mail, Uploadnamen, interne Pfade und Werkzeug-Arbeitsdaten bleiben
ausgeschlossen.
- Die Produktions-URL lautet `https://<Cloudron-App-Domain>/mcp`. README und
Betriebsdokumentation beschreiben die Einrichtung über **Add custom MCP
server**. Das Release wurde nicht auf Cloudron ausgerollt und eine reale
ChatGPT-Verbindung wird nicht als geprüft ausgegeben.
- Paket, Lockdatei und Cloudron-Manifest tragen Version `0.7.3`. Migration
`0020_oauth_mcp.sql` ergänzt additive OAuth- und Ratenbegrenzungstabellen.
- Typprüfung und Produktionsbuild sind erfolgreich. Ein isolierter lokaler
HTTP-Rundlauf hat OAuth, beide MCP-Protokollgenerationen und eine echte
`list_pieces`-Anfrage geprüft; eine reale ChatGPT-/Cloudron-Verbindung bleibt
ausdrücklich offen.
## 0.7.2 - RSS-Auswahl, Live-Menü und Schnittstellenverwaltung
Veröffentlicht am 26. Oktober 2026
+25
View File
@@ -8,6 +8,31 @@ Live-Steuerung, Präsentationsausgabe, unveränderliche Sendungshistorie,
Archiv, sichere Lesefreigaben, RSS-Import und technische REST-Zugänge sind
dokumentiert.
## Lesender MCP-Zugang 0.7.3
- Der öffentliche Streamable-HTTP-Endpunkt `/mcp` liest Pieces, Sendungen und
Abläufe über dieselben Dienste wie Browser und REST-API. Fünf deklarierte
Werkzeuge besitzen nur Leseannotationen und keine Mutationspfade.
- OAuth 2.1 verwendet Discovery-Metadaten, begrenzte dynamische
Clientregistrierung, Authorization Code, PKCE `S256`, exakte Redirect-URIs
und Ressourcenbindung. Codes und einstündige Tokens liegen nur gehasht vor.
- OAuth-Tokens sind an den zustimmenden Nutzer gebunden. Sperrung und
Passwortwechsel widerrufen sie; jeder Zugriff prüft erneut Nutzerstatus,
Scope, Ablauf und Zielressource.
- Aktuelles MCP `2026-07-28` mit `server/discover` und per-Request-Metadaten
läuft neben den OpenAI-kompatiblen Initialisierungsfassungen. Ausgaben sind
Positivlisten ohne E-Mail, Uploadnamen, interne Pfade oder Werkzeug-Arbeitsdaten.
- Die konkrete Produktionsadresse ist
`https://<Cloudron-App-Domain>/mcp`. Ein Cloudron-Deployment und eine reale
ChatGPT-Verbindung wurden nicht durchgeführt.
Geprüft wurden Typen, Produktionsbuild und ein isolierter tatsächlicher
HTTP-Ablauf über eine temporäre Datenbank: anonymer OAuth-Challenge, DCR,
Zustimmung, PKCE-Tokenaustausch, Legacy-Initialisierung, aktuelle
`server/discover`-Abfrage, Toolliste und `list_pieces` mit Seed-Daten waren
erfolgreich. Eine weitere Verhaltenstest- oder Browsermatrix wurde gemäß
Auftrag nicht ausgeführt.
## Bedienkorrekturen 0.7.2
- Der RSS-Importeingang ist eine kompakte Katalogfläche. Die eigentliche Auswahl