@withpica/mcp-server 2.97.4 → 2.98.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 (157) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README.intro.md +1 -1
  3. package/README.md +9 -5
  4. package/dist/lib/changelog.generated.d.ts +2 -2
  5. package/dist/lib/changelog.generated.d.ts.map +1 -1
  6. package/dist/lib/changelog.generated.js +2 -2
  7. package/dist/lib/changelog.generated.js.map +1 -1
  8. package/dist/prompts/creator-question-atlas.d.ts.map +1 -1
  9. package/dist/prompts/creator-question-atlas.js +23 -0
  10. package/dist/prompts/creator-question-atlas.js.map +1 -1
  11. package/dist/prompts/index.d.ts.map +1 -1
  12. package/dist/prompts/index.js +22 -25
  13. package/dist/prompts/index.js.map +1 -1
  14. package/dist/resources/agent-guide.d.ts.map +1 -1
  15. package/dist/resources/agent-guide.js +4 -2
  16. package/dist/resources/agent-guide.js.map +1 -1
  17. package/dist/resources/required-schemas.generated.d.ts +13 -7
  18. package/dist/resources/required-schemas.generated.d.ts.map +1 -1
  19. package/dist/resources/required-schemas.generated.js +23 -4
  20. package/dist/resources/required-schemas.generated.js.map +1 -1
  21. package/dist/resources/required-schemas.source.d.ts.map +1 -1
  22. package/dist/resources/required-schemas.source.js +15 -3
  23. package/dist/resources/required-schemas.source.js.map +1 -1
  24. package/dist/server-instructions.d.ts +2 -2
  25. package/dist/server-instructions.d.ts.map +1 -1
  26. package/dist/server-instructions.js +1 -1
  27. package/dist/skills/skills.generated.js +5 -5
  28. package/dist/skills/skills.generated.js.map +1 -1
  29. package/dist/tools/agreement-types.d.ts.map +1 -1
  30. package/dist/tools/agreement-types.js +3 -1
  31. package/dist/tools/agreement-types.js.map +1 -1
  32. package/dist/tools/agreements.d.ts.map +1 -1
  33. package/dist/tools/agreements.js +15 -6
  34. package/dist/tools/agreements.js.map +1 -1
  35. package/dist/tools/approvals.d.ts.map +1 -1
  36. package/dist/tools/approvals.js +14 -1
  37. package/dist/tools/approvals.js.map +1 -1
  38. package/dist/tools/arg-aliases.d.ts.map +1 -1
  39. package/dist/tools/arg-aliases.js +12 -0
  40. package/dist/tools/arg-aliases.js.map +1 -1
  41. package/dist/tools/audio-files.d.ts +39 -0
  42. package/dist/tools/audio-files.d.ts.map +1 -1
  43. package/dist/tools/audio-files.js +253 -12
  44. package/dist/tools/audio-files.js.map +1 -1
  45. package/dist/tools/catalog-enums.d.ts +20 -0
  46. package/dist/tools/catalog-enums.d.ts.map +1 -0
  47. package/dist/tools/catalog-enums.js +28 -0
  48. package/dist/tools/catalog-enums.js.map +1 -0
  49. package/dist/tools/credits.d.ts.map +1 -1
  50. package/dist/tools/credits.js +69 -8
  51. package/dist/tools/credits.js.map +1 -1
  52. package/dist/tools/custody-hints.js +2 -2
  53. package/dist/tools/custody-hints.js.map +1 -1
  54. package/dist/tools/custody.d.ts.map +1 -1
  55. package/dist/tools/custody.js +4 -1
  56. package/dist/tools/custody.js.map +1 -1
  57. package/dist/tools/deprecations.d.ts +2 -1
  58. package/dist/tools/deprecations.d.ts.map +1 -1
  59. package/dist/tools/deprecations.js +27 -11
  60. package/dist/tools/deprecations.js.map +1 -1
  61. package/dist/tools/directory.js +2 -2
  62. package/dist/tools/directory.js.map +1 -1
  63. package/dist/tools/discovery.d.ts.map +1 -1
  64. package/dist/tools/discovery.js +14 -3
  65. package/dist/tools/discovery.js.map +1 -1
  66. package/dist/tools/duplicates.d.ts.map +1 -1
  67. package/dist/tools/duplicates.js +66 -18
  68. package/dist/tools/duplicates.js.map +1 -1
  69. package/dist/tools/enrichment.d.ts.map +1 -1
  70. package/dist/tools/enrichment.js +36 -2
  71. package/dist/tools/enrichment.js.map +1 -1
  72. package/dist/tools/exports.d.ts +1 -0
  73. package/dist/tools/exports.d.ts.map +1 -1
  74. package/dist/tools/exports.js +69 -2
  75. package/dist/tools/exports.js.map +1 -1
  76. package/dist/tools/import.d.ts.map +1 -1
  77. package/dist/tools/import.js +19 -0
  78. package/dist/tools/import.js.map +1 -1
  79. package/dist/tools/index.d.ts.map +1 -1
  80. package/dist/tools/index.js +44 -4
  81. package/dist/tools/index.js.map +1 -1
  82. package/dist/tools/licensing.d.ts.map +1 -1
  83. package/dist/tools/licensing.js +14 -9
  84. package/dist/tools/licensing.js.map +1 -1
  85. package/dist/tools/metadata.d.ts.map +1 -1
  86. package/dist/tools/metadata.js +58 -12
  87. package/dist/tools/metadata.js.map +1 -1
  88. package/dist/tools/notes.d.ts.map +1 -1
  89. package/dist/tools/notes.js +28 -5
  90. package/dist/tools/notes.js.map +1 -1
  91. package/dist/tools/people.d.ts +5 -1
  92. package/dist/tools/people.d.ts.map +1 -1
  93. package/dist/tools/people.js +8 -1
  94. package/dist/tools/people.js.map +1 -1
  95. package/dist/tools/purchases.d.ts +2 -3
  96. package/dist/tools/purchases.d.ts.map +1 -1
  97. package/dist/tools/purchases.js.map +1 -1
  98. package/dist/tools/recording-attribution-hints.js +1 -1
  99. package/dist/tools/recording-attribution-hints.js.map +1 -1
  100. package/dist/tools/recording-custody.d.ts +3 -1
  101. package/dist/tools/recording-custody.d.ts.map +1 -1
  102. package/dist/tools/recording-custody.js +8 -4
  103. package/dist/tools/recording-custody.js.map +1 -1
  104. package/dist/tools/recovery-hints.d.ts +0 -6
  105. package/dist/tools/recovery-hints.d.ts.map +1 -1
  106. package/dist/tools/recovery-hints.js +98 -20
  107. package/dist/tools/recovery-hints.js.map +1 -1
  108. package/dist/tools/register.d.ts.map +1 -1
  109. package/dist/tools/register.js +2 -1
  110. package/dist/tools/register.js.map +1 -1
  111. package/dist/tools/releases.d.ts.map +1 -1
  112. package/dist/tools/releases.js +7 -4
  113. package/dist/tools/releases.js.map +1 -1
  114. package/dist/tools/rights.d.ts +45 -0
  115. package/dist/tools/rights.d.ts.map +1 -0
  116. package/dist/tools/rights.js +302 -0
  117. package/dist/tools/rights.js.map +1 -0
  118. package/dist/tools/royalties.d.ts +24 -1
  119. package/dist/tools/royalties.d.ts.map +1 -1
  120. package/dist/tools/royalties.js +99 -66
  121. package/dist/tools/royalties.js.map +1 -1
  122. package/dist/tools/section-validation.d.ts +14 -0
  123. package/dist/tools/section-validation.d.ts.map +1 -0
  124. package/dist/tools/section-validation.js +68 -0
  125. package/dist/tools/section-validation.js.map +1 -0
  126. package/dist/tools/selections.d.ts +5 -2
  127. package/dist/tools/selections.d.ts.map +1 -1
  128. package/dist/tools/selections.js +10 -4
  129. package/dist/tools/selections.js.map +1 -1
  130. package/dist/tools/settings.d.ts.map +1 -1
  131. package/dist/tools/settings.js +11 -7
  132. package/dist/tools/settings.js.map +1 -1
  133. package/dist/tools/share-links.d.ts.map +1 -1
  134. package/dist/tools/share-links.js +32 -6
  135. package/dist/tools/share-links.js.map +1 -1
  136. package/dist/tools/share-send.d.ts.map +1 -1
  137. package/dist/tools/share-send.js +32 -7
  138. package/dist/tools/share-send.js.map +1 -1
  139. package/dist/tools/signed-split-sheet-preview.d.ts +43 -0
  140. package/dist/tools/signed-split-sheet-preview.d.ts.map +1 -0
  141. package/dist/tools/signed-split-sheet-preview.js +67 -0
  142. package/dist/tools/signed-split-sheet-preview.js.map +1 -0
  143. package/dist/tools/split-sheets.d.ts +19 -0
  144. package/dist/tools/split-sheets.d.ts.map +1 -1
  145. package/dist/tools/split-sheets.js +108 -15
  146. package/dist/tools/split-sheets.js.map +1 -1
  147. package/dist/tools/works.d.ts +9 -1
  148. package/dist/tools/works.d.ts.map +1 -1
  149. package/dist/tools/works.js +197 -66
  150. package/dist/tools/works.js.map +1 -1
  151. package/dist/tools/write-receipt.d.ts +68 -0
  152. package/dist/tools/write-receipt.d.ts.map +1 -0
  153. package/dist/tools/write-receipt.js +64 -0
  154. package/dist/tools/write-receipt.js.map +1 -0
  155. package/package.json +4 -4
  156. package/scripts/build-required-schemas.ts +7 -1
  157. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,158 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.98.0] - 2026-09-29
15
+
16
+ ### Deprecated
17
+
18
+ - The 11 deprecated aliases scheduled for removal in 2.98.0 (among them
19
+ `pica_releases_list`, `pica_documents_list`, `pica_notes_list` and
20
+ `pica_royalties_summary`) stay one more version. They are now due for
21
+ removal in **2.99.0**. Each still answers and names its replacement.
22
+
23
+ ### Added
24
+
25
+ - **`disambiguation` on `pica_works_create` / `pica_works_update`** — a short
26
+ note (≤ 200 characters, e.g. "theme", "2019 song") that tells apart two
27
+ DIFFERENT songs sharing a title and primary artist. It is part of the
28
+ duplicate check, so set it only when the songs genuinely differ; a
29
+ `WORK_ALREADY_EXISTS` refusal for a song you know is not the existing one is
30
+ the cue. The refusal message and its recovery hint now name both ways
31
+ through: merge when it is the same song, `disambiguation` when it is not.
32
+ `null` or `""` clears it. Also accepted by `pica_works_bulk_update`, which
33
+ shares the works write schema.
34
+ - **`score` work type** — music composed for film, TV, games or other
35
+ picture. Offered wherever `work_type` is (`pica_works_create`,
36
+ `pica_works_update`, `pica_works_bulk_update`, `pica_works_query`,
37
+ `pica_register_set`).
38
+
39
+ - **Programmable rights — `pica_rights_propose`, `pica_rights_status`,
40
+ `pica_rights_inspect`** (ADR-321 §9, Phase 2). Agents propose, humans
41
+ confirm. `pica_rights_propose` proposes a song rule, a recording's master
42
+ rule, or a share rule that divides one party's share (a publishing deal, a
43
+ manager's commission with an end date), and emails every party it affects to
44
+ confirm. It never activates or confirms anything and never moves money.
45
+ Tier `destructive`, `approvalMode: "human"`, scope `write:catalog`: a
46
+ delegated agent's call becomes a pending approval for the org owner (poll
47
+ `pica_approval_status`), replayed through the same propose service the route
48
+ uses. Shares are basis points (100 = 1%; a share rule's parties sum to
49
+ 10,000). A refusal writes nothing and returns its reasons. A master rule
50
+ needs `ownership` — the user's answer to "who owns the master of this
51
+ recording?" (`only_me` / `me_and_others` / `someone_else`) — and locks only
52
+ after every owner signs the recording's master ownership sheet; an agent can
53
+ never lock "only me" in one step.
54
+ `pica_rights_status` (`read:catalog`) reads one rule: status, who has
55
+ confirmed this exact version, and email delivery. `pica_rights_inspect`
56
+ (`read:catalog`) reads a song's rules on both sides, version history,
57
+ disputes, and the holds — what money would be held, why, and who clears it.
58
+ No amounts yet; holds are PICA's rules, not a society's.
59
+ - **`pica_royalties_blockers` — "why isn't this song being paid?"** (ADR-321
60
+ Phase 0). With `work_id`: what in that song's record is likely holding up its
61
+ society income — missing ISWC, writers without an IPI or society membership,
62
+ shares not totalling 100%, disputed credits, no confirmed registration,
63
+ recordings without an ISRC — each with its fix. Without it: the catalogue
64
+ summary plus the songs that are not clear, filterable by blocker and paged.
65
+ Same judgement as the `/inspect` song panel and `/inspect/money`. Scope
66
+ `read:catalog` (no amounts). The description and result message never call a
67
+ song clear unless every area was checked; unchecked areas are named.
68
+ - **`pica_audio_bulk_update` — metadata for up to 200 audio files in one
69
+ call** (ops 5c53049a). Each item sets any of `file_type`, `stem_label`,
70
+ `version_label`, `title` for one file id; the result is one lean row per
71
+ item (`updated`, or `failed` with a reason) and never the file records. A bad
72
+ item does not stop the others. `dry_run: true` previews. Only the caller's
73
+ organisation's files are touched.
74
+ - **`pica_share_links_create` takes `selection_id`** — share every work a saved
75
+ selection matches as one playlist link (a snapshot; the link does not follow
76
+ later changes to the selection). Refused when the selection matches no works
77
+ or more than 200 (ops 42be8f96).
78
+ - **`pica_share_links_create` takes `allow_view_lyrics`**, and its description
79
+ now tells agents that lyrics, credits (`allow_view_collaborators`) and splits
80
+ (`allow_view_financials`) are hidden unless turned on.
81
+ - **`pica_audio_query` takes `work_ids`** (up to 100) — the audio for several
82
+ works in one paged call, including files attached through a recording of
83
+ those works (ops 96672119).
84
+
85
+ ### Changed
86
+
87
+ - **Playlist share links now record `include_all_files: true` by default**
88
+ (unless `included_file_ids` names a subset), matching what the playlist page
89
+ already shows — every version of each song, for the recipient to choose.
90
+ - **`pica_audio_update` and `pica_audio_assign` return the lean list row**
91
+ (the shape a `pica_audio_query` row has) instead of the full stored record
92
+ with its waveform and fingerprint data — about 8k tokens a file (ops
93
+ 5c53049a).
94
+ - **`pica_works_update` answers with a compact receipt** (ops 61ce1dcc): the
95
+ work id, `changed` (each field sent, with the value now stored),
96
+ `unconfirmed` for fields the stored record did not echo, and an `integrity`
97
+ block listing every open gap by label and code but hinting only the gaps
98
+ this write opened. It no longer returns the full work (lyrics included) or
99
+ repeats every open gap as "next steps" on each call. Pass `verbose: true` for
100
+ the previous answer.
101
+ - **`pica_credits_update` answers in the same shape**: `work_id`,
102
+ `changed.credits` (person, role, share as written) and `saved` (the save
103
+ count and any skipped rows). `verbose: true` returns the raw save result.
104
+
105
+ ### Deprecated
106
+
107
+ - **`pica_royalties_summary` retired in favour of `pica_royalties_blockers`**
108
+ (founder decision, 2026-09-25). It ran its own gap judgement — PRS, PPL and
109
+ MCPS hard-coded, a missing row read as "not registered with PRS", only the
110
+ first 1,000 works. It stays callable as a silent alias until 2.98.0: calls
111
+ now return `pica_royalties_blockers`' answer (`work_id` and `limit` carry
112
+ over; `gap_type` and `priority` have no equivalent). No longer listed in
113
+ discovery. Unmatched payments remain `pica_royalties_unmatched`. Traffic: 2
114
+ calls from 2 organisations in the 90 days before retirement.
115
+
116
+ ### Fixed
117
+
118
+ - The "how much has this song earned?" prompt told agents to call
119
+ `pica_royalties_summary` for cumulative earnings; that tool never returned
120
+ earnings. It now names `pica_royalties_get`.
121
+ - **`pica_works_query` with `health_filter` honours `limit` and `offset`** and
122
+ stops reporting the page length as `total` (ops 314325eb).
123
+ `low_completeness` reports the number of works below the threshold by their
124
+ stored score (max 200 per page). `needs_attention` now returns only works with reconciliation problems
125
+ (it was returning reconciled works too), checks at most 50 works per call,
126
+ pages by works checked (`next_offset`), and reports `total` only when one
127
+ call from offset 0 checked every candidate (otherwise `null`).
128
+ - **An unknown `sections` name is refused instead of answering `{}`** (ops
129
+ dfa810f8). `pica_works_inspect { sections: ["work"] }` returned a
130
+ successful empty result; every tool with a fixed list of sections now
131
+ answers `VALIDATION_ERROR` naming the unknown entries and the valid ones.
132
+ - **`pica_people_create` / `pica_people_update` accept `ipi`** as the same
133
+ field as `cae_ipi_number` — the name the other tools use. Sending both with
134
+ different numbers is refused.
135
+ - **`work_type` is one list everywhere** — song, instrumental, library, demo,
136
+ sample, matching the database. `pica_works_update` refused `instrumental`
137
+ while create and bulk update accepted it.
138
+
139
+ ## [2.97.5] - 2026-09-18
140
+
141
+ ### Added
142
+
143
+ - **`pica_export_song_dossiers` — everything PICA holds about a chosen set of
144
+ songs, as one ZIP.** Pass 1 to 60 `work_ids`; the ZIP holds each work's song
145
+ dossier as a PDF and as JSON (the work, its recordings with credits and
146
+ ISRCs, the releases those recordings appear on, people and identifiers,
147
+ provenance, AI disclosure, consent), a manifest with a SHA-256 hash of every
148
+ file, and a README. Returns the signed-URL envelope the other exports return,
149
+ plus `works[]` saying per work whether it was included: a work that is not in
150
+ the catalogue comes back `included: false` rather than vanishing, and a list
151
+ past 60 or a malformed id is refused rather than truncated. The
152
+ credential needs `write:files` (the floor on every export write) and
153
+ `write:catalog` (the route's own requirement). It downloads a file for the catalogue owner and sends nothing
154
+ to anyone.
155
+
156
+ ### Changed
157
+
158
+ - **`pica_works_inspect` no longer says the dossier PDF is only on the web
159
+ UI**, in its `sections` description and in the dossier summary line — both
160
+ now name `pica_export_song_dossiers`.
161
+ - **`pica_export_snapshot` stops claiming "export everything about this
162
+ work"** as one of its phrases — the snapshot is a ranked what-to-fix view
163
+ and carries no recordings or releases; that phrase now routes to
164
+ `pica_export_song_dossiers`, which the snapshot's description names.
165
+
14
166
  ## [2.97.4] - 2026-09-17
15
167
 
16
168
  ### Fixed
package/README.intro.md CHANGED
@@ -78,7 +78,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
78
78
 
79
79
  # @withpica/mcp-server-directory
80
80
 
81
- MCP server for the **withPICA public directory** — read-only search over works, recordings and creators that rights holders have chosen to publish. No account, no API key, no setup.
81
+ MCP server for the **withPICA public directory** — search over works, recordings and creators that rights holders have chosen to publish, plus one write: sending a licensing enquiry to an owner, when the user asks. Also hosted, no install: connect a remote MCP client to `https://withpica.com/api/mcp/directory`. No account, no API key, no setup.
82
82
 
83
83
  ## Install
84
84
 
package/README.md CHANGED
@@ -65,7 +65,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
65
65
 
66
66
  ## Tools
67
67
 
68
- 336 tools, grouped below by the taxonomy `pica_discover` uses. The server's own `tools/list` is authoritative — not every registered tool is filed under a category yet, so the names below are a map, not a census.
68
+ 341 tools, grouped below by the taxonomy `pica_discover` uses. The server's own `tools/list` is authoritative — not every registered tool is filed under a category yet, so the names below are a map, not a census.
69
69
 
70
70
  **works** — manage your musical works
71
71
 
@@ -101,7 +101,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
101
101
 
102
102
  **audio** — manage and analyze audio files
103
103
 
104
- `pica_audio_query`, `pica_audio_inspect`, `pica_audio_presigned_upload`, `pica_audio_complete_upload`, `pica_audio_analyze`, `pica_audio_identify`, `pica_audio_assign`, `pica_audio_bulk_assign_suggested`, `pica_audio_dismiss_match`, `pica_audio_update`, `pica_audio_delete`, `pica_upload`, `pica_audio_pipeline_status`
104
+ `pica_audio_query`, `pica_audio_inspect`, `pica_audio_presigned_upload`, `pica_audio_complete_upload`, `pica_audio_analyze`, `pica_audio_identify`, `pica_audio_assign`, `pica_audio_bulk_assign_suggested`, `pica_audio_dismiss_match`, `pica_audio_update`, `pica_audio_bulk_update`, `pica_audio_delete`, `pica_upload`, `pica_audio_pipeline_status`
105
105
 
106
106
  **projects** — manage albums, EPs, and work groupings
107
107
 
@@ -129,7 +129,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
129
129
 
130
130
  **export** — export catalog data in various formats
131
131
 
132
- `pica_export_catalog_csv`, `pica_export_song_registration`, `pica_export_industry_ready`, `pica_export_catalog_asset_report`, `pica_export_ai_consent`, `pica_export_snapshot`, `pica_export_ownership_record`, `pica_export_rights_proof`, `pica_export_diligence_pack`, `pica_download`, `pica_export_my_data`
132
+ `pica_export_catalog_csv`, `pica_export_song_registration`, `pica_export_industry_ready`, `pica_export_catalog_asset_report`, `pica_export_ai_consent`, `pica_export_snapshot`, `pica_export_song_dossiers`, `pica_export_ownership_record`, `pica_export_rights_proof`, `pica_export_diligence_pack`, `pica_download`, `pica_export_my_data`
133
133
 
134
134
  **search** — search across the catalog and discover content
135
135
 
@@ -233,7 +233,11 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
233
233
 
234
234
  **royalties statements** — view royalties and ingested statements
235
235
 
236
- `pica_royalties_summary`, `pica_royalties_list`, `pica_royalties_get`, `pica_statements_query`, `pica_statements_inspect`, `pica_ingest_statement`, `pica_statements_pending`, `pica_statement_ingest_document`, `pica_royalties_unmatched`, `pica_royalties_attribute`
236
+ `pica_royalties_list`, `pica_royalties_get`, `pica_statements_query`, `pica_statements_inspect`, `pica_ingest_statement`, `pica_statements_pending`, `pica_statement_ingest_document`, `pica_royalties_blockers`, `pica_royalties_unmatched`, `pica_royalties_attribute`
237
+
238
+ **rights** — programmable rights — propose a song, master or share rule for the parties to confirm, check who has confirmed, and see what money would be held and why
239
+
240
+ `pica_rights_inspect`, `pica_rights_status`, `pica_rights_propose`
237
241
 
238
242
  **selections** — save, recall, and resolve named catalog selections — persisted predicates over the catalogue with an honest coverage report
239
243
 
@@ -289,4 +293,4 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
289
293
 
290
294
  ---
291
295
 
292
- Generated for `@withpica/mcp-server@2.97.4`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.
296
+ Generated for `@withpica/mcp-server@2.97.5`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.