Skip to main content
Glama

FreqBlog Music Metadata

Get Audio Features (Batch)

get_audio_features_batch
Read-only

Get audio features for MANY tracks in one call (up to 50 processed) — ideal for analysing a whole playlist at once. Identify each item by name (track/artist), by isrc (matched exactly first — best for CJK / K-pop / niche tracks whose fuzzy name-match misses), or both (ISRC first, name as the fallback).

One bad entry never fails the batch. Items beyond the 50-per-call cap come back with
`found: false` and `backfill_status: "over_limit"`; an item missing BOTH `track` and
`isrc` comes back `"invalid_no_query"`. Neither is processed or charged — the response's
`skipped` field counts them, so split a long list into calls of <=50 and resubmit any
skipped rows.

Returns counts (`found` / `not_found` / `skipped`) plus a per-track `results` array, where
each entry's `result` is the same feature object as get_audio_features (or null when not
found), and `isrc` is echoed back. An item is billed only when it returns features or
queues an on-demand ingest; an ISRC/name with no match anywhere is free. A track you
queue and then collect costs ONE unit, not two — the call that collects it is free.
For a `found: false` item, `backfill_status` `queued` / `processing` / `deferred` means
retry later; `unavailable` is terminal (carries `terminal`, `reason`, `retry_after_days` —
treat it as a miss until then); null means no match anywhere.
For a single track, use get_audio_features.

Input Schema

NameRequiredDescriptionDefault
tracksYesList of {track?, artist?, isrc?} objects. Up to 50 are processed per call; any extra (up to 200 accepted) come back skipped. Each item should carry `track` or `isrc`.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / $defs / TrackQuery / description
      Previous value: -"One track to look up by name and/or ISRC (at least one of track/isrc required)."New value: +"One track to look up by name and/or ISRC. Supply `track` or `isrc` (or both); an item\ncarrying neither is skipped by the batch tool (`invalid_no_query`), not an error."
    • changedInput schema / properties / tracks / description
      Previous value: -"List of {track?, artist?, isrc?} objects to look up (max 50). Each needs `track` or `isrc`."New value: +"List of {track?, artist?, isrc?} objects. Up to 50 are processed per call; any extra (up to 200 accepted) come back skipped. Each item should carry `track` or `isrc`."
    • changedInput schema / properties / tracks / maxItems
      Previous value: -50New value: +200
  2. Changed11 schema fields changed
    • changedInput schema / $defs / TrackQuery / description
      Previous value: -"One track to look up by name (and optional artist)."New value: +"One track to look up by name and/or ISRC (at least one of track/isrc required)."
    • changedInput schema / $defs / TrackQuery / properties / artist / description
      Previous value: -"Artist name (optional, improves accuracy)"New value: +"Artist name (optional, improves name-match accuracy)"
    • addedInput schema / $defs / TrackQuery / properties / isrc
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 15,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISRC, e.g. 'USUM71900001' (hyphens optional). Matched exactly first — resolves CJK/K-pop/niche tracks whose fuzzy name-match misses. Supply this OR `track`.",
      +  "title": "Isrc"
      +}
    • addedInput schema / $defs / TrackQuery / properties / track / anyOf
      Added value: +[
      +  {
      +    "maxLength": 200,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / $defs / TrackQuery / properties / track / default
      Added value: +null
    • changedInput schema / $defs / TrackQuery / properties / track / description
      Previous value: -"Track title"New value: +"Track title. Supply this OR `isrc` (or both — ISRC is matched exactly first, the name is the fallback)."
    • removedInput schema / $defs / TrackQuery / properties / track / maxLength
      Removed value: -200
    • removedInput schema / $defs / TrackQuery / properties / track / minLength
      Removed value: -1
    • removedInput schema / $defs / TrackQuery / properties / track / type
      Removed value: -"string"
    • removedInput schema / $defs / TrackQuery / required
      Removed value: -[
      -  "track"
      -]
    • changedInput schema / properties / tracks / description
      Previous value: -"List of {track, artist?} objects to look up (max 50)."New value: +"List of {track?, artist?, isrc?} objects to look up (max 50). Each needs `track` or `isrc`."
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, so the safety profile is covered but nothing operational. The description adds substantial behavior: cap handling (over_limit), invalid_no_query, partial-failure tolerance ('One bad entry never fails the batch'), billing rules (no match is free, queued+collected costs one unit), and the backfill_status state machine including which states are terminal.

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?

Front-loaded with purpose and the routing alternative, then operationally important failure and billing details. It is long and a few clauses restate points already made in the schema (ISRC-first precedence appears twice), so it stops short of perfectly tight, but nearly every sentence carries decision-relevant information.

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

Completeness5/5

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

Given an output schema exists, the description still supplies the return semantics an agent needs to act (counts, per-item result/isrc echo, null-when-not-found, retry vs terminal backfill_status). Combined with annotations and a documented schema, nothing needed to invoke or interpret results is missing.

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 100%, so the baseline is 3, but the description adds semantics the schema cannot express: the <=50 processed vs 200-accepted distinction that explains why an in-schema-valid array still yields skipped rows, and the precedence rule (ISRC matched exactly first, name as fallback) that governs multi-field interaction.

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?

States a specific verb+resource with scope: 'Get audio features for MANY tracks in one call (up to 50 processed)'. It explicitly distinguishes itself from the single-track sibling by naming get_audio_features at the end, so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('ideal for analysing a whole playlist at once') and when-not ('For a single track, use get_audio_features'). It also gives per-item selection guidance: prefer `isrc` for CJK/K-pop/niche tracks whose fuzzy name match misses, or supply both with ISRC first and name as fallback.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources