feat: read 6-month desktop authToken from tokens-mcp.json (v0.1.2)

Token resolution order:
1. PLAUD_TOKEN env var
2. ~/.plaud/tokens-mcp.json (desktop app authToken, ~6-month expiry)
   Written by plaud_decrypt_tokens.py via Electron safeStorage decryption
3. ~/.plaud/config.json (legacy 24-hour web token fallback)

The Plaud desktop app stores a standard JWT authToken in Chromium v10
Electron safeStorage (AES-128-CBC / PBKDF2-SHA1). plaud_decrypt_tokens.py
extracts this token and saves it to tokens-mcp.json. Current token expires
2026-11-25; re-run the decrypt script on that date to renew.
This commit is contained in:
jason committed 2026-05-12 15:48:08 -05:00
1 parent 955097676e
commit 381142a6ac
1 file changed
+1 -1
+1 -1
View File
@@ -1 +1 @@
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIKUGxhdWQgTUNQIFNlcnZlciBmb3IgTVBNCkNvbm5lY3RzIHRvIHRoZSBQbGF1ZCBBUEkgYW5kIGV4cG9zZXMgdG9vbHMgZm9yIGxpc3RpbmcsIHNlYXJjaGluZywKYW5kIHJlYWRpbmcgdHJhbnNjcmlwdHMsIHN1bW1hcmllcywgYW5kIG5vdGVzIGZyb20gUGxhdWQgcmVjb3JkaW5ncy4KCkNyZWRlbnRpYWxzOiByZWFkcyB0b2tlbiBmcm9tIH4vLnBsYXVkL2NvbmZpZy5qc29uLgoiIiIKCmltcG9ydCBnemlwCmltcG9ydCBqc29uCmltcG9ydCBvcwppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgdXJsbGliLnBhcnNlCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lem9uZQpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCgpmcm9tIG1jcC5zZXJ2ZXIuZmFzdG1jcCBpbXBvcnQgRmFzdE1DUAoKIyDilIDilIAgQ29uZmlndXJhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKUExBVURfUkVHSU9OID0gb3MuZW52aXJvbi5nZXQoIlBMQVVEX1JFR0lPTiIsICJ1cyIpCkJBU0VfVVJMID0gImh0dHBzOi8vYXBpLnBsYXVkLmV1IiBpZiBQTEFVRF9SRUdJT04gPT0gImV1IiBlbHNlICJodHRwczovL2FwaS5wbGF1ZC5haSIKQ09ORklHX1BBVEggPSBQYXRoLmhvbWUoKSAvICIucGxhdWQiIC8gImNvbmZpZy5qc29uIgoKCiMg4pSA4pSAIFRva2VuIHJlc29sdXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpkZWYgX2xvYWRfdG9rZW4oKSAtPiBPcHRpb25hbFtzdHJdOgogICAgZW52X3Rva2VuID0gb3MuZW52aXJvbi5nZXQoIlBMQVVEX1RPS0VOIiwgIiIpLnN0cmlwKCkKICAgIGlmIGVudl90b2tlbjoKICAgICAgICByZXR1cm4gZW52X3Rva2VuCgogICAgaWYgQ09ORklHX1BBVEguZXhpc3RzKCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhDT05GSUdfUEFUSC5yZWFkX3RleHQoKSkKICAgICAgICAgICAgdG9rZW5fYmxvY2sgPSBkYXRhLmdldCgidG9rZW4iKQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRva2VuX2Jsb2NrLCBkaWN0KToKICAgICAgICAgICAgICAgIHQgPSAodG9rZW5fYmxvY2suZ2V0KCJ0b2tlbiIpIG9yIHRva2VuX2Jsb2NrLmdldCgiYWNjZXNzVG9rZW4iKSBvciAiIikuc3RyaXAoKQogICAgICAgICAgICAgICAgaWYgdDoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdAogICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRva2VuX2Jsb2NrLCBzdHIpIGFuZCB0b2tlbl9ibG9jay5zdHJpcCgpOgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuX2Jsb2NrLnN0cmlwKCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBwYXNzCgogICAgcmV0dXJuIE5vbmUKCgpkZWYgX2dldF90b2tlbigpIC0+IHN0cjoKICAgIHRva2VuID0gX2xvYWRfdG9rZW4oKQogICAgaWYgbm90IHRva2VuOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgIk5vIFBsYXVkIHRva2VuIGZvdW5kLiBSdW4gdGhlIHBsYXVkLWNvbm5lY3RvciBpbXBvcnQtdG9rZW4gY29tbWFuZCAiCiAgICAgICAgICAgICJvciBzZXQgdGhlIFBMQVVEX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLiIKICAgICAgICApCiAgICByZXR1cm4gdG9rZW4KCgojIOKUgOKUgCBIVFRQIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpkZWYgX2FwaV9nZXQocGF0aDogc3RyLCBwYXJhbXM6IE9wdGlvbmFsW2RpY3RdID0gTm9uZSkgLT4gZGljdDoKICAgICIiIkdFVCByZXF1ZXN0IHRvIHRoZSBQbGF1ZCBBUEkgdXNpbmcgY3VybCAoYnlwYXNzZXMgQ2xvdWRmbGFyZSBicm93c2VyIGNoZWNrKS4iIiIKICAgIHRva2VuID0gX2dldF90b2tlbigpCiAgICB1cmwgPSBmIntCQVNFX1VSTH17cGF0aH0iCiAgICBpZiBwYXJhbXM6CiAgICAgICAgcXVlcnkgPSAiJiIuam9pbigKICAgICAgICAgICAgZiJ7a309e3VybGxpYi5wYXJzZS5xdW90ZShzdHIodikpfSIKICAgICAgICAgICAgZm9yIGssIHYgaW4gcGFyYW1zLml0ZW1zKCkgaWYgdiBpcyBub3QgTm9uZQogICAgICAgICkKICAgICAgICBpZiBxdWVyeToKICAgICAgICAgICAgdXJsID0gZiJ7dXJsfT97cXVlcnl9IgoKICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKAogICAgICAgIFsiY3VybCIsICItcyIsICItZiIsCiAgICAgICAgICItSCIsIGYiQXV0aG9yaXphdGlvbjogQmVhcmVyIHt0b2tlbn0iLAogICAgICAgICAiLUgiLCAiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgdXJsXSwKICAgICAgICBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUsIHRpbWVvdXQ9MzAsCiAgICApCiAgICBpZiByZXN1bHQucmV0dXJuY29kZSAhPSAwOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgZiJQbGF1ZCBBUEkgZXJyb3IgKGN1cmwgZXhpdCB7cmVzdWx0LnJldHVybmNvZGV9KToge3Jlc3VsdC5zdGRlcnJbOjMwMF19IgogICAgICAgICkKICAgIHRyeToKICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhyZXN1bHQuc3Rkb3V0KQogICAgZXhjZXB0IGpzb24uSlNPTkRlY29kZUVycm9yOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihmIkludmFsaWQgSlNPTiBmcm9tIFBsYXVkIEFQSToge3Jlc3VsdC5zdGRvdXRbOjMwMF19IikKCgpkZWYgX2ZldGNoX3MzX2pzb24odXJsOiBzdHIpIC0+IG9iamVjdDoKICAgICIiIkZldGNoIGFuZCBkZWNvbXByZXNzIGEgZ3ppcHBlZCBKU09OIGZyb20gYSBzaWduZWQgUzMgVVJMLiIiIgogICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oCiAgICAgICAgWyJjdXJsIiwgIi1zIiwgIi1mIiwgdXJsXSwKICAgICAgICBjYXB0dXJlX291dHB1dD1UcnVlLCB0aW1lb3V0PTMwLAogICAgKQogICAgaWYgcmVzdWx0LnJldHVybmNvZGUgIT0gMDoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoZiJTMyBmZXRjaCBmYWlsZWQgKGN1cmwgZXhpdCB7cmVzdWx0LnJldHVybmNvZGV9KSIpCiAgICB0cnk6CiAgICAgICAgY29udGVudCA9IGd6aXAuZGVjb21wcmVzcyhyZXN1bHQuc3Rkb3V0KQogICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgY29udGVudCA9IHJlc3VsdC5zdGRvdXQgICMgTm90IGd6aXBwZWQKICAgIHJldHVybiBqc29uLmxvYWRzKGNvbnRlbnQuZGVjb2RlKCJ1dGYtOCIpKQoKCiMg4pSA4pSAIERhdGEgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDLine truncated IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiIKUGxhdWQgTUNQIFNlcnZlciBmb3IgTVBNCkNvbm5lY3RzIHRvIHRoZSBQbGF1ZCBBUEkgYW5kIGV4cG9zZXMgdG9vbHMgZm9yIGxpc3RpbmcsIHNlYXJjaGluZywKYW5kIHJlYWRpbmcgdHJhbnNjcmlwdHMsIHN1bW1hcmllcywgYW5kIG5vdGVzIGZyb20gUGxhdWQgcmVjb3JkaW5ncy4KCkNyZWRlbnRpYWxzIChjaGVja2VkIGluIG9yZGVyKToKICAxLiBQTEFVRF9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZQogIDIuIH4vLnBsYXVkL3Rva2Vucy1tY3AuanNvbiAgKGRlc2t0b3AgYXBwIGF1dGhUb2tlbiDigJQgdmFsaWQgfjYgbW9udGhzKQogIDMuIH4vLnBsYXVkL2NvbmZpZy5qc29uICAgICAgKG1hbnVhbGx5IGltcG9ydGVkIDI0LWhvdXIgd2ViIHRva2VuKQoKVG8gcmVuZXc6IHJlLXJ1biBwbGF1ZF9kZWNyeXB0X3Rva2Vucy5weSBmcm9tIHRoZSBDbGF1ZGUgQ29Xb3JrIGZvbGRlci4KIiIiCgppbXBvcnQgZ3ppcAppbXBvcnQganNvbgppbXBvcnQgb3MKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHVybGxpYi5wYXJzZQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUKZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBtY3Auc2VydmVyLmZhc3RtY3AgaW1wb3J0IEZhc3RNQ1AKCiMg4pSA4pSAIENvbmZpZ3VyYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAClBMQVVEX1JFR0lPTiA9IG9zLmVudmlyb24uZ2V0KCJQTEFVRF9SRUdJT04iLCAidXMiKQpCQVNFX1VSTCA9ICJodHRwczovL2FwaS5wbGF1ZC5ldSIgaWYgUExBVURfUkVHSU9OID09ICJldSIgZWxzZSAiaHR0cHM6Ly9hcGkucGxhdWQuYWkiCkNPTkZJR19QQVRIICAgICAgPSBQYXRoLmhvbWUoKSAvICIucGxhdWQiIC8gImNvbmZpZy5qc29uIgpUT0tFTlNfTUNQX1BBVEggID0gUGF0aC5ob21lKCkgLyAiLnBsYXVkIiAvICJ0b2tlbnMtbWNwLmpzb24iCgoKIyDilIDilIAgVG9rZW4gcmVzb2x1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmRlZiBfbG9hZF90b2tlbigpIC0+IE9wdGlvbmFsW3N0cl06CiAgICAjIDEuIEVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlCiAgICBlbnZfdG9rZW4gPSBvcy5lbnZpcm9uLmdldCgiUExBVURfVE9LRU4iLCAiIikuc3RyaXAoKQogICAgaWYgZW52X3Rva2VuOgogICAgICAgIHJldHVybiBlbnZfdG9rZW4KCiAgICAjIDIuIHRva2Vucy1tY3AuanNvbiDigJQgZGVza3RvcCBhcHAgYXV0aFRva2VuICh+Ni1tb250aCBleHBpcnkpCiAgICAjICAgIFdyaXR0ZW4gYnkgcGxhdWRfZGVjcnlwdF90b2tlbnMucHk7IHJlbmV3IGJ5IHJlLXJ1bm5pbmcgdGhhdCBzY3JpcHQuCiAgICBpZiBUT0tFTlNfTUNQX1BBVEguZXhpc3RzKCk6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhUT0tFTlNfTUNQX1BBVEgucmVhZF90ZXh0KCkpCiAgICAgICAgICAgIHQgPSBkYXRhLmdldCgiYWNjZXNzX3Rva2VuIiwgIiIpLnN0cmlwKCkKICAgICAgICAgICAgaWYgdDoKICAgICAgICAgICAgICAgIHJldHVybiB0CiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwoKICAgICMgMy4gY29uZmlnLmpzb24g4oCUIG1hbnVhbGx5IGltcG9ydGVkIDI0LWhvdXIgd2ViIHRva2VuIChsZWdhY3kgZmFsbGJhY2spCiAgICBpZiBDT05GSUdfUEFUSC5leGlzdHMoKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKENPTkZJR19QQVRILnJlYWRfdGV4dCgpKQogICAgICAgICAgICB0b2tlbl9ibG9jayA9IGRhdGEuZ2V0KCJ0b2tlbiIpCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodG9rZW5fYmxvY2ssIGRpY3QpOgogICAgICAgICAgICAgICAgdCA9ICh0b2tlbl9ibG9jay5nZXQoInRva2VuIikgb3IgdG9rZW5fYmxvY2suZ2V0KCJhY2Nlc3NUb2tlbiIpIG9yICIiKS5zdHJpcCgpCiAgICAgICAgICAgICAgICBpZiB0OgogICAgICAgICAgICAgICAgICAgIHJldHVybiB0CiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodG9rZW5fYmxvY2ssIHN0cikgYW5kIHRva2VuX2Jsb2NrLnN0cmlwKCk6CiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fYmxvY2suc3RyaXAoKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHBhc3MKCiAgICByZXR1cm4gTm9uZQoKCmRlZiBfZ2V0X3Rva2VuKCkgLT4gc3RyOgogICAgdG9rZW4gPSBfbG9hZF90b2tlbigpCiAgICBpZiBub3QgdG9rZW46CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAiTm8gUGxhdWQgdG9rZW4gZm91bmQuIFJ1biB0aGUgcGxhdWQtY29ubmVjdG9yIGltcG9ydC10b2tlbiBjb21tYW5kICIKICAgICAgICAgICAgIm9yIHNldCB0aGUgUExBVURfVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUuIgogICAgICAgICkKICAgIHJldHVybiB0b2tlbgoKCiMg4pSA4pSAIEhUVFAgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmRlZiBfYXBpX2dldChwYXRoOiBzdHIsIHBhcmFtczogT3B0aW9uYWxbZGljdF0gPSBOb25lKSAtPiBkaWN0OgogICAgIiIiR0VUIHJlcXVlc3QgdG8gdGhlIFBsYXVkIEFQSSB1c2luZyBjdXJsIChieXBhc3NlcyBDbG91ZGZsYXJlIGJyb3dzZXIgY2hlY2spLiIiIgogICAgdG9rZW4gPSBfZ2V0X3Rva2VuKCkKICAgIHVybCA9IGYie0JBU0VfVVJMfXtwYXRofSIKICAgIGlmIHBhcmFtczoKICAgICAgICBxdWVyeSA9ICImIi5qb2luKAogICAgICAgICAgICBmIntrfT17dXJsbGliLnBhcnNlLnF1b3RlKHN0cih2KSl9IgogICAgICAgICAgICBmb3IgaywgdiBpbiBwYXJhbXMuaXRlbXMoKSBpZiB2IGlzIG5vdCBOb25lCiAgICAgICAgKQogICAgICAgIGlmIHF1ZXJ5OgogICAgICAgICAgICB1cmwgPSBmInt1cmx9P3txdWVyeX0iCgogICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oCiAgICAgICAgWyJjdXJsIiwgIi1zIiwgIi1mIiwKICAgICAgICAgIi1IIiwgZiJBdXRob3JpemF0aW9uOiBCZWFyZXIge3Rva2VufSIsCiAgICAgICAgICItSCIsICJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICB1cmxdLAogICAgICAgIGNhcHR1cmVfb3V0cHV0PVRydWUsIHRleHQ9VHJ1ZSwgdGltZW91dD0zMCwKICAgICkKICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlICE9IDA6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICBmIlBsYXVkIEFQSSBlcnJvciAoY3VybCBleGl0IHtyZXN1bHQucmV0dXJuY29kZX0pOiBLine truncated