Menu

Release: lastfm-mcp v2.4.0 — Top tracks and 8K fewer lines

Project
lastfm-mcp
Summary
Last.fm MCP server.
URL
lastfm-mcp.com

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_tracks fills the obvious symmetry gap with the existing get_top_artists and get_top_albums. get_artist_top_tracks and get_artist_top_albums surface an artist’s globally most-played catalog — useful for “what’s the canonical record by X” questions.
  • Date-aware get_recent_tracks. New date param accepts a YYYY-MM-DD calendar date plus a timezone (IANA name, e.g. America/New_York) and the server computes the correct UTC day boundaries. Way better than juggling from/to Unix 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_info no longer renders [object Object] when Last.fm returns the album artist as an object instead of a string. Latent bug, fixed via a formatArtist helper that handles both shapes.

Under the hood

  • Deleted the legacy worker. Removed src/index.ts plus the homemade JSON-RPC dispatch layer in src/protocol/ and the SSE transport in src/transport/. The OAuth worker (src/index-oauth.ts) has been the only production deployment for months; the legacy [env.legacy] block in wrangler.toml was 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.throttleRequest was 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_status tool list lives in one place now (src/mcp/tools/catalog.ts) instead of being hardcoded in three.