mcp-aoty
MCP server for exploring Album of the Year critic and user scores, reviews, releases, charts, critic lists, and music news.
Attribution
Album data comes from the unofficial Album of the Year API at https://aoty.prigoana.com (https://github.com/edideaur/AOTY-api), which is free to use with attribution. Underlying reviews, scores, and editorial content are the work of Album of the Year (https://www.albumoftheyear.org) and its contributing publications.
- Upstream API: aoty.prigoana.com
- Upstream source: edideaur/AOTY-api
- Data source: Album of the Year
That credit is a condition of use, so it is carried in five places and none of them are
optional: this section, NOTICE, the User-Agent sent with every request,
the instructions string every MCP client receives at handshake, and the
get_attribution tool.
Prerequisites
- Python 3.14+
- uv
Setup
uv sync
Configuration
No API key exists or is needed. The request interval is a deliberate courtesy throttle because the upstream API is a free personal Cloudflare Worker.
| Variable | Required | Default | Purpose |
|---|---|---|---|
AOTY_BASE_URL |
No | https://aoty.prigoana.com |
Unofficial Album of the Year API base URL |
AOTY_MIN_INTERVAL_MS |
No | 250 |
Minimum interval between upstream requests |
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"aoty": {
"command": "uvx",
"args": ["mcp-aoty"],
"env": {
"AOTY_MIN_INTERVAL_MS": "250"
}
}
}
}
Claude Code
claude mcp add aoty -e AOTY_MIN_INTERVAL_MS=250 -- uvx mcp-aoty
Tools
Diagnostics
| Tool | Description |
|---|---|
get_server_version |
Return the installed server version |
get_attribution |
Return upstream API and data-source attribution |
Albums
| Tool | Description |
|---|---|
get_album |
Get album details by authoritative slug, or fuzzy artist and name |
Search
| Tool | Description |
|---|---|
search_all |
Search albums, artists, and labels together |
search_albums |
Search album results |
search_artists |
Search artist results |
search_labels |
Search record-label results |
Charts and releases
| Tool | Description |
|---|---|
get_new_releases |
Get paginated new album releases |
get_new_singles |
Get paginated new single releases |
get_upcoming_releases |
Get paginated upcoming releases |
get_popular_albums |
Get currently popular albums |
get_popular_singles |
Get currently popular singles |
get_anticipated_albums |
Get anticipated upcoming albums |
get_under_radar_albums |
Get under-the-radar albums |
get_must_hear_albums |
Get must-hear albums by optional year or decade |
Lists and news
| Tool | Description |
|---|---|
get_critic_lists |
Get critic best-of lists for an optional year |
get_critic_list |
Get the entries in a critic list by slug |
get_music_news |
Get paginated music-news items by feed type |
Data source and etiquette
albumoftheyear.org has no official API; this server talks only to the unofficial
community API and never requests albumoftheyear.org directly. AOTY's
robots.txt disallows AI crawlers (ClaudeBot, anthropic-ai, GPTBot,
CCBot, Google-Extended) and /search/*, so those directives bind the
upstream Worker rather than this client. The API is a scraper and can break
when AOTY changes its HTML; keep request volume low.
Known limitations
artistplusnamelookup is fuzzy:Cassiusplus1999returns the single instead of the LP. Usesearch_albums, then pass itsslugtoget_album.- Album blocks carry no
id, so this server derives slugs from their URLs. - A
critic_score_rawvalue of"NR"means not rated.critic_scoreisNonein that case, which is distinct from a score being absent entirely. - Search hits often omit scores even when the album page has them. Call
get_albumwith the slug when you need scores. - A missing album is served as HTTP 200 carrying AOTY's generic page, not a 404. This server detects that stub and raises rather than returning a phantom record titled "Album of the Year".
- Scraped text arrives with HTML entities intact; this server decodes them before returning.
- Scores are live and move.
Development
uv sync
uv run pytest tests/ -x -q
uv run ruff check src/ tests/
uv run pyright src/
Metadata
Release files for mcp-aoty 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_aoty-0.1.0.tar.gz | 10.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_aoty-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.0 kB
Release files / mcp_aoty-0.1.0.tar.gz
| Download URL | mcp_aoty-0.1.0.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
11060fa8821c7ca42720b140765da9cf9c767efeac3adaaebd9cbf802d76ba03
|
|
BLAKE2b-256 checksum How to use checksums |
d8d2cbdf661f1f9b8b5ded09710c812acb38af35f0458cc1888e7451dff467eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logRelease files / mcp_aoty-0.1.0-py3-none-any.whl
| Download URL | mcp_aoty-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8910521998f50fd27f7dbb6ae1e0bb207f380ca87ba7ab93f9726610c5ee3abf
|
|
BLAKE2b-256 checksum How to use checksums |
dd7e792f75fc0d0c7d2fa618cf7661d19ca67751ba01a3a0fb318f0975dbfa07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency log