Deleted server still shows (empty duplicate libraries) on ONE Android TV / Fire TV client only — abs

  • Server Version#: 1.43.2.10687-563d026ea
  • Player Version#: 2026.13.0 (Plex for Android TV / Fire TV, com.plexapp.android)

I migrated my Plex server to a new machine and cannot get the old, deleted server to stop appearing on one client (an Amazon Fire TV Cube, Plex for Android TV). It shows the old server’s empty duplicate library tiles (Movies / TV Shows / Anime / Documentaries / Hentai) in the Libraries view, alongside my one real, working server.

  • Old (ghost) server: name “ACE-AI”, machineIdentifier 8ac800319194a66acbadbeee6f10f65d90720d8a
  • New (real) server: name “Ace’s AI PC”, machineIdentifier bb6a9ed2a14797e76b91fa7f00d800fd1e439a6b (owned, online, working)

The ghost is provably gone everywhere EXCEPT this one client. Verified with my account token that the old machineIdentifier 8ac800… (and the name “ACE-AI”) returns ZERO hits from:

What I’ve already tried (ghost still appears on the Fire TV Libraries view):

  1. Deleted the old server from the account; deleted its device registration by numeric id (DELETE /devices/.xml → 200)
  2. Deleted the stale Fire TV client sessions from Authorized Devices
  3. pm clear on the Plex app ×3 + wiped external cache dirs
  4. True adb uninstall + reboot (Plex fully absent) + fresh reinstall from scratch + fresh sign-in — ghost STILL returns
  5. Signed in via both Google SSO and plex tv/link

Because it survived a from-scratch client reinstall (the most thorough client wipe possible), the source cannot be client-local — yet it’s invisible to every account endpoint I can query. That points to a server-side, per-account home/libraries cache inside plex tv that still references the dead machineIdentifier and gets pushed to this client, but which the public resource/devices APIs don’t expose and which I can’t purge myself.

Request: Please purge the stale server reference 8ac800319194a66acbadbeee6f10f65d90720d8a (“ACE-AI”) from my account’s backend home/hub cache so it stops being served to my clients. Account: Ace_in_Space / kyzcreig@gmail.com. Happy to provide server logs or the client’s PMS token if needed.

SOLVED — and it was never a server registration. It’s five orphaned rows in the account’s favoriteLibraries setting.

Posting the full root cause since I couldn’t find this documented anywhere, and two other current threads (940596, 940670) look like the same bug.

The mechanism

The ghost tiles are served from an endpoint that is not part of the resources/devices graph:

https://clients.plex.tv/api/v2/user/settings?key=favoriteLibraries&sharedSettings=1

Mine held 9 entries — 4 for the live server, and 5 still pointing at the deleted server’s machineIdentifier, titled Movies / TV Shows / Anime / Hentai / Documentaries. Exactly the five tiles on my Fire TV, verbatim.

Each entry is a self-contained library descriptor (serverId, serverName, title, key, hubKey), so the Android TV client draws the tile without ever consulting /api/v2/resources. The server being gone is why the tiles render empty — the client can draw them but never resolves a connection.

That explains everything that made this so confusing:

  • /api/resources, /api/v2/resources, /devices.xml all genuinely clean — different store entirely
  • Plex Web sidebar clean — web renders from pinned sources; the leanback Libraries grid doesn’t filter unresolvable servers
  • Survived 3x app-data clear, a full uninstall + reinstall, and fresh sign-ins — the list is account-side and cross-device-synced, so every reinstall just re-downloaded the same stale entries

There’s also no way to fix it in the UI: “See All Libraries” only offers un-favoriting for libraries on reachable servers, while the favorites count still includes the dead ones.

The fix (surgical prune — preserves your real favorites)

GET and POST are both allowed on that endpoint, so you can prune rather than wipe:

T='<your X-Plex-Token>'
S='https://clients.plex.tv/api/v2/user/settings?key=favoriteLibraries&sharedSettings=1'
H=(-H 'Accept: application/json' -H 'Content-Type: application/json' -H 'X-Plex-Client-Identifier: probe')

# 1. Back up first
curl -s "$S" "${H[@]}" -H "X-Plex-Token: $T" -o fav-backup.json

# 2. Drop rows whose serverId is the dead machineIdentifier
python3 -c "
import json; d=json.load(open('fav-backup.json'))
keep=[l for l in d['libraries'] if l['serverId']!='<DEAD_MACHINE_ID>']
json.dump({'value':json.dumps({'libraries':keep})},open('pruned.json','w'))"

# 3. POST it back
curl -s -X POST "$S&X-Plex-Token=$T" "${H[@]}" --data @pruned.json

# 4. Verify (expect 0)
curl -s "$S" "${H[@]}" -H "X-Plex-Token: $T" | grep -c '<DEAD_MACHINE_ID>'

Then sign the client out and back in so it re-pulls the corrected list.

Three gotchas worth flagging

  1. The token must be joined with &X-Plex-Token=. Some versions of these commands circulating use a second ? before the token — I tested that form and it returns HTTP 404, not an auth error, which makes it look like the endpoint doesn’t exist.
  2. The POST body must be {"value": ...} — a bare {"libraries":[...]} returns 400 code 1004 "value is missing".
  3. ?key= is mandatory — without it the endpoint 404s, which is probably why generic “user settings” poking finds nothing.

Also worth checking if you’re cleaning up a migration: the legacy v1 registry at https://plex.tv/pms/servers.xml still listed my dead server even though no v2 endpoint did. DELETE https://plex.tv/pms/servers/<machineIdentifier> clears it.

Result: after the prune plus one sign-out/sign-in, the Fire TV Libraries view shows zero references to the old server — only the four real libraries on the live one. No staff intervention needed.