@withpica/mcp-server 2.6.2 → 2.7.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 (256) hide show
  1. package/dist/config.d.ts +25 -4
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +12 -36
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.js +3 -3
  7. package/dist/index.js.map +1 -1
  8. package/dist/pica-sdk.d.ts +1231 -0
  9. package/dist/pica-sdk.d.ts.map +1 -0
  10. package/dist/pica-sdk.js +1403 -0
  11. package/dist/pica-sdk.js.map +1 -0
  12. package/dist/prompts/index.d.ts +64 -64
  13. package/dist/prompts/index.js +24 -24
  14. package/dist/prompts/index.js.map +1 -1
  15. package/dist/resources/index.d.ts +53 -55
  16. package/dist/resources/index.d.ts.map +1 -1
  17. package/dist/resources/index.js +54 -133
  18. package/dist/resources/index.js.map +1 -1
  19. package/dist/server.d.ts +32 -49
  20. package/dist/server.d.ts.map +1 -1
  21. package/dist/server.js +14 -103
  22. package/dist/server.js.map +1 -1
  23. package/dist/tools/index.d.ts +37 -83
  24. package/dist/tools/index.d.ts.map +1 -1
  25. package/dist/tools/index.js +84 -442
  26. package/dist/tools/index.js.map +1 -1
  27. package/dist/tools/people.d.ts +47 -39
  28. package/dist/tools/people.d.ts.map +1 -1
  29. package/dist/tools/people.js +109 -148
  30. package/dist/tools/people.js.map +1 -1
  31. package/dist/tools/recordings.d.ts +9 -9
  32. package/dist/tools/recordings.d.ts.map +1 -1
  33. package/dist/tools/recordings.js +48 -121
  34. package/dist/tools/recordings.js.map +1 -1
  35. package/dist/tools/search.d.ts +21 -21
  36. package/dist/tools/search.d.ts.map +1 -1
  37. package/dist/tools/search.js +3 -3
  38. package/dist/tools/search.js.map +1 -1
  39. package/dist/tools/works.d.ts +47 -39
  40. package/dist/tools/works.d.ts.map +1 -1
  41. package/dist/tools/works.js +116 -201
  42. package/dist/tools/works.js.map +1 -1
  43. package/dist/utils/errors.d.ts +29 -0
  44. package/dist/utils/errors.d.ts.map +1 -0
  45. package/dist/utils/errors.js +115 -0
  46. package/dist/utils/errors.js.map +1 -0
  47. package/dist/utils/formatting.d.ts +82 -0
  48. package/dist/utils/formatting.d.ts.map +1 -0
  49. package/dist/utils/formatting.js +125 -0
  50. package/dist/utils/formatting.js.map +1 -0
  51. package/package.json +1 -1
  52. package/server.json +1 -1
  53. package/dist/__mocks__/mppx-mcp-sdk-server.d.ts +0 -6
  54. package/dist/__mocks__/mppx-mcp-sdk-server.d.ts.map +0 -1
  55. package/dist/__mocks__/mppx-mcp-sdk-server.js +0 -6
  56. package/dist/__mocks__/mppx-mcp-sdk-server.js.map +0 -1
  57. package/dist/__mocks__/mppx-server.d.ts +0 -12
  58. package/dist/__mocks__/mppx-server.d.ts.map +0 -1
  59. package/dist/__mocks__/mppx-server.js +0 -12
  60. package/dist/__mocks__/mppx-server.js.map +0 -1
  61. package/dist/apps/download.d.ts +0 -2
  62. package/dist/apps/download.d.ts.map +0 -1
  63. package/dist/apps/download.js +0 -125
  64. package/dist/apps/download.js.map +0 -1
  65. package/dist/apps/generated/shared-bundle.d.ts +0 -5
  66. package/dist/apps/generated/shared-bundle.d.ts.map +0 -1
  67. package/dist/apps/generated/shared-bundle.js +0 -7
  68. package/dist/apps/generated/shared-bundle.js.map +0 -1
  69. package/dist/apps/shared.d.ts +0 -15
  70. package/dist/apps/shared.d.ts.map +0 -1
  71. package/dist/apps/shared.js +0 -480
  72. package/dist/apps/shared.js.map +0 -1
  73. package/dist/apps/upload.d.ts +0 -2
  74. package/dist/apps/upload.d.ts.map +0 -1
  75. package/dist/apps/upload.js +0 -280
  76. package/dist/apps/upload.js.map +0 -1
  77. package/dist/resources/llms-primer.d.ts +0 -2
  78. package/dist/resources/llms-primer.d.ts.map +0 -1
  79. package/dist/resources/llms-primer.js +0 -68
  80. package/dist/resources/llms-primer.js.map +0 -1
  81. package/dist/server-instructions.d.ts +0 -9
  82. package/dist/server-instructions.d.ts.map +0 -1
  83. package/dist/server-instructions.js +0 -34
  84. package/dist/server-instructions.js.map +0 -1
  85. package/dist/tools/agreement-types.d.ts +0 -27
  86. package/dist/tools/agreement-types.d.ts.map +0 -1
  87. package/dist/tools/agreement-types.js +0 -387
  88. package/dist/tools/agreement-types.js.map +0 -1
  89. package/dist/tools/agreements.d.ts +0 -20
  90. package/dist/tools/agreements.d.ts.map +0 -1
  91. package/dist/tools/agreements.js +0 -363
  92. package/dist/tools/agreements.js.map +0 -1
  93. package/dist/tools/analytics.d.ts +0 -20
  94. package/dist/tools/analytics.d.ts.map +0 -1
  95. package/dist/tools/analytics.js +0 -124
  96. package/dist/tools/analytics.js.map +0 -1
  97. package/dist/tools/app-tools.d.ts +0 -21
  98. package/dist/tools/app-tools.d.ts.map +0 -1
  99. package/dist/tools/app-tools.js +0 -248
  100. package/dist/tools/app-tools.js.map +0 -1
  101. package/dist/tools/assets.d.ts +0 -21
  102. package/dist/tools/assets.d.ts.map +0 -1
  103. package/dist/tools/assets.js +0 -441
  104. package/dist/tools/assets.js.map +0 -1
  105. package/dist/tools/audio-files.d.ts +0 -20
  106. package/dist/tools/audio-files.d.ts.map +0 -1
  107. package/dist/tools/audio-files.js +0 -384
  108. package/dist/tools/audio-files.js.map +0 -1
  109. package/dist/tools/auth.d.ts +0 -22
  110. package/dist/tools/auth.d.ts.map +0 -1
  111. package/dist/tools/auth.js +0 -210
  112. package/dist/tools/auth.js.map +0 -1
  113. package/dist/tools/bulk.d.ts +0 -16
  114. package/dist/tools/bulk.d.ts.map +0 -1
  115. package/dist/tools/bulk.js +0 -85
  116. package/dist/tools/bulk.js.map +0 -1
  117. package/dist/tools/calendar.d.ts +0 -15
  118. package/dist/tools/calendar.d.ts.map +0 -1
  119. package/dist/tools/calendar.js +0 -67
  120. package/dist/tools/calendar.js.map +0 -1
  121. package/dist/tools/collaborators.d.ts +0 -17
  122. package/dist/tools/collaborators.d.ts.map +0 -1
  123. package/dist/tools/collaborators.js +0 -131
  124. package/dist/tools/collaborators.js.map +0 -1
  125. package/dist/tools/comparisons.d.ts +0 -22
  126. package/dist/tools/comparisons.d.ts.map +0 -1
  127. package/dist/tools/comparisons.js +0 -78
  128. package/dist/tools/comparisons.js.map +0 -1
  129. package/dist/tools/credits.d.ts +0 -17
  130. package/dist/tools/credits.d.ts.map +0 -1
  131. package/dist/tools/credits.js +0 -312
  132. package/dist/tools/credits.js.map +0 -1
  133. package/dist/tools/dashboard.d.ts +0 -19
  134. package/dist/tools/dashboard.d.ts.map +0 -1
  135. package/dist/tools/dashboard.js +0 -146
  136. package/dist/tools/dashboard.js.map +0 -1
  137. package/dist/tools/directory.d.ts +0 -15
  138. package/dist/tools/directory.d.ts.map +0 -1
  139. package/dist/tools/directory.js +0 -106
  140. package/dist/tools/directory.js.map +0 -1
  141. package/dist/tools/discovery.d.ts +0 -28
  142. package/dist/tools/discovery.d.ts.map +0 -1
  143. package/dist/tools/discovery.js +0 -560
  144. package/dist/tools/discovery.js.map +0 -1
  145. package/dist/tools/disputes.d.ts +0 -18
  146. package/dist/tools/disputes.d.ts.map +0 -1
  147. package/dist/tools/disputes.js +0 -61
  148. package/dist/tools/disputes.js.map +0 -1
  149. package/dist/tools/documents.d.ts +0 -15
  150. package/dist/tools/documents.d.ts.map +0 -1
  151. package/dist/tools/documents.js +0 -36
  152. package/dist/tools/documents.js.map +0 -1
  153. package/dist/tools/duplicates.d.ts +0 -16
  154. package/dist/tools/duplicates.d.ts.map +0 -1
  155. package/dist/tools/duplicates.js +0 -87
  156. package/dist/tools/duplicates.js.map +0 -1
  157. package/dist/tools/enrichment.d.ts +0 -20
  158. package/dist/tools/enrichment.d.ts.map +0 -1
  159. package/dist/tools/enrichment.js +0 -154
  160. package/dist/tools/enrichment.js.map +0 -1
  161. package/dist/tools/exports.d.ts +0 -19
  162. package/dist/tools/exports.d.ts.map +0 -1
  163. package/dist/tools/exports.js +0 -175
  164. package/dist/tools/exports.js.map +0 -1
  165. package/dist/tools/import-documents.d.ts +0 -21
  166. package/dist/tools/import-documents.d.ts.map +0 -1
  167. package/dist/tools/import-documents.js +0 -203
  168. package/dist/tools/import-documents.js.map +0 -1
  169. package/dist/tools/import.d.ts +0 -30
  170. package/dist/tools/import.d.ts.map +0 -1
  171. package/dist/tools/import.js +0 -455
  172. package/dist/tools/import.js.map +0 -1
  173. package/dist/tools/integrations.d.ts +0 -15
  174. package/dist/tools/integrations.d.ts.map +0 -1
  175. package/dist/tools/integrations.js +0 -100
  176. package/dist/tools/integrations.js.map +0 -1
  177. package/dist/tools/licensing.d.ts +0 -40
  178. package/dist/tools/licensing.d.ts.map +0 -1
  179. package/dist/tools/licensing.js +0 -431
  180. package/dist/tools/licensing.js.map +0 -1
  181. package/dist/tools/memory.d.ts +0 -21
  182. package/dist/tools/memory.d.ts.map +0 -1
  183. package/dist/tools/memory.js +0 -116
  184. package/dist/tools/memory.js.map +0 -1
  185. package/dist/tools/metadata.d.ts +0 -15
  186. package/dist/tools/metadata.d.ts.map +0 -1
  187. package/dist/tools/metadata.js +0 -1069
  188. package/dist/tools/metadata.js.map +0 -1
  189. package/dist/tools/multimedia.d.ts +0 -19
  190. package/dist/tools/multimedia.d.ts.map +0 -1
  191. package/dist/tools/multimedia.js +0 -291
  192. package/dist/tools/multimedia.js.map +0 -1
  193. package/dist/tools/notes.d.ts +0 -21
  194. package/dist/tools/notes.d.ts.map +0 -1
  195. package/dist/tools/notes.js +0 -108
  196. package/dist/tools/notes.js.map +0 -1
  197. package/dist/tools/notifications.d.ts +0 -17
  198. package/dist/tools/notifications.d.ts.map +0 -1
  199. package/dist/tools/notifications.js +0 -117
  200. package/dist/tools/notifications.js.map +0 -1
  201. package/dist/tools/projects.d.ts +0 -19
  202. package/dist/tools/projects.d.ts.map +0 -1
  203. package/dist/tools/projects.js +0 -140
  204. package/dist/tools/projects.js.map +0 -1
  205. package/dist/tools/publishers.d.ts +0 -16
  206. package/dist/tools/publishers.d.ts.map +0 -1
  207. package/dist/tools/publishers.js +0 -69
  208. package/dist/tools/publishers.js.map +0 -1
  209. package/dist/tools/purchases.d.ts +0 -15
  210. package/dist/tools/purchases.d.ts.map +0 -1
  211. package/dist/tools/purchases.js +0 -63
  212. package/dist/tools/purchases.js.map +0 -1
  213. package/dist/tools/recovery-hints.d.ts +0 -14
  214. package/dist/tools/recovery-hints.d.ts.map +0 -1
  215. package/dist/tools/recovery-hints.js +0 -277
  216. package/dist/tools/recovery-hints.js.map +0 -1
  217. package/dist/tools/releases.d.ts +0 -18
  218. package/dist/tools/releases.d.ts.map +0 -1
  219. package/dist/tools/releases.js +0 -128
  220. package/dist/tools/releases.js.map +0 -1
  221. package/dist/tools/royalties.d.ts +0 -23
  222. package/dist/tools/royalties.d.ts.map +0 -1
  223. package/dist/tools/royalties.js +0 -257
  224. package/dist/tools/royalties.js.map +0 -1
  225. package/dist/tools/send.d.ts +0 -17
  226. package/dist/tools/send.d.ts.map +0 -1
  227. package/dist/tools/send.js +0 -185
  228. package/dist/tools/send.js.map +0 -1
  229. package/dist/tools/sessions.d.ts +0 -18
  230. package/dist/tools/sessions.d.ts.map +0 -1
  231. package/dist/tools/sessions.js +0 -115
  232. package/dist/tools/sessions.js.map +0 -1
  233. package/dist/tools/settings.d.ts +0 -18
  234. package/dist/tools/settings.d.ts.map +0 -1
  235. package/dist/tools/settings.js +0 -96
  236. package/dist/tools/settings.js.map +0 -1
  237. package/dist/tools/share-links.d.ts +0 -19
  238. package/dist/tools/share-links.d.ts.map +0 -1
  239. package/dist/tools/share-links.js +0 -121
  240. package/dist/tools/share-links.js.map +0 -1
  241. package/dist/tools/split-sheets.d.ts +0 -25
  242. package/dist/tools/split-sheets.d.ts.map +0 -1
  243. package/dist/tools/split-sheets.js +0 -307
  244. package/dist/tools/split-sheets.js.map +0 -1
  245. package/dist/tools/team.d.ts +0 -22
  246. package/dist/tools/team.d.ts.map +0 -1
  247. package/dist/tools/team.js +0 -134
  248. package/dist/tools/team.js.map +0 -1
  249. package/dist/tools/telegram.d.ts +0 -20
  250. package/dist/tools/telegram.d.ts.map +0 -1
  251. package/dist/tools/telegram.js +0 -88
  252. package/dist/tools/telegram.js.map +0 -1
  253. package/dist/tools/uploads.d.ts +0 -17
  254. package/dist/tools/uploads.d.ts.map +0 -1
  255. package/dist/tools/uploads.js +0 -156
  256. package/dist/tools/uploads.js.map +0 -1
@@ -1,312 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- import { formatSuccess, formatStructuredList, mapGapsToHints, } from "@withpica/mcp-utils";
3
- import { notifyParties, summarizeNotifications, } from "@withpica/mcp-utils";
4
- export class CreditsTools {
5
- pica;
6
- constructor(pica) {
7
- this.pica = pica;
8
- }
9
- getTools() {
10
- return [
11
- {
12
- definition: {
13
- name: "pica_credits_balance",
14
- description: "Check your current credit balance and see what each operation costs. " +
15
- "Use this before triggering audio analysis or identification to check affordability. If balance is low, use pica_credits_purchase to generate a checkout link.",
16
- inputSchema: {
17
- type: "object",
18
- properties: {},
19
- },
20
- },
21
- executor: this.getBalance.bind(this),
22
- },
23
- {
24
- definition: {
25
- name: "pica_credits_list",
26
- description: "Get all credits (collaborators, roles, and splits) for a specific work. Returns who wrote, composed, arranged, or produced the work and their percentage splits. " +
27
- "→ then: pica_credits_update (fix credits), pica_people_inspect (inspect a credited person)",
28
- inputSchema: {
29
- type: "object",
30
- properties: {
31
- work_id: {
32
- type: "string",
33
- description: "The work ID to get credits for",
34
- },
35
- },
36
- required: ["work_id"],
37
- },
38
- },
39
- executor: this.listCredits.bind(this),
40
- },
41
- {
42
- definition: {
43
- name: "pica_credits_update",
44
- description: "Set credits on a work. Replaces all existing credits. Splits must total 100%. " +
45
- "15 roles: writer, composer, arranger, lyricist, producer, performer, engineer, mixer, mastering, owner, vocalist, instrumentalist, conductor, programmer, remixer. " +
46
- "Supports publisher fields (publisher_name, publisher_ipi, publisher_split_percentage) and territory/rights metadata. " +
47
- "IMPORTANT: After updating, call pica_credits_list to verify the credits actually persisted — silent failures are possible if roles are invalid. " +
48
- "→ then: pica_credits_list (verify saved), pica_works_inspect (check progress)",
49
- inputSchema: {
50
- type: "object",
51
- properties: {
52
- work_id: {
53
- type: "string",
54
- description: "The work ID to set credits on",
55
- },
56
- credits: {
57
- type: "array",
58
- description: "Array of credit entries. Splits must total 100%.",
59
- items: {
60
- type: "object",
61
- properties: {
62
- person_id: {
63
- type: "string",
64
- description: "Person ID of the credited collaborator",
65
- },
66
- role: {
67
- type: "string",
68
- description: "Role: writer, composer, arranger, lyricist, producer, performer, engineer, mixer, mastering, owner, vocalist, instrumentalist, conductor, programmer, remixer",
69
- enum: [
70
- "writer",
71
- "composer",
72
- "arranger",
73
- "lyricist",
74
- "producer",
75
- "performer",
76
- "engineer",
77
- "mixer",
78
- "mastering",
79
- "owner",
80
- "vocalist",
81
- "instrumentalist",
82
- "conductor",
83
- "programmer",
84
- "remixer",
85
- ],
86
- },
87
- splits: {
88
- type: "number",
89
- description: "Percentage split (0-100). All splits must total 100%.",
90
- },
91
- publisher_name: {
92
- type: "string",
93
- description: "Publisher name for this credit (optional — for publishing credits)",
94
- },
95
- publisher_ipi: {
96
- type: "string",
97
- description: "Publisher's IPI number (9-11 digits)",
98
- },
99
- publisher_split_percentage: {
100
- type: "number",
101
- description: "Publisher's share percentage (0-100). Separate from writer split.",
102
- },
103
- territory: {
104
- type: "array",
105
- items: { type: "string" },
106
- description: 'Territories where this credit applies (e.g., ["worldwide"], ["UK", "US"]). Default: ["worldwide"].',
107
- },
108
- rights_type: {
109
- type: "string",
110
- enum: [
111
- "all",
112
- "performing",
113
- "mechanical",
114
- "synchronization",
115
- ],
116
- description: "Type of rights covered. Default: all.",
117
- },
118
- start_date: {
119
- type: "string",
120
- description: "When rights start (ISO date). Null = from inception.",
121
- },
122
- end_date: {
123
- type: "string",
124
- description: "When rights end (ISO date). Null = perpetual.",
125
- },
126
- },
127
- required: ["person_id", "role", "splits"],
128
- },
129
- },
130
- },
131
- required: ["work_id", "credits"],
132
- },
133
- },
134
- executor: this.updateCredits.bind(this),
135
- },
136
- ];
137
- }
138
- async getBalance(_args) {
139
- const result = await this.pica.creditsBalance.getBalance();
140
- const balance = result.balance ?? 0;
141
- const costs = result.credit_costs ?? [];
142
- const costSummary = costs
143
- .map((c) => `${c.action_key}: ${c.credits_required} credit(s)`)
144
- .join(", ");
145
- return formatSuccess(`Credit balance: ${balance}. Operations: ${costSummary}`, result);
146
- }
147
- async listCredits(args) {
148
- // Fetch both publishing collaborators and recording credits
149
- const [collabSettled, creditsSettled] = await Promise.allSettled([
150
- this.pica.credits.listCollaborators(args.work_id),
151
- this.pica.credits.listForWork(args.work_id),
152
- ]);
153
- const collaborators = collabSettled.status === "fulfilled"
154
- ? collabSettled.value
155
- : { collaborators: [], count: 0 };
156
- const recordingCredits = creditsSettled.status === "fulfilled" ? creditsSettled.value : [];
157
- // Merge both into a single list
158
- const collabArray = Array.isArray(collaborators)
159
- ? collaborators
160
- : collaborators?.collaborators || [];
161
- const creditArray = Array.isArray(recordingCredits)
162
- ? recordingCredits
163
- : recordingCredits?.credits || [];
164
- const allCredits = [...collabArray, ...creditArray];
165
- return formatStructuredList(allCredits, "credit", {
166
- work_id: args.work_id,
167
- });
168
- }
169
- async updateCredits(args) {
170
- // Validate splits total 100% before saving
171
- const splitTotal = args.credits.reduce((sum, c) => sum + (c.splits || 0), 0);
172
- if (splitTotal !== 100) {
173
- return {
174
- content: [
175
- {
176
- type: "text",
177
- text: `Splits total ${splitTotal}%, must be exactly 100%. Adjust the splits and try again.`,
178
- },
179
- ],
180
- isError: true,
181
- };
182
- }
183
- // Split credits by role type: publishing roles → /collaborators, recording roles → /credits
184
- const PUBLISHING_ROLES = new Set([
185
- "writer",
186
- "composer",
187
- "lyricist",
188
- "arranger",
189
- ]);
190
- const allCredits = args.credits.map((c) => {
191
- const credit = {
192
- person_id: c.person_id,
193
- role: c.role,
194
- splits: c.splits || 0,
195
- };
196
- if (c.publisher_name)
197
- credit.publisher_name = c.publisher_name;
198
- if (c.publisher_ipi)
199
- credit.publisher_ipi = c.publisher_ipi;
200
- if (c.publisher_split_percentage !== undefined)
201
- credit.publisher_split_percentage = c.publisher_split_percentage;
202
- if (c.territory)
203
- credit.territory = c.territory;
204
- if (c.rights_type)
205
- credit.rights_type = c.rights_type;
206
- if (c.start_date)
207
- credit.start_date = c.start_date;
208
- if (c.end_date)
209
- credit.end_date = c.end_date;
210
- return credit;
211
- });
212
- const publishingCredits = allCredits.filter((c) => PUBLISHING_ROLES.has(String(c.role || "writer")
213
- .split(", ")[0]
214
- .trim()));
215
- const recordingCredits = allCredits.filter((c) => !PUBLISHING_ROLES.has(String(c.role || "writer")
216
- .split(", ")[0]
217
- .trim()));
218
- let credits;
219
- // Route to correct endpoint(s)
220
- if (publishingCredits.length > 0 && recordingCredits.length > 0) {
221
- // Mixed — call both endpoints, use allSettled so a partial failure is reported not silently swallowed
222
- const [pubSettled, recSettled] = await Promise.allSettled([
223
- this.pica.credits.updateCollaborators(args.work_id, {
224
- credits: publishingCredits,
225
- }),
226
- this.pica.credits.updateForWork(args.work_id, {
227
- credits: recordingCredits,
228
- }),
229
- ]);
230
- const pubResult = pubSettled.status === "fulfilled" ? pubSettled.value : null;
231
- const recResult = recSettled.status === "fulfilled" ? recSettled.value : null;
232
- const pubError = pubSettled.status === "rejected"
233
- ? pubSettled.reason
234
- : null;
235
- const recError = recSettled.status === "rejected"
236
- ? recSettled.reason
237
- : null;
238
- if (pubError && recError) {
239
- return {
240
- content: [
241
- {
242
- type: "text",
243
- text: `both publishing and recording credits failed to save — publishing error: ${pubError?.message ?? pubError}, recording error: ${recError?.message ?? recError}`,
244
- },
245
- ],
246
- isError: true,
247
- };
248
- }
249
- if (pubError) {
250
- return {
251
- content: [
252
- {
253
- type: "text",
254
- text: `recording credits updated, but publishing credits failed — ${pubError?.message ?? pubError}. retry the publishing portion.`,
255
- },
256
- ],
257
- isError: true,
258
- };
259
- }
260
- if (recError) {
261
- return {
262
- content: [
263
- {
264
- type: "text",
265
- text: `publishing credits updated, but recording credits failed — ${recError?.message ?? recError}. retry the recording portion.`,
266
- },
267
- ],
268
- isError: true,
269
- };
270
- }
271
- credits = { collaborators: pubResult, credits: recResult };
272
- }
273
- else if (publishingCredits.length > 0) {
274
- credits = await this.pica.credits.updateCollaborators(args.work_id, {
275
- credits: publishingCredits,
276
- });
277
- }
278
- else {
279
- credits = await this.pica.credits.updateForWork(args.work_id, {
280
- credits: recordingCredits,
281
- });
282
- }
283
- // Check completeness for hints about next steps
284
- const hints = [];
285
- try {
286
- const completeness = await this.pica.health.getWorkCompleteness(args.work_id);
287
- hints.push(...mapGapsToHints(completeness?.gaps || completeness?.missing || [], 3));
288
- }
289
- catch {
290
- // Best-effort
291
- }
292
- // Notify all credited people about their credit
293
- const parties = args.credits
294
- .filter((c) => c.person_id)
295
- .map((c) => ({
296
- person_id: c.person_id,
297
- message: `you've been credited as ${c.role || "writer"} (${c.splits || 0}%) on a work — please verify`,
298
- work_id: args.work_id,
299
- notification_type: "credit_added",
300
- }));
301
- let notifySummary = "";
302
- if (parties.length > 0) {
303
- const results = await notifyParties(this.pica, parties);
304
- notifySummary = summarizeNotifications(results);
305
- }
306
- const msg = notifySummary
307
- ? `Credits updated. ${notifySummary}`
308
- : "Credits updated successfully";
309
- return formatSuccess(msg, credits, hints);
310
- }
311
- }
312
- //# sourceMappingURL=credits.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/tools/credits.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Dashboard & Discovery Tools — surface what needs attention, what PICA found, and daily briefings
3
- */
4
- import { PicaClient } from "@withpica/mcp-sdk";
5
- import { ToolDefinition, ToolExecutor } from "./index.js";
6
- export declare class DashboardTools {
7
- private pica;
8
- constructor(pica: PicaClient);
9
- getTools(): Array<{
10
- definition: ToolDefinition;
11
- executor: ToolExecutor;
12
- }>;
13
- private queryDiscoveries;
14
- private reviewDiscovery;
15
- private attentionItems;
16
- private briefing;
17
- private pulse;
18
- }
19
- //# sourceMappingURL=dashboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAOtE,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YA2G3D,gBAAgB;YA8BhB,eAAe;YAaf,cAAc;YAYd,QAAQ;YAMR,KAAK;CAIpB"}
@@ -1,146 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- import { formatAsText, formatSuccess, formatStructuredList, } from "@withpica/mcp-utils";
3
- export class DashboardTools {
4
- pica;
5
- constructor(pica) {
6
- this.pica = pica;
7
- }
8
- getTools() {
9
- return [
10
- // --- Discoveries ---
11
- {
12
- definition: {
13
- name: "pica_discoveries_query",
14
- description: "Query discoveries — system-computed findings like ISRC matches, " +
15
- "duplicate detection, enrichment opportunities, and registration gaps. " +
16
- "Filter by status to see all, pending (needing review), or reviewed items.",
17
- inputSchema: {
18
- type: "object",
19
- properties: {
20
- status: {
21
- type: "string",
22
- enum: ["all", "pending", "reviewed"],
23
- description: "Filter by status: 'all' for everything, 'pending' for items needing review, 'reviewed' for already-handled (default: all)",
24
- },
25
- limit: {
26
- type: "number",
27
- description: "Max results (default 50)",
28
- },
29
- },
30
- },
31
- },
32
- executor: this.queryDiscoveries.bind(this),
33
- },
34
- {
35
- definition: {
36
- name: "pica_discoveries_review",
37
- description: "Accept or reject a pending discovery. " +
38
- "Accepted discoveries update your catalog automatically.",
39
- inputSchema: {
40
- type: "object",
41
- properties: {
42
- discovery_id: {
43
- type: "string",
44
- description: "The discovery ID to review",
45
- },
46
- status: {
47
- type: "string",
48
- enum: ["accepted", "rejected"],
49
- description: "Accept or reject the discovery",
50
- },
51
- },
52
- required: ["discovery_id", "status"],
53
- },
54
- },
55
- executor: this.reviewDiscovery.bind(this),
56
- },
57
- // --- Dashboard ---
58
- {
59
- definition: {
60
- name: "pica_dashboard_attention",
61
- description: "What needs my attention? Shows items requiring action — " +
62
- "incomplete works, unsigned agreements, overdue tasks, " +
63
- "pending invites, and quality issues.",
64
- inputSchema: {
65
- type: "object",
66
- properties: {
67
- door: {
68
- type: "string",
69
- enum: ["respond", "catalog"],
70
- description: "Focus area: 'respond' for urgent items, 'catalog' for data quality",
71
- },
72
- limit: {
73
- type: "number",
74
- description: "Max items (default 10)",
75
- },
76
- },
77
- },
78
- },
79
- executor: this.attentionItems.bind(this),
80
- },
81
- {
82
- definition: {
83
- name: "pica_dashboard_briefing",
84
- description: "Get your daily briefing — a summary of catalog health, " +
85
- "recent activity, upcoming deadlines, and recommended actions.",
86
- inputSchema: {
87
- type: "object",
88
- properties: {},
89
- },
90
- },
91
- executor: this.briefing.bind(this),
92
- },
93
- {
94
- definition: {
95
- name: "pica_dashboard_pulse",
96
- description: "Get the pulse of your catalog — works needing attention, " +
97
- "upcoming deadlines, provenance status, and background task progress.",
98
- inputSchema: {
99
- type: "object",
100
- properties: {},
101
- },
102
- },
103
- executor: this.pulse.bind(this),
104
- },
105
- ];
106
- }
107
- async queryDiscoveries(args) {
108
- const status = args.status || "all";
109
- // "pending" delegates to the dedicated pending endpoint
110
- if (status === "pending") {
111
- const result = await this.pica.dashboard.pendingDiscoveries();
112
- const items = result?.data || result || [];
113
- return formatStructuredList(Array.isArray(items) ? items : [], "pending discovery");
114
- }
115
- // "all" or "reviewed" use the general discoveries endpoint
116
- const result = await this.pica.dashboard.discoveries({
117
- unread: status === "all" ? undefined : false,
118
- limit: args.limit,
119
- });
120
- const items = result?.data || result || [];
121
- const unreadCount = result?.unreadCount ?? 0;
122
- return formatStructuredList(Array.isArray(items) ? items : [], "discovery", { unreadCount });
123
- }
124
- async reviewDiscovery(args) {
125
- const result = await this.pica.dashboard.reviewDiscovery(args.discovery_id, args.status);
126
- return formatSuccess(`Discovery ${args.discovery_id} ${args.status}`, result);
127
- }
128
- async attentionItems(args) {
129
- const result = await this.pica.dashboard.attentionItems({
130
- door: args.door,
131
- limit: args.limit,
132
- });
133
- const items = result?.data?.items || result?.items || [];
134
- return formatStructuredList(Array.isArray(items) ? items : [], "attention item");
135
- }
136
- async briefing(_args) {
137
- const result = await this.pica.dashboard.briefing();
138
- const insights = result?.data?.insights || result?.insights || result;
139
- return formatSuccess("Daily briefing", insights);
140
- }
141
- async pulse(_args) {
142
- const result = await this.pica.dashboard.pulse();
143
- return formatAsText(result);
144
- }
145
- }
146
- //# sourceMappingURL=dashboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tools/dashboard.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Directory Tools — manage directory visibility and settings
3
- */
4
- import { PicaClient } from "@withpica/mcp-sdk";
5
- import { ToolDefinition, ToolExecutor } from "./index.js";
6
- export declare class DirectoryTools {
7
- private pica;
8
- constructor(pica: PicaClient);
9
- getTools(): Array<{
10
- definition: ToolDefinition;
11
- executor: ToolExecutor;
12
- }>;
13
- private directorySettings;
14
- }
15
- //# sourceMappingURL=directory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/tools/directory.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1D,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YA6D3D,iBAAiB;CAkDhC"}
@@ -1,106 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- import { formatAsText, formatSuccess } from "@withpica/mcp-utils";
3
- export class DirectoryTools {
4
- pica;
5
- constructor(pica) {
6
- this.pica = pica;
7
- }
8
- getTools() {
9
- return [
10
- {
11
- definition: {
12
- name: "pica_directory_settings",
13
- description: "Get or update your organisation's directory visibility settings. " +
14
- "Controls whether your catalogue appears in the PICA public directory " +
15
- "and what information is shown (audio previews, splits, publishers, etc.).",
16
- inputSchema: {
17
- type: "object",
18
- properties: {
19
- action: {
20
- type: "string",
21
- enum: ["get", "update"],
22
- description: "Action to perform. 'get' returns current settings. 'update' changes settings.",
23
- },
24
- opted_in: {
25
- type: "boolean",
26
- description: "Make catalogue discoverable in the PICA directory. " +
27
- "When true, sync supervisors and AI agents can find your recordings.",
28
- },
29
- show_audio_preview: {
30
- type: "boolean",
31
- description: "Allow audio previews in directory listings. " +
32
- "When true, visitors can listen to your tracks.",
33
- },
34
- show_splits: {
35
- type: "boolean",
36
- description: "Show credit split percentages in directory.",
37
- },
38
- show_publishers: {
39
- type: "boolean",
40
- description: "Show publisher information in directory.",
41
- },
42
- show_agreements: {
43
- type: "boolean",
44
- description: "Show agreement details in directory.",
45
- },
46
- show_stems: {
47
- type: "boolean",
48
- description: "Show stems/instrumentals in directory.",
49
- },
50
- contact_enabled: {
51
- type: "boolean",
52
- description: "Allow licensing enquiries from the directory. " +
53
- "When true, supervisors can send enquiries directly.",
54
- },
55
- },
56
- required: ["action"],
57
- },
58
- },
59
- executor: this.directorySettings.bind(this),
60
- },
61
- ];
62
- }
63
- async directorySettings(args) {
64
- if (args.action === "get") {
65
- const result = await this.pica.directory.getSettings();
66
- const s = result.settings;
67
- const status = s.opted_in ? "discoverable" : "private";
68
- const summary = [
69
- `Directory status: ${status}`,
70
- `Eligible works: ${result.eligible_work_count}`,
71
- s.show_audio_preview ? "Audio preview: on" : "Audio preview: off",
72
- s.contact_enabled ? "Enquiries: on" : "Enquiries: off",
73
- s.show_splits ? "Splits: visible" : "Splits: hidden",
74
- s.show_publishers ? "Publishers: visible" : "Publishers: hidden",
75
- ].join("\n");
76
- return {
77
- content: [{ type: "text", text: summary }],
78
- structuredContent: result,
79
- };
80
- }
81
- // Update
82
- const updates = {};
83
- const boolFields = [
84
- "opted_in",
85
- "show_audio_preview",
86
- "show_splits",
87
- "show_publishers",
88
- "show_agreements",
89
- "show_stems",
90
- "contact_enabled",
91
- ];
92
- for (const field of boolFields) {
93
- if (args[field] !== undefined)
94
- updates[field] = Boolean(args[field]);
95
- }
96
- if (Object.keys(updates).length === 0) {
97
- return formatAsText({
98
- error: "No settings to update. Provide at least one setting field.",
99
- });
100
- }
101
- const result = await this.pica.directory.updateSettings(updates);
102
- const status = result.opted_in ? "discoverable" : "private";
103
- return formatSuccess(`Directory settings updated. Your catalogue is now ${status}.`, result);
104
- }
105
- }
106
- //# sourceMappingURL=directory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/tools/directory.ts"],"names":[],"mappings":"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"}