FreqBlog Music Metadata

Audio features + harmonic set-building for tracks by name/ISRC. Spotify audio-features replacement.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
92%
命名品質
95%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~6,826Token(工具定義)
~2.9 KB典型回應大小
顯著的注意力影響(128k 上下文的 5.33%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "music-metadata": {
      "url": "https://mcp.freqblog.com/mcp"
    }
  }
}

遠端端點

https://mcp.freqblog.com/mcpstreamable-http

它能做什麼

工具清單

工具(12)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢get_audio_features(track, artist, isrc, mbid, spotify_id)

Get audio features for ONE track — BPM, musical key (name + Camelot + Open Key), energy, danceability, valence, acousticness, loudness, mood, mood_vector, genre, time signature, duration and more. This is the drop-in replacement for Spotify's deprecated /audio-features endpoint. Provide AT LEAST ONE identifier — if you know several, send them all rather than choosing; they resolve by precedence (`track` > `isrc` > `mbid` > `spotify_id`) and the rest are ignored: - `track` (optionally with `artist`) — e.g. track="Blinding Lights", artist="The Weeknd". - `isrc` — e.g. "USUM71900001". - `mbid` — a MusicBrainz recording UUID. - `spotify_id` — a Spotify track ID, URI, or URL (resolved per request by reading the track's title from Spotify's public embed page and matching it against our catalogue — no Spotify IDs are stored; ambiguous titles miss rather than guess — prefer `track`/`isrc` for full coverage). Returns a JSON object of features. Some feature fields may be null for tracks resolved via the fallback catalogs (only audio-derived values are present for fully analysed tracks). VALUES are FreqBlog's own analysis, NOT on Spotify's scale: energy, danceability and valence are on our own raw scale (derive thresholds from our values, don't copy Spotify-tuned ones); acousticness is the AcousticBrainz classifier where available, else our estimate (being replaced by a new model since 2026-09-27); instrumentalness, speechiness and liveness are currently null for catalogue tracks. If a track name is not yet in the catalog, the API holds the request during the on-demand ingest and usually returns the fully analysed track inline in this same call; only if the ingest runs long does it fall back to a queued response you can re-poll shortly (~15s). If the track turns out not to be on any streaming source we can analyse, you get a definitive not-found instead — that verdict is terminal for ~7 days, so don't retry it. If you only have a fuzzy or partial name, call search_catalog first to find the exact track.

輸入結構描述

{
  "type": "object",
  "properties": {
    "track": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Track title. Use with `artist` when known. Supply AT LEAST ONE of track/isrc/mbid/spotify_id. Sending several is fine — they resolve by precedence (track > isrc > mbid > spotify_id) and the rest are ignored.",
      "title": "Track"
    },
    "artist": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Artist name. Only used with `track`; required when the title is <=2 characters.",
      "title": "Artist"
    },
    "isrc": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ISRC, e.g. 'USUM71900001'.",
      "title": "Isrc"
    },
    "mbid": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MusicBrainz recording ID (UUID). The precise key when there is no ISRC, e.g. pre-1986 recordings.",
      "title": "Mbid"
    },
    "spotify_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Spotify track ID, 'spotify:track:...' URI, or open.spotify.com URL. Resolved per request by reading the track's title from Spotify's public embed page and matching it against our catalogue (no Spotify IDs are stored) — a title several artists share is ambiguous and misses rather than guessing; prefer track (+artist) or isrc.",
      "title": "Spotify Id"
    }
  },
  "title": "get_audio_featuresArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_audio_featuresDictOutput"
}
🟢get_audio_features_batch(tracks)

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 single track, use get_audio_features.

輸入結構描述

{
  "type": "object",
  "properties": {
    "tracks": {
      "description": "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`.",
      "items": {
        "$ref": "#/$defs/TrackQuery"
      },
      "maxItems": 200,
      "minItems": 1,
      "title": "Tracks",
      "type": "array"
    }
  },
  "required": [
    "tracks"
  ],
  "$defs": {
    "TrackQuery": {
      "description": "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.",
      "properties": {
        "track": {
          "anyOf": [
            {
              "maxLength": 200,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Track title. Supply this OR `isrc` (or both — ISRC is matched exactly first, the name is the fallback).",
          "title": "Track"
        },
        "artist": {
          "anyOf": [
            {
              "maxLength": 200,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Artist name (optional, improves name-match accuracy)",
          "title": "Artist"
        },
        "isrc": {
          "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"
        }
      },
      "title": "TrackQuery",
      "type": "object"
    }
  },
  "title": "get_audio_features_batchArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_audio_features_batchDictOutput"
}
🟢search_catalog(q, limit)

Full-text search the catalog by any mix of track / artist / album tokens. Use this to resolve a fuzzy, partial, or misspelled name into concrete tracks BEFORE calling get_audio_features. Each hit carries `chart_peak`: the best chart position we hold, 1-100 with 100 = a number-one. `null` means no placement we hold — treat that as UNKNOWN, not unpopular, and note it is NOT an audience-size figure. Coverage is Billboard year-end only so far. Returns lightweight stubs (itunes_track_id, track_name, artist_name, album, etc.) ranked by relevance — NOT audio features. Take the best match's track_name + artist_name and pass them to get_audio_features, or reuse its itunes_track_id as a `track_id` seed for discovery tools. ⚠ Each hit carries a `seedable` boolean. Only a hit with `seedable: true` can be used as a seed for get_recommendations / suggest_next_track / build_setlist / score_transition — those work off the similarity index, which holds only tracks we have analysed, and about a quarter of the catalogue is not analysed yet. **Prefer the highest-ranked hit with `seedable: true`.** Seeding with a `seedable: false` id returns a 404; if that track is the one you want, call get_audio_features on it first to queue analysis, then retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "q": {
      "description": "Search query — any mix of artist / track / album tokens.",
      "maxLength": 200,
      "minLength": 1,
      "title": "Q",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "description": "Max results (default 10).",
      "maximum": 50,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "q"
  ],
  "title": "search_catalogArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "search_catalogDictOutput"
}
🟢find_tracks_by_bpm(bpm, tolerance, limit)

Find catalog tracks near a target tempo. Returns tracks whose BPM is within +/-`tolerance` of `bpm`, ordered by closeness then by an internal catalogue ordering key (not an audience metric) — useful for DJ set planning, workout playlists, or tempo-matching. Each returned track carries full audio features. To also constrain by musical key, combine with find_tracks_by_key.

輸入結構描述

{
  "type": "object",
  "properties": {
    "bpm": {
      "description": "Target tempo in BPM.",
      "maximum": 300,
      "minimum": 20,
      "title": "Bpm",
      "type": "number"
    },
    "tolerance": {
      "default": 2,
      "description": "Plus/minus BPM window (default 2).",
      "maximum": 10,
      "minimum": 0.5,
      "title": "Tolerance",
      "type": "number"
    },
    "limit": {
      "default": 10,
      "description": "Max tracks (default 10).",
      "maximum": 50,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "bpm"
  ],
  "title": "find_tracks_by_bpmArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "find_tracks_by_bpmDictOutput"
}
🟢find_tracks_by_key(key, limit)

Find catalog tracks in a given musical key — for harmonic mixing and key-locked playlists. `key` accepts Camelot ("8A"), Open Key ("1m"), or a key name ("A-Minor", "F#-Major"). Returns tracks ordered by an internal catalogue ordering key (not an audience metric), each with full audio features. To discover which keys mix well with a given key first, use find_compatible_keys.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "description": "Camelot ('8A'), Open Key ('1m'), or key name ('A-Minor', 'F#-Major').",
      "maxLength": 20,
      "minLength": 1,
      "title": "Key",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "description": "Max tracks (default 10).",
      "maximum": 50,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "key"
  ],
  "title": "find_tracks_by_keyArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "find_tracks_by_keyDictOutput"
}
🟢find_compatible_keys(camelot, extended)

Given a Camelot key (e.g. "8A", "12B"), return the harmonically compatible keys for DJ mixing — the same key, the relative major/minor, and the adjacent +/-1 keys on the Camelot wheel. With `extended=true` also returns the +7/-7 energy-boost / energy-drop keys. Pure music theory — no catalog lookup and no quota cost. Pair with find_tracks_by_key to then pull actual tracks in each compatible key.

輸入結構描述

{
  "type": "object",
  "properties": {
    "camelot": {
      "description": "Camelot key, e.g. '8A' or '12B'.",
      "maxLength": 3,
      "minLength": 2,
      "title": "Camelot",
      "type": "string"
    },
    "extended": {
      "default": false,
      "description": "Also return the +7/-7 energy-boost / energy-drop keys.",
      "title": "Extended",
      "type": "boolean"
    }
  },
  "required": [
    "camelot"
  ],
  "title": "find_compatible_keysArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "find_compatible_keysDictOutput"
}
🟢score_transition(from_track_id, to_track_id)

Score how well one catalog track mixes into another (0-100) — the pairwise DJ transition score no raw key/BPM API gives you. Combines Camelot-wheel key compatibility, octave-aware BPM proximity (half/double-time counts as a match), and energy smoothness. Returns the overall `score`, per-component scores (`harmonic`/`tempo`/`energy`), a `detail` block (key_relation, both Camelot keys, both BPMs, bpm_delta, bpm_octave_matched, both energies, energy_delta), and a one-line human `reason` (e.g. "8A->9A adjacent (+1), 126->128 BPM (+2), energy +0.04 — clean uplifting mix"). Both ids are catalog itunes_track_ids — get them from search_catalog or the itunes_track_id field of a get_audio_features result. Costs 1 quota unit.

輸入結構描述

{
  "type": "object",
  "properties": {
    "from_track_id": {
      "description": "The track you're mixing FROM — a catalog itunes_track_id, e.g. 'apple_ad1829eeccb70f9a'.",
      "maxLength": 80,
      "minLength": 1,
      "title": "From Track Id",
      "type": "string"
    },
    "to_track_id": {
      "description": "The candidate track you're mixing INTO — a catalog itunes_track_id.",
      "maxLength": 80,
      "minLength": 1,
      "title": "To Track Id",
      "type": "string"
    }
  },
  "required": [
    "from_track_id",
    "to_track_id"
  ],
  "title": "score_transitionArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "score_transitionDictOutput"
}
🟢suggest_next_track(seed_track_id, n, min_score, exclude_same_artist, bpm_drift, ...)

Given a seed track, return the top-N catalog tracks to play NEXT, ranked by transition score. Each suggestion carries the same `score`, per-component scores and human `reason` as score_transition (e.g. "11B->11B same key, 118->117 BPM (-0.29), energy +0.12"), plus its `genre` and `genre_relation` to the seed. GENRE-AWARE by default (cross_genre=auto): off-genre picks that only coincidentally share the seed's key/BPM sink to the bottom — use cross_genre=strict for same-genre-family only, or allow for the old harmonic-only ranking. It is the seed's sonic neighbours re-ranked for a clean mix. Returns `seed`, `count`, and a `suggestions` array of {track, score, components, reason}. seed_track_id is a catalog itunes_track_id from search_catalog or a get_audio_features result. Pair with build_setlist to order a whole crate. Costs 3 quota units.

輸入結構描述

{
  "type": "object",
  "properties": {
    "seed_track_id": {
      "description": "The track currently playing — a catalog itunes_track_id.",
      "maxLength": 80,
      "minLength": 1,
      "title": "Seed Track Id",
      "type": "string"
    },
    "n": {
      "default": 10,
      "description": "How many next-track suggestions to return (default 10).",
      "maximum": 50,
      "minimum": 1,
      "title": "N",
      "type": "integer"
    },
    "min_score": {
      "default": 0,
      "description": "Drop candidates below this overall transition score (default 0).",
      "maximum": 100,
      "minimum": 0,
      "title": "Min Score",
      "type": "integer"
    },
    "exclude_same_artist": {
      "default": false,
      "description": "Drop tracks by the seed's artist (default false).",
      "title": "Exclude Same Artist",
      "type": "boolean"
    },
    "bpm_drift": {
      "default": 12,
      "description": "Max BPM difference pre-filter before scoring (default 12).",
      "maximum": 30,
      "minimum": 0.5,
      "title": "Bpm Drift",
      "type": "number"
    },
    "max_key_distance": {
      "default": 2,
      "description": "Max Camelot-wheel hops pre-filter before scoring (default 2).",
      "maximum": 12,
      "minimum": 0,
      "title": "Max Key Distance",
      "type": "integer"
    },
    "cross_genre": {
      "default": "auto",
      "description": "Genre handling: 'auto' (default) keeps picks in a mixable genre lane so an off-genre track that only shares key/BPM sinks to the bottom; 'strict' = same genre-family only; 'allow' = genre-blind (harmonic+tempo+energy only).",
      "title": "Cross Genre",
      "type": "string"
    }
  },
  "required": [
    "seed_track_id"
  ],
  "title": "suggest_next_trackArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "suggest_next_trackDictOutput"
}
🟢build_setlist(track_ids, arc, start_track_id)

Order a crate of 2-100 catalog tracks into a beat-matched DJ set that follows an energy arc, keeping each consecutive transition harmonically and tempo-smooth. `arc` is one of peak_time (default — builds to a peak then eases), warmup, cooldown, or flat. Returns the `arc`, `count`, an overall `flow_score` (0-100), the `tracks` in play order, the per-step `transitions` ({from_index, to_index, score, reason}), and `omitted` (ids not found in the catalog). Feed tracks[].itunes_track_id into a Rekordbox/Serato export to drop the set straight into your DJ software. track_ids are catalog itunes_track_ids. Costs 5 quota units.

輸入結構描述

{
  "type": "object",
  "properties": {
    "track_ids": {
      "description": "The crate to order — 2 to 100 catalog itunes_track_ids.",
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "minItems": 2,
      "title": "Track Ids",
      "type": "array"
    },
    "arc": {
      "default": "peak_time",
      "description": "Energy arc: 'peak_time' (default), 'warmup', 'cooldown', or 'flat'.",
      "title": "Arc",
      "type": "string"
    },
    "start_track_id": {
      "anyOf": [
        {
          "maxLength": 80,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional fixed opener — must be one of track_ids.",
      "title": "Start Track Id"
    }
  },
  "required": [
    "track_ids"
  ],
  "title": "build_setlistArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "build_setlistDictOutput"
}
🟢get_recommendations(seed_tracks, track, artist, limit, exclude_seed_artists, ...)

Recommended tracks for one or more seed tracks — the drop-in for Spotify's removed GET /v1/recommendations. Blends up to 5 catalog seed tracks into a single point in audio-feature space and returns the nearest catalogue tracks, RE-RANKED by genre affinity (so a feature-close cross-genre track doesn't outrank same-genre picks). Returns `seeds` (each {id, found}), `count`, and `tracks` (each {track, score, genre_relation}; each track carries its `genre`). `genre_relation` is "same", "compatible" (different but mixable family), "cross" (unrelated), or "unknown" (either side has no mapped genre), measured against the PRIMARY seed — the first of your seed_tracks we could actually use, so reordering seed_tracks changes it and a skipped seed never becomes the reference. With a SINGLE seed the field is the ranking's own verdict, so it explains the order (same as suggest_next_track). With SEVERAL seeds the ranking considers ALL of them while the label stays relative to your primary seed, so a "cross" label on a multi-seed call does NOT mean the track was pushed down — it may share a family with another of your seeds. `score` is the raw audio-feature cosine similarity in [0,1]; genre affinity influences the ORDER, not the score, so the list is NOT strictly score-descending. Use cross_genre=strict to return same-genre-family tracks ONLY (off-genre dropped server-side), or allow to disable the genre ranking. seed_tracks are catalog itunes_track_ids from search_catalog or the itunes_track_id field of a get_audio_features result. NO id? Pass `track` (+ optional `artist`) instead and we resolve the name to the best catalog match and seed on it — the resolved track is echoed back as `seed_query`; seed_tracks wins if both are given. TUNING: `min`/`max` are HARD filters and `target` is a preference (nearer ranks higher, nothing removed), over acousticness, danceability, duration_ms, energy, loudness, tempo and valence. NOTE: `popularity` (2026-08-27), `liveness`, `speechiness` (2026-09-26) and `instrumentalness` (2026-09-27) are RETIRED as tunables and return a 400 — popularity recorded how a track entered our catalogue, not audience size; the other three are returned as null for catalogue tracks. energy/danceability/valence are on FreqBlog's own scale (not Spotify's) — derive thresholds from our values rather than reusing Spotify-tuned ones. e.g. min={"tempo": 100}, max={"tempo": 130}, target={"energy": 0.8} for energetic 100-130 BPM tracks. When you tune, the response adds a `filters` block saying what applied, how many tracks each bound removed (`dropped_by`) and whether the bounds ran out of catalogue before `limit` (`limit_reached`) — if the list comes back short, read that BEFORE assuming the catalogue is thin. Costs 2 quota units.

輸入結構描述

{
  "type": "object",
  "properties": {
    "seed_tracks": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "maxItems": 5,
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "1-5 catalog itunes_track_ids to base recommendations on, e.g. ['apple_ad1829eeccb70f9a'] (blended into a feature-space centroid). Omit and use track(+artist) to seed by name instead.",
      "title": "Seed Tracks"
    },
    "track": {
      "anyOf": [
        {
          "maxLength": 200,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Seed by track NAME instead of an id — resolved to the best catalog match (echoed back as seed_query). Pair with artist to disambiguate. Ignored when seed_tracks is given.",
      "title": "Track"
    },
    "artist": {
      "anyOf": [
        {
          "maxLength": 200,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Artist name narrowing the track seed (case-insensitive).",
      "title": "Artist"
    },
    "limit": {
      "default": 20,
      "description": "Number of recommendations to return (default 20).",
      "maximum": 100,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "exclude_seed_artists": {
      "default": false,
      "description": "Drop tracks by any of the seed artists (default false).",
      "title": "Exclude Seed Artists",
      "type": "boolean"
    },
    "cross_genre": {
      "default": "auto",
      "description": "Genre handling (mirrors suggest_next_track): 'auto' (default) re-ranks by genre affinity so a feature-close cross-genre track can't outrank same-genre picks; 'strict' = same genre-family only (off-genre dropped server-side); 'allow' = genre-blind (pure audio-feature cosine).",
      "title": "Cross Genre",
      "type": "string"
    },
    "min": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "number"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "HARD lower bounds, e.g. {'tempo': 100, 'energy': 0.5}. Tracks below the bound — and tracks we hold no analysed value for — are dropped. Attributes: acousticness, danceability, duration_ms, energy, loudness, tempo, valence.",
      "title": "Min"
    },
    "max": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "number"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "HARD upper bounds, e.g. {'tempo': 130}. Same attributes as `min`. Combine the two for a range.",
      "title": "Max"
    },
    "target": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "number"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "PREFERRED values, e.g. {'energy': 0.8}. Tracks nearer the value rank higher; unlike min/max nothing is removed. Same attributes as `min`.",
      "title": "Target"
    }
  },
  "title": "get_recommendationsArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_recommendationsDictOutput"
}
🟢get_related_artists(artist, limit)

Artists related to a seed artist — the drop-in for Spotify's removed GET /v1/artists/{id}/related-artists. No artist graph exists, so we derive one: build the seed artist's track-vector centroid, take its nearest catalogue tracks, aggregate by artist (each scored on its top-3 track similarities so a prolific artist can't dominate) plus a same-genre lift and a cross-genre penalty. Returns `artist`, `count`, and `related` (each {artist_name, score, match_count, sample_track_id}). Pass a sample_track_id straight to get_audio_features or suggest_next_track. Costs 2 quota units.

輸入結構描述

{
  "type": "object",
  "properties": {
    "artist": {
      "description": "Seed artist name (as it appears in the catalog; case-insensitive).",
      "maxLength": 200,
      "minLength": 1,
      "title": "Artist",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "description": "Number of related artists to return (default 20).",
      "maximum": 50,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "artist"
  ],
  "title": "get_related_artistsArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_related_artistsDictOutput"
}
🟢tag_track(track, artist, isrc, mbid, spotify_id, ...)

Get a compact, HONESTLY-LABELLED tag list for a track — energy / danceability / valence / acousticness, plus a mood tag and a broad genre tag (instrumentalness is currently null, so it is not tagged). It is a tag-shaped projection of the same open-data analysis get_audio_features returns (no audio upload, no extra compute), so it costs the same 1 quota unit, charged only on a served result. The differentiator vs opaque taggers (e.g. Cyanite) is that EVERY tag carries its own `confidence` and `provenance`: - confidence: measured (our Essentia analysis) | derived (MIREX mood from valence+energy) | model-estimated (AcousticBrainz mood SVM probability — research-grade, raw prob in `value`) | catalog-genre (broad catalogue tag, not fine-grained). - provenance: essentia | valence+energy | acousticbrainz | catalog. `value` is the [0,1] score for numeric tags and null for label-only tags (mood category, genre). Provide AT LEAST ONE identifier: `track` (optionally with `artist`), `isrc`, `mbid`, `spotify_id`, or `track_id` (catalog itunes_track_id). If you know several, send them all — they resolve by precedence (`track` > `isrc` > `track_id` > `mbid` > `spotify_id`) and the rest are ignored, so you never have to pick. The broad, reliable coverage is the MEASURED tags from our Essentia analysis over the analysed catalogue (plus on-demand by name); MBID/ISRC additionally reach 7.5M+ AcousticBrainz recordings WHEN you supply that identifier. Returns { track, count, tags:[{tag, category, value, confidence, provenance}], disclaimer }. For the full numeric feature set use get_audio_features; for nearest tracks use a discovery tool.

輸入結構描述

{
  "type": "object",
  "properties": {
    "track": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Track title. Use with `artist` when known. Supply AT LEAST ONE of track/isrc/mbid/spotify_id/track_id. Sending several is fine — they resolve by precedence (track > isrc > track_id > mbid > spotify_id).",
      "title": "Track"
    },
    "artist": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Artist name. Only used with `track`; improves accuracy.",
      "title": "Artist"
    },
    "isrc": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ISRC, e.g. 'USUM71900001'.",
      "title": "Isrc"
    },
    "mbid": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MusicBrainz recording ID (UUID). Tags come from AcousticBrainz for that exact recording.",
      "title": "Mbid"
    },
    "spotify_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Spotify track ID, 'spotify:track:...' URI, or open.spotify.com URL. Resolved per request by reading the track's title from Spotify's public embed page and matching it against our catalogue (no Spotify IDs are stored) — a title several artists share is ambiguous and misses rather than guessing; prefer track (+artist) or isrc.",
      "title": "Spotify Id"
    },
    "track_id": {
      "anyOf": [
        {
          "maxLength": 80,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Catalog itunes_track_id from a search_catalog or get_audio_features result.",
      "title": "Track Id"
    }
  },
  "title": "tag_trackArguments"
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true,
  "title": "tag_trackDictOutput"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本12 個工具
已驗證未記錄版本12 個工具
已驗證未記錄版本12 個工具