Genius MCP Server
An MCP server to interact with the genius.com API and collect song information, annotations, artist data, etc.
Genius MCP Server
An MCP server that brings the power of Genius into your AI assistant.
Query songs, artists, lyrics annotations, album artwork annotations, song relationships, credits, and editorial knowledge through a clean set of tools and prompts — powered by both the official Genius API and the lyricsgenius Python library.
Table of Contents
- What It Does
- Tools
- Prompts
- Getting Started
- Transport Modes
- Connecting to an MCP Client
- Annotation Trust Levels
- Project Structure
- License
What It Does
The Genius MCP Server exposes the Genius.com knowledge base to any MCP-compatible AI client (Claude Desktop, Claude Code, Cursor, etc.). It lets the AI:
- Search for songs and artists by name
- Fetch full song metadata — title, album, release date, lyrics state, and Genius editorial descriptions
- Fetch artist profiles — bio, follower count, verification status
- Browse an artist's discography — sorted by popularity or release date, or as a full album list with tracklists
- Read annotations — community and artist-verified explanations of specific lyric fragments, each tagged with a trust level so the AI knows how much weight to give them
- Read album artwork annotations — community explanations of visual elements, symbolism, and artistic choices written directly on album cover art images
- Explore song relationships — discover what a song samples, interpolates, covers, or remixes, and what later songs sampled it in turn
- Look up song credits — writers, producers, featured artists, and custom performance roles (mixing engineer, recording studio, label)
- Run pre-built analysis prompts that gather all relevant data in one shot and ask the AI for a deep analysis of a song or artist
Tools
Some tools call the official Genius API (api.genius.com) using your access token. Others use the lyricsgenius Python library, which accesses Genius's undocumented public API — these endpoints are not part of the official API contract and may change without notice.
| Tool | Description | Backend |
|---|---|---|
search_song | Search Genius for songs matching a query. Returns song IDs, titles, artists, and annotation counts. | Official API |
get_song_details | Fetch full metadata and editorial description for a song by its Genius ID. | Official API |
get_song_annotations | Fetch all annotations for a song, optionally filtered by trust level (artist_verified, accepted, unreviewed). | Official API |
get_annotation_detail | Fetch the full text and metadata of a single annotation by its ID. | Official API |
get_song_questions_and_answers | Fetch user-submitted questions and answers for a song, with pagination. Only questions that have an accepted answer are returned. | lyricsgenius (public undocumented API) |
get_song_relationships | Fetch the musical relationships for a song — what it samples, interpolates, covers, remixes, or translates, and which later songs sampled or covered it. Only relationship types with at least one linked song are returned. | Official API |
get_song_credits | Fetch writing and production credits for a song: writers, producers, featured artists, and custom performance roles (e.g. mixing engineer, recording studio, label). | Official API |
search_artist | Search Genius for an artist by name. Returns artist IDs and basic profile info. | Official API |
get_artist_details | Fetch full profile and editorial bio for an artist by their Genius ID. | Official API |
get_artist_songs | List songs by an artist, sortable by popularity or release_date, with pagination. | Official API |
get_artist_albums | Retrieve the full discography of an artist as a paginated list of albums with album IDs. | lyricsgenius (public undocumented API) |
search_album | Search Genius for albums matching a query. Returns album IDs, names, artist names, and release dates. | lyricsgenius (public undocumented API) |
get_album_details | Fetch metadata, full ordered tracklist, and cover art list for an album by its Genius album ID. Each track includes its song ID for chaining into other tools. The first cover art is always the main album cover; annotated artworks include an annotation_id. | Official API + lyricsgenius |
get_cover_art_annotations | Fetch the full annotation written on a specific album cover art image — body text, trust level, authors, and vote count. Requires cover_art_id and album_id (both available from get_album_details). Only call for cover arts that have an annotation_id. | lyricsgenius (public undocumented API) |
Prompts
Prompts are pre-built multi-step workflows that gather data from Genius and feed it to the AI in a structured context.
analyze-song
Args: song_title (required), artist_name (optional)
Searches for the song, fetches its full metadata and editorial description, retrieves all annotations (sorted by trust level), and asks the AI for a deep analysis of the song's meaning, themes, and cultural context.
artist-deep-dive
Args: artist_name (required)
Fetches the artist's full bio, their top 3 most popular songs with metadata and artist-verified annotations (where available), and asks the AI for an overview of the artist's themes, style, and significance.
Getting Started
1. Get a Genius API Token
- Go to https://genius.com/api-clients and sign in.
- Create a new API client.
- Copy the Client Access Token — this is the value you'll use for
GENIUS_ACCESS_TOKEN.
2. Configure Environment Variables
Copy the example env file and fill in your token:
cp .env.example .env
Edit .env:
# Required — your Genius API access token
GENIUS_ACCESS_TOKEN=your_token_here
# Transport mode:
# true → run as a Streamable HTTP server on port 8080
# false → run in stdio mode (for Claude Desktop)
STREAMABLE_HTTP=true
3. Run with Python
Requirements: Python 3.11+
Install dependencies:
pip install -r requirements.txt
Run the server:
python main.py
The server will start on http://127.0.0.1:8080 (Streamable HTTP mode) or in stdio mode depending on your STREAMABLE_HTTP setting.
4. Run with Docker
Streamable HTTP mode (default):
docker compose up --build
The server runs as genius-mcp-server on port 8080. The .env file is mounted into the container — make sure it exists and contains your token before starting.
stdio mode (e.g. for Claude Desktop via Docker):
Set STREAMABLE_HTTP=false in your .env, then run:
docker run --rm -i --env-file .env $(docker build -q .)
Transport Modes
| Mode | STREAMABLE_HTTP | Use Case |
|---|---|---|
| Streamable HTTP | true (default) | Claude Code, remote MCP clients, web-based tools |
| stdio | false | Claude Desktop, local CLI integrations |
Connecting to an MCP Client
Claude Code (Streamable HTTP)
claude mcp add genius --transport http http://127.0.0.1:8080/mcp
Claude Desktop (stdio)
With STREAMABLE_HTTP=false in your .env, add this to your claude_desktop_config.json:
{
"mcpServers": {
"genius": {
"command": "python",
"args": ["/absolute/path/to/genius-mcp/main.py"],
"env": {
"GENIUS_ACCESS_TOKEN": "your_token_here",
"STREAMABLE_HTTP": "false"
}
}
}
}
Annotation Trust Levels
Every annotation returned by the server includes a trust_level field. This lets the AI reason about source reliability:
| Trust Level | Meaning |
|---|---|
artist_verified | Written or confirmed by the artist. Treat as ground truth. |
accepted | Reviewed and approved by Genius editorial staff. High quality. |
unreviewed | Submitted by community users, not yet reviewed. Treat as interpretation. |
The get_song_annotations tool accepts a filter argument to retrieve only annotations at a specific trust level.
Project Structure
genius-mcp/
├── main.py # Entry point — configures transport and starts the server
├── app.py # FastMCP app instance
├── mcp_components/
│ ├── genius_api.py # Async HTTP client for the Genius API
│ ├── mcp_tools.py # MCP tool definitions
│ └── mcp_prompts.py # MCP prompt definitions
├── tests/
│ ├── test_mcp_server_initialization.py
│ └── test_mcp_server_tools.py
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env.example
License
Related Servers
Bright Data
sponsorDiscover, extract, and interact with the web - one interface powering automated access across the public internet.
Daft.ie MCP Server
Search and retrieve rental property details from Daft.ie via web scraping.
Playlist-MCP
Provides access to the transcripts of any YouTube playlist, configurable via URL.
Web Search
Performs web searches and extracts full page content from search results.
MCP360
MCP360 is a unified gateway and marketplace that provides 100+ external tools and custom MCPs through a single integration for AI agents.
WebforAI Text Extractor
Extracts plain text from web pages using WebforAI.
BrowserAct
BrowserAct MCP Server is a standardized MCP service that lets MCP clients connect to the BrowserAct platform to discover and run browser automation workflows, access results/files and related storage, and trigger real-world actions via natural language.
BrowserCat
Automate remote browsers using the BrowserCat API.
MyBrowserAPI
A browser API for interacting with web services like X, Reddit, ChatGPT, and WhatsApp using Puppeteer.
Headline Vibes Analysis
Analyzes the sentiment of news headlines from major US publications using the NewsAPI.
AI Shopping Assistant
A conversational AI shopping assistant for web-based product discovery and decision-making.