@labelgrid/mcp
Advanced tools
+16
-0
@@ -8,2 +8,18 @@ # Changelog | ||
| ## [0.6.1] - 2026-08-05 | ||
| ### Changed | ||
| - `get_analytics` states how the summary aggregates: every section aggregates | ||
| over the resolved filter scope, so a `upc` filter returns release totals | ||
| rather than a row per track. Per-track output comes from the `track-*-daily` | ||
| sections (which need a `release_id`, `isrc` or `upc` scope) or from | ||
| `get_analytics_rankings`. | ||
| - `get_analytics_rankings` is described as the per-entity breakdown of a scope | ||
| as well as a leaderboard — `type: 'tracks'` with a `upc` or `release_id` | ||
| filter ranks the tracks on that release. | ||
| - Descriptions on the `metrics`, `view` and `type` parameters were removed where | ||
| they restated the parameter's own enum or its tool description. No parameter, | ||
| enum value or validation rule changed. | ||
| ## [0.6.0] - 2026-08-05 | ||
@@ -10,0 +26,0 @@ |
+20
-25
@@ -10,5 +10,7 @@ /** | ||
| /** | ||
| * The 47 metric sections the summary endpoint can return, in the server's | ||
| * canonical order: the streaming sections first, then the social and UGC | ||
| * family, then the per-track daily series. | ||
| * The 47 metric sections the summary endpoint can return. The server's canonical | ||
| * order — the order it projects sections into the response — is the streaming | ||
| * sections, then the per-track daily series, then the social and UGC family. | ||
| * This list groups the social and UGC family last instead; only membership | ||
| * matters here, since the enum validates which keys are legal, not their order. | ||
| */ | ||
@@ -100,21 +102,14 @@ const METRICS = [ | ||
| title: 'Get streaming and social analytics', | ||
| description: 'Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections — responses are cached). ' + | ||
| 'KUGOU/KUWO/QQMUSIC report weekly: one point per week carrying the whole week — never average it per day. `meta` carries `platform_cadence`, `section_granularity`, `sections_as_of` and `sections_complete_through` (later dates still filling in). ' + | ||
| 'Call get_analytics_availability first for section-per-platform support. ' + | ||
| 'The `social-*` / `soundcloud-engagement` sections cover social and UGC usage instead of streaming: their `platform` is a UGC platform; a use, view and play are distinct quantities, never summed with each other or with streams; `ugc_platform` narrows them. Selecting any adds `meta.social_availability` (which UGC platforms report each signal) — the streaming matrix excludes them. ' + | ||
| 'The `track-*-daily` sections need a `release_id`, `isrc` or `upc` scope. `track-listeners-daily` sums per-entry daily counts: not distinct people, not summable across dates. ' + | ||
| 'Rate-limited ~60/min; windows over 90 days draw a separate lower ~30/min budget — prefer shorter windows for polling. A 429 carries retry_after_seconds.', | ||
| description: 'Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections; responses cached). ' + | ||
| 'KUGOU/KUWO/QQMUSIC report weekly: one point carries the whole week — never average per day. `meta` carries `platform_cadence`, `section_granularity`, `sections_as_of` and `sections_complete_through` (later dates still filling in). ' + | ||
| 'See get_analytics_availability for per-platform support. ' + | ||
| 'Sections aggregate over the resolved filter scope: a `upc` filter gives release totals, not per-track rows. For those use `track-*-daily` (needs a `release_id`, `isrc` or `upc` scope) or get_analytics_rankings. `track-listeners-daily` sums per-entry daily counts: not distinct people, not summable across dates. ' + | ||
| '`social-*` / `soundcloud-engagement` cover social/UGC usage, not streaming: `platform` is a UGC platform, `ugc_platform` narrows them; use, view and play are distinct quantities never summed together or with streams. Selecting any adds `meta.social_availability` (which UGC platforms report each signal); the streaming matrix omits them. ' + | ||
| 'Rate-limited ~60/min; windows over 90 days draw a separate ~30/min budget — prefer short windows for polling. A 429 carries retry_after_seconds.', | ||
| inputShape: { | ||
| start_date: z.string().describe('Window start, YYYY-MM-DD.'), | ||
| end_date: z.string().describe('Window end, YYYY-MM-DD.'), | ||
| metrics: z | ||
| .array(z.enum(METRICS)) | ||
| .min(1) | ||
| .max(MAX_METRICS_PER_REQUEST) | ||
| .describe('Section keys, 1-12 per request.'), | ||
| metrics: z.array(z.enum(METRICS)).min(1).max(MAX_METRICS_PER_REQUEST), | ||
| platform: z.enum(PLATFORMS).optional(), | ||
| ugc_platform: z | ||
| .enum(UGC_PLATFORMS) | ||
| .optional() | ||
| .describe('Narrows the social/UGC sections only.'), | ||
| ugc_platform: z.enum(UGC_PLATFORMS).optional().describe('Social/UGC sections only.'), | ||
| release_id: z.number().int().positive().optional(), | ||
@@ -163,11 +158,11 @@ isrc: z.string().optional(), | ||
| title: 'Get analytics rankings', | ||
| description: 'Top-N rankings for a window, ordered by summed streams. Pick ONE `view`: ' + | ||
| '`leaderboards` — your top artists, tracks or albums (`type` required; `all` returns all three in one request). ' + | ||
| '`placements` — the playlists and radio containers driving streams, summed across storefronts. ' + | ||
| 'Same scope filters as get_analytics; `limit` 1-50 (default 10). Under a `platform` filter, an `availability` of `not_available_for_platform` means that platform reports no ranking and `data` is empty.', | ||
| description: 'Top-N rankings for a window, ordered by summed streams — the per-entity breakdown of a scope: `type` tracks with a `upc`/`release_id` filter ranks the tracks on that release. Pick ONE `view`: ' + | ||
| '`leaderboards` — your top artists, tracks or albums (`type` required; `all` returns all three in one call). ' + | ||
| '`placements` — playlists and radio containers driving streams, summed across storefronts. ' + | ||
| 'Same scope filters as get_analytics; `limit` 1-50 (default 10). Under a `platform` filter, `availability: not_available_for_platform` means no ranking there and `data` is empty.', | ||
| inputShape: { | ||
| view: z.enum(RANKING_VIEWS).describe('Which ranking read.'), | ||
| view: z.enum(RANKING_VIEWS), | ||
| start_date: z.string().describe('Window start, YYYY-MM-DD.'), | ||
| end_date: z.string().describe('Window end, YYYY-MM-DD.'), | ||
| type: z.enum(LEADERBOARD_TYPES).optional().describe('Required for view leaderboards.'), | ||
| type: z.enum(LEADERBOARD_TYPES).optional(), | ||
| platform: z.enum(PLATFORMS).optional(), | ||
@@ -184,3 +179,3 @@ ugc_platform: z.enum(UGC_PLATFORMS).optional(), | ||
| .optional() | ||
| .describe('Narrow to one of your own labels; it can never widen scope.'), | ||
| .describe('Narrow to one of your own labels; never widens scope.'), | ||
| limit: z.number().int().positive().max(MAX_RANKING_LIMIT).optional(), | ||
@@ -187,0 +182,0 @@ }, |
+1
-1
| { | ||
| "name": "@labelgrid/mcp", | ||
| "version": "0.6.0", | ||
| "version": "0.6.1", | ||
| "mcpName": "io.github.labelgrid/labelgrid-mcp", | ||
@@ -5,0 +5,0 @@ "description": "Official LabelGrid MCP server — connect your AI client to your LabelGrid account", |
+2
-2
@@ -152,5 +152,5 @@ # LabelGrid MCP Server | ||
| | --- | --- | --- | | ||
| | `get_analytics` | read | Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections — responses are cached). KUGOU/KUWO/QQMUSIC report weekly: one point per week carrying the whole week — never average it per day. `meta` carries `platform_cadence`, `section_granularity`, `sections_as_of` and `sections_complete_through` (later dates still filling in). Call get_analytics_availability first for section-per-platform support. The `social-*` / `soundcloud-engagement` sections cover social and UGC usage instead of streaming: their `platform` is a UGC platform; a use, view and play are distinct quantities, never summed with each other or with streams; `ugc_platform` narrows them. Selecting any adds `meta.social_availability` (which UGC platforms report each signal) — the streaming matrix excludes them. The `track-*-daily` sections need a `release_id`, `isrc` or `upc` scope. `track-listeners-daily` sums per-entry daily counts: not distinct people, not summable across dates. Rate-limited ~60/min; windows over 90 days draw a separate lower ~30/min budget — prefer shorter windows for polling. A 429 carries retry_after_seconds. | | ||
| | `get_analytics` | read | Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections; responses cached). KUGOU/KUWO/QQMUSIC report weekly: one point carries the whole week — never average per day. `meta` carries `platform_cadence`, `section_granularity`, `sections_as_of` and `sections_complete_through` (later dates still filling in). See get_analytics_availability for per-platform support. Sections aggregate over the resolved filter scope: a `upc` filter gives release totals, not per-track rows. For those use `track-*-daily` (needs a `release_id`, `isrc` or `upc` scope) or get_analytics_rankings. `track-listeners-daily` sums per-entry daily counts: not distinct people, not summable across dates. `social-*` / `soundcloud-engagement` cover social/UGC usage, not streaming: `platform` is a UGC platform, `ugc_platform` narrows them; use, view and play are distinct quantities never summed together or with streams. Selecting any adds `meta.social_availability` (which UGC platforms report each signal); the streaming matrix omits them. Rate-limited ~60/min; windows over 90 days draw a separate ~30/min budget — prefer short windows for polling. A 429 carries retry_after_seconds. | | ||
| | `get_analytics_availability` | read | Static `availability` matrix (per section, per platform) plus `platform_cadence` (daily\|weekly per platform). Account- and date-independent: fetch once, reuse. Read it before get_analytics so an unreported section is treated as unavailable, not an empty chart. | | ||
| | `get_analytics_rankings` | read | Top-N rankings for a window, ordered by summed streams. Pick ONE `view`: `leaderboards` — your top artists, tracks or albums (`type` required; `all` returns all three in one request). `placements` — the playlists and radio containers driving streams, summed across storefronts. Same scope filters as get_analytics; `limit` 1-50 (default 10). Under a `platform` filter, an `availability` of `not_available_for_platform` means that platform reports no ranking and `data` is empty. | | ||
| | `get_analytics_rankings` | read | Top-N rankings for a window, ordered by summed streams — the per-entity breakdown of a scope: `type` tracks with a `upc`/`release_id` filter ranks the tracks on that release. Pick ONE `view`: `leaderboards` — your top artists, tracks or albums (`type` required; `all` returns all three in one call). `placements` — playlists and radio containers driving streams, summed across storefronts. Same scope filters as get_analytics; `limit` 1-50 (default 10). Under a `platform` filter, `availability: not_available_for_platform` means no ranking there and `data` is empty. | | ||
| | `query_artificial_streaming` | read | Artificial-streaming (streaming-integrity) reads. Pick ONE `view`: `flags` — Stream Radar early-warning flags, paginated (`filters`: status, severity, dsp, isrc, release_id, detected_from/detected_to). Stream Radar is an optional add-on; without it the API returns a 403, surfaced verbatim. `flag_detail` — one flag by `flag_id`. `records` — reported artificial-streaming records, cursor-paginated; the detail behind any artificial-streaming fee (`filters`: dsp, start_date/end_date, release_id, isrc). `fee_breakdown` — per-release fee breakdown for one `period` (YYYY-MM). response_format:'detailed' returns the verbatim API response. | | ||
@@ -157,0 +157,0 @@ |
+2
-2
@@ -5,3 +5,3 @@ { | ||
| "description": "Official LabelGrid MCP server — manage your music catalog, releases, analytics and distribution.", | ||
| "version": "0.6.0", | ||
| "version": "0.6.1", | ||
| "websiteUrl": "https://labelgrid.com", | ||
@@ -16,3 +16,3 @@ "repository": { | ||
| "identifier": "@labelgrid/mcp", | ||
| "version": "0.6.0", | ||
| "version": "0.6.1", | ||
| "transport": { | ||
@@ -19,0 +19,0 @@ "type": "stdio" |
179718
0.58%2965
-0.13%