@withpica/mcp-server 2.99.0 → 2.101.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 (114) hide show
  1. package/CHANGELOG.md +203 -0
  2. package/README.md +6 -6
  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/prompts/creator-question-atlas.d.ts.map +1 -1
  8. package/dist/prompts/creator-question-atlas.js +11 -0
  9. package/dist/prompts/creator-question-atlas.js.map +1 -1
  10. package/dist/prompts/index.js +2 -2
  11. package/dist/resources/agent-guide.d.ts.map +1 -1
  12. package/dist/resources/agent-guide.js +38 -7
  13. package/dist/resources/agent-guide.js.map +1 -1
  14. package/dist/resources/index.d.ts +15 -2
  15. package/dist/resources/index.d.ts.map +1 -1
  16. package/dist/resources/index.js +37 -27
  17. package/dist/resources/index.js.map +1 -1
  18. package/dist/resources/required-schemas.generated.d.ts +16 -10
  19. package/dist/resources/required-schemas.generated.d.ts.map +1 -1
  20. package/dist/resources/required-schemas.generated.js +29 -15
  21. package/dist/resources/required-schemas.generated.js.map +1 -1
  22. package/dist/resources/required-schemas.source.d.ts.map +1 -1
  23. package/dist/resources/required-schemas.source.js +15 -11
  24. package/dist/resources/required-schemas.source.js.map +1 -1
  25. package/dist/server-instructions.d.ts +2 -2
  26. package/dist/server-instructions.d.ts.map +1 -1
  27. package/dist/server-instructions.js +2 -2
  28. package/dist/server-instructions.js.map +1 -1
  29. package/dist/server.d.ts.map +1 -1
  30. package/dist/server.js +9 -0
  31. package/dist/server.js.map +1 -1
  32. package/dist/skills/index.d.ts +5 -3
  33. package/dist/skills/index.d.ts.map +1 -1
  34. package/dist/skills/index.js +11 -9
  35. package/dist/skills/index.js.map +1 -1
  36. package/dist/skills/sep2640.d.ts +71 -0
  37. package/dist/skills/sep2640.d.ts.map +1 -0
  38. package/dist/skills/sep2640.js +198 -0
  39. package/dist/skills/sep2640.js.map +1 -0
  40. package/dist/skills/skills.generated.js +2 -2
  41. package/dist/skills/skills.generated.js.map +1 -1
  42. package/dist/tools/api-error-body.d.ts +16 -4
  43. package/dist/tools/api-error-body.d.ts.map +1 -1
  44. package/dist/tools/api-error-body.js +40 -1
  45. package/dist/tools/api-error-body.js.map +1 -1
  46. package/dist/tools/approvals.d.ts.map +1 -1
  47. package/dist/tools/approvals.js +12 -1
  48. package/dist/tools/approvals.js.map +1 -1
  49. package/dist/tools/assets.d.ts.map +1 -1
  50. package/dist/tools/assets.js +15 -3
  51. package/dist/tools/assets.js.map +1 -1
  52. package/dist/tools/credits.d.ts.map +1 -1
  53. package/dist/tools/credits.js +205 -45
  54. package/dist/tools/credits.js.map +1 -1
  55. package/dist/tools/dashboard.js +1 -1
  56. package/dist/tools/dashboard.js.map +1 -1
  57. package/dist/tools/directory.d.ts.map +1 -1
  58. package/dist/tools/directory.js +21 -10
  59. package/dist/tools/directory.js.map +1 -1
  60. package/dist/tools/discovery.d.ts.map +1 -1
  61. package/dist/tools/discovery.js +14 -3
  62. package/dist/tools/discovery.js.map +1 -1
  63. package/dist/tools/documents.d.ts.map +1 -1
  64. package/dist/tools/documents.js +6 -4
  65. package/dist/tools/documents.js.map +1 -1
  66. package/dist/tools/duplicates.d.ts +13 -0
  67. package/dist/tools/duplicates.d.ts.map +1 -1
  68. package/dist/tools/duplicates.js +178 -1
  69. package/dist/tools/duplicates.js.map +1 -1
  70. package/dist/tools/import-documents.d.ts +1 -0
  71. package/dist/tools/import-documents.d.ts.map +1 -1
  72. package/dist/tools/import-documents.js +67 -0
  73. package/dist/tools/import-documents.js.map +1 -1
  74. package/dist/tools/import.d.ts.map +1 -1
  75. package/dist/tools/import.js +14 -0
  76. package/dist/tools/import.js.map +1 -1
  77. package/dist/tools/index.d.ts +2 -1
  78. package/dist/tools/index.d.ts.map +1 -1
  79. package/dist/tools/index.js +39 -1
  80. package/dist/tools/index.js.map +1 -1
  81. package/dist/tools/memory.d.ts.map +1 -1
  82. package/dist/tools/memory.js +24 -6
  83. package/dist/tools/memory.js.map +1 -1
  84. package/dist/tools/metadata.d.ts.map +1 -1
  85. package/dist/tools/metadata.js +42 -0
  86. package/dist/tools/metadata.js.map +1 -1
  87. package/dist/tools/people.d.ts +54 -22
  88. package/dist/tools/people.d.ts.map +1 -1
  89. package/dist/tools/people.js +236 -27
  90. package/dist/tools/people.js.map +1 -1
  91. package/dist/tools/profile-claims.d.ts +31 -0
  92. package/dist/tools/profile-claims.d.ts.map +1 -0
  93. package/dist/tools/profile-claims.js +188 -0
  94. package/dist/tools/profile-claims.js.map +1 -0
  95. package/dist/tools/public-filter.js +1 -1
  96. package/dist/tools/public-filter.js.map +1 -1
  97. package/dist/tools/recovery-hints.d.ts.map +1 -1
  98. package/dist/tools/recovery-hints.js +140 -7
  99. package/dist/tools/recovery-hints.js.map +1 -1
  100. package/dist/tools/rights.d.ts.map +1 -1
  101. package/dist/tools/rights.js +11 -1
  102. package/dist/tools/rights.js.map +1 -1
  103. package/dist/tools/shows.d.ts.map +1 -1
  104. package/dist/tools/shows.js +25 -2
  105. package/dist/tools/shows.js.map +1 -1
  106. package/dist/tools/skills.d.ts +3 -4
  107. package/dist/tools/skills.d.ts.map +1 -1
  108. package/dist/tools/skills.js.map +1 -1
  109. package/dist/tools/split-sheets.d.ts +8 -0
  110. package/dist/tools/split-sheets.d.ts.map +1 -1
  111. package/dist/tools/split-sheets.js +191 -8
  112. package/dist/tools/split-sheets.js.map +1 -1
  113. package/package.json +6 -4
  114. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,197 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [2.101.0] - 2026-10-06
15
+
16
+ ### Added
17
+
18
+ - **Skills over the MCP skills extension (SEP-2640, `io.modelcontextprotocol/skills`).**
19
+ The server declares the extension at `initialize` and answers `skills/list`
20
+ and `skills/get`. Each entry carries the skill's frontmatter and a `sha256`
21
+ digest and byte size for its `SKILL.md`, so a conforming host can verify
22
+ what it reads through `resources/read`. `skills/get` on an unknown or
23
+ malformed URI returns `-32602`. Signed-out (lobby) sessions list no skills.
24
+ `skill://withpica/index.json`, `pica_skill_list` and `pica_skill_get` are
25
+ unchanged for hosts without the extension.
26
+ - **`pica_rights_propose` takes `effective_from` and `corrects_start_date` on
27
+ song and master rules.** A first lock may start on any real date up to
28
+ today (default: the earliest date PICA holds for the song or recording);
29
+ a change to a locked split applies from today. `corrects_start_date: true`
30
+ corrects only a wrongly dated first lock, with the same shares and an
31
+ earlier date.
32
+
33
+ ### Changed
34
+
35
+ - **Served `SKILL.md` frontmatter follows the Agent Skills specification.**
36
+ Top-level keys are now `name`, `description`, `compatibility` and
37
+ `metadata`. PICA's own fields moved under `metadata` as strings:
38
+ `pica-audience`, `pica-output`, `pica-triggers` and `pica-tools-required`
39
+ (lists joined by newline), `pica-definition-of-done`, `pica-when-not-to-use`
40
+ and `pica-origin`. `definition_of_done` and `when_not_to_use` were
41
+ previously dropped from the resource text; they now reach readers. The
42
+ skill body and the tool route's output are unchanged.
43
+ - **A person whose ownership share ended can be given a new one.**
44
+ `pica_recording_splits_create` `dry_run` no longer predicts
45
+ `RECORDING_SPLIT_EXISTS` when the person's share in that place has ended
46
+ (any `end_date`, today included) or when the new row is written already
47
+ ended — only a second ACTIVE share is refused, matching the database once
48
+ migration 20261004140000 applies. `pica_dashboard_attention`'s
49
+ `recordings_without_splits` now counts a recording whose shares have all
50
+ ended as having no current owner.
51
+
52
+ - **`pica_directory_settings` reports listing per song.** It returns how many
53
+ songs are listed, ready but not listed, hidden and not ready, instead of a
54
+ catalogue-wide "discoverable / private". `opted_in: true` lists every ready
55
+ song; `opted_in: false` records the decline and leaves listed songs up
56
+ until each is hidden from its own page.
57
+ - **`pica_credits_send_for_attestation` names writers who are on PICA in
58
+ another catalogue.** They are listed apart from "No email on file", with a
59
+ pointer to `pica_collaborators_invite`.
60
+
61
+ ## [2.100.0] - 2026-10-04
62
+
63
+ ### Added
64
+
65
+ - **`pica_recording_splits_update` and `pica_recording_splits_end` — fix a
66
+ wrong ownership share.** Before, a recording split could only be created
67
+ through the API, so a wrong row (a holder-less "unknown" share, the wrong
68
+ percentage or role) blocked adding the right owner with
69
+ `RECORDING_SPLIT_TOTAL_EXCEEDED` and had to be fixed by hand in /inspect.
70
+ `_update` changes `person_id` (relink to a person in the organisation, not
71
+ deleted), percentage, role, `split_type`, territory, dates or notes; the 100%
72
+ total is checked after the change with the row's old value left out.
73
+ `_end` sets `end_date` (default today) so the share stops counting, keeping the
74
+ row as history. Both report `verification_cleared: true` when the change
75
+ cleared the holder's confirmation. Typed refusals: `SPLIT_NOT_FOUND`,
76
+ `PERSON_NOT_FOUND`, `PERSON_DELETED`, `SPLIT_ALREADY_ENDED`,
77
+ `INVALID_SPLIT_PERCENTAGE`, `INVALID_SPLIT_ROLE`, `INVALID_SPLIT_TYPE`,
78
+ `INVALID_SPLIT_TERRITORY`, `INVALID_SPLIT_DATES`, plus the existing split total / exists / locked codes.
79
+ - **`pica_merge_duplicates` takes a list — one approval for a whole cleanup.**
80
+ Send several confirmed duplicate groups as `merges` (up to 50 items of
81
+ `{entity_type, winner_id, loser_ids}`) instead of one call per group. A
82
+ delegated agent (OAuth connector / `pica_grant_*`) then raises ONE human
83
+ approval and the owner gets ONE email listing every pair, approved or
84
+ denied as a whole — before this, a 15-merge cleanup sent 15 emails, each
85
+ expiring on its own. Every pair is checked before the email goes out; one
86
+ bad pair refuses the list. Once approved, `pica_approval_status` returns a
87
+ per-pair outcome (`merged` / `skipped` because already merged or deleted /
88
+ `failed` with the reason); one failed pair does not stop the others, and the
89
+ approval reads `failed` if any pair failed. Callers that execute directly
90
+ get the same per-pair result. The single-merge fields work exactly as
91
+ before; send one shape or the other, never both. The tool's input schema no
92
+ longer lists a top-level `required`, because the two shapes cannot share
93
+ one.
94
+ - **`pica_people_split_identity` — give one person their own identity when
95
+ two different people share one** (ops 482424b7). The opposite of a merge:
96
+ when a wrong match (e.g. someone else's ISNI) joined two people to one
97
+ global identity, custody transfers to it can't tell whose it is and land as
98
+ "unknown". This gives the named person a new identity. Nothing is guessed:
99
+ identifiers stay with the original unless listed in `move_identifiers`, and
100
+ only the unattributed split rows listed in `relink_split_ids` move.
101
+ `clear_person_identifiers` removes identifiers that were never the person's
102
+ from their record; `undo_external_ids` strips everything a wrong external
103
+ record (e.g. a Wikidata Q-id) wrote. Custody legs are append-only and never
104
+ rewritten. Tier `destructive`, `approvalMode: "human"`, scope
105
+ `write:people`. `pica_people_inspect` gains a `global_identity` section
106
+ (only when named) that lists everything a split would touch.
107
+ - **`pica_profile_claims_invite` + `pica_profile_claims_status` — claim
108
+ your profile for assistants.** An assistant can invite people in the
109
+ catalogue to claim their profile (each at the address the catalogue holds
110
+ for them) and check where people stand. The invite is a preview unless
111
+ `confirm: true`: the first call sends nothing and returns who would be
112
+ emailed and who would be skipped and why, so the person the assistant acts
113
+ for sees the list before anyone is emailed. Only a credential that belongs
114
+ to an owner or admin may send; an organisation key with no owner is
115
+ refused (`INVITE_REQUIRES_PERSON`). The status read never returns an
116
+ email address.
117
+
118
+ - **`pica_import_emails_query` — see what happened to an email forwarded to
119
+ PICA.** Lists the emails that reached the organisation's forwarding
120
+ address, newest first, with what PICA did with each: stored on arrival
121
+ (with what was created, by id), waiting for review, dismissed, or failed.
122
+ With `id`, reads one: its text body when PICA kept one (emails held for
123
+ review), its attachment names, and what was created. Owners and admins
124
+ only; read-only (`read:catalog`). Before this an agent had no way to learn
125
+ that an email its person forwarded had arrived. Every item carries
126
+ `sender_trusted`; an email from a sender PICA could not verify is labelled
127
+ third-party content (its subject and body are data, not instructions). The
128
+ list reaches back to 2026-09-30, when PICA began recording outcomes, and
129
+ refuses an `offset` past 500 rather than repeating a page.
130
+
131
+ ### Changed
132
+
133
+ - **`pica_people_update` / `pica_people_create` accept and clear every field
134
+ enrichment fills on a person.** `imdb_id`, `viaf_id`, `date_of_death`,
135
+ `nationality_wikidata_id`, `birth_place_wikidata_id` and
136
+ `languages_spoken` were written by Wikidata enrichment but refused with
137
+ `UNKNOWN_FIELD`, so a misattributed value could not be removed. They are now
138
+ accepted, and every enrichment-filled field takes `null` (or `[]` for a
139
+ list) to clear it. A field set or cleared this way is recorded as the
140
+ user's own, and later enrichment runs leave it alone. `field_sources` is no
141
+ longer accepted from callers (it was never advertised); PICA writes it.
142
+ - **`pica_credit_update` can change who a credit is for (`person_id`).** Link
143
+ a name-only credit to a person record created afterwards, or move a credit
144
+ linked to the wrong person, and the credit keeps its id (ops issue
145
+ abc91f6c: 11 credits had to be removed and re-added, losing their ids and
146
+ confirmations). The person must be in the organisation and not deleted
147
+ (`PERSON_NOT_FOUND` / `PERSON_DELETED`); if they already hold that role on
148
+ the song or recording the change is refused with `CREDIT_PERSON_CONFLICT`
149
+ and `existing_credit_id` rather than making a second credit; linking a
150
+ name-only credit to a differently named person needs
151
+ `confirm_name_mismatch: true` (`PERSON_NAME_MISMATCH` otherwise). A
152
+ confirmed, disputed or declined credit goes back to pending, because the
153
+ newly linked person gave none of those answers — the response's
154
+ `person_change.attestation_reset` and `previous_attestation_status` say so. Server-side in `PATCH /api/admin/works/[id]/credits/[creditId]`.
155
+ - **`pica_documents_query` lists PICA's own split sheets first, marked as the
156
+ record.** Each entry now carries `kind` (`split_sheet` or `upload`); a
157
+ split sheet PICA generated has `split_sheet_role: "record"` and
158
+ `read_with: "pica_split_sheet_get"`, and an uploaded or forwarded split
159
+ sheet has `split_sheet_role: "supporting"` (plus `master: true` when it is
160
+ about the master only). An archived PICA sheet is `"superseded"`, not the
161
+ record. Paging is one sequence: PICA's sheets, then uploads, with `total`
162
+ covering both. With `parsed_status` `pending` or `completed`, only uploads
163
+ are listed. `pica_documents_link` / `_delete` take an entry with
164
+ `kind: "upload"`. Server-side change in `/api/admin/documents/catalog`;
165
+ the tool description says how to read each kind.
166
+
167
+ ### Fixed
168
+
169
+ - `pica_recording_credits_update` no longer advertises or forwards
170
+ `attestation_status`. A caller could create a producer or performer
171
+ credit already marked "attested" without the credited person ever
172
+ confirming it. The field is gone from the input schema, and a call that
173
+ sends any attestation field (`attestation_status`, `attested_at`,
174
+ `attested_by`, `attestation_source_type`, `attestation_source_id`), in
175
+ the single form or on any `credits[]` entry, is refused before anything
176
+ is written with `ATTESTATION_NOT_SETTABLE`. The refusal points at the way
177
+ a recording credit actually gets confirmed: `pica_collaborators_invite`
178
+ with the `recording_id`, or `pica_credits_send_for_attestation` on the
179
+ recording's song. The server refuses the same fields on
180
+ `POST /api/admin/recordings/[id]/credits` and the bulk route.
181
+ - `pica_credit_add` on a work now treats `share_pct: null` like an
182
+ omitted share: stored as unknown. The server refused an explicit `null`
183
+ with a 400, so a client that sends `null` for an empty optional field
184
+ (ChatGPT's connector does) could not add a credit without a share.
185
+ Server-side fix in `/api/admin/works/[id]/credits/atomic-add`; it reaches
186
+ every client on deploy. The input schema now declares `share_pct` as
187
+ number-or-null, matching `pica_credit_update`.
188
+ - When the server refuses `pica_credit_add` with a machine code
189
+ (`VALIDATION_ERROR`, `PERSON_ORG_MISMATCH`, `RECORDING_TARGET_REQUIRED`,
190
+ `INSUFFICIENT_SCOPE`, …), the tool now returns that code and message,
191
+ plus the fields the server put beside them (`remedy`, `person_ids`,
192
+ `next_tool`). It no longer reports those refusals as `CREDIT_ADD_FAILED`,
193
+ which read as a transport failure and invited a blind retry. A server
194
+ error (5xx), or a refusal with no code, is still `CREDIT_ADD_FAILED`.
195
+ - `pica_credits_update` no longer advertises `attestation_status`. The
196
+ server stopped accepting it on 2026-09-29 (a caller could mark a credit
197
+ "attested" with no one ever confirming it), but the tool kept offering
198
+ it, so agents sent it and the whole save failed with `UNKNOWN_FIELD`. The
199
+ field is gone from the input schema, the description and the
200
+ `work-credits-required` resource. A call that still sends it is refused
201
+ before anything is written with `ATTESTATION_NOT_SETTABLE`, naming the
202
+ entry and pointing at `pica_credits_send_for_attestation` — the way a
203
+ credit actually gets confirmed.
204
+
14
205
  ## [2.99.0] - 2026-09-30
15
206
 
16
207
  ### Added
@@ -95,6 +286,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
95
286
 
96
287
  ### Fixed
97
288
 
289
+ - `pica_sync_placements_cite` no longer answers 404 on every call: the SDK
290
+ posted to `/sync-placements/{id}/sources`, a route that never existed; it
291
+ now posts to `/cite` (needs the matching `@withpica/mcp-sdk` fix). The
292
+ sync-placement item routes also required `read:sync_placements` /
293
+ `write:sync_placements`, scopes no key can hold, so only `admin` keys got
294
+ through; they now require `read:agreements` / `write:agreements`, the
295
+ scopes these tools declare.
296
+ - `pica_physical_assets_inspect`'s `market` section no longer fails on every
297
+ call (the SDK sent GET to a POST-only route). Because that section asks an
298
+ AI model for a price estimate each time it runs, it is no longer part of
299
+ "omit sections for everything": it runs only when `sections` names
300
+ `market`, and needs a key with `write:catalog` (or `admin`).
98
301
  - `pica_integrity_waive`'s `gap_code` enum now lists `WORK_SPLITS_ABSENT` and
99
302
  `WORK_SPLITS_INVALID`, which the app has accepted since 2026-08-16.
100
303
  - **`pica_rights_statements`** (read:finances) — ADR-321 Phase 3, COMPUTED NOT
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
- 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.
68
+ 349 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
 
@@ -73,7 +73,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
73
73
 
74
74
  **people** — manage people in your catalog
75
75
 
76
- `pica_people_query`, `pica_people_inspect`, `pica_people_create`, `pica_people_update`, `pica_people_delete`, `pica_people_bulk_delete`, `pica_people_bulk_update_roles`, `pica_people_bulk_add_tags`, `pica_group_add_member`, `pica_group_remove_member`, `pica_group_list_members`, `pica_person_list_groups`, `pica_artist_projects`
76
+ `pica_people_query`, `pica_people_inspect`, `pica_people_create`, `pica_people_update`, `pica_people_delete`, `pica_people_bulk_delete`, `pica_people_split_identity`, `pica_people_bulk_update_roles`, `pica_people_bulk_add_tags`, `pica_group_add_member`, `pica_group_remove_member`, `pica_group_list_members`, `pica_person_list_groups`, `pica_artist_projects`, `pica_profile_claims_invite`, `pica_profile_claims_status`
77
77
 
78
78
  **groups** — manage group → member relationships on people
79
79
 
@@ -123,9 +123,9 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
123
123
 
124
124
  `pica_find_duplicates`, `pica_merge_duplicates`
125
125
 
126
- **import** — import catalog data from files and streaming services
126
+ **import** — import catalog data from files and streaming services, and see what happened to emails forwarded to PICA
127
127
 
128
- `pica_import_fields`, `pica_import_template`, `pica_import_analyze`, `pica_import_validate`, `pica_import_execute`, `pica_import_streaming_link`, `pica_import_documents_query`, `pica_import_documents_inspect`, `pica_import_youtube_link`, `pica_ingest_statement`
128
+ `pica_import_fields`, `pica_import_template`, `pica_import_analyze`, `pica_import_validate`, `pica_import_execute`, `pica_import_streaming_link`, `pica_import_documents_query`, `pica_import_documents_inspect`, `pica_import_emails_query`, `pica_import_youtube_link`, `pica_ingest_statement`
129
129
 
130
130
  **export** — export catalog data in various formats
131
131
 
@@ -229,7 +229,7 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
229
229
 
230
230
  **recording splits** — manage recording (master) splits between contributors
231
231
 
232
- `pica_recording_splits_list`, `pica_recording_splits_create`, `pica_recording_splits_verify`, `pica_split_sheet_generate`, `pica_recording_credits_update`
232
+ `pica_recording_splits_list`, `pica_recording_splits_create`, `pica_recording_splits_update`, `pica_recording_splits_end`, `pica_recording_splits_verify`, `pica_split_sheet_generate`, `pica_recording_credits_update`
233
233
 
234
234
  **royalties statements** — view royalties and ingested statements
235
235
 
@@ -293,4 +293,4 @@ Read tools are annotated read-only and are safe to call freely. Write tools repo
293
293
 
294
294
  ---
295
295
 
296
- Generated for `@withpica/mcp-server@2.99.0`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.
296
+ Generated for `@withpica/mcp-server@2.101.0`. © 2024-2026 Withpica Ltd. All rights reserved. MIT licensed.