Skip to main content
Glama

Search tracks with full compound filtering

search_tracks
Read-only

Search your entire Navidrome library by mood, energy, tags, play history, and other filters to build custom playlists.

Instructions

The main query tool, over the WHOLE library. Every filter composes: real year/date ranges, play and listen recency, inferred mood axes (energy/valence/intensity/organic), mood descriptors, curated OR inferred vibe membership, Last.fm tags, duration, time-of-day fit, plus per-artist diversity caps and personal-affinity ranking.

For mood requests prefer mood_vibes / moods / the axis ranges over vibes: vibes matches only the ~3,800 tracks actually on a curated playlist, while the mood fields cover all 9,000+.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
seedNoMakes 'random'/'affinity' reproducible.
sortNoDefault 'affinity': a personal-fit blend of listens, plays, curated membership and recency.
tagsNoLast.fm tags, e.g. ['shoegaze','melancholy'].
limitNo
moodsNoInferred feeling descriptors, e.g. ['hazy','wistful','anthemic']. Any-of, substring.
queryNoFree text matched against title, artist, album and tags.
vibesNoRestrict to tracks on these curated playlists, e.g. ['golden hour','textured'].
albumsNo
genresNoAny-of match on the library's own genres.
offsetNo
artistsNoOnly these artists (substring match).
bpm_maxNo
bpm_minNo
decadesNoe.g. ['1990s','2000s'].
starredNo
year_maxNo
year_minNo
fits_timeNoOne of: early morning, morning, midday, afternoon, golden hour, evening, late night.
tags_modeNoDefault 'any'.
energy_maxNo
energy_minNoInferred mood axis 0-100: sleepy/still -> frantic.
mood_vibesNoTracks that READ AS one of his curated vibes, whether or not they are filed on that playlist. Matches hand-curated membership, the mood pass, and tag-similarity predictions — so it reaches the whole library, not just the ~3,800 playlisted tracks. Prefer this over `vibes` for any mood request.
day_of_weekNo0 = Sunday.
hour_of_dayNoOnly tracks he has actually listened to at this local hour.
organic_maxNo
organic_minNo0-100: fully electronic -> fully acoustic.
valence_maxNo
valence_minNo0-100: bleak/melancholy -> bright/joyful.
exclude_tagsNo
never_playedNo
exclude_moodsNo
exclude_vibesNo
intensity_maxNo
intensity_minNo0-100: gentle -> heavy/aggressive.
max_per_albumNo
exclude_genresNo
max_per_artistNoCap tracks per artist. Use 1-2 for playlists.
play_count_maxNo
play_count_minNo
released_afterNoISO date, matched against the release date.
exclude_artistsNo
include_missingNoInclude tracks whose file is missing. Default false.
released_beforeNo
duration_max_secNo
duration_min_secNo
listen_count_maxNo
listen_count_minNoLifetime ListenBrainz listens.
added_before_daysNoAdded at least N days ago.
added_within_daysNoAdded to the library in the last N days.
exclude_track_idsNo
played_within_daysNo
listened_within_daysNo
not_played_within_daysNoExclude anything played in the last N days.
exclude_recent_daylistsNoExclude everything used by the last N daylist runs. Use ~6 for hourly rotation.
not_listened_within_daysNo
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true, the safety profile is already known. The description adds valuable behavioral context: the whole-library scope, that every filter composes, and the critical distinction that 'vibes' only matches ~3,800 curated tracks while mood fields cover all 9,000+. It also explains the mood_vibes prediction logic. This goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient. Two well-structured sentences cover the full scope and a crucial usage warning. The first sentence enumerates filter families without fluff; the second directly addresses a common misuse. It earns its length given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema and having 55 parameters, the description provides a strong conceptual overview and key operational details (mood vs vibes, whole-library scope, compound filtering). It doesn't mention pagination or return structure, but those are likely implicit given the filter list. It is adequate for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 47%, so the description must compensate. It groups all 55 parameters into meaningful categories (year/date ranges, recency, mood axes, descriptors, vibe membership, tags, duration, time-of-day, diversity caps, affinity ranking). It adds semantic depth by explaining how mood-related filters work differently from vibes, and clarifies max_per_artist usage. This is more than the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is 'The main query tool, over the WHOLE library' with a comprehensive list of filter categories. It distinguishes itself from siblings by emphasizing its primary search role and explicitly contrasting 'vibes' vs 'mood_vibes' to guide usage. This is a specific verb+resource+scope with clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance for mood requests: 'prefer mood_vibes / moods / the axis ranges over vibes' and explains why, which functions as a when-to-use within the tool. It also establishes itself as the main query tool. However, it does not mention when to use sibling tools like similar_tracks or listening_history, so it lacks full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/312-dev/navidrome-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server