TrackForge
Check a catalogue by ISRC: MLC registration, unclaimed shares, writers, publishers, ISWC; CWR checks
Should I use this
Quality & Safety
Findings (2)
- HIGH
- MEDIUMin validate_cwr
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"music-registration-check": {
"url": "https://api.trackforge.studio/api/v1/mcp"
}
}
}Remote endpoints
https://api.trackforge.studio/api/v1/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢lookup_recording(isrc, spotify_url, title, artist, youtube_url, ...)
ISRC lookup and music royalties registration check for one recording, with the song's rights data. Give exactly one of: an ISRC, a Spotify track link, a song title (optionally with the artist), or a YouTube link. Returns candidate recordings and MLC works, how each was matched and how confidently, and a verdict per recording: registered, partial (a share is unclaimed), nobody (no MLC work is linked), conflict, or unknown. Each verdict carries dated evidence (as_of, from The MLC's bulk data snapshot) and a factual next step. Also returns what MusicBrainz records for the recording: the linked works with their ISWCs, the writers and publishers with their IPI and ISNI numbers, the earliest release's album, date, label and catalogue number, and the MusicBrainz page. With full_record true it adds every release (label, catalogue number, country and date), performer and producer credits and related recordings; that answer is many times larger. When several matches are equally likely, ambiguous is true and all are returned. Findings from registration data, not legal advice or a statement of song ownership.
Input Schema
{
"type": "object",
"properties": {
"isrc": {
"type": "string",
"maxLength": 32,
"description": "ISRC, 12 characters, e.g. USIR20400274 (hyphens and spaces allowed)."
},
"spotify_url": {
"type": "string",
"maxLength": 500,
"description": "Spotify track link (https://open.spotify.com/track/...) or spotify:track:... URI. Album and playlist links are not accepted."
},
"title": {
"type": "string",
"maxLength": 300,
"description": "Song title, when no ISRC or link is available."
},
"artist": {
"type": "string",
"maxLength": 300,
"description": "Optional artist name; only together with title."
},
"youtube_url": {
"type": "string",
"maxLength": 500,
"description": "YouTube video link; resolved from the video title, so matches are low confidence."
},
"full_record": {
"type": "boolean",
"default": false,
"description": "True to add MusicBrainz's full record of the recording: every release with its label, catalogue number, country and date, the credits, and related recordings. Only for an ISRC or a Spotify link that resolves to one recording. Leave it out unless that detail is needed: the answer is many times larger."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"input_kind": {
"$ref": "#/$defs/ResolveInputKind"
},
"query": {
"$ref": "#/$defs/ResolvedQuery"
},
"candidates": {
"default": [],
"items": {
"$ref": "#/$defs/ResolveCandidate"
},
"title": "Candidates",
"type": "array"
},
"ambiguous": {
"default": false,
"title": "Ambiguous",
"type": "boolean"
},
"results": {
"default": [],
"items": {
"$ref": "#/$defs/ISRCResult"
},
"title": "Results",
"type": "array"
},
"notes": {
"default": [],
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
},
"mlc_source": {
"anyOf": [
{
"$ref": "#/$defs/MLCSource"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"input_kind",
"query"
],
"$defs": {
"Conflict": {
"properties": {
"field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Field"
},
"spotify": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Spotify"
},
"musicbrainz": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Musicbrainz"
},
"mlc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mlc"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
},
"severity": {
"default": "info",
"title": "Severity",
"type": "string"
}
},
"title": "Conflict",
"type": "object"
},
"ISRCResult": {
"properties": {
"isrc": {
"title": "Isrc",
"type": "string"
},
"spotify": {
"anyOf": [
{
"$ref": "#/$defs/SpotifyData"
},
{
"type": "null"
}
],
"default": null
},
"musicbrainz": {
"anyOf": [
{
"$ref": "#/$defs/MusicBrainzData"
},
{
"type": "null"
}
],
"default": null
},
"mlc": {
"anyOf": [
{
"$ref": "#/$defs/MLCData"
},
{
"type": "null"
}
],
"default": null
},
"mlc_lookup": {
"anyOf": [
{
"$ref": "#/$defs/MLCLookup"
},
{
"type": "null"
}
],
"default": null
},
"conflicts": {
"default": [],
"items": {
"$ref": "#/$defs/Conflict"
},
"title": "Conflicts",
"type": "array"
},
"registrations": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"default": {},
"title": "Registrations",
"type": "object"
},
"health": {
"default": "clean",
"title": "Health",
"type": "string"
},
"health_reasons": {
"default": [],
"items": {
"type": "string"
},
"title": "Health Reasons",
"type": "array"
},
"verdict": {
"anyOf": [
{
"$ref": "#/$defs/Verdict"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"isrc"
],
"title": "ISRCResult",
"type": "object"
},
"MLCData": {
"properties": {
"mlc_song_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mlc Song Code"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"artist": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Artist"
},
"labels": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Labels"
},
"iswc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Iswc"
},
"writers": {
"default": [],
"items": {
"$ref": "#/$defs/MLCWriter"
},
"title": "Writers",
"type": "array"
},
"publishers": {
"default": [],
"items": {
"$ref": "#/$defs/MLCPublisher"
},
"title": "Publishers",
"type": "array"
},
"matched_recording_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Matched Recording Count"
},
"isrc_in_matched_recordings": {
"default": false,
"title": "Isrc In Matched Recordings",
"type": "boolean"
},
"other_song_codes": {
"default": [],
"items": {
"type": "string"
},
"title": "Other Song Codes",
"type": "array"
},
"other_works": {
"default": [],
"items": {
"$ref": "#/$defs/MLCOtherWork"
},
"title": "Other Works",
"type": "array"
},
"unclaimed_share_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Unclaimed Share Pct"
},
"unclaimed_song_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unclaimed Song Code"
},
"share_in_dispute": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Share In Dispute"
},
"writers_vs_musicbrainz": {
"anyOf": [
{
"$ref": "#/$defs/WriterMatch"
},
{
"type": "null"
}
],
"default": null
},
"writers_vs_discogs": {
"anyOf": [
{
"$ref": "#/$defs/WriterMatch"
},
{
"type": "null"
}
],
"default": null
}
},
"title": "MLCData",
"type": "object"
},
"MLCLookup": {
"description": "The audit trail for an MLC lookup — always present, even on failure.",
"properties": {
"status": {
"$ref": "#/$defs/MLCLookupStatus"
},
"confidence": {
"$ref": "#/$defs/MLCLookupConfidence",
"default": "none"
},
"query": {
"anyOf": [
{
"$ref": "#/$defs/MLCQueryKind"
},
{
"type": "null"
}
],
"default": null
},
"detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Detail"
},
"attempts": {
"default": 0,
"title": "Attempts",
"type": "integer"
},
"indeterminate": {
"default": false,
"title": "Indeterminate",
"type": "boolean"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"bwarm_state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Bwarm State"
}
},
"required": [
"status"
],
"title": "MLCLookup",
"type": "object"
},
"MLCLookupConfidence": {
"description": "How firmly the returned work is tied to the ISRC that was searched.",
"enum": [
"high",
"medium",
"low",
"none"
],
"title": "MLCLookupConfidence",
"type": "string"
},
"MLCLookupStatus": {
"description": "Why an MLC lookup produced (or failed to produce) a work.\n\nMLC answers come from TrackForge's copy of The MLC's bulk data feed\n(BWARM), never from The MLC's API, so every status is true *as of* the\nsnapshot date carried in ``MLCLookup.as_of``.\n\n``NOT_FOUND`` and ``UNRESOLVED`` are negative statements about MLC's data:\nno MLC work is linked to this recording in the snapshot. Neither says the\nwork is unregistered: a registered work whose recording has not been\nmatched looks the same, which is why the verdict adds a title check. Every\nindeterminate value is a statement about *our* ability to read the snapshot\ncopy and must be surfaced as inconclusive.",
"enum": [
"matched",
"recording_unmatched",
"not_found",
"unresolved",
"empty_response",
"error",
"timeout",
"rate_limited",
"not_configured",
"not_attempted"
],
"title": "MLCLookupStatus",
"type": "string"
},
"MLCOtherWork": {
"description": "Another MLC work tied to the same recording as the one in ``MLCData``.",
"properties": {
"mlc_song_code": {
"title": "Mlc Song Code",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"iswc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Iswc"
},
"writers": {
"default": [],
"items": {
"$ref": "#/$defs/MLCWriter"
},
"title": "Writers",
"type": "array"
},
"publishers": {
"default": [],
"items": {
"$ref": "#/$defs/MLCPublisher"
},
"title": "Publishers",
"type": "array"
},
"matched_recording_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Matched Recording Count"
},
"linked": {
"default": false,
"title": "Linked",
"type": "boolean"
},
"unclaimed_share_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Unclaimed Share Pct"
},
"share_in_dispute": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Share In Dispute"
},
"writers_vs_musicbrainz": {
"anyOf": [
{
"$ref": "#/$defs/WriterMatch"
},
{
"type": "null"
}
],
"default": null
},
"writers_vs_discogs": {
"anyOf": [
{
"$ref": "#/$defs/WriterMatch"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"mlc_song_code"
],
"title": "MLCOtherWork",
"type": "object"
},
"MLCPublisher": {
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"ipi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ipi"
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Role"
},
"share": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Share"
}
},
"title": "MLCPublisher",
"type": "object"
},
"MLCQueryKind": {
"description": "Which query established the result.",
"enum": [
"title_writer",
"title",
"isrc"
],
"title": "MLCQueryKind",
"type": "string"
},
"MLCSource": {
"description": "How current the MLC answers in a response are.",
"properties": {
"kind": {
"default": "bwarm_snapshot",
"title": "Kind",
"type": "string"
},
"snapshot": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Snapshot"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"caveat": {
"default": "MLC answers come from The MLC's bulk data feed as of the date shown, not a live query. Registrations and matches made since then are not reflected.",
"title": "Caveat",
"type": "string"
}
},
"title": "MLCSource",
"type": "object"
},
"MLCWriter": {
"properties": {
"first_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Name"
},
"last_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Name"
},
"ipi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ipi"
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Role"
}
},
"title": "MLCWriter",
"type": "object"
},
"MusicBrainzData": {
"description": "The ISRC's recording on MusicBrainz, from TrackForge's copy.\n\nSeveral recordings can carry one ISRC; the fields describe the first (the\nlowest MusicBrainz id). Until the full copy's dossier is on the server,\nonly ``title`` and ``artist`` are filled. Everything here comes from\nMusicBrainz's core data, which it dedicates to the public domain (CC0).",
"properties": {
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"artist": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Artist"
},
"album": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Album"
},
"release_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Release Date"
},
"recording_mbid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Recording Mbid"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url"
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Label"
},
"catalogue_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Catalogue Number"
},
"release_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Release Count"
},
"recording_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Recording Count"
},
"works": {
"default": [],
"items": {
"$ref": "#/$defs/MusicBrainzWork"
},
"title": "Works",
"type": "array"
},
"recordings": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Recordings"
}
},
"title": "MusicBrainzData",
"type": "object"
},
"MusicBrainzParty": {
"description": "A writer or publisher MusicBrainz credits on a work.",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"role": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Role"
},
"ipis": {
"default": [],
"items": {
"type": "string"
},
"title": "Ipis",
"type": "array"
},
"isnis": {
"default": [],
"items": {
"type": "string"
},
"title": "Isnis",
"type": "array"
},
"mbid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mbid"
}
},
"title": "MusicBrainzParty",
"type": "object"
},
"MusicBrainzWork": {
"description": "A musical work MusicBrainz links to the recording, with its rights holders.",
"properties": {
"mbid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mbid"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"iswcs": {
"default": [],
"items": {
"type": "string"
},
"title": "Iswcs",
"type": "array"
},
"writers": {
"default": [],
"items": {
"$ref": "#/$defs/MusicBrainzParty"
},
"title": "Writers",
"type": "array"
},
"publishers": {
"default": [],
"items": {
"$ref": "#/$defs/MusicBrainzParty"
},
"title": "Publishers",
"type": "array"
}
},
"title": "MusicBrainzWork",
"type": "object"
},
"ResolutionMethod": {
"description": "How a candidate was reached from the input.",
"enum": [
"isrc_input",
"spotify_track_isrc",
"mlc_recording_title",
"mlc_work_title",
"mlc_alternative_work_title",
"musicbrainz_recording_search",
"youtube_oembed_title"
],
"title": "ResolutionMethod",
"type": "string"
},
"ResolveCandidate": {
"description": "One recording or work the input may refer to.",
"properties": {
"kind": {
"title": "Kind",
"type": "string"
},
"isrc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Isrc"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"artist": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Artist"
},
"mlc_song_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mlc Song Code"
},
"work_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Work Title"
},
"iswc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Iswc"
},
"resolved_via": {
"items": {
"$ref": "#/$defs/ResolutionMethod"
},
"title": "Resolved Via",
"type": "array"
},
"confidence": {
"$ref": "#/$defs/VerdictConfidence"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
},
"verdict": {
"anyOf": [
{
"$ref": "#/$defs/Verdict"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"kind",
"resolved_via",
"confidence"
],
"title": "ResolveCandidate",
"type": "object"
},
"ResolveInputKind": {
"enum": [
"isrc",
"spotify_url",
"title",
"youtube_url"
],
"title": "ResolveInputKind",
"type": "string"
},
"ResolvedQuery": {
"description": "What the input was turned into before searching.",
"properties": {
"isrc": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Isrc"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"artist": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Artist"
},
"spotify_track_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Spotify Track Id"
},
"youtube_video_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Youtube Video Id"
}
},
"title": "ResolvedQuery",
"type": "object"
},
"SpotifyData": {
"description": "The track as Spotify lists it. Wherever these fields or the artwork are\nshown, show Spotify's logo and link to ``url``: Spotify's Developer Policy\nrequires both.",
"properties": {
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"artist": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Artist"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url"
},
"album": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Album"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Label"
},
"release_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Release Date"
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"markets": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Markets"
},
"album_images": {
"default": [],
"items": {
"$ref": "#/$defs/SpotifyImage"
},
"title": "Album Images",
"type": "array"
}
},
"title": "SpotifyData",
"type": "object"
},
"SpotifyImage": {
"description": "One size of an album's cover art, on Spotify's image CDN.",
"properties": {
"url": {
"title": "Url",
"type": "string"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Height"
}
},
"required": [
"url"
],
"title": "SpotifyImage",
"type": "object"
},
"Verdict": {
"description": "A finding about one recording or work, never advice.\n\nStates what the registration data shows as of ``as_of`` and, in\n``next_step``, the registered process that applies. It never says who owns\nanything or what anyone may do.",
"properties": {
"state": {
"$ref": "#/$defs/VerdictState"
},
"secondary_states": {
"default": [],
"items": {
"$ref": "#/$defs/VerdictState"
},
"title": "Secondary States",
"type": "array"
},
"confidence": {
"$ref": "#/$defs/VerdictConfidence"
},
"evidence": {
"default": [],
"items": {
"$ref": "#/$defs/VerdictEvidence"
},
"title": "Evidence",
"type": "array"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"next_step": {
"title": "Next Step",
"type": "string"
}
},
"required": [
"state",
"confidence",
"next_step"
],
"title": "Verdict",
"type": "object"
},
"VerdictConfidence": {
"enum": [
"high",
"medium",
"low"
],
"title": "VerdictConfidence",
"type": "string"
},
"VerdictEvidence": {
"description": "One short factual item behind a verdict.",
"properties": {
"source": {
"title": "Source",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"fact": {
"title": "Fact",
"type": "string"
}
},
"required": [
"source",
"fact"
],
"title": "VerdictEvidence",
"type": "object"
},
"VerdictState": {
"description": "What the registration data shows for a recording, in one word.\n\nPrecedence when several apply: unknown > conflict > nobody > partial >\nregistered (``app/services/isrc/verdict.py``). Only a snapshot that was\nread can produce ``nobody``; an unreadable copy is ``unknown``.",
"enum": [
"registered",
"partial",
"nobody",
"conflict",
"unknown"
],
"title": "VerdictState",
"type": "string"
},
"WriterMatch": {
"description": "How an MLC work's writers compare with the writers MusicBrainz credits\nfor the recording (``app/services/isrc/writer_check.py``).\n\nA comparison of names and identifiers as the two sources list them. It\nsays nothing about who owns a work.",
"enum": [
"shared_ipi",
"shared_name",
"same_person",
"none_shared"
],
"title": "WriterMatch",
"type": "string"
}
},
"title": "ResolveResponse"
}🟢check_catalogue(isrcs)
Catalogue registration check (batch ISRC lookup): checks up to 50 recordings at once against The MLC's bulk data (US mechanical royalties), and a larger catalogue in several calls. Returns each recording's verdict (registered, partial, nobody, conflict, unknown) with its confidence, MLC song code and any unclaimed share, plus a summary counting each verdict, the next step for each verdict found, and the as_of date of the MLC snapshot. Each row also lists the ISWCs and writers of the works MusicBrainz links to the recording. Invalid ISRCs are listed and skipped. It finds recordings whose music royalties may be unmatched or unclaimed. Findings from registration data, not legal advice or a statement of song ownership.
Input Schema
{
"type": "object",
"properties": {
"isrcs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"minItems": 1,
"maxItems": 50,
"description": "ISRCs, 12 characters, e.g. USIR20400274 (hyphens and spaces allowed). At most 50; split larger catalogues into several calls."
}
},
"required": [
"isrcs"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"summary": {
"$ref": "#/$defs/CatalogueSummary"
},
"items": {
"items": {
"$ref": "#/$defs/CatalogueItem"
},
"title": "Items",
"type": "array"
},
"mlc_source": {
"anyOf": [
{
"$ref": "#/$defs/MLCSource"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"summary",
"items"
],
"$defs": {
"CatalogueItem": {
"description": "One recording's row: the verdict's state and confidence, and the facts\nthat differ from row to row.\n\nA row carries no evidence and no next step. Most rows with the same state\nshare them, so the summary gives each next step once (``next_steps``), and\n``lookup_recording`` gives one recording's own evidence. Fifty rows that\neach carried a full verdict measured about 40 KB on 5 October 2026, most\nof it the same sentences: too much for a catalogue of a few hundred.",
"properties": {
"isrc": {
"title": "Isrc",
"type": "string"
},
"checked": {
"default": true,
"title": "Checked",
"type": "boolean"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"artist": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Artist"
},
"state": {
"$ref": "#/$defs/VerdictState"
},
"secondary_states": {
"default": [],
"items": {
"$ref": "#/$defs/VerdictState"
},
"title": "Secondary States",
"type": "array"
},
"confidence": {
"$ref": "#/$defs/VerdictConfidence"
},
"mlc_song_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mlc Song Code"
},
"unclaimed_share_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Unclaimed Share Pct"
},
"share_in_dispute": {
"default": false,
"title": "Share In Dispute",
"type": "boolean"
},
"musicbrainz": {
"anyOf": [
{
"$ref": "#/$defs/CatalogueMusicBrainz"
},
{
"type": "null"
}
],
"default": null
}
},
"required": [
"isrc",
"state",
"confidence"
],
"title": "CatalogueItem",
"type": "object"
},
"CatalogueMusicBrainz": {
"description": "What MusicBrainz's public-domain data links to the recording.",
"properties": {
"iswcs": {
"default": [],
"items": {
"type": "string"
},
"title": "Iswcs",
"type": "array"
},
"writers": {
"default": [],
"items": {
"type": "string"
},
"title": "Writers",
"type": "array"
}
},
"title": "CatalogueMusicBrainz",
"type": "object"
},
"CatalogueSummary": {
"properties": {
"checked": {
"title": "Checked",
"type": "integer"
},
"counts": {
"additionalProperties": {
"type": "integer"
},
"title": "Counts",
"type": "object"
},
"not_checked": {
"default": 0,
"title": "Not Checked",
"type": "integer"
},
"not_checked_isrcs": {
"default": [],
"items": {
"type": "string"
},
"title": "Not Checked Isrcs",
"type": "array"
},
"conflict_with_partial": {
"title": "Conflict With Partial",
"type": "integer"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"invalid": {
"default": [],
"items": {
"type": "string"
},
"title": "Invalid",
"type": "array"
},
"duplicates_removed": {
"default": 0,
"title": "Duplicates Removed",
"type": "integer"
},
"next_steps": {
"additionalProperties": {
"type": "string"
},
"default": {},
"title": "Next Steps",
"type": "object"
}
},
"required": [
"checked",
"counts",
"conflict_with_partial"
],
"title": "CatalogueSummary",
"type": "object"
},
"MLCSource": {
"description": "How current the MLC answers in a response are.",
"properties": {
"kind": {
"default": "bwarm_snapshot",
"title": "Kind",
"type": "string"
},
"snapshot": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Snapshot"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"caveat": {
"default": "MLC answers come from The MLC's bulk data feed as of the date shown, not a live query. Registrations and matches made since then are not reflected.",
"title": "Caveat",
"type": "string"
}
},
"title": "MLCSource",
"type": "object"
},
"VerdictConfidence": {
"enum": [
"high",
"medium",
"low"
],
"title": "VerdictConfidence",
"type": "string"
},
"VerdictState": {
"description": "What the registration data shows for a recording, in one word.\n\nPrecedence when several apply: unknown > conflict > nobody > partial >\nregistered (``app/services/isrc/verdict.py``). Only a snapshot that was\nread can produce ``nobody``; an unreadable copy is ``unknown``.",
"enum": [
"registered",
"partial",
"nobody",
"conflict",
"unknown"
],
"title": "VerdictState",
"type": "string"
}
},
"title": "CatalogueResult"
}🟢validate_cwr(cwr_text, filename, recipient_profile)
CWR validation: checks the text of a CWR 2.1 (Common Works Registration) file used to register songs with music royalties societies such as The MLC, PRS for Music / ICE, SACEM or CMRRA. Returns whether the file is valid, error and warning counts, and each issue with its line, rule, plain-language explanation and how to fix it. Pass the file content as ASCII text, up to 256 KB; larger files can be uploaded at https://trackforge.studio/cwr-tool. Validation does not guarantee acceptance by a society. The file is not stored.
Input Schema
{
"type": "object",
"properties": {
"cwr_text": {
"type": "string",
"minLength": 1,
"maxLength": 262144,
"description": "The full CWR file content (ASCII text, HDR to TRL)."
},
"filename": {
"type": "string",
"maxLength": 255,
"description": "Optional original filename, e.g. CW260001TF_000.V21. A society receiver code in the name selects that society's rules."
},
"recipient_profile": {
"type": "string",
"enum": [
"cisac_base",
"mlc",
"cmrra",
"alltrack_worldwide",
"alltrack_us_only",
"capasso_africa",
"ice",
"sacem",
"siae",
"sgae",
"prs"
],
"default": "cisac_base",
"description": "Which society's rules to apply; cisac_base when unsure."
}
},
"required": [
"cwr_text"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"is_valid": {
"title": "Is Valid",
"type": "boolean"
},
"spec_version": {
"title": "Spec Version",
"type": "string"
},
"recipient_profile": {
"title": "Recipient Profile",
"type": "string"
},
"recipient_resolution": {
"additionalProperties": true,
"title": "Recipient Resolution",
"type": "object"
},
"status_dimensions": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Status Dimensions"
},
"record_count": {
"title": "Record Count",
"type": "integer"
},
"transaction_count": {
"title": "Transaction Count",
"type": "integer"
},
"error_count": {
"title": "Error Count",
"type": "integer"
},
"warning_count": {
"title": "Warning Count",
"type": "integer"
},
"issues": {
"items": {
"$ref": "#/$defs/CwrIssue"
},
"title": "Issues",
"type": "array"
},
"issues_total": {
"title": "Issues Total",
"type": "integer"
},
"issues_truncated": {
"title": "Issues Truncated",
"type": "boolean"
},
"line_endings_converted": {
"title": "Line Endings Converted",
"type": "boolean"
},
"stored": {
"default": false,
"title": "Stored",
"type": "boolean"
},
"full_report": {
"title": "Full Report",
"type": "string"
}
},
"required": [
"is_valid",
"spec_version",
"recipient_profile",
"recipient_resolution",
"record_count",
"transaction_count",
"error_count",
"warning_count",
"issues",
"issues_total",
"issues_truncated",
"line_endings_converted",
"full_report"
],
"$defs": {
"CwrIssue": {
"properties": {
"severity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Severity"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Message"
},
"line_number": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Line Number"
},
"field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"rule_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rule Id"
},
"plain_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Plain Message"
},
"why_it_matters": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Why It Matters"
},
"fix_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fix Hint"
},
"fix_location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fix Location"
}
},
"title": "CwrIssue",
"type": "object"
}
},
"title": "CwrValidationResult"
}🟡request_full_report(name, email, organisation, isrcs, catalogue_description, ...)
Ask for a full music royalties and registration review of a catalogue. Records the request (contact name, email, optional organisation, the catalogue's ISRCs and/or a description) so a person at TrackForge can follow up by email. It does not generate or send a report. Call it only when the user has asked for a follow-up and agreed to be contacted: consent_to_contact must be true.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact name."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 254,
"description": "Contact email address for the follow-up."
},
"organisation": {
"type": "string",
"maxLength": 200,
"description": "Optional label, publisher or company name."
},
"isrcs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"maxItems": 200,
"description": "ISRCs in the catalogue (up to 200). Give isrcs, catalogue_description, or both."
},
"catalogue_description": {
"type": "string",
"maxLength": 2000,
"description": "Free-text description of the catalogue, e.g. artist names, number of songs, territories."
},
"consent_to_contact": {
"type": "boolean",
"const": true,
"description": "True only if the user has agreed that TrackForge may contact them by email about this request."
}
},
"required": [
"name",
"email",
"consent_to_contact"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"recorded": {
"title": "Recorded",
"type": "boolean"
},
"reference": {
"title": "Reference",
"type": "string"
},
"follow_up": {
"title": "Follow Up",
"type": "string"
},
"report_generated": {
"default": false,
"title": "Report Generated",
"type": "boolean"
},
"isrcs_recorded": {
"title": "Isrcs Recorded",
"type": "integer"
},
"isrcs_not_recognised": {
"default": [],
"items": {
"type": "string"
},
"title": "Isrcs Not Recognised",
"type": "array"
}
},
"required": [
"recorded",
"reference",
"follow_up",
"isrcs_recorded"
],
"title": "ReportRequestResult"
}Community
Evidence