Agent-Entwickler
Personal Agent Protocol bei Maintenance Due
Ein persönlicher Agent erreicht mit Personal Agent Protocol v0.1 die Fälligkeitstafel und das Wartungsprotokoll eines Besitzers. Der Besitzer meldet sich auf unserer Seite an und wählt Lesen oder Ändern. Maintenance Due ist kostenlos, und die Fälligkeitsberechnung ruft kein Modell auf.
Diese Seite ist für Leute, die persönliche Agenten bauen. Wenn Muse nur den Ölwechsel des Transporters im Blick behalten soll, kopiere den Prompt auf for-your-agent. Die Spezifikation liegt auf personalagentprotocol.org.
Erkennung
GET https://maintenancedue.com/.well-known/poppy.json nennt die Organisation (maintenancedue.com), den Aussteller https://maintenancedue.com, Direct Sign-In mit poppy:read und poppy:write und zwei APIs: den MCP-Server unter https://maintenancedue.com/mcp und die OpenAPI-Beschreibung unter https://maintenancedue.com/openapi.json für REST unter /api/v1. Die Aussteller-Metadaten unter /.well-known/oauth-authorization-server führen maintenancedue.com in poppy_domains und nennen die Endpunkte für Token, Autorisierung und Widerruf unter /oauth/.
Sessions und Anmeldung
- Veröffentliche deinen Client. Deine
client_idist eine https-URL, die dein Client-Metadatendokument liefert, mitjwks_uriundredirect_urisauf derselben Domain. Jede Token-Anfrage trägt eineprivate_key_jwt-Client-Assertion, signiert mit einem Schlüssel aus diesemjwks_uri. - Starte eine Session.
POST /oauth/tokenmitgrant_type=urn:ietf:params:oauth:grant-type:jwt-bearer, einer Assertion mit deinerclient_idalsiss, der User ID alssubundhttps://maintenancedue.com/oauth/tokenals einzelner Zeichenkette inaud, dazu ein DPoP-Nachweis. Du bekommst ein abgemeldetes Session Token (token_typeDPoP, eine Stunde) und einesession_id. Sendesession_idmit einer frischen Assertion, um es zu erneuern. - Schicke den Besitzer auf unsere Seite. Öffne
/oauth/authorizemitresponse_type=code, deinerclient_idundredirect_uri,scope=poppy:read poppy:write(oder nurpoppy:read), einemstateund einer PKCE-S256-code_challenge. Der Besitzer sieht deinen Namen und deine Domain, wählt View only oder View and change und legt dann eine kostenlose Werkstatt an oder meldet sich mit einem Mitglieds-Token an, das er schon hat. Die Weiterleitung bringtcode,stateundisszurück. Prüfe, dassisshttps://maintenancedue.comist. - Tausche den Code ein.
POST /oauth/tokenmitgrant_type=authorization_code, demcode,redirect_uri,code_verifierund deinersession_id, dazu deine Client-Assertion und ein DPoP-Nachweis. Die Antwort enthält das Account Token inrefresh_token(pat_…, 30 Tage), ein angemeldetes Session Token und den gewährtenscope. Der Besitzer kann Lesen wählen, wenn du Ändern angefragt hast, also liesscope. - Später angemeldet starten.
POST /oauth/tokenmitgrant_type=refresh_tokenund dem Account Token, mit oder ohnesession_id. Fügescope=poppy:readhinzu, um für eine Abfrage ein reines Lese-Token zu bekommen. Das Account Token wird nicht rotiert, parallele Sessions können es also teilen. - Abmelden.
POST /oauth/revokemit dem Account Token und deiner Client-Assertion. Jede damit angemeldete Session ist beim nächsten Aufruf abgemeldet und erneuert sich abgemeldet.
Die Tafel aufrufen
REST nimmt DPoP: Authorization: DPoP <token> plus ein frischer DPoP-Nachweis mit htm, htu und ath bei jedem Aufruf von /api/v1. MCP nimmt Bearer: erneuere ohne DPoP-Nachweis und mit resource=https://maintenancedue.com/mcp, dann sende Authorization: Bearer <token> an /mcp. Ein Bearer Session Token gilt nur auf /mcp, und ein DPoP-Token wird dort abgelehnt. Die MCP-Tools, ihre Schemas und der Header MCP-Protocol-Version 2025-06-18 sind dieselben, die ChatGPT nutzt.
Lesen oder ändern
poppy:read öffnet jedes GET auf /api/v1 und jedes MCP-Tool mit readOnlyHint, etwa get_due, get_history und list_assets. poppy:write öffnet alle anderen REST-Methoden und MCP-Tools, etwa append_event, append_reading, create_service und set_rule, dazu events/subscribe. Ein fehlender Scope ergibt 403 mit error="insufficient_scope" und dem nötigen Scope in WWW-Authenticate. Ein abgemeldetes Token bei einem Kontoaufruf ergibt 403 sign_in_required. Ein abgelaufenes Token, oder eines aus der Zeit vor der Abmeldung, ergibt 401 invalid_token. Mitglieder der Org einladen, entfernen oder die Org verlassen bleibt beim eigenen Token des Mitglieds.
ChatGPT-Verbindungen über /oauth/authorize mit dem Scope mcp und bestehende Muse-Mitglieds-Tokens funktionieren weiter wie bisher. Feldnamen stehen auf skill.md, der REST-Vertrag auf openapi.json und der Agentenindex auf llms.txt.