@withpica/mcp-server 2.97.1 → 2.97.3

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 (71) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/README.md +3 -3
  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.map +1 -1
  8. package/dist/resources/agent-guide.js +26 -11
  9. package/dist/resources/agent-guide.js.map +1 -1
  10. package/dist/resources/required-schemas.generated.d.ts +11 -2
  11. package/dist/resources/required-schemas.generated.d.ts.map +1 -1
  12. package/dist/resources/required-schemas.generated.js +20 -3
  13. package/dist/resources/required-schemas.generated.js.map +1 -1
  14. package/dist/resources/required-schemas.source.d.ts.map +1 -1
  15. package/dist/resources/required-schemas.source.js +20 -2
  16. package/dist/resources/required-schemas.source.js.map +1 -1
  17. package/dist/skills/skills.generated.js +1 -1
  18. package/dist/skills/skills.generated.js.map +1 -1
  19. package/dist/tools/api-error-body.d.ts +48 -0
  20. package/dist/tools/api-error-body.d.ts.map +1 -0
  21. package/dist/tools/api-error-body.js +88 -0
  22. package/dist/tools/api-error-body.js.map +1 -0
  23. package/dist/tools/app-tools.d.ts.map +1 -1
  24. package/dist/tools/app-tools.js +6 -12
  25. package/dist/tools/app-tools.js.map +1 -1
  26. package/dist/tools/approvals.d.ts.map +1 -1
  27. package/dist/tools/approvals.js +18 -1
  28. package/dist/tools/approvals.js.map +1 -1
  29. package/dist/tools/arg-aliases.d.ts.map +1 -1
  30. package/dist/tools/arg-aliases.js +11 -0
  31. package/dist/tools/arg-aliases.js.map +1 -1
  32. package/dist/tools/audio-files.d.ts +9 -0
  33. package/dist/tools/audio-files.d.ts.map +1 -1
  34. package/dist/tools/audio-files.js +109 -8
  35. package/dist/tools/audio-files.js.map +1 -1
  36. package/dist/tools/credits.d.ts +13 -0
  37. package/dist/tools/credits.d.ts.map +1 -1
  38. package/dist/tools/credits.js +193 -8
  39. package/dist/tools/credits.js.map +1 -1
  40. package/dist/tools/discovery.d.ts.map +1 -1
  41. package/dist/tools/discovery.js +52 -18
  42. package/dist/tools/discovery.js.map +1 -1
  43. package/dist/tools/duplicates.d.ts +7 -0
  44. package/dist/tools/duplicates.d.ts.map +1 -1
  45. package/dist/tools/duplicates.js +35 -5
  46. package/dist/tools/duplicates.js.map +1 -1
  47. package/dist/tools/exports.d.ts.map +1 -1
  48. package/dist/tools/exports.js +7 -11
  49. package/dist/tools/exports.js.map +1 -1
  50. package/dist/tools/import.d.ts.map +1 -1
  51. package/dist/tools/import.js +20 -0
  52. package/dist/tools/import.js.map +1 -1
  53. package/dist/tools/metadata.d.ts.map +1 -1
  54. package/dist/tools/metadata.js +8 -0
  55. package/dist/tools/metadata.js.map +1 -1
  56. package/dist/tools/recovery-hints.d.ts.map +1 -1
  57. package/dist/tools/recovery-hints.js +29 -0
  58. package/dist/tools/recovery-hints.js.map +1 -1
  59. package/dist/tools/settings.js +7 -7
  60. package/dist/tools/settings.js.map +1 -1
  61. package/dist/tools/share-links.d.ts.map +1 -1
  62. package/dist/tools/share-links.js +8 -1
  63. package/dist/tools/share-links.js.map +1 -1
  64. package/dist/tools/split-sheets.d.ts.map +1 -1
  65. package/dist/tools/split-sheets.js +7 -3
  66. package/dist/tools/split-sheets.js.map +1 -1
  67. package/dist/tools/works.d.ts.map +1 -1
  68. package/dist/tools/works.js +8 -1
  69. package/dist/tools/works.js.map +1 -1
  70. package/package.json +2 -2
  71. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,134 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.97.3] - 2026-09-17
15
+
16
+ ### Fixed
17
+
18
+ - **`pica_export_catalog_asset_report` no longer signs the declaration on the
19
+ user's behalf.** It sent `signer_name: "MCP Agent"` with the declaration
20
+ pre-accepted, a statement to lenders and insurers that no person had read.
21
+ The report it returns is now unsigned, and says so; only a person signed in
22
+ to PICA can attest it, from the export panel. The same release makes the
23
+ route build reports for agent callers at all: it used to 401 every one.
24
+ Requires mcp-sdk 3.18.0.
25
+
26
+ ### Removed
27
+
28
+ - **The `sections.audio` input** on `pica_export_catalog_asset_report` and
29
+ `pica_car_preview`. It was described as bundling audio master files or an
30
+ audio analysis section, and the report never read it.
31
+
32
+ ### Changed
33
+
34
+ - **`pica_car_preview` no longer asks agents for a verbal attestation.** Its
35
+ description called the `lending` format legally weighted and told agents to
36
+ take a spoken attestation before calling, while the tool beneath it signed
37
+ the declaration as "MCP Agent". The report is unsigned whatever the format,
38
+ and the card's summary now says so.
39
+
40
+ ## [2.97.2] - 2026-09-13
41
+
42
+ ### Fixed
43
+
44
+ - **`pica_credit_update` now actually returns `allocation.status`.** The
45
+ description promised it and the route sent it, but `@withpica/mcp-sdk`
46
+ < 3.17.0 unwrapped it away, so the response never carried it and the
47
+ "writer shares now total N%" hints could never fire. Requires mcp-sdk 3.17.0.
48
+
49
+ ### Added
50
+
51
+ - **`pica_credit_update` — edit ONE credit in place.** The verb between
52
+ `pica_credit_add` and `pica_credit_remove`: change a writer's share, an
53
+ instrumentalist's instrument, a role, the displayed name or notes, leaving
54
+ every other credit untouched and keeping the row's id and attestation state.
55
+ `pica_credits_update` remained replace-all, so one split change meant
56
+ re-listing every work and re-sending the whole array (ops issue bff0af25);
57
+ nothing edited a recording credit by its id — beyond the natural-key
58
+ upsert, a change meant remove-then-re-add (17f27449). Agents had already been calling this exact
59
+ name — it was the `TOOL_NOT_FOUND` miss in 167bb804, six times. Writer-split
60
+ closure is deliberately NOT enforced on a single edit; the response's
61
+ `allocation.status` (closed / open / incomplete) reports whether the set
62
+ still adds up instead. Backed by a new `PATCH
63
+ /admin/works/{id}/credits/{creditId}`, scoped to the work in the path.
64
+ - **`pica_recording_credits_update` batch mode accepts `instrument` per
65
+ credit** (`credits[].instrument`), applied on every target recording. Until
66
+ now crediting an instrumentalist across N recordings took N single calls.
67
+ - **`pica_import_streaming_link` returns `STREAMING_LINK_NOT_FOUND`** for a
68
+ link the provider cannot resolve — user input, not a PICA fault, and no
69
+ longer opens an ops issue. `STREAMING_IMPORT_FAILED` is now reserved for
70
+ genuine failures (timeouts, upstream errors). ⚠️ A client matching on the
71
+ old code for the not-found case will need the new one.
72
+ - **`pica_find_duplicates` accepts `entity_type: "audio_files"`** — the same
73
+ file uploaded twice, grouped on exact byte size + normalised filename
74
+ (`audio_files` carries no content hash). Each item reports `storage_bucket`;
75
+ a `withpica-*` bucket is storage PICA pays for. ⚠️ **Findable, not
76
+ mergeable:** `pica_merge_duplicates` refuses `audio_files` by design — the
77
+ outcome is a person deleting a redundant upload, and there is no merge
78
+ semantics for a file. The two entity lists are now deliberately different
79
+ sizes.
80
+ - **`pica_publishers_query` works at all.** `GET /admin/publishers` did not
81
+ exist, so every call since the tool shipped drew a bare 405 and surfaced as
82
+ `UNKNOWN_ERROR`. Searches by name (substring, on name and legal_name) or by
83
+ exact IPI.
84
+ - **`pica_approval_status` called with no `approval_id`** now explains what the
85
+ dashboard's "N awaiting approval" count is and who can act on it, instead of
86
+ answering "approval_id is required". There is deliberately no tool that lists
87
+ approvals — an agent grant cannot enumerate the approvals it is itself
88
+ waiting on.
89
+
90
+ ### Changed
91
+
92
+ - ⚠️ **Wire change: `pica_execute` now FORWARDS `pica_discover` and
93
+ `pica_tool_details`** instead of refusing them. A client matching on the old
94
+ literal `"meta-tools (pica_discover, pica_tool_details, pica_execute) cannot
95
+ be invoked via pica_execute"` will stop seeing that refusal. Only
96
+ `pica_execute` invoking ITSELF is still refused (that is the only case that
97
+ can recurse); its message changed accordingly. A connector that surfaces only
98
+ the wrapper teaches its agent to wrap everything, so refusing the two
99
+ read-only meta-tools blocked discovery for exactly the clients that need it.
100
+ - ⚠️ **`pica_audio_query`'s `query` filter now applies to ALL results.** It was
101
+ honoured only when `unassigned: true` was also set; a plain
102
+ `pica_audio_query {query: "…"}` returned the whole library in upload order
103
+ and truncated at the 100KB response cap. The parameter description said
104
+ "with unassigned:true" and no longer does.
105
+ - **`pica_audio_query` rows are a lean LIST shape.** The route flattens the
106
+ analysis satellite onto every row — `waveform_data` alone is ~4.9KB per file
107
+ on prod, three times the rest of the row — so the 100KB response guard was
108
+ trimming a page to about 8 files. List rows now carry identity, size,
109
+ duration, bpm/key/energy/mood, links, bucket and `probable_match`;
110
+ waveform, full analysis, `metadata` and the recording/work embeds are on
111
+ `pica_audio_inspect`. ⚠️ A client reading those fields off the list will
112
+ need the inspect call.
113
+ - **`pica_recording_splits_verify` records WHICH PERSON attested.** It now
114
+ resolves the signed-in user to their person record and stamps that as
115
+ `verified_by` (the column has always referenced `people`). ⚠️ Wire change:
116
+ an API-key / agent-grant call is refused with
117
+ `VERIFICATION_REQUIRES_HUMAN_SESSION` (message text changed), and a
118
+ signed-in user with no person record in the org gets
119
+ `ATTESTING_PERSON_NOT_FOUND`. Before this the endpoint had never succeeded
120
+ for anyone.
121
+ - **`pica_credits_update` accepts a signed sheet within ±0.01.** Its own
122
+ pre-flight used `!== 100`, so 33.34/33.34/33.33 (=100.01) and
123
+ 33.33×3 (=99.99) were refused before the API was called; the message text
124
+ changed.
125
+ - **`pica_share_links_create` returns `share_url`** beside `token`, so the
126
+ agent can hand the user a working link rather than sending them to the
127
+ dashboard to find it. `pica_share_links_query` returns it too. `token` is
128
+ unchanged.
129
+ - **`pica_recording_credits_update` no longer reports `PERSON_NOT_FOUND` when
130
+ the RECORDING is the missing one.** It dispatches on the route's own error
131
+ code rather than matching "not found" anywhere in the message, and a foreign
132
+ or non-existent `person_id` is now validated org-scoped before the write
133
+ (it previously reached the FK unchecked, which also accepted another
134
+ organisation's person).
135
+ - **`pica_tool_details` offers near-miss suggestions** (`did_you_mean`) for an
136
+ unknown tool name, in `structuredContent` as well as text — the same shape
137
+ `pica_execute`'s unknown-tool branch has returned since 2.96.
138
+ - **`pica_catalog_health_fix` accepts `actionIds` / `action_ids`** as aliases
139
+ for `accept` on the `pica_execute` path, and `INVALID_PLAN_TOKEN` now names
140
+ the remedy rather than only the reason.
141
+
14
142
  ## [2.97.1] - 2026-09-08
15
143
 
16
144
  ### Added
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
- 335 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
+ 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.
69
69
 
70
70
  **works** — manage your musical works
71
71
 
@@ -119,7 +119,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
119
119
 
120
120
  `pica_notes_query`, `pica_notes_inspect`, `pica_notes_create`, `pica_notes_delete`
121
121
 
122
- **duplicates** — detect and merge duplicate records
122
+ **duplicates** — detect duplicate records and merge them (audio_files can be found but not merged — a duplicate file is deleted)
123
123
 
124
124
  `pica_find_duplicates`, `pica_merge_duplicates`
125
125
 
@@ -289,4 +289,4 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
289
289
 
290
290
  ---
291
291
 
292
- Generated for `@withpica/mcp-server@2.97.0`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.
292
+ Generated for `@withpica/mcp-server@2.97.2`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.