@withpica/mcp-server 2.72.0 → 2.74.0

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.
Files changed (95) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/dist/index.js +0 -0
  3. package/dist/lib/changelog.generated.d.ts +2 -2
  4. package/dist/lib/changelog.generated.d.ts.map +1 -1
  5. package/dist/lib/changelog.generated.js +2 -2
  6. package/dist/lib/changelog.generated.js.map +1 -1
  7. package/dist/resources/agent-guide.d.ts +1 -1
  8. package/dist/resources/agent-guide.d.ts.map +1 -1
  9. package/dist/resources/agent-guide.js +1 -3
  10. package/dist/resources/agent-guide.js.map +1 -1
  11. package/dist/resources/index.d.ts.map +1 -1
  12. package/dist/resources/index.js.map +1 -1
  13. package/dist/resources/required-schemas.generated.d.ts +7 -3
  14. package/dist/resources/required-schemas.generated.d.ts.map +1 -1
  15. package/dist/resources/required-schemas.generated.js +12 -2
  16. package/dist/resources/required-schemas.generated.js.map +1 -1
  17. package/dist/resources/required-schemas.source.d.ts.map +1 -1
  18. package/dist/resources/required-schemas.source.js +7 -1
  19. package/dist/resources/required-schemas.source.js.map +1 -1
  20. package/dist/server-instructions.d.ts +2 -2
  21. package/dist/server-instructions.d.ts.map +1 -1
  22. package/dist/server-instructions.js +1 -1
  23. package/dist/skills/skills.generated.d.ts.map +1 -1
  24. package/dist/skills/skills.generated.js +13 -4
  25. package/dist/skills/skills.generated.js.map +1 -1
  26. package/dist/tools/audio-files.js +1 -1
  27. package/dist/tools/audio-files.js.map +1 -1
  28. package/dist/tools/bulk.d.ts +1 -0
  29. package/dist/tools/bulk.d.ts.map +1 -1
  30. package/dist/tools/bulk.js +81 -0
  31. package/dist/tools/bulk.js.map +1 -1
  32. package/dist/tools/credits.d.ts +11 -0
  33. package/dist/tools/credits.d.ts.map +1 -1
  34. package/dist/tools/credits.js +166 -0
  35. package/dist/tools/credits.js.map +1 -1
  36. package/dist/tools/dashboard.d.ts +6 -1
  37. package/dist/tools/dashboard.d.ts.map +1 -1
  38. package/dist/tools/dashboard.js +34 -31
  39. package/dist/tools/dashboard.js.map +1 -1
  40. package/dist/tools/discovery.d.ts +3 -3
  41. package/dist/tools/discovery.d.ts.map +1 -1
  42. package/dist/tools/discovery.js +13 -19
  43. package/dist/tools/discovery.js.map +1 -1
  44. package/dist/tools/duplicates.d.ts +11 -0
  45. package/dist/tools/duplicates.d.ts.map +1 -1
  46. package/dist/tools/duplicates.js +66 -2
  47. package/dist/tools/duplicates.js.map +1 -1
  48. package/dist/tools/explainability.d.ts.map +1 -1
  49. package/dist/tools/explainability.js +3 -1
  50. package/dist/tools/explainability.js.map +1 -1
  51. package/dist/tools/exports.d.ts.map +1 -1
  52. package/dist/tools/exports.js +23 -2
  53. package/dist/tools/exports.js.map +1 -1
  54. package/dist/tools/import.d.ts.map +1 -1
  55. package/dist/tools/import.js +5 -3
  56. package/dist/tools/import.js.map +1 -1
  57. package/dist/tools/index.d.ts +9 -0
  58. package/dist/tools/index.d.ts.map +1 -1
  59. package/dist/tools/index.js +9 -14
  60. package/dist/tools/index.js.map +1 -1
  61. package/dist/tools/labels.d.ts.map +1 -1
  62. package/dist/tools/labels.js +40 -2
  63. package/dist/tools/labels.js.map +1 -1
  64. package/dist/tools/metadata.js +37 -38
  65. package/dist/tools/metadata.js.map +1 -1
  66. package/dist/tools/my-reported-issues.d.ts +1 -1
  67. package/dist/tools/party-claims.d.ts +22 -0
  68. package/dist/tools/party-claims.d.ts.map +1 -0
  69. package/dist/tools/party-claims.js +133 -0
  70. package/dist/tools/party-claims.js.map +1 -0
  71. package/dist/tools/recording-custody.d.ts +7 -3
  72. package/dist/tools/recording-custody.d.ts.map +1 -1
  73. package/dist/tools/recording-custody.js +25 -9
  74. package/dist/tools/recording-custody.js.map +1 -1
  75. package/dist/tools/recordings.d.ts.map +1 -1
  76. package/dist/tools/recordings.js +9 -1
  77. package/dist/tools/recordings.js.map +1 -1
  78. package/dist/tools/recovery-hints.d.ts.map +1 -1
  79. package/dist/tools/recovery-hints.js +64 -22
  80. package/dist/tools/recovery-hints.js.map +1 -1
  81. package/dist/tools/releases.js +1 -1
  82. package/dist/tools/releases.js.map +1 -1
  83. package/dist/tools/uploads.d.ts.map +1 -1
  84. package/dist/tools/uploads.js +6 -5
  85. package/dist/tools/uploads.js.map +1 -1
  86. package/dist/tools/works.d.ts.map +1 -1
  87. package/dist/tools/works.js +26 -3
  88. package/dist/tools/works.js.map +1 -1
  89. package/package.json +1 -1
  90. package/server.json +2 -2
  91. package/.claude/settings.local.json +0 -5
  92. package/dist/tools/team.d.ts +0 -22
  93. package/dist/tools/team.d.ts.map +0 -1
  94. package/dist/tools/team.js +0 -169
  95. package/dist/tools/team.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -11,8 +11,67 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.74.0] - 2026-06-14
15
+
14
16
  ### Added
15
17
 
18
+ - **`pica_recordings_bulk_reassign_artist`** — bulk-repoint recordings'
19
+ `primary_artist_id` in one atomic call (by explicit `recording_ids` or by
20
+ `from_person_id` to drain a junk "magnet" person; `to_person_id` null
21
+ clears). Runs under `write:catalog` — no destructive scope needed, because
22
+ it only re-points the structured link (the `artist_name` label is
23
+ untouched). Returns `source_now_empty` so a drained junk person can be
24
+ retired. The fix for the "unknown" artist magnet class.
25
+ - **`clean-up-artists` skill** — guided junk-artist cleanup: find magnets,
26
+ build a plain-language repoint plan from each recording's own `artist_name`,
27
+ preview, execute via the bulk tool, retire emptied rows.
28
+ - **`primary_artist_id` on `pica_recordings_update`** — repoint a recording
29
+ to the correct in-org person (the service already validated it; the tool
30
+ param was missing).
31
+
32
+ ### Changed
33
+
34
+ - Route validation errors now surface their real code + message to agents
35
+ instead of an opaque `UNKNOWN_ERROR` (via `@withpica/mcp-utils` 1.23.1).
36
+
37
+ ## [2.73.0] - 2026-06-12
38
+
39
+ ADR-264 WS2 verify-before-assert + the WS4 front-door prerequisite (bulk
40
+ recording credits) + ADR-268 WS1 party claims / WS2 identifier-based party
41
+ dedup / WS5 ownership transfer types + the ADR-267 calibrated-question voice
42
+ contract. Also removes the never-functional `pica_team_*` tools and the
43
+ long-deprecated `pica_dashboard_pulse`.
44
+
45
+ ### Added
46
+
47
+ - **`pica_party_claim_invite` + `pica_party_claim_status`** — ADR-268 WS1
48
+ party org claim spine. `pica_party_claim_invite` sends an artist-anchored
49
+ claim invite for an unclaimed label/distributor/publisher organisation
50
+ (the user-supplied recipient email is the consent + identity anchor; the
51
+ single-use link redeems on the public claim landing — redemption makes the
52
+ claimant the org's owner, flips verification pending→verified and billing
53
+ hibernated→trial, and mints an active org-to-org connection with the
54
+ inviting catalog, never membership). Concurrent claims freeze both sides
55
+ as `disputed` for founder adjudication, and the tool says so instead of
56
+ pretending the email went out. `pica_party_claim_status` lists the claims
57
+ the calling org has sent with their lifecycle status. Registered in the
58
+ `labels` discovery category; tool count tripwire 282 → 284.
59
+ - **`pica_recording_credits_bulk_update`** — ADR-264 WS4 prerequisite. Apply
60
+ one credit set across many recordings in a single call: target a release
61
+ (`release_id` — every recording on its tracklist) or an explicit
62
+ `recording_ids` list, plus a `credits[]` batch (`credited_name` + `role`
63
+ per entry, optional `person_id` / `split_percentage` / `split_type` /
64
+ `notes`). One album's production credits stops being 30 sequential
65
+ per-recording calls. Existing (recording, credited name, role) rows are
66
+ skipped, never overwritten — re-running is safe; `dry_run: true` previews
67
+ the exact per-row `would_create` / `would_skip_existing` decision set the
68
+ execute path uses. Validation is all-or-nothing with per-problem detail
69
+ (invalid input applies NOTHING); application returns per-row
70
+ `created` / `skipped_existing` results. Caps: 100 recordings, 50 credits,
71
+ 500 total rows per call. Backed by the new
72
+ `POST /api/admin/recording-credits/bulk` route (org-scoped at every step:
73
+ release, tracklist, recordings, and person_ids must all belong to the
74
+ caller's organisation).
16
75
  - **`pica_works_verify_registrations`** — ADR-264 WS2 truthful diagnosis. Verify
17
76
  the registration status of up to 25 works. `mode: "check"` looks each work up
18
77
  at the MLC (ISWC → title + writer IPI → title + primary-artist name) and
@@ -26,6 +85,103 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
26
85
  now carry an `evidence` block (`unverified_absent` / `verified_absent` /
27
86
  `user_confirmed_absent` with `verified_via` + `checked_at`) reflecting these
28
87
  assertions.
88
+ - **`unconnected_collaborators`** attention class (taxonomy gap, f0266f09
89
+ gap #6): people credited on the org's works with no linked PICA account now
90
+ appear on `pica_dashboard_attention` / briefing totals / `pica_count_explain`
91
+ — one shared compute with `briefing.unconnected_collaborators` so the
92
+ surfaces structurally cannot drift. drill_down_skill null until a skill
93
+ covers collaborator connection.
94
+ - **Decision blocks (calibrated questions)** — `pica_find_duplicates` groups,
95
+ the `pica_merge_duplicates` MERGE_BLOCKED_PROVENANCE error, and
96
+ `pica_works_verify_registrations` mode:"check" (when works couldn't be
97
+ verified) now carry a `decision` field: a question with 2-3 options,
98
+ plain-language consequences, and a safe default — no UUIDs in any decision
99
+ text (a UUID-shaped title degrades by omitting the block, never failing the
100
+ call). Always additive: the structured payload carries everything the block
101
+ says. `pica_dashboard_briefing` now carries `user_message` — one
102
+ ready-to-say lowercase sentence in the curiosity register (no loss framing
103
+ on unverified counts).
104
+
105
+ ### Changed
106
+
107
+ - **`pica_recording_custody_assign`** — ownership transfer types are live
108
+ (ADR-268 WS5, the ADR-262 fast-follow): `transfer_type` now accepts
109
+ `assignment` (title transfers) and `full_transfer` (ownership AND control)
110
+ alongside the v1 control/possession types. An ownership leg also moves the
111
+ recording's master ownership splits append-only in the same transaction —
112
+ the transferor's active era closes (`end_date`), the transferee's opens —
113
+ and the credit layer never moves. Honest-gap refusals (400, typed codes):
114
+ a partial percentage with more than one active owner
115
+ (`PARTIAL_TRANSFER_AMBIGUOUS`), a transfer exceeding the transferor's
116
+ share (`INSUFFICIENT_TRANSFEROR_SHARE`), or a percentage outside (0,100]
117
+ (`INVALID_PERCENTAGE`) — nothing is ever silently lost.
118
+ - **`pica_labels_create`** accepts an optional `identifiers` object
119
+ (`musicbrainz_label_id` / `isni` / `label_code` / `discogs_label_id` /
120
+ `wikidata_id` / `deezer_label_id`) — ADR-268 WS2. Dedup is now
121
+ identifier-first: supplied identifiers resolve to the global label identity
122
+ and an org already bridged to that identity is returned
123
+ `already_existed: true` EVEN when the supplied name differs;
124
+ case-insensitive name matching (ADR-265 behaviour) stays as the fallback,
125
+ and a name-matched org missing the bridge is backfilled when an identity
126
+ was resolved. Param addition only — no new tool.
127
+ - **`pica_recording_credits_update`** accepts an optional `instrument`
128
+ param (ADR-259 Stage 2) — the played instrument(s) for this credit, e.g.
129
+ `'drums'` or `'drums, bass'` (one credit per person; multiple instruments
130
+ list on the same row). Stored on `recording_credits.instrument`, rendered
131
+ in `/inspect`'s recording contributors table, and written by the Ableton
132
+ extension's attribution checklist. Server-side ADR-255 resolve-on-write
133
+ now also fires for ANY recording credit arriving without a `person_id`:
134
+ an exact org-scoped name match links it, anything else stays a free-text
135
+ draft (never auto-creates a person). Param addition only — no new tool.
136
+ - **`first-session` skill** now carries the calibrated-question library (ADR-267
137
+ Step 1): open-over-closed decision questions, diagnosis labels, no-oriented
138
+ phrasing for destructive moves, options-with-consequences, evidence-gated
139
+ stakes, and a no-UUIDs-in-user-facing-text contract. Specialist skills adopt
140
+ the same grammar incrementally; the WS4 front-door skill embeds it at birth.
141
+ - **`pica_works_create` / `pica_works_update` `mood` param description** now
142
+ states the value is stored on the work's primary recording's audio traits
143
+ (recording-grain, ADR-266 Stage 2c) — caller contract unchanged.
144
+
145
+ ### Fixed
146
+
147
+ - **Review-link contract** — server instructions told every agent to share
148
+ `withpica.com/workspace?type=<entity>&id=<id>` after writes; now the
149
+ schema-direct `/inspect/<feature>/<id>` shape (both byte-parity copies).
150
+ uploads/audio/exports tool descriptions point users at `/inspect`.
151
+
152
+ ### Deprecated
153
+
154
+ - **`pica_import_from_spotify`** — use `pica_import_streaming_link` (same
155
+ two-step flow, also supports Deezer). Structured
156
+ `{deprecated, removal_target: "2.74.0"}` in TOOL_METADATA; the new
157
+ lint-mcp-tools deprecation-expiry check BLOCKS any publish at or past the
158
+ removal target, so this cannot overstay like pulse did.
159
+ - **`briefing.unverified_writers`** count source — `briefing.unenriched_writers`
160
+ is the canonical name (matches the actionable-issues taxonomy class); the
161
+ alias shares one definition and is accepted until 2.74.
162
+
163
+ ### Removed
164
+
165
+ - **`pica_team_*` (all 5: `pica_team_list` / `pica_team_get` / `pica_team_invite`
166
+ / `pica_team_update_role` / `pica_team_remove`)** — founder decision
167
+ 2026-06-11. The backing routes (`/api/admin/team/*`) are session-only BY
168
+ DESIGN (ADR-248: team membership is human-only), so every bearer/MCP caller
169
+ has always received a hard 401 — the tools never worked for any agent and
170
+ never could. Removing them is honesty, not a regression: agents stop being
171
+ advertised a capability that structurally cannot succeed. Team membership
172
+ stays managed by humans in `/settings`. Also removed: the `team` discovery
173
+ category, the `pica_team_remove` destructive-confirmation case, recovery
174
+ hints, cost-model entries, and the `set-up-workspace` skill's Block 5 now
175
+ points users at `/settings` instead of the tools. Tool count tripwire
176
+ 287 → 282; destructive tripwire 20 → 19.
177
+ - **`pica_dashboard_pulse`** — deprecated since ADR-247 with a removal window
178
+ that passed (prod telemetry: 3 calls all-time, exploratory).
179
+ `pica_dashboard_briefing` is the canonical attention surface; pulse's
180
+ revenue-at-risk/deadline predicates retired with it (they disagreed with
181
+ the briefing coherence contract). Tool count tripwire 288 → 287.
182
+ - **`suggested_skill`** alias dropped from `pica_dashboard_attention` rows
183
+ (deprecated 2026-05-22; soak window long passed; zero non-test consumers).
184
+ `drill_down_skill` is the canonical field.
29
185
 
30
186
  ## [2.72.0] - 2026-06-10
31
187
 
package/dist/index.js CHANGED
File without changes