lastfm-mcp
A Model Context Protocol (MCP) server for Last.fm. Gives AI assistants access to your listening history, music discovery, and detailed track/artist/album information.
README
Last.fm MCP Server
A Model Context Protocol (MCP) server for Last.fm. Gives AI assistants access to your listening history, music discovery, and detailed track/artist/album information.
Runs on Cloudflare Workers with OAuth 2.0 authentication. Public tools (track info, artist info, similar artists) work without signing in -- connect your Last.fm account to access personal listening data.
Quick start
Claude.ai / Claude Desktop
- Open Settings -> Connectors -> Add Custom Connector
- Enter
https://lastfm-mcp.com/mcp - Sign in to Last.fm when prompted
Claude Code
claude mcp add --transport http lastfm "https://lastfm-mcp.com/mcp"
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"lastfm": {
"serverUrl": "https://lastfm-mcp.com/mcp"
}
}
}
Other MCP clients
For clients that don't support remote servers directly (Continue.dev, Zed, etc.), use mcp-remote:
{
"mcpServers": {
"lastfm": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://lastfm-mcp.com/mcp"]
}
}
}
MCP Inspector
npx @modelcontextprotocol/inspector https://lastfm-mcp.com/mcp
Authentication
The server uses OAuth 2.0. When you connect from a supported client, your browser opens to Last.fm to authorize access. Tokens persist across sessions.
Public tools work without signing in. You only need to connect your account for personal listening data.
Available tools
Public tools
| Tool | Description |
|---|---|
get_track_info |
Detailed information about a track |
get_artist_info |
Artist information and bio |
get_album_info |
Album details and track listing |
get_artist_top_tracks |
An artist's globally most-played tracks |
get_artist_top_albums |
An artist's globally most-played albums |
get_similar_artists |
Artists similar to a given artist |
get_similar_tracks |
Tracks similar to a given track |
ping |
Test connectivity |
server_info |
Server status and capabilities |
lastfm_auth_status |
Check authentication status |
Personal tools (requires sign-in)
| Tool | Description |
|---|---|
get_recent_tracks |
Recent listening history (paginated) |
get_top_artists |
Top artists by time period |
get_top_albums |
Top albums by time period |
get_top_tracks |
Top tracks by time period |
get_loved_tracks |
Loved/favorited tracks |
get_user_info |
Last.fm profile information |
get_listening_stats |
Listening statistics |
get_music_recommendations |
Personalized recommendations |
Temporal queries (requires sign-in)
| Tool | Description |
|---|---|
get_weekly_chart_list |
Available historical time periods |
get_weekly_artist_chart |
Artist charts for a specific time period |
get_weekly_track_chart |
Track charts for a specific time period |
Good for questions like "when did I start listening to Led Zeppelin?" or "what was I into last March?"
Resources
The server exposes MCP resource URIs:
lastfm://user/{username}/recent # Recent tracks
lastfm://user/{username}/top-artists # Top artists
lastfm://user/{username}/top-albums # Top albums
lastfm://user/{username}/loved # Loved tracks
lastfm://user/{username}/profile # User profile
lastfm://track/{artist}/{track} # Track info
lastfm://artist/{artist} # Artist info
lastfm://album/{artist}/{album} # Album info
lastfm://artist/{artist}/similar # Similar artists
lastfm://track/{artist}/{track}/similar # Similar tracks
Prompts
| Prompt | Description | Arguments |
|---|---|---|
listening_insights |
Analyze listening habits and patterns | username, period? |
music_discovery |
Discover music based on listening history | username, genre? |
track_analysis |
Detailed analysis of a track | artist, track |
album_analysis |
Detailed analysis of an album | artist, album |
artist_analysis |
Detailed analysis of an artist | artist |
listening_habits |
Summarize listening habits | username, timeframe? |
Development
Prerequisites
- Node.js 18+
- Cloudflare Workers account
- Last.fm API key (create one here)
Local setup
git clone https://github.com/rianvdm/lastfm-mcp.git
cd lastfm-mcp
npm install
Create .dev.vars:
LASTFM_API_KEY=your_api_key
LASTFM_SHARED_SECRET=your_shared_secret
JWT_SECRET=your_jwt_secret
npm run dev
Test with the inspector:
npx @modelcontextprotocol/inspector http://localhost:8787/mcp
Deployment
Set production secrets:
echo "your_api_key" | wrangler secret put LASTFM_API_KEY --env production
echo "your_shared_secret" | wrangler secret put LASTFM_SHARED_SECRET --env production
echo "your_jwt_secret" | wrangler secret put JWT_SECRET --env production
Deploy:
npm run deploy:prod
Testing
npm test
npm run typecheck
npm run lint
Architecture
- Runtime: Cloudflare Workers
- Protocol: MCP (streamable HTTP)
- Auth: OAuth 2.0 (RFC 9728)
- Storage: Cloudflare KV for sessions, tokens, and caching
- API: Last.fm Web API v2.0
Endpoints
| Endpoint | Purpose |
|---|---|
/mcp |
MCP JSON-RPC endpoint |
/authorize |
OAuth 2.0 authorization |
/.well-known/oauth-authorization-server |
OAuth server metadata |
/.well-known/oauth-protected-resource |
OAuth resource metadata |
Contributing
- Fork the repo
- Create a feature branch
- Commit your changes
- Open a pull request
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.