@withpica/mcp-server 2.97.5 → 2.99.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 (180) hide show
  1. package/CHANGELOG.md +223 -0
  2. package/README.intro.md +1 -1
  3. package/README.md +8 -4
  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 +37 -2
  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 +18 -21
  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 +3 -1
  16. package/dist/resources/agent-guide.js.map +1 -1
  17. package/dist/resources/index.d.ts.map +1 -1
  18. package/dist/resources/index.js +0 -3
  19. package/dist/resources/index.js.map +1 -1
  20. package/dist/resources/required-schemas.generated.d.ts +7 -5
  21. package/dist/resources/required-schemas.generated.d.ts.map +1 -1
  22. package/dist/resources/required-schemas.generated.js +15 -2
  23. package/dist/resources/required-schemas.generated.js.map +1 -1
  24. package/dist/resources/required-schemas.source.d.ts.map +1 -1
  25. package/dist/resources/required-schemas.source.js +8 -1
  26. package/dist/resources/required-schemas.source.js.map +1 -1
  27. package/dist/server-instructions.d.ts +2 -2
  28. package/dist/server-instructions.d.ts.map +1 -1
  29. package/dist/server-instructions.js +1 -1
  30. package/dist/skills/skills.generated.js +11 -11
  31. package/dist/skills/skills.generated.js.map +1 -1
  32. package/dist/tools/agreement-types.d.ts.map +1 -1
  33. package/dist/tools/agreement-types.js +3 -1
  34. package/dist/tools/agreement-types.js.map +1 -1
  35. package/dist/tools/agreements.d.ts.map +1 -1
  36. package/dist/tools/agreements.js +15 -6
  37. package/dist/tools/agreements.js.map +1 -1
  38. package/dist/tools/approvals.d.ts.map +1 -1
  39. package/dist/tools/approvals.js +14 -1
  40. package/dist/tools/approvals.js.map +1 -1
  41. package/dist/tools/arg-aliases.d.ts.map +1 -1
  42. package/dist/tools/arg-aliases.js +12 -0
  43. package/dist/tools/arg-aliases.js.map +1 -1
  44. package/dist/tools/audio-files.d.ts +39 -0
  45. package/dist/tools/audio-files.d.ts.map +1 -1
  46. package/dist/tools/audio-files.js +253 -12
  47. package/dist/tools/audio-files.js.map +1 -1
  48. package/dist/tools/catalog-enums.d.ts +20 -0
  49. package/dist/tools/catalog-enums.d.ts.map +1 -0
  50. package/dist/tools/catalog-enums.js +28 -0
  51. package/dist/tools/catalog-enums.js.map +1 -0
  52. package/dist/tools/collaborators.d.ts.map +1 -1
  53. package/dist/tools/collaborators.js +27 -3
  54. package/dist/tools/collaborators.js.map +1 -1
  55. package/dist/tools/credits.d.ts +4 -1
  56. package/dist/tools/credits.d.ts.map +1 -1
  57. package/dist/tools/credits.js +70 -97
  58. package/dist/tools/credits.js.map +1 -1
  59. package/dist/tools/custody-hints.js +2 -2
  60. package/dist/tools/custody-hints.js.map +1 -1
  61. package/dist/tools/custody.d.ts.map +1 -1
  62. package/dist/tools/custody.js +4 -1
  63. package/dist/tools/custody.js.map +1 -1
  64. package/dist/tools/deprecations.d.ts +67 -8
  65. package/dist/tools/deprecations.d.ts.map +1 -1
  66. package/dist/tools/deprecations.js +98 -82
  67. package/dist/tools/deprecations.js.map +1 -1
  68. package/dist/tools/directory.js +2 -2
  69. package/dist/tools/directory.js.map +1 -1
  70. package/dist/tools/discovery.d.ts +28 -2
  71. package/dist/tools/discovery.d.ts.map +1 -1
  72. package/dist/tools/discovery.js +72 -28
  73. package/dist/tools/discovery.js.map +1 -1
  74. package/dist/tools/documents.d.ts +2 -2
  75. package/dist/tools/documents.d.ts.map +1 -1
  76. package/dist/tools/documents.js +2 -88
  77. package/dist/tools/documents.js.map +1 -1
  78. package/dist/tools/duplicates.d.ts +2 -0
  79. package/dist/tools/duplicates.d.ts.map +1 -1
  80. package/dist/tools/duplicates.js +173 -18
  81. package/dist/tools/duplicates.js.map +1 -1
  82. package/dist/tools/enrichment.d.ts.map +1 -1
  83. package/dist/tools/enrichment.js +36 -2
  84. package/dist/tools/enrichment.js.map +1 -1
  85. package/dist/tools/import.d.ts.map +1 -1
  86. package/dist/tools/import.js +19 -0
  87. package/dist/tools/import.js.map +1 -1
  88. package/dist/tools/index.d.ts.map +1 -1
  89. package/dist/tools/index.js +44 -4
  90. package/dist/tools/index.js.map +1 -1
  91. package/dist/tools/integrity.d.ts.map +1 -1
  92. package/dist/tools/integrity.js +65 -8
  93. package/dist/tools/integrity.js.map +1 -1
  94. package/dist/tools/licensing.d.ts.map +1 -1
  95. package/dist/tools/licensing.js +14 -9
  96. package/dist/tools/licensing.js.map +1 -1
  97. package/dist/tools/metadata.d.ts.map +1 -1
  98. package/dist/tools/metadata.js +74 -114
  99. package/dist/tools/metadata.js.map +1 -1
  100. package/dist/tools/notes.d.ts +3 -4
  101. package/dist/tools/notes.d.ts.map +1 -1
  102. package/dist/tools/notes.js +31 -44
  103. package/dist/tools/notes.js.map +1 -1
  104. package/dist/tools/people.d.ts +5 -1
  105. package/dist/tools/people.d.ts.map +1 -1
  106. package/dist/tools/people.js +8 -1
  107. package/dist/tools/people.js.map +1 -1
  108. package/dist/tools/projects.d.ts +3 -4
  109. package/dist/tools/projects.d.ts.map +1 -1
  110. package/dist/tools/projects.js +3 -27
  111. package/dist/tools/projects.js.map +1 -1
  112. package/dist/tools/public-filter.d.ts.map +1 -1
  113. package/dist/tools/public-filter.js +3 -6
  114. package/dist/tools/public-filter.js.map +1 -1
  115. package/dist/tools/purchases.d.ts +2 -3
  116. package/dist/tools/purchases.d.ts.map +1 -1
  117. package/dist/tools/purchases.js.map +1 -1
  118. package/dist/tools/recording-attribution-hints.js +1 -1
  119. package/dist/tools/recording-attribution-hints.js.map +1 -1
  120. package/dist/tools/recording-custody.d.ts +3 -1
  121. package/dist/tools/recording-custody.d.ts.map +1 -1
  122. package/dist/tools/recording-custody.js +8 -4
  123. package/dist/tools/recording-custody.js.map +1 -1
  124. package/dist/tools/recovery-hints.d.ts +0 -6
  125. package/dist/tools/recovery-hints.d.ts.map +1 -1
  126. package/dist/tools/recovery-hints.js +97 -38
  127. package/dist/tools/recovery-hints.js.map +1 -1
  128. package/dist/tools/register.d.ts.map +1 -1
  129. package/dist/tools/register.js +2 -1
  130. package/dist/tools/register.js.map +1 -1
  131. package/dist/tools/releases.d.ts +2 -4
  132. package/dist/tools/releases.d.ts.map +1 -1
  133. package/dist/tools/releases.js +12 -213
  134. package/dist/tools/releases.js.map +1 -1
  135. package/dist/tools/rights.d.ts +54 -0
  136. package/dist/tools/rights.d.ts.map +1 -0
  137. package/dist/tools/rights.js +495 -0
  138. package/dist/tools/rights.js.map +1 -0
  139. package/dist/tools/royalties.d.ts +29 -6
  140. package/dist/tools/royalties.d.ts.map +1 -1
  141. package/dist/tools/royalties.js +101 -119
  142. package/dist/tools/royalties.js.map +1 -1
  143. package/dist/tools/section-validation.d.ts +14 -0
  144. package/dist/tools/section-validation.d.ts.map +1 -0
  145. package/dist/tools/section-validation.js +68 -0
  146. package/dist/tools/section-validation.js.map +1 -0
  147. package/dist/tools/selections.d.ts +5 -2
  148. package/dist/tools/selections.d.ts.map +1 -1
  149. package/dist/tools/selections.js +10 -4
  150. package/dist/tools/selections.js.map +1 -1
  151. package/dist/tools/share-links.d.ts.map +1 -1
  152. package/dist/tools/share-links.js +32 -6
  153. package/dist/tools/share-links.js.map +1 -1
  154. package/dist/tools/share-send.d.ts.map +1 -1
  155. package/dist/tools/share-send.js +32 -7
  156. package/dist/tools/share-send.js.map +1 -1
  157. package/dist/tools/signed-split-sheet-preview.d.ts +43 -0
  158. package/dist/tools/signed-split-sheet-preview.d.ts.map +1 -0
  159. package/dist/tools/signed-split-sheet-preview.js +67 -0
  160. package/dist/tools/signed-split-sheet-preview.js.map +1 -0
  161. package/dist/tools/split-sheets.d.ts.map +1 -1
  162. package/dist/tools/split-sheets.js +3 -2
  163. package/dist/tools/split-sheets.js.map +1 -1
  164. package/dist/tools/statements.js +1 -1
  165. package/dist/tools/statements.js.map +1 -1
  166. package/dist/tools/version-guard.d.ts +16 -4
  167. package/dist/tools/version-guard.d.ts.map +1 -1
  168. package/dist/tools/version-guard.js +22 -8
  169. package/dist/tools/version-guard.js.map +1 -1
  170. package/dist/tools/works.d.ts +9 -1
  171. package/dist/tools/works.d.ts.map +1 -1
  172. package/dist/tools/works.js +217 -74
  173. package/dist/tools/works.js.map +1 -1
  174. package/dist/tools/write-receipt.d.ts +68 -0
  175. package/dist/tools/write-receipt.d.ts.map +1 -0
  176. package/dist/tools/write-receipt.js +64 -0
  177. package/dist/tools/write-receipt.js.map +1 -0
  178. package/package.json +4 -4
  179. package/scripts/build-required-schemas.ts +7 -1
  180. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,229 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.99.0] - 2026-09-30
15
+
16
+ ### Added
17
+
18
+ - **Platform-presence waivers on `pica_integrity_waive`.** New `gap_code`
19
+ values `PLATFORM_SPOTIFY`, `PLATFORM_YOUTUBE`, `PLATFORM_APPLE_MUSIC` with a
20
+ required `kind` (`not_applicable` | `restricted`) and reason mark a work that
21
+ is deliberately not on that platform (e.g. no YouTube by design, a licence
22
+ rules out Content ID). The platform then drops out of the work's
23
+ completeness instead of counting as missing; the answer carries the
24
+ re-scored `completeness`. Owner/admin only. Identifiers and registrations
25
+ (ISWC, ISRC, IPI, society registrations, writers, splits) can never be
26
+ waived, and the description says so.
27
+
28
+ - `original_work_id` on `pica_works_create` / `pica_works_update`: links a
29
+ modified version (a remix that added writers) to the work it modifies. Same
30
+ catalogue only; `null` clears it.
31
+
32
+ ### Changed
33
+
34
+ - **A remix is a recording of the same song unless it adds writers (ADR-324).**
35
+ `pica_works_create` on a remix-titled work now suggests a recording under the
36
+ original (`pica_recordings_create`, `version_type: "remix"`, remixer credited
37
+ on the recording) with the modified-version path beside it
38
+ (`if_new_writers`), instead of a separate derivative work.
39
+ `pica_find_duplicates` (works) no longer groups a remix with its original as
40
+ a duplicate: each remix is paired with its original as
41
+ `match_kind: "remix_recording"` (move its recordings) or
42
+ `"remix_modified_version"` (link it), with a `remix` block naming the
43
+ recordings, any added writers and the action — never "fold the copies".
44
+ The `catalog-modelling` skill carries the rule.
45
+
46
+ - `pica_rights_inspect` no longer says amounts are "not computed yet"; it points
47
+ to `pica_rights_statements` for them.
48
+
49
+ ### Removed
50
+
51
+ - **The last 11 deprecated tool aliases** (removal target 2.99.0). Each had
52
+ been a hidden, callable alias of the tool named beside it — ten since the
53
+ MCP tool-surface consolidation, `pica_royalties_summary` since 2026-09-25
54
+ (ADR-321 Phase 0). Calling an old name now fails with `TOOL_NOT_FOUND`;
55
+ the answer (from `pica_execute`, `pica_tool_details` and the hosted
56
+ connector alike) says the tool was retired in 2.99.0, names its
57
+ replacement and any argument change, and lists the replacement first in
58
+ `did_you_mean` when the caller can call it. Use the replacement instead:
59
+ - `pica_releases_list` → `pica_releases_query`
60
+ - `pica_releases_get` → `pica_releases_inspect`
61
+ - `pica_releases_bulk_attach_tracks` → `pica_releases_attach_track` with
62
+ `items[]` (the old `tracks` field is now `items`)
63
+ - `pica_releases_attach_track_by_identifier` → `pica_releases_attach_track`
64
+ with `identifier_type` + `value`
65
+ - `pica_projects_list` → `pica_projects_query`
66
+ - `pica_notes_list` → `pica_notes_query`
67
+ - `pica_documents_list` → `pica_documents_query`
68
+ - `pica_documents_read` → `pica_documents_inspect`
69
+ - `pica_statements_list` → `pica_statements_query`
70
+ - `pica_royalties_summary` → `pica_royalties_blockers` (`work_id` and
71
+ `limit` carry over; `gap_type` and `priority` have no equivalent)
72
+ - `pica_recording_credits_bulk_update` → `pica_recording_credits_update`
73
+ with a `credits` array (same arguments)
74
+
75
+ Production use over the 60 days before removal was 4 calls in total.
76
+
77
+ - **`verified` on `pica_works_query`.** It filtered on a work-level
78
+ `is_verified` flag that PICA has never stored, so it matched no works
79
+ whichever way it was set. Passing it now returns `NO_WORK_VERIFIED_FLAG`
80
+ (the same code `pica_works_verify` returns) and names the filters that do
81
+ exist: `health_filter: 'low_completeness'`, `completeness_score_lt`, and
82
+ `pica_works_inspect` for one work.
83
+ - **`verified` / `unverified` counts in the `catalog://stats` resource, and
84
+ `is_verified` in `works://list`.** Both read the same missing flag, so every
85
+ work counted as unverified.
86
+ - **`musicbrainz_recording_id` on `pica_works_update` / `pica_works_create` /
87
+ `pica_works_bulk_update`.** An update used to pass it to the work's
88
+ recording, but only when the work had exactly one recording, so the same
89
+ call silently stopped working once a second recording was added (a create,
90
+ with no recording yet, never stored it). It is now refused with
91
+ `PHANTOM_FIELD` naming the tool to use instead:
92
+ `pica_recordings_update {id, musicbrainz_recording_id}`. Work reads still
93
+ show the recording's MusicBrainz id, and the completeness benchmark still
94
+ reads it.
95
+
96
+ ### Fixed
97
+
98
+ - `pica_integrity_waive`'s `gap_code` enum now lists `WORK_SPLITS_ABSENT` and
99
+ `WORK_SPLITS_INVALID`, which the app has accepted since 2026-08-16.
100
+ - **`pica_rights_statements`** (read:finances) — ADR-321 Phase 3, COMPUTED NOT
101
+ PAID: direct income and what each party would receive under the song's
102
+ locked split in force when it was earned, PICA's proposed fee as its own line
103
+ (shown, never charged), every hold with why / who clears it / since when, and
104
+ the four measures. With `work_id`, that song's imported society statements
105
+ checked against the split: each co-writer's EXPECTED amount and the
106
+ registration check for writer societies; line-up completeness for PPL /
107
+ SoundExchange.
108
+ - **`pica_rights_record_income`** (write:finances) — record a figure the user
109
+ gave (or a quoted licensing enquiry's fee), labelled "entered by your agent".
110
+ No money moves.
111
+
112
+ ## [2.98.0] - 2026-09-29
113
+
114
+ ### Deprecated
115
+
116
+ - The 11 deprecated aliases scheduled for removal in 2.98.0 (among them
117
+ `pica_releases_list`, `pica_documents_list`, `pica_notes_list` and
118
+ `pica_royalties_summary`) stay one more version. They are now due for
119
+ removal in **2.99.0**. Each still answers and names its replacement.
120
+
121
+ ### Added
122
+
123
+ - **`disambiguation` on `pica_works_create` / `pica_works_update`** — a short
124
+ note (≤ 200 characters, e.g. "theme", "2019 song") that tells apart two
125
+ DIFFERENT songs sharing a title and primary artist. It is part of the
126
+ duplicate check, so set it only when the songs genuinely differ; a
127
+ `WORK_ALREADY_EXISTS` refusal for a song you know is not the existing one is
128
+ the cue. The refusal message and its recovery hint now name both ways
129
+ through: merge when it is the same song, `disambiguation` when it is not.
130
+ `null` or `""` clears it. Also accepted by `pica_works_bulk_update`, which
131
+ shares the works write schema.
132
+ - **`score` work type** — music composed for film, TV, games or other
133
+ picture. Offered wherever `work_type` is (`pica_works_create`,
134
+ `pica_works_update`, `pica_works_bulk_update`, `pica_works_query`,
135
+ `pica_register_set`).
136
+
137
+ - **Programmable rights — `pica_rights_propose`, `pica_rights_status`,
138
+ `pica_rights_inspect`** (ADR-321 §9, Phase 2). Agents propose, humans
139
+ confirm. `pica_rights_propose` proposes a song rule, a recording's master
140
+ rule, or a share rule that divides one party's share (a publishing deal, a
141
+ manager's commission with an end date), and emails every party it affects to
142
+ confirm. It never activates or confirms anything and never moves money.
143
+ Tier `destructive`, `approvalMode: "human"`, scope `write:catalog`: a
144
+ delegated agent's call becomes a pending approval for the org owner (poll
145
+ `pica_approval_status`), replayed through the same propose service the route
146
+ uses. Shares are basis points (100 = 1%; a share rule's parties sum to
147
+ 10,000). A refusal writes nothing and returns its reasons. A master rule
148
+ needs `ownership` — the user's answer to "who owns the master of this
149
+ recording?" (`only_me` / `me_and_others` / `someone_else`) — and locks only
150
+ after every owner signs the recording's master ownership sheet; an agent can
151
+ never lock "only me" in one step.
152
+ `pica_rights_status` (`read:catalog`) reads one rule: status, who has
153
+ confirmed this exact version, and email delivery. `pica_rights_inspect`
154
+ (`read:catalog`) reads a song's rules on both sides, version history,
155
+ disputes, and the holds — what money would be held, why, and who clears it.
156
+ No amounts yet; holds are PICA's rules, not a society's.
157
+ - **`pica_royalties_blockers` — "why isn't this song being paid?"** (ADR-321
158
+ Phase 0). With `work_id`: what in that song's record is likely holding up its
159
+ society income — missing ISWC, writers without an IPI or society membership,
160
+ shares not totalling 100%, disputed credits, no confirmed registration,
161
+ recordings without an ISRC — each with its fix. Without it: the catalogue
162
+ summary plus the songs that are not clear, filterable by blocker and paged.
163
+ Same judgement as the `/inspect` song panel and `/inspect/money`. Scope
164
+ `read:catalog` (no amounts). The description and result message never call a
165
+ song clear unless every area was checked; unchecked areas are named.
166
+ - **`pica_audio_bulk_update` — metadata for up to 200 audio files in one
167
+ call** (ops 5c53049a). Each item sets any of `file_type`, `stem_label`,
168
+ `version_label`, `title` for one file id; the result is one lean row per
169
+ item (`updated`, or `failed` with a reason) and never the file records. A bad
170
+ item does not stop the others. `dry_run: true` previews. Only the caller's
171
+ organisation's files are touched.
172
+ - **`pica_share_links_create` takes `selection_id`** — share every work a saved
173
+ selection matches as one playlist link (a snapshot; the link does not follow
174
+ later changes to the selection). Refused when the selection matches no works
175
+ or more than 200 (ops 42be8f96).
176
+ - **`pica_share_links_create` takes `allow_view_lyrics`**, and its description
177
+ now tells agents that lyrics, credits (`allow_view_collaborators`) and splits
178
+ (`allow_view_financials`) are hidden unless turned on.
179
+ - **`pica_audio_query` takes `work_ids`** (up to 100) — the audio for several
180
+ works in one paged call, including files attached through a recording of
181
+ those works (ops 96672119).
182
+
183
+ ### Changed
184
+
185
+ - **Playlist share links now record `include_all_files: true` by default**
186
+ (unless `included_file_ids` names a subset), matching what the playlist page
187
+ already shows — every version of each song, for the recipient to choose.
188
+ - **`pica_audio_update` and `pica_audio_assign` return the lean list row**
189
+ (the shape a `pica_audio_query` row has) instead of the full stored record
190
+ with its waveform and fingerprint data — about 8k tokens a file (ops
191
+ 5c53049a).
192
+ - **`pica_works_update` answers with a compact receipt** (ops 61ce1dcc): the
193
+ work id, `changed` (each field sent, with the value now stored),
194
+ `unconfirmed` for fields the stored record did not echo, and an `integrity`
195
+ block listing every open gap by label and code but hinting only the gaps
196
+ this write opened. It no longer returns the full work (lyrics included) or
197
+ repeats every open gap as "next steps" on each call. Pass `verbose: true` for
198
+ the previous answer.
199
+ - **`pica_credits_update` answers in the same shape**: `work_id`,
200
+ `changed.credits` (person, role, share as written) and `saved` (the save
201
+ count and any skipped rows). `verbose: true` returns the raw save result.
202
+
203
+ ### Deprecated
204
+
205
+ - **`pica_royalties_summary` retired in favour of `pica_royalties_blockers`**
206
+ (founder decision, 2026-09-25). It ran its own gap judgement — PRS, PPL and
207
+ MCPS hard-coded, a missing row read as "not registered with PRS", only the
208
+ first 1,000 works. It stays callable as a silent alias until 2.98.0: calls
209
+ now return `pica_royalties_blockers`' answer (`work_id` and `limit` carry
210
+ over; `gap_type` and `priority` have no equivalent). No longer listed in
211
+ discovery. Unmatched payments remain `pica_royalties_unmatched`. Traffic: 2
212
+ calls from 2 organisations in the 90 days before retirement.
213
+
214
+ ### Fixed
215
+
216
+ - The "how much has this song earned?" prompt told agents to call
217
+ `pica_royalties_summary` for cumulative earnings; that tool never returned
218
+ earnings. It now names `pica_royalties_get`.
219
+ - **`pica_works_query` with `health_filter` honours `limit` and `offset`** and
220
+ stops reporting the page length as `total` (ops 314325eb).
221
+ `low_completeness` reports the number of works below the threshold by their
222
+ stored score (max 200 per page). `needs_attention` now returns only works with reconciliation problems
223
+ (it was returning reconciled works too), checks at most 50 works per call,
224
+ pages by works checked (`next_offset`), and reports `total` only when one
225
+ call from offset 0 checked every candidate (otherwise `null`).
226
+ - **An unknown `sections` name is refused instead of answering `{}`** (ops
227
+ dfa810f8). `pica_works_inspect { sections: ["work"] }` returned a
228
+ successful empty result; every tool with a fixed list of sections now
229
+ answers `VALIDATION_ERROR` naming the unknown entries and the valid ones.
230
+ - **`pica_people_create` / `pica_people_update` accept `ipi`** as the same
231
+ field as `cae_ipi_number` — the name the other tools use. Sending both with
232
+ different numbers is refused.
233
+ - **`work_type` is one list everywhere** — song, instrumental, library, demo,
234
+ sample, matching the database. `pica_works_update` refused `instrumental`
235
+ while create and bulk update accepted it.
236
+
14
237
  ## [2.97.5] - 2026-09-18
15
238
 
16
239
  ### Added
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
- 337 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
+ 343 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
 
@@ -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, see what money would be held and why, and what income would pay each party (computed, never paid)
239
+
240
+ `pica_rights_inspect`, `pica_rights_status`, `pica_rights_propose`, `pica_rights_statements`, `pica_rights_record_income`
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.5`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.
296
+ Generated for `@withpica/mcp-server@2.99.0`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.