MCP server for lyrics.com: search song lyrics by word or title, fetch full lyrics. No API key.
claude mcp add mcp-lyricscom -- npx -y mcp-lyricscom{
"mcpServers": {
"mcp-lyricscom": {
"command": "npx",
"args": ["-y", "mcp-lyricscom"]
}
}
}MCP Servers overview
# mcp-lyricscom
[](https://www.npmjs.com/package/mcp-lyricscom)
[](https://github.com/smeet666/mcp-lyricscom/actions/workflows/ci.yml)
[](./LICENSE)
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.smeet666/mcp-lyricscom)
An [MCP](https://modelcontextprotocol.io) server for [lyrics.com](https://www.lyrics.com).
Search songs by a word in their lyrics, by title, and read the full text.
**No API key, no account, no configuration.**
_(Version française plus bas / [French version below](#mcp-lyricscom-français))_
---
## Quickstart
**One-click install**
[](https://cursor.com/en/install-mcp?name=lyricscom&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1seXJpY3Njb20iXX0%3D)
[](https://insiders.vscode.dev/redirect/mcp/install?name=lyricscom&config=%7B%22name%22%3A%22lyricscom%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mcp-lyricscom%22%5D%7D)
**Claude Code**
```bash
claude mcp add lyricscom -- npx -y mcp-lyricscom
```
**Claude Desktop, Cursor, and any client using the standard config format**
```json
{
"mcpServers": {
"lyricscom": {
"command": "npx",
"args": ["-y", "mcp-lyricscom"]
}
}
}
```
That is the whole setup. There is nothing to sign up for.
## Tools
| Tool | What it does | Key parameters |
| --------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| `search_lyrics` | Finds songs whose **lyrics contain a word or phrase**, with the matching line as an excerpt. | `query`, `limit`, `page`, `verify`, `include_excerpt` |
| `search_songs` | Finds songs **by title**, optionally narrowed by artist. | `title`, `artist`, `limit`, `page`, `match` |
| `get_lyrics` | Reads the **full lyrics** of one song, by id or URL. | `id`, `url`, `max_chars`, `offset`, `highlight` |
The two search tools return a lyrics.com `id` for every result; `get_lyrics` takes that id.
That is the intended chain: search, then read.
### Things worth knowing
**Search really checks the lyrics.** lyrics.com's own search also returns title
matches and loose matches. `search_lyrics` filters them out locally, using a
word-boundary matcher, so a result is a song where the word genuinely appears.
`coup` does not match `beaucoup`, but `enfant` does match `enfants`. Set
`verify: "none"` to see the raw, unfiltered list.
**Pagination is yours to drive.** One call fetches one page (24 rows on
lyrics.com). The response carries `has_more` and `next_page`. Raising `limit`
does not fetch more pages, on purpose: chaining several fetches inside a single
tool call is the fastest way to get rate limited.
**Some songs have no lyrics.** A valid lyrics.com page can simply have no text
on file. That comes back as `status: "no_lyrics"` with a successful result, not
an error, so there is nothing to retry.
**Rate limiting is visible, not silent.** lyrics.com answers a throttled request
with an empty body rather than a normal error code. This server detects that and
returns an explicit `throttled` error telling you to wait and try again. It never
reports throttling as "no results found", which would be indistinguishable from a
genuine answer.
## Configuration
Every variable is optional. Set them in the `env` block of your MCP client config.
| Variable | Default | Purpose |
| ----------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `LYRICSCOM_USER_AGENT` | `mcp-lyricscom/<version> (+repo url)` | User-Agent sent to lyrics.com. See below. |
| `LYRICSCOM_MIN_INTERVAL_MS` | `1100` | Minimum gap between requests. Raise it if you hit throttling. Values below 500 ms are ignored, see below. |
| `LYRICSCOM_TIMEOUT_MS` | `15000` | Per-request timeout. |
| `LYRICSCOM_MAX_RETRIES` | `3` | Retries on throttling and transient errors. |
| `LYRICSCOM_CACHE_TTL_MS` | `900000` | In-memory page cache lifetime (15 minutes). |
| `LYRICSCOM_CACHE_MAX_ENTRIES` | `200` | In-memory page cache size. |
| `LYRICSCOM_LOG_LEVEL` | `error` | `silent`, `error`, `info` or `debug`. Logs go to stderr. |
```json
{
"mcpServers": {
"lyricscom": {
"command": "npx",
"args": ["-y", "mcp-lyricscom"],
"env": { "LYRICSCOM_MIN_INTERVAL_MS": "1500" }
}
}
}
```
### About the User-Agent
This server identifies itself honestly by default, naming the project and linking
to this repository. lyrics.com serves that fine today.
It does block some generic tool agents outright: a plain `curl/8.5.0` gets a 403.
If you ever see a `blocked_user_agent` error, set `LYRICSCOM_USER_AGENT` to a
value of your choosing. That override exists so you are not stuck, and what you
put in it is your call and your responsibility.
## Troubleshooting
**"throttled" errors.** lyrics.com is rate limiting you. The server already
retries with backoff and slows itself down on its own, so seeing this error means
those retries were exhausted. Once the site starts throttling, the window
commonly lasts several minutes, not seconds: wait a minute or more before trying
again, and raise `LYRICSCOM_MIN_INTERVAL_MS` if it keeps happening. A `throttled`
error does not mean your query has no results.
**"blocked_user_agent" errors.** See the User-Agent section above.
**"parse_failure" errors.** lyrics.com changed its page layout and the server
could not read the response. Please [open an issue](https://github.com/smeet666/mcp-lyricscom/issues)
with the query you used. The server deliberately reports this loudly instead of
pretending it found nothing.
**Empty results.** If `raw_result_count` is greater than zero while `results` is
empty, lyrics.com did return rows but none of them actually contain your word.
Try `verify: "none"` to see them anyway.
## How it works
There is no lyrics.com API. The server requests the same public pages you would
open in a browser and reads them with [cheerio](https://cheerio.js.org). It
fetches one page at a time, roughly one request per second, backs off when the
site pushes back, and keeps a small in-memory cache so repeated questions about
the same song do not hit the site again.
## Development
```bash
npm install
npm run build:fixtures # regenerate the HTML test fixtures
npm test # unit tests, no network
npm run typecheck
npm run build
LYRICSCOM_LIVE=1 npm run test:live # hits the real site, excluded from CI
npm run inspector # explore the tools in the MCP Inspector
```
The fixtures are generated, not scraped: they reproduce lyrics.com's markup
structure with placeholder text, so the parser tests are deterministic and no
copyrighted lyrics live in this repository.
The scraping layer (`src/lyricscom`, `src/text`) does not import the MCP SDK and
is published separately as `mcp-lyricscom/client`, so it can be used as a plain
library.
## Lyrics and copyright
Song lyrics are copyrighted works owned by their authors and publishers. This
project claims no rights over them.
This server is a client. It fetches the same public lyrics.com pages you could
open in a browser, on demand, one request at a time, in response to an explicit
request from you or your assistant. It does not crawl the site, does not build a
lyrics database, and does not write anything to disk. Pages are held in memory
for a few minutes so that repeated questions do not hit the site again.
Every result carries the artist, the title, and the source URL. If you display or
reuse anything this server returns, keep that attribution and link back to the
source page.
The server honours lyrics.com's robots.txt: none of the endpoints it uses are
disallowed there, and it paces itself to roughly one request per second. That
pacing is enforced: `LYRICSCOM_MIN_INTERVAL_MS` is refused below 500 ms, and a
lower value falls back to the standard interval with a warning on stderr. Raise
it to slow the client down further.
This is an unofficial project, with no affiliation to, endorsement by, or
sponsorship from lyrics.com or STANDS4 Ltd. Use it in accordance with lyrics.com's
terms of service and the copyright law that applies to you.
## License
MIT. See [LICENSE](./LICENSE). The license covers this source code only, not the
lyrics retrieved through it.
---
<a name="mcp-lyricscom-français"></a>
# mcp-lyricscom (français)
Un serveur [MCP](https://modelcontextprotocol.io) pour [lyrics.com](https://www.lyrics.com).
Cherchez des chansons par un mot présent dans lesWhat people ask about mcp-lyricscom
What is smeet666/mcp-lyricscom?
+
smeet666/mcp-lyricscom is mcp servers for the Claude AI ecosystem. MCP server for lyrics.com: search song lyrics by word or title, fetch full lyrics. No API key. It has 0 GitHub stars and was last updated today.
How do I install mcp-lyricscom?
+
You can install mcp-lyricscom by cloning the repository (https://github.com/smeet666/mcp-lyricscom) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is smeet666/mcp-lyricscom safe to use?
+
smeet666/mcp-lyricscom has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains smeet666/mcp-lyricscom?
+
smeet666/mcp-lyricscom is maintained by smeet666. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to mcp-lyricscom?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy mcp-lyricscom to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/smeet666-mcp-lyricscom)<a href="https://claudewave.com/repo/smeet666-mcp-lyricscom"><img src="https://claudewave.com/api/badge/smeet666-mcp-lyricscom" alt="Featured on ClaudeWave: smeet666/mcp-lyricscom" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!