@withpica/mcp-sdk 3.23.1 → 3.25.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.
package/CHANGELOG.md CHANGED
@@ -11,6 +11,81 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [3.25.0] - 2026-10-14
15
+
16
+ > **Publish order:** `asideFromReport` is imported as a value by
17
+ > `@withpica/mcp-utils`'s billing gate. Publish this package (3.25.0) BEFORE
18
+ > the mcp-utils release that uses it, and raise mcp-utils' range to `^3.25.0`
19
+ > in that release; an mcp-utils on an older SDK fails at load.
20
+
21
+ ### Added
22
+
23
+ - `asideFromReport(fn)`: run requests that still name the current client
24
+ catalogue, but leave them off the call's report (a check PICA makes for
25
+ itself, such as the billing gate reading whether the catalogue is paid for).
26
+ - `pica.handovers`: `create` and `send` for catalogues an organisation prepares for a client
27
+ (`POST /admin/handovers`, `POST /admin/handovers/{id}/send`), with `HandoverCreatedRecord` and
28
+ `HandoverRecord`.
29
+ - `runInCatalogue(id, fn)` → `{ value, report }` and `CatalogueCallReport` (ADR-333 D7): what the app
30
+ did with one call's requests in a client catalogue — how many it answered for that catalogue, and
31
+ each request it refused with `RELATIONSHIP_REFUSED` (path and `reason_code`, from the one
32
+ refusal shape: `error.code`, `error.details.reason_code`). The MCP server uses it so a tool that fails its parts soft
33
+ cannot answer "success" with every part refused. `withCatalogue` is unchanged for callers.
34
+ - `withCatalogue(id, fn)`, `currentCatalogue()`, `CATALOGUE_HEADER`, `CATALOGUE_RESOLVED_HEADER` and
35
+ `CatalogueNotHonouredError` (ADR-333 D7). Every request made inside `withCatalogue` sends
36
+ `x-pica-catalogue: <id>`. A successful answer without a matching `x-pica-catalogue-resolved`
37
+ echo throws `CatalogueNotHonouredError` instead of reporting success, so a route that ignores
38
+ the header can never pass for having acted for the client. The catalogue is held per call
39
+ (AsyncLocalStorage), so concurrent calls on one shared client never mix catalogues.
40
+ - `relationships` (ADR-333): `list`, `get`, `invite`, `answer`, `revoke`, `stepDown`, `events`,
41
+ `activity` and `acceptInvite` over `/admin/relationships/**`, with typed records
42
+ (`RelationshipRecord`, `RelationshipListPage`, `RelationshipEventRecord`,
43
+ `RelationshipStepRecord`, `ClaimableInviteRecord`). Every step sends `expected_version`.
44
+ - `portfolio` (ADR-333): `list` and `briefing` over `/admin/portfolio`, with
45
+ `PortfolioClientRecord` and `PortfolioSection` (a section is checked, out of scope, unavailable
46
+ or failed, never a bare 0).
47
+ - `duplicates.markDifferent(entityType, ids)` and `duplicates.unmarkDifferent(entityType, ids)`
48
+ for recordings and releases (`POST` / `DELETE /admin/catalog/duplicates/exclusions`).
49
+
50
+ ## [3.24.0] - 2026-10-09
51
+
52
+ ### Added
53
+
54
+ - `works.getThemes`, `works.setThemes`, `works.proposeThemes`, `works.reviewThemes` and
55
+ `directory.untaggedThemes` for a song's directory topics.
56
+
57
+ ### Changed — needs a MINOR bump at release
58
+
59
+ - ⚠️ **`PaginatedResult.total` is now `number | null`** (type change). An
60
+ explicit `pagination.total: null` from the server means "unknown" — a
61
+ platform-wide registry the route will not count, or a filter applied
62
+ after the read — and is passed through as `null` instead of being turned
63
+ into the page length. Code that does arithmetic on `total` must handle
64
+ `null`.
65
+ - `requestPaginated`'s fallback `has_more` (when the server sends none) is
66
+ now `offset + page < total`; it ignored the offset, so every last page of
67
+ a multi-page result reported more (row-cap T3).
68
+
69
+ ### Added
70
+
71
+ - **`syncFit` resource**: `query({ work_id?, screen_project_id?,
72
+ song_facts?, limit?, offset? })` (GET `/admin/sync-fit`), with the
73
+ `SyncFitPage`, `SyncFitRow`, `SyncFitProduction`, `SyncFitSongFacts` and
74
+ `SyncFitMeasured` types.
75
+ - `works.getThemes`, `works.setThemes`, `works.proposeThemes`, `works.reviewThemes` and
76
+ `directory.untaggedThemes` for a song's directory topics.
77
+ - Page methods that return `{ data, total, hasMore }` — the real total —
78
+ alongside the existing `list()` calls, whose return types are unchanged:
79
+ `agreements.listPage`, `bookings.listPage`, `licensing.listEnquiriesPage`,
80
+ `partyClaims.listPage`, `releases.listPage`, `sessions.listPage`,
81
+ `collaborators.listInvitesPage` / `listIncomingPage`,
82
+ `publishers.listPage` and `labels.listPage` (total `null`: platform-wide
83
+ rows are not counted; `labels.listPage` also takes `ids` for a lookup by
84
+ id). `custody.list` takes `offset`.
85
+ - `works.getAgreements(workId)` — the agreements linked to one work.
86
+ - `enrichment.previewBulkRejectProposals(input)` — what a bulk reject
87
+ would reject, resolved by the same server-side resolver, writing nothing.
88
+
14
89
  ## [3.23.1] - 2026-10-07
15
90
 
16
91
  ### Fixed