The big shifts in this release: three new tools, a glassmorphism-redesigned landing page, timezone-aware day boundaries on get_recent_tracks, and a 8,300-line cull of the original session-based worker now that the OAuth path has been the only one in production for a while.
What’s new
- Three new tools.
get_top_tracksfills the obvious symmetry gap with the existingget_top_artistsandget_top_albums.get_artist_top_tracksandget_artist_top_albumssurface an artist’s globally most-played catalog — useful for “what’s the canonical record by X” questions. - Date-aware
get_recent_tracks. Newdateparam accepts aYYYY-MM-DDcalendar date plus atimezone(IANA name, e.g.America/New_York) and the server computes the correct UTC day boundaries. Way better than jugglingfrom/toUnix timestamps for “what did I listen to yesterday” queries. The response also echoes the queried range back so an LLM can self-verify it asked the right question. - Redesigned landing page at lastfm-mcp.com — glassmorphism, animated waves, glow effects.
Fixes
get_album_infono longer renders[object Object]when Last.fm returns the album artist as an object instead of a string. Latent bug, fixed via aformatArtisthelper that handles both shapes.
Under the hood
- Deleted the legacy worker. Removed
src/index.tsplus the homemade JSON-RPC dispatch layer insrc/protocol/and the SSE transport insrc/transport/. The OAuth worker (src/index-oauth.ts) has been the only production deployment for months; the legacy[env.legacy]block inwrangler.tomlwas never deployed to Cloudflare. Net diff: −8,293 lines, 0 added. Test suite went from 376 tests / 5 failing → 167 tests / 0 failing. - Dropped dead deps:
crypto-js,@types/crypto-js,oauth-1.0a— zero imports. - Removed dead throttle.
LastfmClient.throttleRequestwas per-request (clients are instantiated per-request in the OAuth worker), so it never observed a previous request — it did nothing while implying rate-limit safety. Existing 429-aware retry handles rate limits correctly. - Dynamic tool catalog. The
lastfm_auth_statustool list lives in one place now (src/mcp/tools/catalog.ts) instead of being hardcoded in three.