JamRelay (makkiattooo/JamRelay) is an MCP server listed on the M8ven Trust Index. It scores 74 out of 100, grade C. It declares 95 tools. No publisher has claimed this listing.
Self-hosted MCP server for Spotify automation, playback, playlists, library management and rate-limit-aware workflows.
Emerging. No concerning findings. Grades remain capped until the project builds reputation through adoption. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
makkiattooo
Source: github_repo_search
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
get_connectionsList compact provider connection summaries without credentials.
plan_playlist_transferCreate an explainable cross-provider transfer plan. Dry-run only; performs zero destination writes.
execute_playlist_transferExecute a previously validated transfer plan against the explicitly selected destination. Requires confirmation and verifies the resulting playlist.
sync_playlist_transferApply an explicitly confirmed provider-neutral sync policy. Destructive cross-provider conflicts fail closed.
preview_playlist_importParse and validate provider-neutral playlist data. This operation never writes to a provider.
import_playlistParse and validate provider-neutral playlist data. This operation never writes to a provider.
export_playlistExport provider-neutral canonical playlist data without credentials or provider calls.
get_capabilitiesDescribe supported provider operations and explain unavailable capabilities.
search_tracksSearch the selected provider catalog with current pagination.
search_artistsSearch the selected provider catalog with current pagination.
search_albumsSearch the selected provider catalog with current pagination.
get_trackget_artistget_artist_top_tracksSpotify removed the official endpoint in February 2026; this tool returns a structured platform limitation.
get_my_playlistsList compact playlists; all=true fetches all pages up to the server safety cap.
get_playlistGet playlist metadata.
get_playlist_tracksRead normalized playlist items using current /items; maximum page size is 50.
create_playlistCreate a playlist; collaborative playlists must be private.
add_tracks_to_playlistAdd tracks sequentially in chunks of at most 100 using /items.
remove_tracks_from_playlistRemove requested URI occurrences using DELETE /items and return the final snapshot.
reorder_playlist_tracksReorder with current PUT /items payload.
replace_playlist_tracksReplace then append ordered chunks, max 100 per request; rolls back after later chunk failure.
update_playlist_detailsUpdate playlist metadata; collaborative playlists must be private.
get_top_tracksRead personalized top Spotify items; Spotify maximum is 50.
get_top_artistsRead personalized top Spotify items; Spotify maximum is 50.
get_currently_playingGet the currently playing track or episode; 204 is returned as inactive playback.
get_playback_stateGet playback state and normalize either a track or episode item.
get_devicesList Spotify Connect devices.
get_recently_playedRead recent history; before and after cannot be combined.
get_saved_tracksRead saved tracks with pagination.
pausePause Spotify playback; verifies the resulting state after a 403 restriction response.
next_trackControl Spotify playback.
previous_trackControl Spotify playback.
playStart or resume playback; context_uri and uris are mutually exclusive. Verifies the resulting state after a 403 restriction response.
seekSeek to a non-negative position.
set_volumeSet volume from 0 to 100.
transfer_playbackTransfer playback to a Spotify Connect device.
playlist_health_reportRead-only deterministic playlist health analysis; never mutates a provider.
snapshot_playlistPersist an ordered playlist snapshot; requires the state database.
semantic_deduplicate_playlistConservative deterministic deduplication. dry_run defaults true; execution snapshots and verifies.
smart_shuffle_playlistDeterministic seeded spacing layout; dry_run defaults true.
balance_artistsReorder without removing tracks; dry_run defaults true.
restore_playlist_snapshotRestore exact ordered content from a durable snapshot; creates a PRE-RESTORE safety snapshot.
undo_last_playlist_changeRestore the latest completed JamRelay-managed reversible operation only; dry_run defaults true.
playlist_diffRead-only linear diff between a playlist and a durable snapshot.
dry_run_playlist_operationRead-only planner for supported smart playlist operations; performs zero Spotify writes.
verify_playlist_integrityRead-only verification of playlist readability, count, content and optional snapshot state.
limit_artist_sharePlan or execute deterministic artist-share removals; dry_run defaults true.
smart_insert_tracksInsert tracks at deterministic distributed positions; dry_run defaults true.
optimize_playlistMeta-tool composing deterministic playlist primitives; dry_run defaults true and does not snapshot.
save_tracksSave or remove tracks using current /me/library endpoint in chunks of 40.
remove_saved_tracksSave or remove tracks using current /me/library endpoint in chunks of 40.
check_saved_tracksReturn an exact input-to-saved mapping using current /me/library/contains.
find_track_exactResolve a track by deterministic title/artist/album/year scoring; returns matched, ambiguous, or unmatched.
remember_trackVerify a known Spotify track ID, URI, or public URL and save its safe alias.
find_playlist_by_nameFind all current-user playlists matching a normalized name across all pages.
add_tracks_by_searchResolve every search entry before writing; strict mode blocks all writes if any is ambiguous or unmatched.
bulk_add_tracksAdd mixed ID/URI/search track inputs in ordered chunks; supports strict, dry_run and skip_existing.
get_playlist_statsFetches all playlist items and computes local aggregates.
deduplicate_playlistFetches all items, preserves first occurrence and order, and refuses lossless reconstruction when unsupported items exist.
create_playlist_from_tracksResolves all tracks before creation in strict mode, then creates and inserts sequential chunks.
chapterize_playlistAnalyze the existing playlist order into deterministic narrative chapters. Read-only for Spotify.
get_playlist_chaptersRead the latest saved chapter set and report whether the playlist order has changed.
play_playlist_chapterStart Spotify playback at a chapter offset; playback may continue after the chapter ends.
resume_playlist_chapterResume a previously started chapter from its first saved position.
playlist_rules_engineRead-only deterministic rule evaluation; never mutates Spotify.
playlist_recipeCreate, read, list, update or delete a persistent versioned playlist recipe.
apply_playlist_recipeApply a persistent recipe; dry_run defaults true, execution creates one safety snapshot.
playlist_trim_to_durationPlan or trim a playlist without exceeding the target; dry_run defaults true.
filter_playlistFilter by typed deterministic predicates; dry_run defaults true.
clone_playlistClone ordered playlist content; dry_run defaults true and never creates a playlist.
estimate_operation_costRead-only conservative Spotify API request estimate; no financial pricing.
merge_playlists_smartMerge source playlists without mutating them; dry_run defaults true.
split_playlist_balancedSplit a playlist into deterministic groups; dry_run defaults true.
sync_playlistsPlan or apply deterministic playlist synchronization; dry_run defaults true.
extend_playlist_to_durationResolve a local candidate pool, append only needed tracks, snapshot and verify.
replace_percentagefreshen_playlistbulk_edit_playlistsbatch_playlist_jobssession_historyRead locally observed playback history with provenance; does not claim complete Spotify history.
rank_playlist_tracksRead-only explainable local affinity/freshness ranking; no Spotify popularity fallback.
sort_by_personal_affinityPlan or reorder using local evidence only; dry_run defaults true and snapshots on execution.
personalize_playlistDeterministic local personalization combining affinity and artist spacing; dry_run defaults true.
avoid_recently_playedUses only locally observed history; dry_run defaults true.
compare_playlistsRead-only efficient URI, artist, album and duration comparison.
build_session_queueRead-only deterministic queue plan from a playlist; never writes Spotify queue.
smart_nextSelects from a supplied playlist using local evidence; does not start playback.
archive_playlistPersist an immutable local snapshot/version; no provider mutation.
generate_daily_mixgenerate_weekly_rotationrotation_managerliked_to_playlist_syncinbox_playlistplaylist_skip_cleanupcreate_bulk_jobbehind configPersist a bulk track operation for later processing.
get_job_statusbehind configInspect a durable bulk job with bounded item pagination.
list_jobsbehind configList bounded durable job summaries.
resume_jobbehind configMake a durable job eligible for processing.
commit_jobbehind configCommit a ready durable job with ordered, chunked Spotify writes.
4 further tools are not listed here. The complete surface is in the source.
Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.
Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock
ALTERNATE_TRACK_RESOLVER_MAX_RESULTSALTERNATE_TRACK_RESOLVER_NAMEALTERNATE_TRACK_RESOLVER_TIMEOUT_MSALTERNATE_TRACK_RESOLVER_TOKENALTERNATE_TRACK_RESOLVER_URLJAMRELAY_DATA_DIRJAMRELAY_DB_PATHMCP_OAUTH_CLIENTS_PATHMCP_OAUTH_STORE_PATHPLAYLIST_READ_CONCURRENCYPROVIDER_CREDENTIAL_STORE_PATHSPOTIFY_READ_CONCURRENCYTOKEN_ENCRYPTION_KEYTool annotations
No tools have read-only/destructive annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
104/104 tools missing one or more hints — get_connections (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); plan_playlist_transfer (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); execute_playlist_transfer (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +101 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Tool test coverage
44/104 tools referenced in tests (42%)
Write tests that reference each tool by name so every tool has at least one test.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/makkiattooo/jamrelay)?variant=verified to the badge URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check