@labelgrid/mcp 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +2 -2
- package/dist/tools/insights.js +20 -25
- package/package.json +1 -1
- package/server.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to `@labelgrid/mcp` are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.6.1] - 2026-08-05
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- `get_analytics` states how the summary aggregates: every section aggregates
|
|
13
|
+
over the resolved filter scope, so a `upc` filter returns release totals
|
|
14
|
+
rather than a row per track. Per-track output comes from the `track-*-daily`
|
|
15
|
+
sections (which need a `release_id`, `isrc` or `upc` scope) or from
|
|
16
|
+
`get_analytics_rankings`.
|
|
17
|
+
- `get_analytics_rankings` is described as the per-entity breakdown of a scope
|
|
18
|
+
as well as a leaderboard — `type: 'tracks'` with a `upc` or `release_id`
|
|
19
|
+
filter ranks the tracks on that release.
|
|
20
|
+
- Descriptions on the `metrics`, `view` and `type` parameters were removed where
|
|
21
|
+
they restated the parameter's own enum or its tool description. No parameter,
|
|
22
|
+
enum value or validation rule changed.
|
|
23
|
+
|
|
8
24
|
## [0.6.0] - 2026-08-05
|
|
9
25
|
|
|
10
26
|
### Added
|
package/README.md
CHANGED
|
@@ -149,9 +149,9 @@ tool definitions by `npm run gen-docs` — do not edit it by hand._
|
|
|
149
149
|
|
|
150
150
|
| Tool | Gate | Description |
|
|
151
151
|
| --- | --- | --- |
|
|
152
|
-
| `get_analytics` | read | Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections
|
|
152
|
+
| `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. |
|
|
153
153
|
| `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. |
|
|
154
|
-
| `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
|
|
154
|
+
| `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. |
|
|
155
155
|
| `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. |
|
|
156
156
|
|
|
157
157
|
### Finance (statements, transactions, royalties) `finance`
|
package/dist/tools/insights.js
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { applyProjection } from '../projection.js';
|
|
9
9
|
/**
|
|
10
|
-
* The 47 metric sections the summary endpoint can return
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* The 47 metric sections the summary endpoint can return. The server's canonical
|
|
11
|
+
* order — the order it projects sections into the response — is the streaming
|
|
12
|
+
* sections, then the per-track daily series, then the social and UGC family.
|
|
13
|
+
* This list groups the social and UGC family last instead; only membership
|
|
14
|
+
* matters here, since the enum validates which keys are legal, not their order.
|
|
13
15
|
*/
|
|
14
16
|
const METRICS = [
|
|
15
17
|
'streams',
|
|
@@ -96,25 +98,18 @@ const getAnalytics = {
|
|
|
96
98
|
toolset: 'insights',
|
|
97
99
|
gate: 'read',
|
|
98
100
|
title: 'Get streaming and social analytics',
|
|
99
|
-
description: 'Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections
|
|
100
|
-
'KUGOU/KUWO/QQMUSIC report weekly: one point
|
|
101
|
-
'
|
|
102
|
-
'
|
|
103
|
-
'
|
|
104
|
-
'Rate-limited ~60/min; windows over 90 days draw a separate
|
|
101
|
+
description: 'Streaming analytics summary. Window capped at 400 days; `metrics` takes 1-12 section keys per request (split larger selections; responses cached). ' +
|
|
102
|
+
'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). ' +
|
|
103
|
+
'See get_analytics_availability for per-platform support. ' +
|
|
104
|
+
'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. ' +
|
|
105
|
+
'`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. ' +
|
|
106
|
+
'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.',
|
|
105
107
|
inputShape: {
|
|
106
108
|
start_date: z.string().describe('Window start, YYYY-MM-DD.'),
|
|
107
109
|
end_date: z.string().describe('Window end, YYYY-MM-DD.'),
|
|
108
|
-
metrics: z
|
|
109
|
-
.array(z.enum(METRICS))
|
|
110
|
-
.min(1)
|
|
111
|
-
.max(MAX_METRICS_PER_REQUEST)
|
|
112
|
-
.describe('Section keys, 1-12 per request.'),
|
|
110
|
+
metrics: z.array(z.enum(METRICS)).min(1).max(MAX_METRICS_PER_REQUEST),
|
|
113
111
|
platform: z.enum(PLATFORMS).optional(),
|
|
114
|
-
ugc_platform: z
|
|
115
|
-
.enum(UGC_PLATFORMS)
|
|
116
|
-
.optional()
|
|
117
|
-
.describe('Narrows the social/UGC sections only.'),
|
|
112
|
+
ugc_platform: z.enum(UGC_PLATFORMS).optional().describe('Social/UGC sections only.'),
|
|
118
113
|
release_id: z.number().int().positive().optional(),
|
|
119
114
|
isrc: z.string().optional(),
|
|
120
115
|
upc: z.string().optional(),
|
|
@@ -158,15 +153,15 @@ const getAnalyticsRankings = {
|
|
|
158
153
|
toolset: 'insights',
|
|
159
154
|
gate: 'read',
|
|
160
155
|
title: 'Get analytics rankings',
|
|
161
|
-
description: 'Top-N rankings for a window, ordered by summed streams. Pick ONE `view`: ' +
|
|
162
|
-
'`leaderboards` — your top artists, tracks or albums (`type` required; `all` returns all three in one
|
|
163
|
-
'`placements` —
|
|
164
|
-
'Same scope filters as get_analytics; `limit` 1-50 (default 10). Under a `platform` filter,
|
|
156
|
+
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`: ' +
|
|
157
|
+
'`leaderboards` — your top artists, tracks or albums (`type` required; `all` returns all three in one call). ' +
|
|
158
|
+
'`placements` — playlists and radio containers driving streams, summed across storefronts. ' +
|
|
159
|
+
'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.',
|
|
165
160
|
inputShape: {
|
|
166
|
-
view: z.enum(RANKING_VIEWS)
|
|
161
|
+
view: z.enum(RANKING_VIEWS),
|
|
167
162
|
start_date: z.string().describe('Window start, YYYY-MM-DD.'),
|
|
168
163
|
end_date: z.string().describe('Window end, YYYY-MM-DD.'),
|
|
169
|
-
type: z.enum(LEADERBOARD_TYPES).optional()
|
|
164
|
+
type: z.enum(LEADERBOARD_TYPES).optional(),
|
|
170
165
|
platform: z.enum(PLATFORMS).optional(),
|
|
171
166
|
ugc_platform: z.enum(UGC_PLATFORMS).optional(),
|
|
172
167
|
release_id: z.number().int().positive().optional(),
|
|
@@ -178,7 +173,7 @@ const getAnalyticsRankings = {
|
|
|
178
173
|
.int()
|
|
179
174
|
.positive()
|
|
180
175
|
.optional()
|
|
181
|
-
.describe('Narrow to one of your own labels;
|
|
176
|
+
.describe('Narrow to one of your own labels; never widens scope.'),
|
|
182
177
|
limit: z.number().int().positive().max(MAX_RANKING_LIMIT).optional(),
|
|
183
178
|
},
|
|
184
179
|
annotations: { readOnlyHint: true },
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.labelgrid/labelgrid-mcp",
|
|
4
4
|
"description": "Official LabelGrid MCP server — manage your music catalog, releases, analytics and distribution.",
|
|
5
|
-
"version": "0.6.
|
|
5
|
+
"version": "0.6.1",
|
|
6
6
|
"websiteUrl": "https://labelgrid.com",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/labelgrid/labelgrid-mcp",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "@labelgrid/mcp",
|
|
15
|
-
"version": "0.6.
|
|
15
|
+
"version": "0.6.1",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|