Quem constrói agentes
Personal Agent Protocol no Maintenance Due
Um agente pessoal pode chegar ao quadro de vencimentos e ao registro de serviço de um dono com o Personal Agent Protocol v0.1. O dono entra na nossa página e escolhe ver ou alterar. O Maintenance Due é grátis, e o cálculo de vencimentos não chama um modelo.
Esta página é para quem constrói agentes pessoais. Se você só quer que o Muse mantenha o óleo da van em dia, copie o prompt em for-your-agent. A especificação está em personalagentprotocol.org.
Descoberta
GET https://maintenancedue.com/.well-known/poppy.json nomeia a organização (maintenancedue.com), o emissor https://maintenancedue.com, o Direct Sign-In com poppy:read e poppy:write, e duas APIs: o servidor MCP em https://maintenancedue.com/mcp e a descrição OpenAPI em https://maintenancedue.com/openapi.json para o REST sob /api/v1. Os metadados do emissor em /.well-known/oauth-authorization-server listam maintenancedue.com em poppy_domains e dão os endpoints de token, autorização e revogação sob /oauth/.
Sessions e login
- Publique seu cliente. Seu
client_idé uma URL https que serve seu documento de metadados de cliente, comjwks_urieredirect_urisno mesmo domínio. Cada pedido de token leva uma asserção de clienteprivate_key_jwtassinada com uma chave dessejwks_uri. - Inicie uma Session.
POST /oauth/tokencomgrant_type=urn:ietf:params:oauth:grant-type:jwt-bearer, uma asserção cujoissé seuclient_id,subé o User ID eaudéhttps://maintenancedue.com/oauth/tokencomo uma única string, mais uma prova DPoP. Você recebe um Session Token sem login (token_typeDPoP, uma hora) e umsession_id. Enviesession_idcom uma asserção nova para renová-lo. - Mande o dono para a nossa página. Abra
/oauth/authorizecomresponse_type=code, seuclient_ideredirect_uri,scope=poppy:read poppy:write(ou sópoppy:read), umstatee umcode_challengePKCE S256. O dono vê seu nome e seu domínio, escolhe View only ou View and change e então cria uma oficina grátis ou entra com um token de membro que já tem. O redirecionamento trazcode,stateeiss. Confira queisséhttps://maintenancedue.com. - Troque o código.
POST /oauth/tokencomgrant_type=authorization_code, ocode,redirect_uri,code_verifiere seusession_id, mais sua asserção de cliente e uma prova DPoP. A resposta traz o Account Token emrefresh_token(pat_…, 30 dias), um Session Token com login e oscopeconcedido. O dono pode escolher ver quando você pediu alterar, então leiascope. - Comece com login depois.
POST /oauth/tokencomgrant_type=refresh_tokene o Account Token, com ou semsession_id. Adicionescope=poppy:readpara um token só de leitura numa consulta. O Account Token não é rotacionado, então Sessions em paralelo podem compartilhá-lo. - Saia.
POST /oauth/revokecom o Account Token e sua asserção de cliente. Cada Session que entrou com ele perde o login na próxima chamada e se renova sem login.
Chamar o quadro
O REST usa DPoP: Authorization: DPoP <token> mais uma prova DPoP nova com htm, htu e ath em cada chamada a /api/v1. O MCP usa Bearer: renove sem prova DPoP e com resource=https://maintenancedue.com/mcp, depois envie Authorization: Bearer <token> para /mcp. Um Session Token Bearer só funciona em /mcp, e lá um token DPoP é recusado. As ferramentas MCP, seus esquemas e o cabeçalho MCP-Protocol-Version 2025-06-18 são os mesmos que o ChatGPT usa.
Ver ou alterar
poppy:read abre cada GET em /api/v1 e cada ferramenta MCP marcada readOnlyHint, como get_due, get_history e list_assets. poppy:write abre todos os outros métodos REST e ferramentas MCP, como append_event, append_reading, create_service e set_rule, mais events/subscribe. Um scope ausente é 403 com error="insufficient_scope" e o scope necessário em WWW-Authenticate. Um token sem login numa chamada de conta é 403 sign_in_required. Um token expirado, ou emitido antes da saída, é 401 invalid_token. Convidar, remover ou deixar membros da org fica com o token do próprio membro.
As conexões do ChatGPT feitas por /oauth/authorize com o scope mcp, e os tokens de membro do Muse que já existem, continuam funcionando como antes. Os nomes de campo ficam em skill.md, o contrato REST em openapi.json e o índice de agentes em llms.txt.