@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,280 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- /**
3
- * pica_upload MCP App card — generic drop zone.
4
- *
5
- * Renders a drop zone + file input, instantiates createUploadManager() from
6
- * shared.ts, and reports uploaded file metadata back to the agent via
7
- * app.updateModelContext() once all files have settled.
8
- *
9
- * DOM API only — never innerHTML.
10
- */
11
- import { buildAppHtml } from "./shared.js";
12
- const UPLOAD_BODY = `
13
- <div class="stack gap-6">
14
- <header>
15
- <h1 class="heading heading-lg" id="up-title">upload files</h1>
16
- <p class="text-secondary" id="up-subtitle">drop files here or click to browse</p>
17
- </header>
18
-
19
- <section>
20
- <div id="up-dropzone" class="up-dropzone">
21
- <p class="text-secondary" id="up-dropzone-label">drop files here or click to browse</p>
22
- <input type="file" id="up-input" multiple style="display: none;" />
23
- </div>
24
- <div id="up-thumbnails" class="up-thumbnails"></div>
25
- <p class="text-tertiary" id="up-max-msg" style="margin-top: 8px; display: none;"></p>
26
- <p class="text-tertiary" id="up-status" style="margin-top: 12px; display: none;"></p>
27
- </section>
28
- </div>
29
-
30
- <style>
31
- .up-dropzone {
32
- background: rgba(255,255,255,0.03);
33
- border: 1px dashed rgba(255,255,255,0.15);
34
- border-radius: 12px;
35
- padding: 64px 24px;
36
- text-align: center;
37
- cursor: pointer;
38
- transition: background 0.15s, border-color 0.15s;
39
- }
40
- .up-dropzone.dragover {
41
- background: rgba(184,115,51,0.05);
42
- border-color: var(--accent);
43
- }
44
- .up-thumbnails {
45
- display: flex;
46
- gap: 12px;
47
- flex-wrap: wrap;
48
- margin-top: 16px;
49
- }
50
- .up-thumb {
51
- position: relative;
52
- min-width: 120px;
53
- max-width: 180px;
54
- padding: 12px;
55
- border-radius: 8px;
56
- border: 1px solid var(--card-border);
57
- background: rgba(255,255,255,0.03);
58
- font-size: 12px;
59
- }
60
- .up-thumb-filename {
61
- color: var(--text-primary);
62
- word-break: break-all;
63
- margin-bottom: 4px;
64
- }
65
- .up-thumb-state {
66
- color: var(--text-tertiary);
67
- font-size: 11px;
68
- }
69
- .up-thumb-state-failed { border-color: rgba(255,80,80,0.5); }
70
- .up-thumb-state-network_error { border-color: rgba(255,165,0,0.4); }
71
- .up-thumb-state-uploaded { border-color: rgba(135,169,107,0.5); }
72
- .up-thumb-remove {
73
- position: absolute; top: 4px; right: 4px;
74
- width: 18px; height: 18px; border-radius: 50%;
75
- background: rgba(0,0,0,0.6);
76
- color: white; font-size: 11px; border: none; cursor: pointer;
77
- display: flex; align-items: center; justify-content: center;
78
- }
79
- @media (max-width: 600px) {
80
- .up-dropzone { padding: 40px 16px; }
81
- }
82
- </style>
83
- `;
84
- const UPLOAD_JS = `
85
- var upState = {
86
- config: { accept: "any", purpose: null, max_files: null },
87
- manager: null,
88
- reported: false,
89
- };
90
-
91
- function upAcceptToAttr(accept) {
92
- switch (accept) {
93
- case "image": return "image/*";
94
- case "audio": return "audio/*";
95
- case "video": return "video/*";
96
- case "document": return ".pdf,.doc,.docx,.txt,.csv,.xls,.xlsx,.rtf,.md";
97
- default: return "";
98
- }
99
- }
100
-
101
- function upRender(files) {
102
- var container = document.getElementById("up-thumbnails");
103
- if (!container) return;
104
- container.textContent = "";
105
-
106
- files.forEach(function (f) {
107
- var thumb = document.createElement("div");
108
- thumb.className = "up-thumb up-thumb-state-" + f.state;
109
-
110
- var name = document.createElement("div");
111
- name.className = "up-thumb-filename";
112
- name.textContent = f.filename;
113
- thumb.appendChild(name);
114
-
115
- var stateEl = document.createElement("div");
116
- stateEl.className = "up-thumb-state";
117
- if (f.state === "uploading") stateEl.textContent = "uploading...";
118
- else if (f.state === "uploaded") stateEl.textContent = "uploaded";
119
- else if (f.state === "failed") stateEl.textContent = "failed — click to retry";
120
- else if (f.state === "network_error") stateEl.textContent = "network error — check connection or use web dashboard";
121
- else stateEl.textContent = f.state;
122
- thumb.appendChild(stateEl);
123
-
124
- if (f.state === "failed") {
125
- thumb.style.cursor = "pointer";
126
- thumb.onclick = function () { upState.manager.retryFile(f.id); };
127
- }
128
-
129
- var removeBtn = document.createElement("button");
130
- removeBtn.className = "up-thumb-remove";
131
- removeBtn.textContent = "\\u00D7";
132
- removeBtn.onclick = function (e) {
133
- e.stopPropagation();
134
- upState.manager.removeFile(f.id);
135
- };
136
- thumb.appendChild(removeBtn);
137
-
138
- container.appendChild(thumb);
139
- });
140
-
141
- upMaybeReport(files);
142
- }
143
-
144
- function upMaybeReport(files) {
145
- if (upState.reported) return;
146
- if (files.length === 0) return;
147
- var settled = files.every(function (f) {
148
- return f.state === "uploaded" || f.state === "failed" || f.state === "network_error";
149
- });
150
- if (!settled) return;
151
-
152
- var uploaded = files
153
- .filter(function (f) { return f.state === "uploaded"; })
154
- .map(function (f) {
155
- return {
156
- id: f.upload_id || null,
157
- url: f.url,
158
- mime_type: f.mime_type,
159
- size: f.size,
160
- filename: f.filename,
161
- uploaded_at: f.uploaded_at,
162
- };
163
- });
164
-
165
- upState.reported = true;
166
-
167
- var status = document.getElementById("up-status");
168
- if (status) {
169
- status.style.display = "block";
170
- status.textContent = uploaded.length + " file(s) uploaded — returning to agent";
171
- }
172
-
173
- if (app && typeof app.updateModelContext === "function") {
174
- try {
175
- app.updateModelContext({
176
- context: [{
177
- type: "text",
178
- text: JSON.stringify({ uploaded: uploaded }),
179
- }],
180
- });
181
- } catch (err) {
182
- console.warn("[pica_upload] updateModelContext failed:", err);
183
- }
184
- }
185
- }
186
-
187
- function upEnforceMaxFiles(incoming) {
188
- var maxMsgEl = document.getElementById("up-max-msg");
189
- if (maxMsgEl) {
190
- maxMsgEl.style.display = "none";
191
- maxMsgEl.textContent = "";
192
- }
193
- var max = upState.config.max_files;
194
- if (!max || !upState.manager) return incoming;
195
- var currentCount = upState.manager.getFiles().length;
196
- var remaining = max - currentCount;
197
- if (remaining <= 0) {
198
- if (maxMsgEl) {
199
- maxMsgEl.textContent = "max " + max + " files — extras ignored";
200
- maxMsgEl.style.display = "block";
201
- }
202
- return [];
203
- }
204
- if (incoming.length > remaining) {
205
- if (maxMsgEl) {
206
- maxMsgEl.textContent = "max " + max + " files — extras ignored";
207
- maxMsgEl.style.display = "block";
208
- }
209
- return Array.prototype.slice.call(incoming, 0, remaining);
210
- }
211
- return incoming;
212
- }
213
-
214
- function upSetup() {
215
- var dz = document.getElementById("up-dropzone");
216
- var input = document.getElementById("up-input");
217
- var title = document.getElementById("up-title");
218
- var subtitle = document.getElementById("up-subtitle");
219
- var dzLabel = document.getElementById("up-dropzone-label");
220
-
221
- if (upState.config.purpose && title) {
222
- title.textContent = "upload: " + upState.config.purpose;
223
- }
224
- if (upState.config.accept && upState.config.accept !== "any" && subtitle) {
225
- subtitle.textContent = "drop " + upState.config.accept + " files here or click to browse";
226
- if (dzLabel) dzLabel.textContent = "drop " + upState.config.accept + " files here";
227
- }
228
-
229
- if (input) {
230
- input.accept = upAcceptToAttr(upState.config.accept);
231
- }
232
- if (!dz || !input) return;
233
-
234
- dz.addEventListener("click", function () { input.click(); });
235
- input.addEventListener("change", function (e) {
236
- if (e.target.files && e.target.files.length) {
237
- var allowed = upEnforceMaxFiles(e.target.files);
238
- if (allowed.length) {
239
- upState.reported = false;
240
- upState.manager.addFiles(allowed);
241
- }
242
- }
243
- input.value = "";
244
- });
245
- dz.addEventListener("dragover", function (e) {
246
- e.preventDefault();
247
- dz.classList.add("dragover");
248
- });
249
- dz.addEventListener("dragleave", function () { dz.classList.remove("dragover"); });
250
- dz.addEventListener("drop", function (e) {
251
- e.preventDefault();
252
- dz.classList.remove("dragover");
253
- if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length) {
254
- var allowed = upEnforceMaxFiles(e.dataTransfer.files);
255
- if (allowed.length) {
256
- upState.reported = false;
257
- upState.manager.addFiles(allowed);
258
- }
259
- }
260
- });
261
- }
262
-
263
- window.onPicaToolResult = function (data) {
264
- if (data && data.config) {
265
- upState.config = {
266
- accept: data.config.accept || "any",
267
- purpose: data.config.purpose || null,
268
- max_files: data.config.max_files || null,
269
- };
270
- }
271
- upState.manager = createUploadManager({
272
- accept: upState.config.accept,
273
- onStateChange: upRender,
274
- app: app,
275
- });
276
- upSetup();
277
- };
278
- `;
279
- export const UPLOAD_HTML = buildAppHtml("pica \u2014 upload", UPLOAD_BODY, UPLOAD_JS);
280
- //# sourceMappingURL=upload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/apps/upload.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEnB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkMjB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CACrC,oBAAoB,EACpB,WAAW,EACX,SAAS,CACV,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare const WITHPICA_PRIMER = "# PICA \u2014 Music Catalog Management Platform\n\nPICA helps music creators and publishers manage their catalog metadata,\ntrack royalties, and prepare works for registration with collection societies.\n\n## Core Entities\n\n### Work\nA musical composition (song, piece, library track). The central entity.\n- Has: title, ISWC, work_type (song/library/demo), genre, mood, BPM, key\n- Relationships: has many credits (writers/composers), has many recordings,\n has many agreements, may have audio files, may have multimedia\n- Identifiers: ISWC (global), Tunecode (PRS), CAE/IPI (writer)\n\n### Person\nA human involved in music \u2014 writer, composer, performer, producer, publisher.\n- Has: name, email, IPI number, ISNI, MusicBrainz ID, PRO affiliation\n- Relationships: credited on many works, may have recordings, may have agreements\n- Can be enriched via: ISNI, MusicBrainz, Wikidata\n\n### Recording\nA specific audio capture of a work \u2014 the master/sound recording side.\n- Has: title, ISRC, duration, artist, label\n- Relationships: belongs to one work, has credits (performers/producers)\n- Distinct from the work: a work is the composition, a recording is the performance\n\n### Agreement\nA contract governing rights to works \u2014 publishing, sync, distribution.\n- Has: title, type, parties, dates, territory, terms\n- Relationships: covers many works\n- Types: publishing_admin, co_publishing, master_recording, sub_publishing,\n admin_only, distribution, library_music, production, artist_contract,\n termination, report, other\n\n### Import Document\nA canonical representation of an ingested file (royalty statement, CSV import).\n- Has: source (16 formats \u2014 PROs: PRS, ASCAP, BMI, SESAC, SOCAN, APRA, GEMA, SACEM; NROs: PPL, SoundExchange, GVL; Mechanical: MCPS; Distributors: DistroKid, TuneCore, CD Baby; Revenue: YouTube Content ID), period, line items, field mappings, warnings\n- Immutable snapshot of the import event \u2014 not a live view\n- Use pica_import_documents_list to find them, pica_import_documents_get to read\n\n## First Connection\n\nIf you're connecting to this workspace for the first time or don't know where to start,\ninvoke the **workspace-autopilot** prompt. It reads the workspace state and routes you\nto the most valuable workflow automatically.\n\n## Recommended Workflows\n\n1. **Catalog audit**: pica_catalog_stats \u2192 pica_works_query({ health_filter: \"needs_attention\" }) \u2192 pica_works_inspect({ sections: [\"completeness\"] })\n2. **Enrichment**: pica_enrichment_candidates \u2192 pica_enrich_work_spotify/mlc/musicbrainz \u2192 pica_works_inspect (verify)\n3. **Statement reconciliation**: pica_import_documents_query \u2192 pica_import_documents_inspect({ sections: [\"diff\"] })\n4. **Duplicate cleanup**: pica_find_duplicates \u2192 review \u2192 pica_merge_duplicates\n5. **Registration readiness**: pica_works_inspect({ sections: [\"registration\"] }) \u2192 fix gaps \u2192 pica_export_song_registration\n\n## Key Concepts\n\n- **Organisation**: Multi-tenant \u2014 all data scoped to one org. Never cross org boundaries.\n- **PICA Score**: Composite catalog legibility index (0-100, grade A-F). Four pillars:\n identification, documentation, registration, completeness.\n- **Enrichment cascade**: When an identifier is added, external sources\n (MusicBrainz, ISNI, MLC) are queried automatically to fill gaps.\n- **Credits**: Work credits (writers/composers with splits) are distinct from\n recording credits (performers/producers). Different tables, different role enums.\n Work credit roles: writer, composer, arranger, lyricist, producer, performer.\n Recording credit roles: Writer, Composer, Producer, Performer (PascalCase).\n";
2
- //# sourceMappingURL=llms-primer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llms-primer.d.ts","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,kpHAiE3B,CAAC"}
@@ -1,68 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- export const WITHPICA_PRIMER = `# PICA — Music Catalog Management Platform
3
-
4
- PICA helps music creators and publishers manage their catalog metadata,
5
- track royalties, and prepare works for registration with collection societies.
6
-
7
- ## Core Entities
8
-
9
- ### Work
10
- A musical composition (song, piece, library track). The central entity.
11
- - Has: title, ISWC, work_type (song/library/demo), genre, mood, BPM, key
12
- - Relationships: has many credits (writers/composers), has many recordings,
13
- has many agreements, may have audio files, may have multimedia
14
- - Identifiers: ISWC (global), Tunecode (PRS), CAE/IPI (writer)
15
-
16
- ### Person
17
- A human involved in music — writer, composer, performer, producer, publisher.
18
- - Has: name, email, IPI number, ISNI, MusicBrainz ID, PRO affiliation
19
- - Relationships: credited on many works, may have recordings, may have agreements
20
- - Can be enriched via: ISNI, MusicBrainz, Wikidata
21
-
22
- ### Recording
23
- A specific audio capture of a work — the master/sound recording side.
24
- - Has: title, ISRC, duration, artist, label
25
- - Relationships: belongs to one work, has credits (performers/producers)
26
- - Distinct from the work: a work is the composition, a recording is the performance
27
-
28
- ### Agreement
29
- A contract governing rights to works — publishing, sync, distribution.
30
- - Has: title, type, parties, dates, territory, terms
31
- - Relationships: covers many works
32
- - Types: publishing_admin, co_publishing, master_recording, sub_publishing,
33
- admin_only, distribution, library_music, production, artist_contract,
34
- termination, report, other
35
-
36
- ### Import Document
37
- A canonical representation of an ingested file (royalty statement, CSV import).
38
- - Has: source (16 formats — PROs: PRS, ASCAP, BMI, SESAC, SOCAN, APRA, GEMA, SACEM; NROs: PPL, SoundExchange, GVL; Mechanical: MCPS; Distributors: DistroKid, TuneCore, CD Baby; Revenue: YouTube Content ID), period, line items, field mappings, warnings
39
- - Immutable snapshot of the import event — not a live view
40
- - Use pica_import_documents_list to find them, pica_import_documents_get to read
41
-
42
- ## First Connection
43
-
44
- If you're connecting to this workspace for the first time or don't know where to start,
45
- invoke the **workspace-autopilot** prompt. It reads the workspace state and routes you
46
- to the most valuable workflow automatically.
47
-
48
- ## Recommended Workflows
49
-
50
- 1. **Catalog audit**: pica_catalog_stats → pica_works_query({ health_filter: "needs_attention" }) → pica_works_inspect({ sections: ["completeness"] })
51
- 2. **Enrichment**: pica_enrichment_candidates → pica_enrich_work_spotify/mlc/musicbrainz → pica_works_inspect (verify)
52
- 3. **Statement reconciliation**: pica_import_documents_query → pica_import_documents_inspect({ sections: ["diff"] })
53
- 4. **Duplicate cleanup**: pica_find_duplicates → review → pica_merge_duplicates
54
- 5. **Registration readiness**: pica_works_inspect({ sections: ["registration"] }) → fix gaps → pica_export_song_registration
55
-
56
- ## Key Concepts
57
-
58
- - **Organisation**: Multi-tenant — all data scoped to one org. Never cross org boundaries.
59
- - **PICA Score**: Composite catalog legibility index (0-100, grade A-F). Four pillars:
60
- identification, documentation, registration, completeness.
61
- - **Enrichment cascade**: When an identifier is added, external sources
62
- (MusicBrainz, ISNI, MLC) are queried automatically to fill gaps.
63
- - **Credits**: Work credits (writers/composers with splits) are distinct from
64
- recording credits (performers/producers). Different tables, different role enums.
65
- Work credit roles: writer, composer, arranger, lyricist, producer, performer.
66
- Recording credit roles: Writer, Composer, Producer, Performer (PascalCase).
67
- `;
68
- //# sourceMappingURL=llms-primer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llms-primer.js","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiE9B,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Server-level instructions sent to agents on MCP handshake.
3
- * Keep under 2000 chars — this is context budget, not documentation.
4
- *
5
- * Block playbook: "document the high level of your server"
6
- * Lowin: "instructions are context — design them as context"
7
- */
8
- export declare const SERVER_INSTRUCTIONS = "PICA manages music catalog metadata \u2014 works, recordings, people, credits, agreements, and rights.\n\nStart here:\n- pica_dashboard_briefing \u2014 daily summary of what needs attention\n- pica_search_all \u2014 find any entity by name, ISWC, ISRC, or IPI\n- pica_works_query / pica_people_query \u2014 browse the catalog\n\nKey patterns:\n- Read tools are safe to call freely (annotated readOnlyHint=true)\n- Use _inspect tools with sections param for targeted data (e.g., pica_works_inspect with sections: [\"basic\", \"credits\"])\n- Write tools (create/update) confirm what changed after execution\n- Destructive tools (delete/merge) require a two-step confirmation with a token\n- Errors include a \"suggestion\" field with recovery instructions and a \"next_tool\" to try\n\nTool categories: catalog, enrichment, business, discovery, media, comms, settings.\nUse pica_dashboard_attention for items needing action.\nUse pica_works_inspect with sections: [\"health\", \"completeness\"] to check data quality.\nEnrichment tools (pica_enrich_work_*) pull from external sources \u2014 Spotify, MusicBrainz, MLC, ISNI, Discogs, YouTube.\nThe agent orchestrates enrichment \u2014 try sources based on available identifiers, follow recovery hints.\n\nAll query endpoints accept \"limit\" (default 50) and return paginated results.\nIDs are UUIDs. When unsure of an ID, use a _query tool first.\n\nWhen calling write tools: briefly tell the user what you're about to do before calling. After execution, confirm what changed.\nWhen calling destructive tools: describe exactly what will be deleted/merged and get explicit user confirmation before calling.";
9
- //# sourceMappingURL=server-instructions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-instructions.d.ts","sourceRoot":"","sources":["../src/server-instructions.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,2nDAwBgG,CAAC"}
@@ -1,34 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- /**
3
- * Server-level instructions sent to agents on MCP handshake.
4
- * Keep under 2000 chars — this is context budget, not documentation.
5
- *
6
- * Block playbook: "document the high level of your server"
7
- * Lowin: "instructions are context — design them as context"
8
- */
9
- export const SERVER_INSTRUCTIONS = `PICA manages music catalog metadata — works, recordings, people, credits, agreements, and rights.
10
-
11
- Start here:
12
- - pica_dashboard_briefing — daily summary of what needs attention
13
- - pica_search_all — find any entity by name, ISWC, ISRC, or IPI
14
- - pica_works_query / pica_people_query — browse the catalog
15
-
16
- Key patterns:
17
- - Read tools are safe to call freely (annotated readOnlyHint=true)
18
- - Use _inspect tools with sections param for targeted data (e.g., pica_works_inspect with sections: ["basic", "credits"])
19
- - Write tools (create/update) confirm what changed after execution
20
- - Destructive tools (delete/merge) require a two-step confirmation with a token
21
- - Errors include a "suggestion" field with recovery instructions and a "next_tool" to try
22
-
23
- Tool categories: catalog, enrichment, business, discovery, media, comms, settings.
24
- Use pica_dashboard_attention for items needing action.
25
- Use pica_works_inspect with sections: ["health", "completeness"] to check data quality.
26
- Enrichment tools (pica_enrich_work_*) pull from external sources — Spotify, MusicBrainz, MLC, ISNI, Discogs, YouTube.
27
- The agent orchestrates enrichment — try sources based on available identifiers, follow recovery hints.
28
-
29
- All query endpoints accept "limit" (default 50) and return paginated results.
30
- IDs are UUIDs. When unsure of an ID, use a _query tool first.
31
-
32
- When calling write tools: briefly tell the user what you're about to do before calling. After execution, confirm what changed.
33
- When calling destructive tools: describe exactly what will be deleted/merged and get explicit user confirmation before calling.`;
34
- //# sourceMappingURL=server-instructions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../src/server-instructions.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;gIAwB6F,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Agreement Types Tools — templates, producer agreements, and work-for-hire
3
- *
4
- * Unified CRUD via type-routed tools, plus template-specific operations
5
- * (render, duplicate, set_default).
6
- */
7
- import { PicaClient } from "@withpica/mcp-sdk";
8
- import { ToolDefinition, ToolExecutor } from "./index.js";
9
- export declare class AgreementTypesTools {
10
- private pica;
11
- constructor(pica: PicaClient);
12
- private getResource;
13
- private labelFor;
14
- getTools(): Array<{
15
- definition: ToolDefinition;
16
- executor: ToolExecutor;
17
- }>;
18
- private query;
19
- private inspect;
20
- private create;
21
- private update;
22
- private delete;
23
- private renderTemplate;
24
- private duplicateTemplate;
25
- private setDefaultTemplate;
26
- }
27
- //# sourceMappingURL=agreement-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agreement-types.d.ts","sourceRoot":"","sources":["../../src/tools/agreement-types.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAMtE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,QAAQ;IAWhB,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YAyS3D,KAAK;YAML,OAAO;YAMP,MAAM;YA8CN,MAAM;YAON,MAAM;YASN,cAAc;YAMd,iBAAiB;YAOjB,kBAAkB;CAMjC"}