/
/
/
1"""URI-addressable read-only library resources."""
2# ruff: noqa: TID252 -- relative imports are the canonical MA-provider pattern.
3
4from __future__ import annotations
5
6from typing import TYPE_CHECKING, Any
7
8from ..tags import Tag
9from ..tools._common import to_resource_text
10
11if TYPE_CHECKING:
12 from music_assistant.mass import MusicAssistant
13
14
15def register_library_resources(mcp: Any, mass: MusicAssistant) -> None:
16 """Register ``library://*`` resources on the given FastMCP root."""
17
18 @mcp.resource("library://artist/{artist_id}", tags={Tag.QUERY_LIBRARY}) # type: ignore[untyped-decorator, unused-ignore]
19 async def artist_resource(artist_id: str) -> str | None:
20 """Full artist record by library id."""
21 return to_resource_text(await mass.music.artists.get_library_item(artist_id))
22
23 @mcp.resource("library://album/{album_id}", tags={Tag.QUERY_LIBRARY}) # type: ignore[untyped-decorator, unused-ignore]
24 async def album_resource(album_id: str) -> str | None:
25 """Full album record by library id."""
26 return to_resource_text(await mass.music.albums.get_library_item(album_id))
27
28 @mcp.resource("library://track/{track_id}", tags={Tag.QUERY_LIBRARY}) # type: ignore[untyped-decorator, unused-ignore]
29 async def track_resource(track_id: str) -> str | None:
30 """Full track record by library id."""
31 return to_resource_text(await mass.music.tracks.get_library_item(track_id))
32
33 @mcp.resource("library://playlist/{playlist_id}", tags={Tag.QUERY_LIBRARY}) # type: ignore[untyped-decorator, unused-ignore]
34 async def playlist_resource(playlist_id: str) -> str | None:
35 """Full playlist record by library id."""
36 return to_resource_text(await mass.music.playlists.get_library_item(playlist_id))
37
38 @mcp.resource("library://radio/{radio_id}", tags={Tag.QUERY_LIBRARY}) # type: ignore[untyped-decorator, unused-ignore]
39 async def radio_resource(radio_id: str) -> str | None:
40 """Full radio station record by library id."""
41 return to_resource_text(await mass.music.radio.get_library_item(radio_id))
42