@withpica/mcp-server 2.7.0 → 2.8.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 (251) hide show
  1. package/dist/__mocks__/mppx-mcp-sdk-server.d.ts +6 -0
  2. package/dist/__mocks__/mppx-mcp-sdk-server.d.ts.map +1 -0
  3. package/dist/__mocks__/mppx-mcp-sdk-server.js +6 -0
  4. package/dist/__mocks__/mppx-mcp-sdk-server.js.map +1 -0
  5. package/dist/__mocks__/mppx-server.d.ts +12 -0
  6. package/dist/__mocks__/mppx-server.d.ts.map +1 -0
  7. package/dist/__mocks__/mppx-server.js +12 -0
  8. package/dist/__mocks__/mppx-server.js.map +1 -0
  9. package/dist/apps/download.d.ts +2 -0
  10. package/dist/apps/download.d.ts.map +1 -0
  11. package/dist/apps/download.js +125 -0
  12. package/dist/apps/download.js.map +1 -0
  13. package/dist/apps/generated/shared-bundle.d.ts +5 -0
  14. package/dist/apps/generated/shared-bundle.d.ts.map +1 -0
  15. package/dist/apps/generated/shared-bundle.js +7 -0
  16. package/dist/apps/generated/shared-bundle.js.map +1 -0
  17. package/dist/apps/shared.d.ts +15 -0
  18. package/dist/apps/shared.d.ts.map +1 -0
  19. package/dist/apps/shared.js +480 -0
  20. package/dist/apps/shared.js.map +1 -0
  21. package/dist/apps/upload.d.ts +2 -0
  22. package/dist/apps/upload.d.ts.map +1 -0
  23. package/dist/apps/upload.js +280 -0
  24. package/dist/apps/upload.js.map +1 -0
  25. package/dist/config.d.ts +4 -25
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +36 -12
  28. package/dist/config.js.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +3 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/prompts/index.d.ts +64 -64
  33. package/dist/prompts/index.js +24 -24
  34. package/dist/prompts/index.js.map +1 -1
  35. package/dist/resources/index.d.ts +55 -53
  36. package/dist/resources/index.d.ts.map +1 -1
  37. package/dist/resources/index.js +133 -54
  38. package/dist/resources/index.js.map +1 -1
  39. package/dist/resources/llms-primer.d.ts +2 -0
  40. package/dist/resources/llms-primer.d.ts.map +1 -0
  41. package/dist/resources/llms-primer.js +68 -0
  42. package/dist/resources/llms-primer.js.map +1 -0
  43. package/dist/server-instructions.d.ts +9 -0
  44. package/dist/server-instructions.d.ts.map +1 -0
  45. package/dist/server-instructions.js +34 -0
  46. package/dist/server-instructions.js.map +1 -0
  47. package/dist/server.d.ts +49 -32
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/server.js +103 -14
  50. package/dist/server.js.map +1 -1
  51. package/dist/tools/agreement-types.d.ts +27 -0
  52. package/dist/tools/agreement-types.d.ts.map +1 -0
  53. package/dist/tools/agreement-types.js +387 -0
  54. package/dist/tools/agreement-types.js.map +1 -0
  55. package/dist/tools/agreements.d.ts +20 -0
  56. package/dist/tools/agreements.d.ts.map +1 -0
  57. package/dist/tools/agreements.js +363 -0
  58. package/dist/tools/agreements.js.map +1 -0
  59. package/dist/tools/analytics.d.ts +20 -0
  60. package/dist/tools/analytics.d.ts.map +1 -0
  61. package/dist/tools/analytics.js +124 -0
  62. package/dist/tools/analytics.js.map +1 -0
  63. package/dist/tools/app-tools.d.ts +21 -0
  64. package/dist/tools/app-tools.d.ts.map +1 -0
  65. package/dist/tools/app-tools.js +248 -0
  66. package/dist/tools/app-tools.js.map +1 -0
  67. package/dist/tools/assets.d.ts +25 -0
  68. package/dist/tools/assets.d.ts.map +1 -0
  69. package/dist/tools/assets.js +631 -0
  70. package/dist/tools/assets.js.map +1 -0
  71. package/dist/tools/audio-files.d.ts +20 -0
  72. package/dist/tools/audio-files.d.ts.map +1 -0
  73. package/dist/tools/audio-files.js +384 -0
  74. package/dist/tools/audio-files.js.map +1 -0
  75. package/dist/tools/auth.d.ts +22 -0
  76. package/dist/tools/auth.d.ts.map +1 -0
  77. package/dist/tools/auth.js +210 -0
  78. package/dist/tools/auth.js.map +1 -0
  79. package/dist/tools/bulk.d.ts +16 -0
  80. package/dist/tools/bulk.d.ts.map +1 -0
  81. package/dist/tools/bulk.js +85 -0
  82. package/dist/tools/bulk.js.map +1 -0
  83. package/dist/tools/calendar.d.ts +15 -0
  84. package/dist/tools/calendar.d.ts.map +1 -0
  85. package/dist/tools/calendar.js +67 -0
  86. package/dist/tools/calendar.js.map +1 -0
  87. package/dist/tools/collaborators.d.ts +21 -0
  88. package/dist/tools/collaborators.d.ts.map +1 -0
  89. package/dist/tools/collaborators.js +311 -0
  90. package/dist/tools/collaborators.js.map +1 -0
  91. package/dist/tools/comparisons.d.ts +22 -0
  92. package/dist/tools/comparisons.d.ts.map +1 -0
  93. package/dist/tools/comparisons.js +78 -0
  94. package/dist/tools/comparisons.js.map +1 -0
  95. package/dist/tools/credits.d.ts +17 -0
  96. package/dist/tools/credits.d.ts.map +1 -0
  97. package/dist/tools/credits.js +312 -0
  98. package/dist/tools/credits.js.map +1 -0
  99. package/dist/tools/custody-hints.d.ts +16 -0
  100. package/dist/tools/custody-hints.d.ts.map +1 -0
  101. package/dist/tools/custody-hints.js +27 -0
  102. package/dist/tools/custody-hints.js.map +1 -0
  103. package/dist/tools/custody.d.ts +38 -0
  104. package/dist/tools/custody.d.ts.map +1 -0
  105. package/dist/tools/custody.js +274 -0
  106. package/dist/tools/custody.js.map +1 -0
  107. package/dist/tools/dashboard.d.ts +19 -0
  108. package/dist/tools/dashboard.d.ts.map +1 -0
  109. package/dist/tools/dashboard.js +146 -0
  110. package/dist/tools/dashboard.js.map +1 -0
  111. package/dist/tools/directory.d.ts +15 -0
  112. package/dist/tools/directory.d.ts.map +1 -0
  113. package/dist/tools/directory.js +106 -0
  114. package/dist/tools/directory.js.map +1 -0
  115. package/dist/tools/discovery.d.ts +28 -0
  116. package/dist/tools/discovery.d.ts.map +1 -0
  117. package/dist/tools/discovery.js +560 -0
  118. package/dist/tools/discovery.js.map +1 -0
  119. package/dist/tools/disputes.d.ts +18 -0
  120. package/dist/tools/disputes.d.ts.map +1 -0
  121. package/dist/tools/disputes.js +61 -0
  122. package/dist/tools/disputes.js.map +1 -0
  123. package/dist/tools/documents.d.ts +15 -0
  124. package/dist/tools/documents.d.ts.map +1 -0
  125. package/dist/tools/documents.js +36 -0
  126. package/dist/tools/documents.js.map +1 -0
  127. package/dist/tools/duplicates.d.ts +16 -0
  128. package/dist/tools/duplicates.d.ts.map +1 -0
  129. package/dist/tools/duplicates.js +87 -0
  130. package/dist/tools/duplicates.js.map +1 -0
  131. package/dist/tools/enrichment.d.ts +20 -0
  132. package/dist/tools/enrichment.d.ts.map +1 -0
  133. package/dist/tools/enrichment.js +154 -0
  134. package/dist/tools/enrichment.js.map +1 -0
  135. package/dist/tools/exports.d.ts +19 -0
  136. package/dist/tools/exports.d.ts.map +1 -0
  137. package/dist/tools/exports.js +175 -0
  138. package/dist/tools/exports.js.map +1 -0
  139. package/dist/tools/import-documents.d.ts +21 -0
  140. package/dist/tools/import-documents.d.ts.map +1 -0
  141. package/dist/tools/import-documents.js +203 -0
  142. package/dist/tools/import-documents.js.map +1 -0
  143. package/dist/tools/import.d.ts +30 -0
  144. package/dist/tools/import.d.ts.map +1 -0
  145. package/dist/tools/import.js +455 -0
  146. package/dist/tools/import.js.map +1 -0
  147. package/dist/tools/index.d.ts +83 -37
  148. package/dist/tools/index.d.ts.map +1 -1
  149. package/dist/tools/index.js +448 -84
  150. package/dist/tools/index.js.map +1 -1
  151. package/dist/tools/integrations.d.ts +15 -0
  152. package/dist/tools/integrations.d.ts.map +1 -0
  153. package/dist/tools/integrations.js +100 -0
  154. package/dist/tools/integrations.js.map +1 -0
  155. package/dist/tools/licensing.d.ts +40 -0
  156. package/dist/tools/licensing.d.ts.map +1 -0
  157. package/dist/tools/licensing.js +431 -0
  158. package/dist/tools/licensing.js.map +1 -0
  159. package/dist/tools/memory.d.ts +21 -0
  160. package/dist/tools/memory.d.ts.map +1 -0
  161. package/dist/tools/memory.js +116 -0
  162. package/dist/tools/memory.js.map +1 -0
  163. package/dist/tools/metadata.d.ts +15 -0
  164. package/dist/tools/metadata.d.ts.map +1 -0
  165. package/dist/tools/metadata.js +1106 -0
  166. package/dist/tools/metadata.js.map +1 -0
  167. package/dist/tools/multimedia.d.ts +19 -0
  168. package/dist/tools/multimedia.d.ts.map +1 -0
  169. package/dist/tools/multimedia.js +291 -0
  170. package/dist/tools/multimedia.js.map +1 -0
  171. package/dist/tools/notes.d.ts +21 -0
  172. package/dist/tools/notes.d.ts.map +1 -0
  173. package/dist/tools/notes.js +108 -0
  174. package/dist/tools/notes.js.map +1 -0
  175. package/dist/tools/notifications.d.ts +20 -0
  176. package/dist/tools/notifications.d.ts.map +1 -0
  177. package/dist/tools/notifications.js +266 -0
  178. package/dist/tools/notifications.js.map +1 -0
  179. package/dist/tools/people.d.ts +39 -47
  180. package/dist/tools/people.d.ts.map +1 -1
  181. package/dist/tools/people.js +148 -109
  182. package/dist/tools/people.js.map +1 -1
  183. package/dist/tools/projects.d.ts +19 -0
  184. package/dist/tools/projects.d.ts.map +1 -0
  185. package/dist/tools/projects.js +140 -0
  186. package/dist/tools/projects.js.map +1 -0
  187. package/dist/tools/publishers.d.ts +16 -0
  188. package/dist/tools/publishers.d.ts.map +1 -0
  189. package/dist/tools/publishers.js +69 -0
  190. package/dist/tools/publishers.js.map +1 -0
  191. package/dist/tools/purchases.d.ts +15 -0
  192. package/dist/tools/purchases.d.ts.map +1 -0
  193. package/dist/tools/purchases.js +63 -0
  194. package/dist/tools/purchases.js.map +1 -0
  195. package/dist/tools/recordings.d.ts +9 -9
  196. package/dist/tools/recordings.d.ts.map +1 -1
  197. package/dist/tools/recordings.js +136 -48
  198. package/dist/tools/recordings.js.map +1 -1
  199. package/dist/tools/recovery-hints.d.ts +14 -0
  200. package/dist/tools/recovery-hints.d.ts.map +1 -0
  201. package/dist/tools/recovery-hints.js +277 -0
  202. package/dist/tools/recovery-hints.js.map +1 -0
  203. package/dist/tools/releases.d.ts +18 -0
  204. package/dist/tools/releases.d.ts.map +1 -0
  205. package/dist/tools/releases.js +128 -0
  206. package/dist/tools/releases.js.map +1 -0
  207. package/dist/tools/royalties.d.ts +23 -0
  208. package/dist/tools/royalties.d.ts.map +1 -0
  209. package/dist/tools/royalties.js +257 -0
  210. package/dist/tools/royalties.js.map +1 -0
  211. package/dist/tools/search.d.ts +21 -21
  212. package/dist/tools/search.d.ts.map +1 -1
  213. package/dist/tools/search.js +3 -3
  214. package/dist/tools/search.js.map +1 -1
  215. package/dist/tools/send.d.ts +17 -0
  216. package/dist/tools/send.d.ts.map +1 -0
  217. package/dist/tools/send.js +185 -0
  218. package/dist/tools/send.js.map +1 -0
  219. package/dist/tools/sessions.d.ts +18 -0
  220. package/dist/tools/sessions.d.ts.map +1 -0
  221. package/dist/tools/sessions.js +115 -0
  222. package/dist/tools/sessions.js.map +1 -0
  223. package/dist/tools/settings.d.ts +18 -0
  224. package/dist/tools/settings.d.ts.map +1 -0
  225. package/dist/tools/settings.js +96 -0
  226. package/dist/tools/settings.js.map +1 -0
  227. package/dist/tools/share-links.d.ts +19 -0
  228. package/dist/tools/share-links.d.ts.map +1 -0
  229. package/dist/tools/share-links.js +121 -0
  230. package/dist/tools/share-links.js.map +1 -0
  231. package/dist/tools/split-sheets.d.ts +25 -0
  232. package/dist/tools/split-sheets.d.ts.map +1 -0
  233. package/dist/tools/split-sheets.js +307 -0
  234. package/dist/tools/split-sheets.js.map +1 -0
  235. package/dist/tools/team.d.ts +22 -0
  236. package/dist/tools/team.d.ts.map +1 -0
  237. package/dist/tools/team.js +134 -0
  238. package/dist/tools/team.js.map +1 -0
  239. package/dist/tools/telegram.d.ts +21 -0
  240. package/dist/tools/telegram.d.ts.map +1 -0
  241. package/dist/tools/telegram.js +141 -0
  242. package/dist/tools/telegram.js.map +1 -0
  243. package/dist/tools/uploads.d.ts +17 -0
  244. package/dist/tools/uploads.d.ts.map +1 -0
  245. package/dist/tools/uploads.js +156 -0
  246. package/dist/tools/uploads.js.map +1 -0
  247. package/dist/tools/works.d.ts +39 -47
  248. package/dist/tools/works.d.ts.map +1 -1
  249. package/dist/tools/works.js +216 -116
  250. package/dist/tools/works.js.map +1 -1
  251. package/package.json +1 -1
@@ -0,0 +1,266 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import { formatAsText, formatSuccess, formatStructuredList, formatValidationError, } from "@withpica/mcp-utils";
4
+ export class NotificationsTools {
5
+ pica;
6
+ constructor(pica) {
7
+ this.pica = pica;
8
+ }
9
+ getTools() {
10
+ return [
11
+ {
12
+ definition: {
13
+ name: "pica_notifications_list",
14
+ description: "Check for notifications from PICA — new collaborator invites, " +
15
+ "enrichment results, verification requests, credit disputes, " +
16
+ "and other flagged items that need attention.",
17
+ inputSchema: {
18
+ type: "object",
19
+ properties: {},
20
+ },
21
+ },
22
+ executor: this.listNotifications.bind(this),
23
+ },
24
+ {
25
+ definition: {
26
+ name: "pica_notify_person",
27
+ description: "Send a notification to a person in the catalog. If the person has a PICA account, " +
28
+ "they get an in-app notification + Telegram message (if connected). " +
29
+ "If they're not a PICA user yet, returns a hint to use pica_collaborators_invite instead. " +
30
+ "Use for credit verification requests, song updates, or any message to a collaborator.",
31
+ inputSchema: {
32
+ type: "object",
33
+ properties: {
34
+ person_id: {
35
+ type: "string",
36
+ description: "The person's ID in your catalog",
37
+ },
38
+ message: {
39
+ type: "string",
40
+ description: "What to tell them (e.g. 'please verify your writing credit on Midnight Run')",
41
+ },
42
+ work_id: {
43
+ type: "string",
44
+ description: "Optional work ID for context — links the notification to a specific work",
45
+ },
46
+ },
47
+ required: ["person_id", "message"],
48
+ },
49
+ },
50
+ executor: this.notifyPerson.bind(this),
51
+ },
52
+ {
53
+ definition: {
54
+ name: "pica_notifications_mark_read",
55
+ description: "Mark one or more notifications as read.",
56
+ inputSchema: {
57
+ type: "object",
58
+ properties: {
59
+ notification_ids: {
60
+ type: "array",
61
+ items: { type: "string" },
62
+ description: "IDs of notifications to mark as read",
63
+ },
64
+ },
65
+ required: ["notification_ids"],
66
+ },
67
+ },
68
+ executor: this.markRead.bind(this),
69
+ },
70
+ {
71
+ definition: {
72
+ name: "pica_notify_user_at",
73
+ description: "Schedule a one-shot Telegram reminder for the future (ADR-160). The user can ask for reminders in any natural phrasing — 'remind me tomorrow at 9', 'ping me in 2 hours', 'check on this next monday'. Convert their phrasing to an ISO 8601 UTC timestamp before calling. Ask the user for their timezone once if you don't already know it. The message body IS the receipt — make it self-contained so the user reading it cold knows what to do. Delivery goes via Telegram, so pica_telegram_connect must be paired first. Per-user cap: 100 pending reminders.",
74
+ inputSchema: {
75
+ type: "object",
76
+ properties: {
77
+ message: {
78
+ type: "string",
79
+ description: "The reminder body text. Self-contained — include enough context that the user reading it cold knows what to do. 1-4000 characters.",
80
+ },
81
+ deliver_at: {
82
+ type: "string",
83
+ description: "ISO 8601 UTC timestamp. Must be in the future and within 1 year. Convert from natural language using the user's timezone — ask first if you don't know it.",
84
+ },
85
+ },
86
+ required: ["message", "deliver_at"],
87
+ },
88
+ },
89
+ executor: this.notifyUserAt.bind(this),
90
+ },
91
+ {
92
+ definition: {
93
+ name: "pica_notify_user_list_pending",
94
+ description: "List all pending scheduled Telegram reminders for the current user (ADR-160), ordered by deliver_at ascending. Use to show the user what reminders are queued or to find an id for pica_notify_user_cancel.",
95
+ inputSchema: { type: "object", properties: {} },
96
+ },
97
+ executor: this.listPending.bind(this),
98
+ },
99
+ {
100
+ definition: {
101
+ name: "pica_notify_user_cancel",
102
+ description: "Cancel a pending scheduled reminder by id (ADR-160). Idempotent — if the reminder was already delivered or already cancelled, this surfaces that state gracefully instead of erroring. Use cancel + pica_notify_user_at together to reschedule a reminder.",
103
+ inputSchema: {
104
+ type: "object",
105
+ properties: {
106
+ id: {
107
+ type: "string",
108
+ description: "The scheduled_notifications row id — get it from pica_notify_user_list_pending or from the response of pica_notify_user_at.",
109
+ },
110
+ },
111
+ required: ["id"],
112
+ },
113
+ },
114
+ executor: this.cancelPending.bind(this),
115
+ },
116
+ ];
117
+ }
118
+ async listPending(_args) {
119
+ try {
120
+ const result = await this.pica.notifications.listScheduled();
121
+ const data = result?.data || result || [];
122
+ const items = Array.isArray(data) ? data : [];
123
+ return formatStructuredList(items, "scheduled reminder", {
124
+ count: items.length,
125
+ });
126
+ }
127
+ catch (err) {
128
+ return formatAsText({
129
+ error: `Failed to list pending reminders: ${err?.message || String(err)}`,
130
+ });
131
+ }
132
+ }
133
+ async cancelPending(args) {
134
+ if (!args.id || typeof args.id !== "string") {
135
+ return formatValidationError({ id: "id is required" });
136
+ }
137
+ try {
138
+ const result = await this.pica.notifications.cancelScheduled(args.id);
139
+ const data = result?.data || result;
140
+ if (data?.status === "sent") {
141
+ return formatAsText({
142
+ cancelled: false,
143
+ status: "sent",
144
+ message: `Already delivered on ${data.sent_at} — can't cancel.`,
145
+ data,
146
+ });
147
+ }
148
+ if (data?.status === "cancelled" && data?.deliver_at) {
149
+ return formatSuccess(`Cancelled — was scheduled for ${data.deliver_at}.`, { cancelled: true, id: data.id, deliver_at: data.deliver_at });
150
+ }
151
+ if (data?.status === "failed") {
152
+ return formatAsText({
153
+ cancelled: false,
154
+ status: "failed",
155
+ message: `Reminder already marked failed: ${data.error_text || "unknown"}`,
156
+ data,
157
+ });
158
+ }
159
+ return formatSuccess("Cancelled.", { cancelled: true, data });
160
+ }
161
+ catch (err) {
162
+ const message = err?.message || String(err);
163
+ return formatAsText({
164
+ cancelled: false,
165
+ error: `Failed to cancel reminder: ${message}`,
166
+ });
167
+ }
168
+ }
169
+ async notifyUserAt(args) {
170
+ if (!args.message ||
171
+ typeof args.message !== "string" ||
172
+ !args.message.trim()) {
173
+ return formatValidationError({ message: "message is required" });
174
+ }
175
+ if (!args.deliver_at || typeof args.deliver_at !== "string") {
176
+ return formatValidationError({
177
+ deliver_at: "deliver_at is required (ISO 8601 UTC)",
178
+ });
179
+ }
180
+ try {
181
+ const result = await this.pica.notifications.schedule({
182
+ message: args.message.trim(),
183
+ deliverAt: args.deliver_at,
184
+ source: typeof args.source === "string" ? args.source : undefined,
185
+ });
186
+ const data = result?.data || result;
187
+ return formatSuccess(`Reminder scheduled for ${data.deliver_at}. I'll ping you on Telegram when it fires.`, {
188
+ id: data.id,
189
+ deliver_at: data.deliver_at,
190
+ message: data.message,
191
+ status: data.status,
192
+ completion_hints: {
193
+ list: "pica_notify_user_list_pending",
194
+ cancel: "pica_notify_user_cancel",
195
+ },
196
+ });
197
+ }
198
+ catch (err) {
199
+ const message = err?.message || String(err);
200
+ return formatAsText({
201
+ scheduled: false,
202
+ error: `Failed to schedule reminder: ${message}`,
203
+ });
204
+ }
205
+ }
206
+ async listNotifications(_args) {
207
+ try {
208
+ const result = await this.pica.notifications.list();
209
+ const notifications = result?.notifications || result || [];
210
+ const items = Array.isArray(notifications) ? notifications : [];
211
+ const unread = items.filter((n) => !n.read_at);
212
+ return formatStructuredList(items, "notification", {
213
+ total: items.length,
214
+ unread: unread.length,
215
+ });
216
+ }
217
+ catch (err) {
218
+ return formatAsText({
219
+ error: `Failed to list notifications: ${err?.message || String(err)}`,
220
+ });
221
+ }
222
+ }
223
+ async notifyPerson(args) {
224
+ if (!args.person_id?.trim()) {
225
+ return formatValidationError({ person_id: "person_id is required" });
226
+ }
227
+ if (!args.message?.trim()) {
228
+ return formatValidationError({ message: "message is required" });
229
+ }
230
+ try {
231
+ const result = await this.pica.notifications.sendToPerson({
232
+ person_id: args.person_id,
233
+ message: args.message,
234
+ work_id: args.work_id,
235
+ });
236
+ const data = result.data || result;
237
+ if (!data.delivered) {
238
+ return formatAsText({
239
+ delivered: false,
240
+ person_name: data.person_name,
241
+ reason: data.reason,
242
+ hint: data.hint,
243
+ });
244
+ }
245
+ const channels = [];
246
+ if (data.channels?.in_app)
247
+ channels.push("in-app");
248
+ if (data.channels?.telegram)
249
+ channels.push("Telegram");
250
+ if (data.channels?.email)
251
+ channels.push("email");
252
+ return formatSuccess(`Notified ${data.person_name} via ${channels.join(" + ")}`, data);
253
+ }
254
+ catch (err) {
255
+ return formatAsText({
256
+ error: `Failed to notify person: ${err?.message || String(err)}`,
257
+ });
258
+ }
259
+ }
260
+ async markRead(args) {
261
+ const ids = args.notification_ids;
262
+ await this.pica.notifications.markRead(ids);
263
+ return formatSuccess(`Marked ${ids.length} notification${ids.length !== 1 ? "s" : ""} as read`);
264
+ }
265
+ }
266
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
@@ -1,53 +1,45 @@
1
1
  /**
2
2
  * People Tools - MCP tools for managing people (artists, composers, etc.)
3
3
  */
4
- import { PicaClient } from "../pica-sdk.js";
4
+ import { PicaClient } from "@withpica/mcp-sdk";
5
5
  import { ToolDefinition, ToolExecutor } from "./index.js";
6
6
  export declare class PeopleTools {
7
- private pica;
8
- constructor(pica: PicaClient);
9
- /**
10
- * Get all people tools
11
- */
12
- getTools(): Array<{
13
- definition: ToolDefinition;
14
- executor: ToolExecutor;
15
- }>;
16
- /**
17
- * List people
18
- */
19
- private listPeople;
20
- /**
21
- * Get person by ID
22
- */
23
- private getPerson;
24
- /**
25
- * Create person
26
- */
27
- private createPerson;
28
- /**
29
- * Update person
30
- */
31
- private updatePerson;
32
- /**
33
- * Delete person
34
- */
35
- private deletePerson;
36
- /**
37
- * Search people
38
- */
39
- private searchPeople;
40
- /**
41
- * Enrich from ISNI
42
- */
43
- private enrichFromISNI;
44
- /**
45
- * Enrich from MusicBrainz
46
- */
47
- private enrichFromMusicBrainz;
48
- /**
49
- * Get full person context bundle
50
- */
51
- private getPersonFull;
7
+ private pica;
8
+ constructor(pica: PicaClient);
9
+ /**
10
+ * Get all people tools
11
+ */
12
+ getTools(): Array<{
13
+ definition: ToolDefinition;
14
+ executor: ToolExecutor;
15
+ }>;
16
+ /**
17
+ * Query people — unified list + search
18
+ */
19
+ private queryPeople;
20
+ /**
21
+ * Inspect person unified get + get_full with section filtering
22
+ */
23
+ private inspectPerson;
24
+ /**
25
+ * Create person
26
+ */
27
+ private createPerson;
28
+ /**
29
+ * Update person
30
+ */
31
+ private updatePerson;
32
+ /**
33
+ * Delete person
34
+ */
35
+ private deletePerson;
36
+ /**
37
+ * Enrich from ISNI
38
+ */
39
+ private enrichFromISNI;
40
+ /**
41
+ * Enrich from MusicBrainz
42
+ */
43
+ private enrichFromMusicBrainz;
52
44
  }
53
- //# sourceMappingURL=people.d.ts.map
45
+ //# sourceMappingURL=people.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/tools/people.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAQtE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;IAkazE;;OAEG;YACW,UAAU;IAqBxB;;OAEG;YACW,SAAS;IAKvB;;OAEG;YACW,YAAY;IAkC1B;;OAEG;YACW,YAAY;IAM1B;;OAEG;YACW,YAAY;IAK1B;;OAEG;YACW,YAAY;IAmB1B;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,qBAAqB;IAanC;;OAEG;YACW,aAAa;CAoB5B"}
1
+ {"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/tools/people.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAStE,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;IAgazE;;OAEG;YACW,WAAW;IAwCzB;;OAEG;YACW,aAAa;IAsE3B;;OAEG;YACW,YAAY;IAkC1B;;OAEG;YACW,YAAY;IAM1B;;OAEG;YACW,YAAY;IAK1B;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,qBAAqB;CASpC"}