# suggest_next_track

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.

Agent View of the PolicyLayer registry record for `suggest_next_track`. HTML page: https://policylayer.com/tools/com-freqblog-music-metadata/suggest-next-track

## Facts

- Tool: `suggest_next_track`
- Server: FreqBlog Music Metadata (`https://mcp.freqblog.com/mcp`) — https://policylayer.com/tools/com-freqblog-music-metadata.md
- Homepage: https://github.com/https://mcp.freqblog.com/mcp
- Risk category: Read (Low risk)
- Registry record: grade D, identity unverified
- Server auth posture: open
- Server rate-limited: no
- Parameters: 7 (1 required)
- Recommended policy verdict: Allowed

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `n` | integer | no | How many next-track suggestions to return (default 10). |
| `bpm_drift` | number | no | Max BPM difference pre-filter before scoring (default 12). |
| `min_score` | integer | no | Drop candidates below this overall transition score (default 0). |
| `cross_genre` | string | no | 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-f |
| `seed_track_id` | string | yes | The track currently playing — a catalog itunes_track_id. |
| `max_key_distance` | integer | no | Max Camelot-wheel hops pre-filter before scoring (default 2). |
| `exclude_same_artist` | boolean | no | Drop tracks by the seed's artist (default false). |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "suggest_next_track",
    "arguments": {
      "seed_track_id": "<seed_track_id>"
    }
  }
}
```

## Why suggest_next_track is rated Low

suggest_next_track queries metadata and returns recommendations based on audio similarity. It retrieves data from the catalog and ranks it, but does not create, modify, delete, or execute code. The parameters (seed track, N, cross_genre mode) are all query filters. This is a pure read operation with no side effects, making it low severity.

From the tool's own definition: "Tool returns ranked suggestions and scores without modifying, deleting, or executing external operations. Description states it returns 'top-N catalog tracks' with 'score', 'per-component scores', 'reason', 'genre', and 'genre_relation' — all read operations."

## Use case

AI agents call suggest_next_track to retrieve information from FreqBlog Music Metadata without modifying anything. It is typically the context-gathering step in research, monitoring, and reporting workflows, before the agent takes action elsewhere.

## Recommended policy (PolicyLayer)

Verdict: **Allowed**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches FreqBlog Music Metadata:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "suggest_next_track": {}
  }
}
```

## Other tools on FreqBlog Music Metadata (11)

- `build_setlist` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/build-setlist.md
- `find_compatible_keys` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/find-compatible-keys.md
- `find_tracks_by_bpm` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/find-tracks-by-bpm.md
- `find_tracks_by_key` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/find-tracks-by-key.md
- `get_audio_features` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/get-audio-features.md
- `get_audio_features_batch` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/get-audio-features-batch.md
- `get_recommendations` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/get-recommendations.md
- `get_related_artists` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/get-related-artists.md
- `score_transition` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/score-transition.md
- `search_catalog` — Read — https://policylayer.com/tools/com-freqblog-music-metadata/search-catalog.md
- `tag_track` — Write — https://policylayer.com/tools/com-freqblog-music-metadata/tag-track.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=com-freqblog-music-metadata · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/com-freqblog-music-metadata
