@withpica/mcp-server 2.46.0 → 2.48.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 (94) hide show
  1. package/CHANGELOG.md +81 -2
  2. package/dist/apps/generated/shared-bundle.d.ts +1 -1
  3. package/dist/apps/generated/shared-bundle.d.ts.map +1 -1
  4. package/dist/apps/generated/shared-bundle.js +1 -1
  5. package/dist/apps/generated/shared-bundle.js.map +1 -1
  6. package/dist/resources/required-schemas.generated.d.ts +65 -0
  7. package/dist/resources/required-schemas.generated.d.ts.map +1 -1
  8. package/dist/resources/required-schemas.generated.js +131 -0
  9. package/dist/resources/required-schemas.generated.js.map +1 -1
  10. package/dist/resources/required-schemas.source.d.ts.map +1 -1
  11. package/dist/resources/required-schemas.source.js +76 -0
  12. package/dist/resources/required-schemas.source.js.map +1 -1
  13. package/dist/tools/agreement-types.js +1 -1
  14. package/dist/tools/agreement-types.js.map +1 -1
  15. package/dist/tools/agreements.js +1 -1
  16. package/dist/tools/agreements.js.map +1 -1
  17. package/dist/tools/app-tools.js +2 -2
  18. package/dist/tools/app-tools.js.map +1 -1
  19. package/dist/tools/assets.d.ts.map +1 -1
  20. package/dist/tools/assets.js +40 -14
  21. package/dist/tools/assets.js.map +1 -1
  22. package/dist/tools/audio-files.js +3 -3
  23. package/dist/tools/audio-files.js.map +1 -1
  24. package/dist/tools/bulk.js +2 -2
  25. package/dist/tools/bulk.js.map +1 -1
  26. package/dist/tools/collaborators.js +6 -6
  27. package/dist/tools/collaborators.js.map +1 -1
  28. package/dist/tools/credits.js +3 -3
  29. package/dist/tools/credits.js.map +1 -1
  30. package/dist/tools/discovery.d.ts.map +1 -1
  31. package/dist/tools/discovery.js +26 -0
  32. package/dist/tools/discovery.js.map +1 -1
  33. package/dist/tools/enrichment.js +13 -13
  34. package/dist/tools/enrichment.js.map +1 -1
  35. package/dist/tools/feedback.js +1 -1
  36. package/dist/tools/feedback.js.map +1 -1
  37. package/dist/tools/forbidden-keywords.d.ts +62 -0
  38. package/dist/tools/forbidden-keywords.d.ts.map +1 -0
  39. package/dist/tools/forbidden-keywords.js +99 -0
  40. package/dist/tools/forbidden-keywords.js.map +1 -0
  41. package/dist/tools/groups.d.ts +29 -0
  42. package/dist/tools/groups.d.ts.map +1 -0
  43. package/dist/tools/groups.js +186 -0
  44. package/dist/tools/groups.js.map +1 -0
  45. package/dist/tools/index.d.ts +1 -1
  46. package/dist/tools/index.d.ts.map +1 -1
  47. package/dist/tools/index.js +13 -1
  48. package/dist/tools/index.js.map +1 -1
  49. package/dist/tools/metadata.d.ts.map +1 -1
  50. package/dist/tools/metadata.js +62 -0
  51. package/dist/tools/metadata.js.map +1 -1
  52. package/dist/tools/notifications.js +3 -3
  53. package/dist/tools/notifications.js.map +1 -1
  54. package/dist/tools/people.d.ts.map +1 -1
  55. package/dist/tools/people.js +5 -0
  56. package/dist/tools/people.js.map +1 -1
  57. package/dist/tools/projects.d.ts.map +1 -1
  58. package/dist/tools/projects.js +6 -7
  59. package/dist/tools/projects.js.map +1 -1
  60. package/dist/tools/public-filter.d.ts.map +1 -1
  61. package/dist/tools/public-filter.js +8 -36
  62. package/dist/tools/public-filter.js.map +1 -1
  63. package/dist/tools/recordings.d.ts.map +1 -1
  64. package/dist/tools/recordings.js +75 -27
  65. package/dist/tools/recordings.js.map +1 -1
  66. package/dist/tools/recovery-hints.d.ts +26 -0
  67. package/dist/tools/recovery-hints.d.ts.map +1 -1
  68. package/dist/tools/recovery-hints.js +615 -0
  69. package/dist/tools/recovery-hints.js.map +1 -1
  70. package/dist/tools/release-rich.d.ts.map +1 -1
  71. package/dist/tools/release-rich.js +10 -6
  72. package/dist/tools/release-rich.js.map +1 -1
  73. package/dist/tools/settings.d.ts.map +1 -1
  74. package/dist/tools/settings.js +14 -15
  75. package/dist/tools/settings.js.map +1 -1
  76. package/dist/tools/signup.js +1 -1
  77. package/dist/tools/signup.js.map +1 -1
  78. package/dist/tools/split-sheets.js +1 -1
  79. package/dist/tools/split-sheets.js.map +1 -1
  80. package/dist/tools/storage-config.js +2 -2
  81. package/dist/tools/storage-config.js.map +1 -1
  82. package/dist/tools/subscription.d.ts.map +1 -1
  83. package/dist/tools/subscription.js +4 -6
  84. package/dist/tools/subscription.js.map +1 -1
  85. package/dist/tools/sync-placements.d.ts +31 -0
  86. package/dist/tools/sync-placements.d.ts.map +1 -0
  87. package/dist/tools/sync-placements.js +431 -0
  88. package/dist/tools/sync-placements.js.map +1 -0
  89. package/dist/tools/works.d.ts.map +1 -1
  90. package/dist/tools/works.js +50 -22
  91. package/dist/tools/works.js.map +1 -1
  92. package/package.json +3 -3
  93. package/server.json +2 -2
  94. package/.claude/settings.local.json +0 -5
package/CHANGELOG.md CHANGED
@@ -11,6 +11,87 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.48.0] - 2026-05-03
15
+
16
+ ### Changed
17
+
18
+ - **Tool description scrub (PR #188).** Stripped internal-only ADR pointers and
19
+ email-vendor names from user-visible tool descriptions across batch A
20
+ (agreement-types, agreements, bulk, collaborators, credits), batch B
21
+ (app-tools, feedback, projects, enrichment, recordings), and batch C.
22
+ Replaced ADR-N references with the concept the ADR documented (e.g.
23
+ "ADR-198 round-trip" → "verify the credit persisted") and removed
24
+ Postmark from collaborator bulk-invite description and elicitation
25
+ warning text. Tool descriptions surface to third-party agents and shouldn't
26
+ reveal internal infrastructure choices.
27
+
28
+ - **recovery_hints expansion (PR #188).** Annotation fix + additional
29
+ recovery hints for tools that fan out across sections.
30
+
31
+ - **`pica_releases_show` best-effort catch markers (ADR-224 convention).** Marked
32
+ the two best-effort catches in `releases-rich.show()` (tracks + cover-art
33
+ fallbacks) with `/* best-effort */` to match the ADR-224 Phase 4 lint
34
+ convention. No behaviour change — the catches were already documented inline;
35
+ this just makes the marker greppable so future scope extensions to `_show`
36
+ tools recognise the intent. Surface audit confirmed all 9 `_inspect` tools
37
+ addressed, 22 `_list` tools clean, no swallow patterns elsewhere.
38
+
39
+ ## [2.47.0] - 2026-05-02
40
+
41
+ ### Added
42
+
43
+ - **ADR-222 W3 — sync placements MCP tool surface (6 tools).**
44
+ - `pica_sync_placements_query` — list placements with filters (work_id, status, verification_status, brand, production_company, person_id, recording_id, source_license_enquiry_id, min_fee, currency).
45
+ - `pica_sync_placements_inspect` — fetch one placement with linked recordings, sources, agreement, and parties.
46
+ - `pica_sync_placements_create` — atomic create (placement + draft sync_license agreement + ≥1 agreement_party + recordings + evidence sources in a single Postgres transaction). Empty `contacts[]` rejects with structured `MISSING_CONTACT` (`next_tool: "pica_people_query"`). New people auto-created inline via `person_name` instead of `person_id`.
47
+ - `pica_sync_placements_update` — patch placement fields. Operator-only when `verification_status='operator_verified'|'disputed'` or `confidentiality_level` changes (throws structured `OPERATOR_REQUIRED`); illegal status transitions throw `INVALID_TRANSITION`.
48
+ - `pica_sync_placements_delete` — operator-only hard delete (two-step confirmation token). Customer agents receive structured `OPERATOR_REQUIRED` with `next_tool: "pica_sync_placements_update"` pointing at the soft-delete path (`status: 'terminated'`).
49
+ - `pica_sync_placements_cite` — attach an evidence source; auto-recomputes `verification_status` (any non-attestation kind → `evidence_attached`).
50
+
51
+ All 4 mutating tools wrapped with `withBillingGate`. Stdio path delegates to `pica.syncPlacements.*` (new `@withpica/mcp-sdk` resource). HTTP transport mirrors via the shared `ToolRegistry`. Paired with W4's REST routes at `/api/admin/sync-placements`.
52
+
53
+ - **`pica://schemas/sync-placement-required` workflow schema resource (ADR-214).** Required + recommended fields for `pica_sync_placements_create` plus 4 companion call entries (inspect / update / cite / delete) and a worked example. Embeds the three `sync_placements` CHECK enums (`status` 5 values, `verification_status` 5 values, `confidentiality_level` 3 values) via the build-time generator + `schema-mirror.json` extension. Lives on both stdio (via the schema generator) and HTTP transport (`UI_RESOURCE_DEFS` in `app/api/mcp/route.ts`).
54
+
55
+ - **`WorkflowTag` union expanded 15 → 16 values** (added `sync-placement-required`). All 6 sync-placement tools tagged with this workflow; `lint-required-schemas` enforces forward + inverse coverage.
56
+
57
+ - **`schema-mirror.json` extended with `sync_placements` table** for status / verification_status / confidentiality_level CHECK enum embedding.
58
+
59
+ - **6 cost-model entries in `lib/billing/tool-cost-model.ts`** (READ for query/inspect, WRITE for create/update/delete/cite). Unblocks ADR-180 lint cost-model coverage check; ADR-215 shadow-metering will record `billable_events` rows on these tools from first call.
60
+
61
+ - **`sync_placements` discovery category** in `mcp-server/src/tools/discovery.ts` — layered-discovery agents (ChatGPT, Claude.ai connectors with `MCP_LAYERED_DISCOVERY=1`) can find the 6 tools via `pica_discover`.
62
+
63
+ - **MCP scope mapping** for the 6 tools under existing `read:agreements` (query + inspect) and `write:agreements` (create + update + delete + cite). Bundled under the agreements scope rather than minting a new public scope for one feature — every placement is backed by a sync_license agreement.
64
+
65
+ - **Four group-membership tools (ADR-223 Phase 5).** Customers can now
66
+ manage group → member relationships on people directly via AI:
67
+ - `pica_group_add_member` — add a person to a group person row.
68
+ Server-side trigger enforces parent.is_group=true and same-org
69
+ constraint; tool surfaces friendly errors at the route layer.
70
+ Defaults: `role='member'`, `receive_notifications=true` (opt-out
71
+ per membership). Wrapped in `withBillingGate`.
72
+ - `pica_group_remove_member` — set `left_at` on the active row.
73
+ Rows are never deleted; member history is preserved.
74
+ - `pica_group_list_members` — active members by default;
75
+ `include_inactive=true` for history.
76
+ - `pica_person_list_groups` — inverse: every group a person is or
77
+ was a member of.
78
+ Role enum: `member`, `founder`, `lead`, `touring_member`,
79
+ `session`, `guest`, `producer_in_residence`. Free-text `role_label`
80
+ for variants outside the enum. Tools route through `mcp-sdk`
81
+ `groups` resource → `/admin/groups/*` and
82
+ `/admin/people/{id}/groups` HTTP routes.
83
+
84
+ ### Changed
85
+
86
+ - **`@withpica/mcp-sdk` peer bumped to `^1.20.0`.** Required for the
87
+ new `groups` and `syncPlacements` resources; older SDK versions lack
88
+ `PicaClient.groups` and `PicaClient.syncPlacements`.
89
+
90
+ ### Notes
91
+
92
+ - The 4 mutating sync-placement tools (`_create`, `_update`, `_delete`, `_cite`) need ADR-198 holdout contract specs in the sibling `Good-FM/pica-holdout-tests` repo. Coordinator follow-up — Path A from W3 Stage 1 audit §11.E.
93
+ - The brief's references to a `mcp-server/src/__tests__/contract-baseline.json` file and a `lint:contract-baseline` script are out of date; both were removed in ADR-180 Phase 3 (the lint chain is now fully strict by default — `scripts/lint-mcp-tools.ts` runs as part of `prepublishOnly`). W3 reinterpreted Stage 4 as ADR-180 metadata + cost-model + taxonomy entries (all added) plus ADR-198 holdout contracts (sibling repo, follow-up).
94
+
14
95
  ## [2.46.0] - 2026-05-02
15
96
 
16
97
  ### Changed
@@ -23,8 +104,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
23
104
  edit-symmetry gap surfaced during the SEV-1 sprint: previously the
24
105
  user could AI-rename their org but not their own name.
25
106
 
26
- ### Changed
27
-
28
107
  - **`pica_update_organisation_profile` now accepts `name`.** Customers can
29
108
  rename their organisation via AI (e.g., fix signup typos, replace the
30
109
  default "My Organization" placeholder). Updates `organisations.name`