npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

songfinder-mcp

v0.1.0

Published

MCP server for music recognition and audio analysis — identify any song from a URL or audio file, then get its BPM, musical key, Camelot code, and harmonically compatible tracks. Powered by Song Finder (songfinder.dev).

Readme

Song Finder — audio in, identified track out

Song Finder MCP Server

Identify any song, then get its BPM, musical key and harmonically compatible tracks — from inside Claude, Cursor, or any MCP client.

MCP License Node TypeScript API key Website

English · 简体中文 · 日本語 · 한국어 · Español · Deutsch · Français


An MCP server for music recognition and audio analysis, backed by Song Finder — a free online song finder that identifies music from a file, a microphone recording, or a link.

Ask your assistant "what song is playing in this YouTube video?" and it answers. Then ask "what's the BPM and key?" and "find me something that mixes into it" — and it chains straight through.


What it does

| Tool | What you get | |---|---| | identify_song | Song title, artist, album, label, release date and Spotify / Apple Music links — from a URL or a local audio file | | search_tracks | Catalogue lookup by title/artist, returning ISRC codes | | get_track_analysis | Tempo (BPM), musical key, Camelot code, harmonically compatible keys, energy, danceability, valence, acousticness, loudness | | find_similar_tracks | Similar tracks — optionally restricted to harmonically compatible keys for DJ sets |

identify_song accepts links from YouTube, TikTok, Instagram, SoundCloud, Bilibili and X, plus any direct audio or video URL. Local files can be mp3, m4a, wav, flac, ogg, opus, aac or webm.

No API key. No account. No rate card.


Install

Claude Code

claude mcp add songfinder -- npx -y songfinder-mcp

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "songfinder": {
      "command": "npx",
      "args": ["-y", "songfinder-mcp"]
    }
  }
}

Cursor / Windsurf / Cline / Zed

Same shape — command: npx, args: ["-y", "songfinder-mcp"].

Requires Node.js 20 or newer.


Example session

You: What song is playing in this video? (pastes a YouTube link)

Assistant (calls identify_song) Blinding Lights Match confidence: 100% · ISRC: USUG11904206

You: Is it fast? What key?

Assistant (calls get_track_analysis) Blinding Lights — The Weeknd · Album: After Hours · Released: 2020 Tempo: 171 BPM · Key: C#/Db Major (Camelot 3B, Open Key 8d) Mixes with: 3A, 2B, 4B Energy 73% · Danceability 51% · Valence 33% · Loudness −6.0 dB

You: Give me three tracks that mix into it.

Assistant (calls find_similar_tracks with harmonic: true)

(Those analysis figures are the real output, not a mock-up.)


Why the Camelot code matters

Two tracks in adjacent Camelot positions share enough harmonic content to be layered without clashing. 3B mixes cleanly into 3A, 2B and 4B — which is exactly what find_similar_tracks filters on when you pass harmonic: true.

The analysis also cross-checks tempo against a second provider. When the two disagree by more than ~3 BPM, the output says so — that gap almost always means one source read the track at half- or double-time, which matters enormously if you are beatmatching.


Notes on behaviour

Recognition costs real quota, so the endpoint rate-limits per IP. If you fire several identify_song calls back to back you will see a "rate limited" message; wait a few seconds.

Not everything is identifiable. Live versions, unreleased edits, heavily-processed remixes and instrumental beds frequently have no catalogue entry. When a clip lands on an intro or a silent gap, pass start_seconds to sample further in.

The credited artist is whichever catalogue entry matched. Widely re-uploaded tracks often match a white-label or re-upload record rather than the original release, so a famous song can come back credited to a label nobody has heard of. The title is still correct — search_tracks on that title surfaces the original, and the tool output says as much when it happens.

Local files are uploaded to songfinder.dev for identification and are not retained. Keep excerpts under 10MB — a 10–20 second clip is plenty and identifies faster than a full track.

Acoustic coverage is uneven. Long-tail and regional releases often have a tempo but no genre, or no analysis at all. Missing fields are omitted rather than reported as null.


Configuration

| Variable | Default | Purpose | |---|---|---| | SONGFINDER_API_URL | https://songfinder.dev | Point at a different deployment |


Development

pnpm install
pnpm build
node test/smoke.mjs      # real JSON-RPC handshake against the live API
pnpm inspect             # MCP Inspector

The smoke test is deliberately unmocked. The failure worth catching — a renamed field or a tightened origin check upstream — is invisible to a mocked test and is the one that actually happens.


Related

License

MIT