@withpica/mcp-server 1.3.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 (347) hide show
  1. package/.claude/settings.local.json +5 -0
  2. package/CHANGELOG.md +1850 -0
  3. package/README.md +304 -0
  4. package/assets/fonts/GeistSans-Light.woff2 +0 -0
  5. package/assets/fonts/InstrumentSerif-Italic.woff2 +0 -0
  6. package/assets/fonts/InstrumentSerif-Regular.woff2 +0 -0
  7. package/dist/apps/download.d.ts +2 -0
  8. package/dist/apps/download.d.ts.map +1 -0
  9. package/dist/apps/download.js +125 -0
  10. package/dist/apps/download.js.map +1 -0
  11. package/dist/apps/generated/shared-bundle.d.ts +5 -0
  12. package/dist/apps/generated/shared-bundle.d.ts.map +1 -0
  13. package/dist/apps/generated/shared-bundle.js +7 -0
  14. package/dist/apps/generated/shared-bundle.js.map +1 -0
  15. package/dist/apps/release.d.ts +2 -0
  16. package/dist/apps/release.d.ts.map +1 -0
  17. package/dist/apps/release.js +69 -0
  18. package/dist/apps/release.js.map +1 -0
  19. package/dist/apps/shared.d.ts +15 -0
  20. package/dist/apps/shared.d.ts.map +1 -0
  21. package/dist/apps/shared.js +480 -0
  22. package/dist/apps/shared.js.map +1 -0
  23. package/dist/apps/upload.d.ts +2 -0
  24. package/dist/apps/upload.d.ts.map +1 -0
  25. package/dist/apps/upload.js +280 -0
  26. package/dist/apps/upload.js.map +1 -0
  27. package/dist/config.d.ts +14 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +73 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +35 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/prompts/index.d.ts +86 -0
  36. package/dist/prompts/index.d.ts.map +1 -0
  37. package/dist/prompts/index.js +645 -0
  38. package/dist/prompts/index.js.map +1 -0
  39. package/dist/resources/agent-guide.d.ts +15 -0
  40. package/dist/resources/agent-guide.d.ts.map +1 -0
  41. package/dist/resources/agent-guide.js +284 -0
  42. package/dist/resources/agent-guide.js.map +1 -0
  43. package/dist/resources/index.d.ts +66 -0
  44. package/dist/resources/index.d.ts.map +1 -0
  45. package/dist/resources/index.js +510 -0
  46. package/dist/resources/index.js.map +1 -0
  47. package/dist/resources/llms-primer.d.ts +2 -0
  48. package/dist/resources/llms-primer.d.ts.map +1 -0
  49. package/dist/resources/llms-primer.js +68 -0
  50. package/dist/resources/llms-primer.js.map +1 -0
  51. package/dist/resources/required-schemas.generated.d.ts +455 -0
  52. package/dist/resources/required-schemas.generated.d.ts.map +1 -0
  53. package/dist/resources/required-schemas.generated.js +1041 -0
  54. package/dist/resources/required-schemas.generated.js.map +1 -0
  55. package/dist/resources/required-schemas.source.d.ts +53 -0
  56. package/dist/resources/required-schemas.source.d.ts.map +1 -0
  57. package/dist/resources/required-schemas.source.js +493 -0
  58. package/dist/resources/required-schemas.source.js.map +1 -0
  59. package/dist/resources/welcome.d.ts +14 -0
  60. package/dist/resources/welcome.d.ts.map +1 -0
  61. package/dist/resources/welcome.js +26 -0
  62. package/dist/resources/welcome.js.map +1 -0
  63. package/dist/server-instructions.d.ts +60 -0
  64. package/dist/server-instructions.d.ts.map +1 -0
  65. package/dist/server-instructions.js +93 -0
  66. package/dist/server-instructions.js.map +1 -0
  67. package/dist/server.d.ts +52 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +334 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/tools/access-simulate.d.ts +23 -0
  72. package/dist/tools/access-simulate.d.ts.map +1 -0
  73. package/dist/tools/access-simulate.js +162 -0
  74. package/dist/tools/access-simulate.js.map +1 -0
  75. package/dist/tools/agent-identity.d.ts +36 -0
  76. package/dist/tools/agent-identity.d.ts.map +1 -0
  77. package/dist/tools/agent-identity.js +274 -0
  78. package/dist/tools/agent-identity.js.map +1 -0
  79. package/dist/tools/agreement-types.d.ts +27 -0
  80. package/dist/tools/agreement-types.d.ts.map +1 -0
  81. package/dist/tools/agreement-types.js +281 -0
  82. package/dist/tools/agreement-types.js.map +1 -0
  83. package/dist/tools/agreements.d.ts +20 -0
  84. package/dist/tools/agreements.d.ts.map +1 -0
  85. package/dist/tools/agreements.js +282 -0
  86. package/dist/tools/agreements.js.map +1 -0
  87. package/dist/tools/analytics.d.ts +20 -0
  88. package/dist/tools/analytics.d.ts.map +1 -0
  89. package/dist/tools/analytics.js +130 -0
  90. package/dist/tools/analytics.js.map +1 -0
  91. package/dist/tools/app-tools.d.ts +15 -0
  92. package/dist/tools/app-tools.d.ts.map +1 -0
  93. package/dist/tools/app-tools.js +388 -0
  94. package/dist/tools/app-tools.js.map +1 -0
  95. package/dist/tools/assets.d.ts +25 -0
  96. package/dist/tools/assets.d.ts.map +1 -0
  97. package/dist/tools/assets.js +454 -0
  98. package/dist/tools/assets.js.map +1 -0
  99. package/dist/tools/audio-files.d.ts +20 -0
  100. package/dist/tools/audio-files.d.ts.map +1 -0
  101. package/dist/tools/audio-files.js +409 -0
  102. package/dist/tools/audio-files.js.map +1 -0
  103. package/dist/tools/audit.d.ts +19 -0
  104. package/dist/tools/audit.d.ts.map +1 -0
  105. package/dist/tools/audit.js +58 -0
  106. package/dist/tools/audit.js.map +1 -0
  107. package/dist/tools/auth.d.ts +22 -0
  108. package/dist/tools/auth.d.ts.map +1 -0
  109. package/dist/tools/auth.js +212 -0
  110. package/dist/tools/auth.js.map +1 -0
  111. package/dist/tools/bulk.d.ts +22 -0
  112. package/dist/tools/bulk.d.ts.map +1 -0
  113. package/dist/tools/bulk.js +164 -0
  114. package/dist/tools/bulk.js.map +1 -0
  115. package/dist/tools/calendar.d.ts +15 -0
  116. package/dist/tools/calendar.d.ts.map +1 -0
  117. package/dist/tools/calendar.js +68 -0
  118. package/dist/tools/calendar.js.map +1 -0
  119. package/dist/tools/collaborators.d.ts +21 -0
  120. package/dist/tools/collaborators.d.ts.map +1 -0
  121. package/dist/tools/collaborators.js +381 -0
  122. package/dist/tools/collaborators.js.map +1 -0
  123. package/dist/tools/comparisons.d.ts +22 -0
  124. package/dist/tools/comparisons.d.ts.map +1 -0
  125. package/dist/tools/comparisons.js +80 -0
  126. package/dist/tools/comparisons.js.map +1 -0
  127. package/dist/tools/credits.d.ts +39 -0
  128. package/dist/tools/credits.d.ts.map +1 -0
  129. package/dist/tools/credits.js +541 -0
  130. package/dist/tools/credits.js.map +1 -0
  131. package/dist/tools/custody-hints.d.ts +16 -0
  132. package/dist/tools/custody-hints.d.ts.map +1 -0
  133. package/dist/tools/custody-hints.js +27 -0
  134. package/dist/tools/custody-hints.js.map +1 -0
  135. package/dist/tools/custody.d.ts +38 -0
  136. package/dist/tools/custody.d.ts.map +1 -0
  137. package/dist/tools/custody.js +281 -0
  138. package/dist/tools/custody.js.map +1 -0
  139. package/dist/tools/dashboard.d.ts +22 -0
  140. package/dist/tools/dashboard.d.ts.map +1 -0
  141. package/dist/tools/dashboard.js +258 -0
  142. package/dist/tools/dashboard.js.map +1 -0
  143. package/dist/tools/directory.d.ts +15 -0
  144. package/dist/tools/directory.d.ts.map +1 -0
  145. package/dist/tools/directory.js +107 -0
  146. package/dist/tools/directory.js.map +1 -0
  147. package/dist/tools/discovery.d.ts +49 -0
  148. package/dist/tools/discovery.d.ts.map +1 -0
  149. package/dist/tools/discovery.js +851 -0
  150. package/dist/tools/discovery.js.map +1 -0
  151. package/dist/tools/disputes.d.ts +18 -0
  152. package/dist/tools/disputes.d.ts.map +1 -0
  153. package/dist/tools/disputes.js +62 -0
  154. package/dist/tools/disputes.js.map +1 -0
  155. package/dist/tools/documents.d.ts +15 -0
  156. package/dist/tools/documents.d.ts.map +1 -0
  157. package/dist/tools/documents.js +37 -0
  158. package/dist/tools/documents.js.map +1 -0
  159. package/dist/tools/duplicates.d.ts +25 -0
  160. package/dist/tools/duplicates.d.ts.map +1 -0
  161. package/dist/tools/duplicates.js +108 -0
  162. package/dist/tools/duplicates.js.map +1 -0
  163. package/dist/tools/enrichment.d.ts +56 -0
  164. package/dist/tools/enrichment.d.ts.map +1 -0
  165. package/dist/tools/enrichment.js +616 -0
  166. package/dist/tools/enrichment.js.map +1 -0
  167. package/dist/tools/exports.d.ts +19 -0
  168. package/dist/tools/exports.d.ts.map +1 -0
  169. package/dist/tools/exports.js +184 -0
  170. package/dist/tools/exports.js.map +1 -0
  171. package/dist/tools/feedback.d.ts +22 -0
  172. package/dist/tools/feedback.d.ts.map +1 -0
  173. package/dist/tools/feedback.js +100 -0
  174. package/dist/tools/feedback.js.map +1 -0
  175. package/dist/tools/forbidden-keywords.d.ts +62 -0
  176. package/dist/tools/forbidden-keywords.d.ts.map +1 -0
  177. package/dist/tools/forbidden-keywords.js +99 -0
  178. package/dist/tools/forbidden-keywords.js.map +1 -0
  179. package/dist/tools/gap-hints.d.ts +53 -0
  180. package/dist/tools/gap-hints.d.ts.map +1 -0
  181. package/dist/tools/gap-hints.js +245 -0
  182. package/dist/tools/gap-hints.js.map +1 -0
  183. package/dist/tools/groups.d.ts +29 -0
  184. package/dist/tools/groups.d.ts.map +1 -0
  185. package/dist/tools/groups.js +186 -0
  186. package/dist/tools/groups.js.map +1 -0
  187. package/dist/tools/import-documents.d.ts +21 -0
  188. package/dist/tools/import-documents.d.ts.map +1 -0
  189. package/dist/tools/import-documents.js +206 -0
  190. package/dist/tools/import-documents.js.map +1 -0
  191. package/dist/tools/import.d.ts +31 -0
  192. package/dist/tools/import.d.ts.map +1 -0
  193. package/dist/tools/import.js +610 -0
  194. package/dist/tools/import.js.map +1 -0
  195. package/dist/tools/index.d.ts +293 -0
  196. package/dist/tools/index.d.ts.map +1 -0
  197. package/dist/tools/index.js +1182 -0
  198. package/dist/tools/index.js.map +1 -0
  199. package/dist/tools/integrations.d.ts +19 -0
  200. package/dist/tools/integrations.d.ts.map +1 -0
  201. package/dist/tools/integrations.js +120 -0
  202. package/dist/tools/integrations.js.map +1 -0
  203. package/dist/tools/labels.d.ts +20 -0
  204. package/dist/tools/labels.d.ts.map +1 -0
  205. package/dist/tools/labels.js +48 -0
  206. package/dist/tools/labels.js.map +1 -0
  207. package/dist/tools/licensing.d.ts +40 -0
  208. package/dist/tools/licensing.d.ts.map +1 -0
  209. package/dist/tools/licensing.js +436 -0
  210. package/dist/tools/licensing.js.map +1 -0
  211. package/dist/tools/memory.d.ts +21 -0
  212. package/dist/tools/memory.d.ts.map +1 -0
  213. package/dist/tools/memory.js +120 -0
  214. package/dist/tools/memory.js.map +1 -0
  215. package/dist/tools/metadata.d.ts +15 -0
  216. package/dist/tools/metadata.d.ts.map +1 -0
  217. package/dist/tools/metadata.js +1532 -0
  218. package/dist/tools/metadata.js.map +1 -0
  219. package/dist/tools/multimedia.d.ts +19 -0
  220. package/dist/tools/multimedia.d.ts.map +1 -0
  221. package/dist/tools/multimedia.js +371 -0
  222. package/dist/tools/multimedia.js.map +1 -0
  223. package/dist/tools/my-reported-issues.d.ts +32 -0
  224. package/dist/tools/my-reported-issues.d.ts.map +1 -0
  225. package/dist/tools/my-reported-issues.js +123 -0
  226. package/dist/tools/my-reported-issues.js.map +1 -0
  227. package/dist/tools/notes.d.ts +21 -0
  228. package/dist/tools/notes.d.ts.map +1 -0
  229. package/dist/tools/notes.js +115 -0
  230. package/dist/tools/notes.js.map +1 -0
  231. package/dist/tools/notifications.d.ts +28 -0
  232. package/dist/tools/notifications.d.ts.map +1 -0
  233. package/dist/tools/notifications.js +417 -0
  234. package/dist/tools/notifications.js.map +1 -0
  235. package/dist/tools/onboarding.d.ts +24 -0
  236. package/dist/tools/onboarding.d.ts.map +1 -0
  237. package/dist/tools/onboarding.js +81 -0
  238. package/dist/tools/onboarding.js.map +1 -0
  239. package/dist/tools/people.d.ts +254 -0
  240. package/dist/tools/people.d.ts.map +1 -0
  241. package/dist/tools/people.js +481 -0
  242. package/dist/tools/people.js.map +1 -0
  243. package/dist/tools/projects.d.ts +20 -0
  244. package/dist/tools/projects.d.ts.map +1 -0
  245. package/dist/tools/projects.js +316 -0
  246. package/dist/tools/projects.js.map +1 -0
  247. package/dist/tools/public-filter.d.ts +43 -0
  248. package/dist/tools/public-filter.d.ts.map +1 -0
  249. package/dist/tools/public-filter.js +356 -0
  250. package/dist/tools/public-filter.js.map +1 -0
  251. package/dist/tools/publishers.d.ts +30 -0
  252. package/dist/tools/publishers.d.ts.map +1 -0
  253. package/dist/tools/publishers.js +105 -0
  254. package/dist/tools/publishers.js.map +1 -0
  255. package/dist/tools/purchases.d.ts +27 -0
  256. package/dist/tools/purchases.d.ts.map +1 -0
  257. package/dist/tools/purchases.js +9 -0
  258. package/dist/tools/purchases.js.map +1 -0
  259. package/dist/tools/recording-attribution-hints.d.ts +24 -0
  260. package/dist/tools/recording-attribution-hints.d.ts.map +1 -0
  261. package/dist/tools/recording-attribution-hints.js +27 -0
  262. package/dist/tools/recording-attribution-hints.js.map +1 -0
  263. package/dist/tools/recordings.d.ts +96 -0
  264. package/dist/tools/recordings.d.ts.map +1 -0
  265. package/dist/tools/recordings.js +564 -0
  266. package/dist/tools/recordings.js.map +1 -0
  267. package/dist/tools/recovery-hints.d.ts +40 -0
  268. package/dist/tools/recovery-hints.d.ts.map +1 -0
  269. package/dist/tools/recovery-hints.js +827 -0
  270. package/dist/tools/recovery-hints.js.map +1 -0
  271. package/dist/tools/release-rich.d.ts +31 -0
  272. package/dist/tools/release-rich.d.ts.map +1 -0
  273. package/dist/tools/release-rich.js +245 -0
  274. package/dist/tools/release-rich.js.map +1 -0
  275. package/dist/tools/releases.d.ts +36 -0
  276. package/dist/tools/releases.d.ts.map +1 -0
  277. package/dist/tools/releases.js +649 -0
  278. package/dist/tools/releases.js.map +1 -0
  279. package/dist/tools/report-issue.d.ts +21 -0
  280. package/dist/tools/report-issue.d.ts.map +1 -0
  281. package/dist/tools/report-issue.js +101 -0
  282. package/dist/tools/report-issue.js.map +1 -0
  283. package/dist/tools/royalties.d.ts +23 -0
  284. package/dist/tools/royalties.d.ts.map +1 -0
  285. package/dist/tools/royalties.js +262 -0
  286. package/dist/tools/royalties.js.map +1 -0
  287. package/dist/tools/search.d.ts +30 -0
  288. package/dist/tools/search.d.ts.map +1 -0
  289. package/dist/tools/search.js +115 -0
  290. package/dist/tools/search.js.map +1 -0
  291. package/dist/tools/send.d.ts +17 -0
  292. package/dist/tools/send.d.ts.map +1 -0
  293. package/dist/tools/send.js +188 -0
  294. package/dist/tools/send.js.map +1 -0
  295. package/dist/tools/sessions.d.ts +18 -0
  296. package/dist/tools/sessions.d.ts.map +1 -0
  297. package/dist/tools/sessions.js +153 -0
  298. package/dist/tools/sessions.js.map +1 -0
  299. package/dist/tools/settings.d.ts +23 -0
  300. package/dist/tools/settings.d.ts.map +1 -0
  301. package/dist/tools/settings.js +365 -0
  302. package/dist/tools/settings.js.map +1 -0
  303. package/dist/tools/share-links.d.ts +22 -0
  304. package/dist/tools/share-links.d.ts.map +1 -0
  305. package/dist/tools/share-links.js +188 -0
  306. package/dist/tools/share-links.js.map +1 -0
  307. package/dist/tools/signup.d.ts +26 -0
  308. package/dist/tools/signup.d.ts.map +1 -0
  309. package/dist/tools/signup.js +266 -0
  310. package/dist/tools/signup.js.map +1 -0
  311. package/dist/tools/split-sheets.d.ts +25 -0
  312. package/dist/tools/split-sheets.d.ts.map +1 -0
  313. package/dist/tools/split-sheets.js +309 -0
  314. package/dist/tools/split-sheets.js.map +1 -0
  315. package/dist/tools/storage-config.d.ts +13 -0
  316. package/dist/tools/storage-config.d.ts.map +1 -0
  317. package/dist/tools/storage-config.js +245 -0
  318. package/dist/tools/storage-config.js.map +1 -0
  319. package/dist/tools/subscription.d.ts +60 -0
  320. package/dist/tools/subscription.d.ts.map +1 -0
  321. package/dist/tools/subscription.js +440 -0
  322. package/dist/tools/subscription.js.map +1 -0
  323. package/dist/tools/sync-placements.d.ts +31 -0
  324. package/dist/tools/sync-placements.d.ts.map +1 -0
  325. package/dist/tools/sync-placements.js +431 -0
  326. package/dist/tools/sync-placements.js.map +1 -0
  327. package/dist/tools/team.d.ts +22 -0
  328. package/dist/tools/team.d.ts.map +1 -0
  329. package/dist/tools/team.js +144 -0
  330. package/dist/tools/team.js.map +1 -0
  331. package/dist/tools/telegram.d.ts +21 -0
  332. package/dist/tools/telegram.d.ts.map +1 -0
  333. package/dist/tools/telegram.js +144 -0
  334. package/dist/tools/telegram.js.map +1 -0
  335. package/dist/tools/uploads.d.ts +17 -0
  336. package/dist/tools/uploads.d.ts.map +1 -0
  337. package/dist/tools/uploads.js +165 -0
  338. package/dist/tools/uploads.js.map +1 -0
  339. package/dist/tools/works.d.ts +71 -0
  340. package/dist/tools/works.d.ts.map +1 -0
  341. package/dist/tools/works.js +694 -0
  342. package/dist/tools/works.js.map +1 -0
  343. package/package.json +54 -0
  344. package/scripts/build-required-schemas.ts +233 -0
  345. package/scripts/bundle-apps.ts +61 -0
  346. package/scripts/refresh-schema-mirror.ts +182 -0
  347. package/server.json +20 -0
@@ -0,0 +1,645 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ export class PromptRegistry {
3
+ /**
4
+ * List all available prompts
5
+ */
6
+ listPrompts() {
7
+ return [
8
+ {
9
+ name: "analyze-catalog",
10
+ description: "Analyze the music catalog and provide insights about completeness, quality, and opportunities",
11
+ arguments: [],
12
+ },
13
+ {
14
+ name: "find-duplicates",
15
+ description: "Find potential duplicate works or people that might need merging",
16
+ arguments: [],
17
+ },
18
+ {
19
+ name: "enrich-metadata",
20
+ description: "Suggest works and people that could be enriched from external sources (ISNI, MusicBrainz)",
21
+ arguments: [],
22
+ },
23
+ {
24
+ name: "verify-works",
25
+ description: "Review unverified works and suggest which ones are ready for verification",
26
+ arguments: [],
27
+ },
28
+ {
29
+ name: "assess-catalog-health",
30
+ description: "Get the PICA Score and provide a detailed assessment of catalog health with prioritized improvement actions",
31
+ arguments: [],
32
+ },
33
+ {
34
+ name: "audit-credits",
35
+ description: "Find works with missing or incomplete credits and flag potential split issues",
36
+ arguments: [],
37
+ },
38
+ {
39
+ name: "new-catalog-setup",
40
+ description: "Get started with PICA — import your music however you like (Spotify link, spreadsheet, screenshot, or just describe your songs)",
41
+ arguments: [],
42
+ },
43
+ {
44
+ name: "close-the-loop",
45
+ description: "Check what's missing on a specific work and offer to fix each gap",
46
+ arguments: [
47
+ {
48
+ name: "work_id",
49
+ description: "The work ID to check completeness for",
50
+ required: true,
51
+ },
52
+ ],
53
+ },
54
+ {
55
+ name: "register-my-works",
56
+ description: "Check registration status across PROs and help prepare works for registration",
57
+ arguments: [],
58
+ },
59
+ {
60
+ name: "prepare-for-sync",
61
+ description: "Get your catalog sync-ready — check audio analysis, mood tags, and completeness",
62
+ arguments: [],
63
+ },
64
+ {
65
+ name: "workspace-autopilot",
66
+ description: "Assess the workspace state and route to the right workflow — use this when you first connect or don't know where to start",
67
+ arguments: [],
68
+ },
69
+ {
70
+ name: "log-a-session",
71
+ description: "Log a studio session — guided capture of who was there, what work was being made, and what happened",
72
+ arguments: [
73
+ {
74
+ name: "work_id",
75
+ description: "Optional work this session was for — pass to skip the discovery question",
76
+ required: false,
77
+ },
78
+ ],
79
+ },
80
+ {
81
+ name: "set-recording-splits",
82
+ description: "Set master ownership splits on a recording — guided propose-and-confirm flow with verify gate",
83
+ arguments: [
84
+ {
85
+ name: "recording_id",
86
+ description: "Optional recording to set splits on — pass to skip the discovery question",
87
+ required: false,
88
+ },
89
+ ],
90
+ },
91
+ ];
92
+ }
93
+ /**
94
+ * Get a prompt by name
95
+ */
96
+ async getPrompt(name, args) {
97
+ switch (name) {
98
+ case "analyze-catalog":
99
+ return this.getAnalyzeCatalogPrompt();
100
+ case "find-duplicates":
101
+ return this.getFindDuplicatesPrompt();
102
+ case "enrich-metadata":
103
+ return this.getEnrichMetadataPrompt();
104
+ case "verify-works":
105
+ return this.getVerifyWorksPrompt();
106
+ case "assess-catalog-health":
107
+ return this.getAssessCatalogHealthPrompt();
108
+ case "audit-credits":
109
+ return this.getAuditCreditsPrompt();
110
+ case "new-catalog-setup":
111
+ return this.getNewCatalogSetupPrompt();
112
+ case "close-the-loop":
113
+ return this.getCloseTheLoopPrompt(args?.work_id);
114
+ case "register-my-works":
115
+ return this.getRegisterMyWorksPrompt();
116
+ case "prepare-for-sync":
117
+ return this.getPrepareForSyncPrompt();
118
+ case "workspace-autopilot":
119
+ return this.getWorkspaceAutopilotPrompt();
120
+ case "log-a-session":
121
+ return this.getLogASessionPrompt(args?.work_id);
122
+ case "set-recording-splits":
123
+ return this.getSetRecordingSplitsPrompt(args?.recording_id);
124
+ default:
125
+ throw new Error(`Prompt not found: ${name}`);
126
+ }
127
+ }
128
+ /**
129
+ * Analyze catalog prompt
130
+ */
131
+ getAnalyzeCatalogPrompt() {
132
+ return {
133
+ messages: [
134
+ {
135
+ role: "user",
136
+ content: {
137
+ type: "text",
138
+ text: `Please analyze my music catalog and provide a comprehensive report.
139
+
140
+ If you're unsure where to start, read pica://docs/agent-guide for the workflow taxonomy.
141
+
142
+ Use the following tools to gather data:
143
+ 1. pica_catalog_stats - Get overall statistics
144
+ 2. pica_works_query - Review works data
145
+ 3. pica_people_query - Review people data
146
+ 4. pica_recordings_query - Review recordings data
147
+
148
+ Analyze and report on:
149
+ - Overall catalog size and composition
150
+ - Data quality (missing ISWCs, ISRCs, metadata)
151
+ - Verification status (how many works are verified/unverified)
152
+ - Enrichment opportunities (people missing ISNI or MusicBrainz data)
153
+ - Completeness (works with recordings, people with credits, etc.)
154
+ - Recommendations for improvement
155
+
156
+ Please provide specific, actionable insights.`,
157
+ },
158
+ },
159
+ ],
160
+ };
161
+ }
162
+ /**
163
+ * Find duplicates prompt
164
+ */
165
+ getFindDuplicatesPrompt() {
166
+ return {
167
+ messages: [
168
+ {
169
+ role: "user",
170
+ content: {
171
+ type: "text",
172
+ text: `Please help me find potential duplicate works and people in my catalog.
173
+
174
+ Use these tools:
175
+ 1. pica_works_query - Get all works
176
+ 2. pica_people_query - Get all people
177
+
178
+ Look for:
179
+ - Works with very similar or identical titles
180
+ - People with similar names (accounting for typos, different orderings)
181
+ - Works with the same ISWC (if ISWC exists)
182
+ - People with the same email address
183
+
184
+ For each potential duplicate found:
185
+ - List the IDs and key details
186
+ - Explain why you think they might be duplicates
187
+ - Suggest whether they should be merged or kept separate
188
+
189
+ Be thorough but conservative - only flag items that have a strong likelihood of being duplicates.`,
190
+ },
191
+ },
192
+ ],
193
+ };
194
+ }
195
+ /**
196
+ * Enrich metadata prompt
197
+ */
198
+ getEnrichMetadataPrompt() {
199
+ return {
200
+ messages: [
201
+ {
202
+ role: "user",
203
+ content: {
204
+ type: "text",
205
+ text: `Please identify works and people that could benefit from metadata enrichment.
206
+
207
+ Pre-flight: read pica://schemas/enrichment-resolve-required for the canonical resolve/propose shape (target_type, target_id, sources).
208
+ If you're unsure where to start, read pica://docs/agent-guide for the workflow taxonomy.
209
+
210
+ Use these tools:
211
+ 1. pica_works_query - Get all works
212
+ 2. pica_people_query - Get all people
213
+
214
+ Identify:
215
+ - People without ISNI identifiers who might have one
216
+ - People without MusicBrainz IDs who might have one
217
+ - Works missing ISWCs that could potentially be looked up
218
+ - People missing biographical information
219
+
220
+ For each enrichment opportunity:
221
+ - List the person/work details
222
+ - Explain what data is missing
223
+ - Suggest potential sources (ISNI, MusicBrainz, etc.)
224
+ - Prioritize the most impactful enrichment opportunities
225
+
226
+ Focus on people and works where enrichment would add the most value.
227
+
228
+ ADR-193 — before asking the user to paste facts, check your other connected MCPs (email, drive, notes, calendar) for evidence first. When you find it, cite the source via pica_enrichment_propose with a URI-style source (gmail://thread-id/..., gdrive://file-id/..., notion://page-id/..., file:///..., etc). PICA read tools surface gap_hints pointing at the exact capability + query shape to use — follow them when present.`,
229
+ },
230
+ },
231
+ ],
232
+ };
233
+ }
234
+ /**
235
+ * Verify works prompt
236
+ */
237
+ getVerifyWorksPrompt() {
238
+ return {
239
+ messages: [
240
+ {
241
+ role: "user",
242
+ content: {
243
+ type: "text",
244
+ text: `Please review unverified works and suggest which ones are ready for verification.
245
+
246
+ Use these tools:
247
+ 1. pica_works_query with verified: false - Get unverified works
248
+ 2. pica_recordings_query with work_id - Check if works have recordings
249
+ 3. pica_people_query - Check for associated people/credits
250
+
251
+ For each unverified work, assess:
252
+ - Does it have complete metadata (title, type, duration)?
253
+ - Does it have an ISWC?
254
+ - Does it have associated recordings?
255
+ - Does it have proper credits/people assigned?
256
+
257
+ Categorize unverified works into:
258
+ 1. Ready to verify - Has complete information
259
+ 2. Needs minor updates - Missing 1-2 pieces of information
260
+ 3. Needs significant work - Missing multiple key fields
261
+
262
+ Provide specific recommendations for each category, including what's needed to move works forward.`,
263
+ },
264
+ },
265
+ ],
266
+ };
267
+ }
268
+ /**
269
+ * Assess catalog health prompt
270
+ */
271
+ getAssessCatalogHealthPrompt() {
272
+ return {
273
+ messages: [
274
+ {
275
+ role: "user",
276
+ content: {
277
+ type: "text",
278
+ text: `Please assess the health of my music catalog using the PICA Score.
279
+
280
+ If you're unsure where to start, read pica://docs/agent-guide for the workflow taxonomy.
281
+
282
+ Use these tools:
283
+ 1. pica_works_inspect({ sections: ["score"] }) - Get the PICA Score with pillar breakdown
284
+ 2. pica_catalog_stats - Get raw catalog statistics for additional context
285
+ 3. pica_works_query - Sample works data to understand quality
286
+
287
+ Analyze:
288
+ - The composite score and grade — is this catalog ready for commercial use?
289
+ - Each pillar (income, ownership, asset, verification) — which is weakest?
290
+ - The top actions — prioritize them by effort vs impact
291
+ - Compare pillar scores to identify the biggest gaps
292
+
293
+ Provide:
294
+ - A plain-language summary of catalog health (suitable for a non-technical stakeholder)
295
+ - The top 3 highest-impact improvements with specific steps
296
+ - An estimate of where the score could reach after those improvements
297
+ - Any urgent issues that need immediate attention (e.g., missing ownership data, unverified high-value works)`,
298
+ },
299
+ },
300
+ ],
301
+ };
302
+ }
303
+ /**
304
+ * Audit credits prompt
305
+ */
306
+ getAuditCreditsPrompt() {
307
+ return {
308
+ messages: [
309
+ {
310
+ role: "user",
311
+ content: {
312
+ type: "text",
313
+ text: `Please audit the credits across my music catalog to find gaps and issues.
314
+
315
+ Pre-flight: if you propose adding a missing credit, read pica://schemas/work-credits-required for the canonical credit shape (role, splits totaling 100%).
316
+
317
+ Use these tools:
318
+ 1. pica_works_query - Get all works
319
+ 2. pica_credits_list - Check credits for each work (sample at least 20 works, prioritizing recent ones)
320
+ 3. pica_people_query - Cross-reference credited people
321
+
322
+ Look for:
323
+ - Works with no credits at all (no collaborators assigned)
324
+ - Works where splits don't total 100%
325
+ - Works with only one credited person (potential missing collaborators)
326
+ - People who appear in multiple works — are their roles consistent?
327
+ - Credits with generic roles (just "writer") vs specific roles ("composer", "lyricist")
328
+ - People credited on works but missing key identifiers (IPI, ISNI)
329
+
330
+ Report:
331
+ - Summary statistics (% of works with credits, average collaborators per work)
332
+ - List of works with no credits (highest priority to fix)
333
+ - List of works with potential split issues
334
+ - Recommendations for improving credit completeness
335
+ - People who should be enriched with external identifiers for royalty collection`,
336
+ },
337
+ },
338
+ ],
339
+ };
340
+ }
341
+ /**
342
+ * New catalog setup prompt — first-time onboarding
343
+ */
344
+ getNewCatalogSetupPrompt() {
345
+ return {
346
+ messages: [
347
+ {
348
+ role: "user",
349
+ content: {
350
+ type: "text",
351
+ text: `I just connected to PICA. Help me get started with my music catalog.
352
+
353
+ Pre-flight: read pica://schemas/work-required, pica://schemas/work-credits-required, and pica://schemas/audio-upload-required for the canonical create-work, add-credit, and upload-audio shapes.
354
+ If you're unsure where to start, read pica://docs/agent-guide for the workflow taxonomy.
355
+
356
+ First, read the workspace://context resource to understand my current catalog state (is it empty or do I already have works?).
357
+
358
+ If the catalog is empty, welcome me and explain that I can get my music into PICA however I like:
359
+ 1. Paste a Spotify or Deezer link — use pica_import_streaming_link to import tracks with ISRCs, credits, and artwork automatically
360
+ 2. Share a spreadsheet or PRO statement — use pica_import_analyze to read columns and import in bulk
361
+ 3. Send a screenshot of a track listing or release — you can read it and create the works from what you see
362
+ 4. Just describe my songs — use pica_works_create to add them as we talk
363
+
364
+ Ask me what I've got and help me get started with whichever method I choose.
365
+
366
+ After importing, guide me through closing the loop on each work:
367
+ - Who wrote these songs? (pica_credits_update — add writers and set splits)
368
+ - Are there publishing details registered? (pica_resolve_work with sources: ['mlc'] — check MLC)
369
+ - Do I have audio files to upload? (pica_audio_presigned_upload — for analysis)
370
+ - What identifiers are missing? (pica_works_inspect with sections: ["enrichment"] — check coverage)
371
+
372
+ Don't push — let me stop whenever I want. But always let me know what the next valuable step would be.
373
+
374
+ Also check pica_integrations_status to see if Google Calendar, Spotify, Gmail, or Telegram are connected. If not, mention that they can connect services at withpica.com/admin/settings to unlock calendar sync, email search, and notifications.
375
+
376
+ If the catalog already has works, summarise what's there and ask what I'd like to do — import more, check health, or work on what's missing.
377
+
378
+ Important: I can always log in at withpica.com to see, verify, and manage everything you create. The dashboard and MCP see the same catalog.`,
379
+ },
380
+ },
381
+ ],
382
+ };
383
+ }
384
+ /**
385
+ * Close the loop — check a specific work's gaps and offer to fix each one
386
+ */
387
+ getCloseTheLoopPrompt(workId) {
388
+ const workInstruction = workId
389
+ ? `Check completeness for work ${workId} using pica_works_inspect({ id: "${workId || "..."}", sections: ["completeness"] }).`
390
+ : `Ask me which work I'd like to check, or use pica_works_query({ health_filter: "low_completeness" }) to find works that need the most attention.`;
391
+ return {
392
+ messages: [
393
+ {
394
+ role: "user",
395
+ content: {
396
+ type: "text",
397
+ text: `Help me close the loop on a work — find what's missing and offer to fix each gap.
398
+
399
+ Pre-flight: per gap class, read the relevant schema before writing — pica://schemas/work-credits-required (credits/splits), pica://schemas/audio-upload-required (master audio), pica://schemas/enrichment-resolve-required (ISWC/ISRC via cascade).
400
+ If you're unsure where to start, read pica://docs/agent-guide for the workflow taxonomy.
401
+
402
+ ${workInstruction}
403
+
404
+ For the work, check every aspect of completeness:
405
+ 1. pica_works_inspect with sections: ["completeness"] — get the full gap analysis
406
+ 2. pica_credits_list — check if credits and splits are assigned
407
+ 3. pica_works_inspect with sections: ["enrichment"] — check what enrichment sources have been tried
408
+
409
+ For each gap found, offer a specific action:
410
+ - Missing credits → "Want me to add writers? Who wrote this song?"
411
+ - Splits not set → "What's the split between the writers?"
412
+ - No ISWC → "Want me to check MLC for this work?" (pica_resolve_work with sources: ['mlc'])
413
+ - No ISRC → "Do you have a recording with an ISRC for this?"
414
+ - No audio → "Got a master recording to upload?"
415
+ - Audio not analysed → "Want me to analyse the audio for BPM, key, and mood?"
416
+ - No agreements → "Is there a publishing agreement for this work?"
417
+ - Not registered → "Want me to check registration status?" (pica_works_inspect with sections: ["registration"])
418
+
419
+ Work through each gap one at a time. Let me skip any I'm not ready for. After each fix, check if the completeness score improved.
420
+
421
+ Keep it conversational — don't list all gaps at once. Start with the most important one and work down.`,
422
+ },
423
+ },
424
+ ],
425
+ };
426
+ }
427
+ /**
428
+ * Register my works — check registration status and prepare for PRO submission
429
+ */
430
+ getRegisterMyWorksPrompt() {
431
+ return {
432
+ messages: [
433
+ {
434
+ role: "user",
435
+ content: {
436
+ type: "text",
437
+ text: `Help me check which of my works are registered and which still need registration.
438
+
439
+ Pre-flight: read pica://schemas/enrichment-resolve-required (for resolving missing ISWCs via the cascade) and pica://schemas/export-required (for the CWR export shape) before writing.
440
+
441
+ Steps:
442
+ 1. pica_works_query — list works, then use pica_works_inspect with sections: ["registration"] to check registration status across PROs (PRS, MCPS, PPL, MLC)
443
+ 2. For works that aren't registered, use pica_works_inspect with sections: ["registration", "completeness"] on a sample to understand what's blocking registration
444
+ 3. Identify common blockers:
445
+ - Missing ISWC (needed for PRS/MCPS) → suggest pica_resolve_work with sources: ['mlc']
446
+ - Missing ISRC (needed for PPL) → check if recordings have ISRCs
447
+ - Missing credits (needed for all) → suggest adding writers
448
+ - Missing identifiers on people (IPI needed for PRO registration) → suggest enrichment
449
+
450
+ Report:
451
+ - How many works are fully registered vs partially vs not at all
452
+ - The most common blocker and how to fix it
453
+ - Which works are closest to being registration-ready (fewest gaps)
454
+
455
+ Then offer:
456
+ - "Want me to try enriching the works missing ISWCs from MLC?"
457
+ - "Want me to export a CWR file for the works that are ready?" (pica_export_song_registration)
458
+ - "Want me to check registration status for a specific work?"
459
+
460
+ Focus on practical next steps, not just reporting.`,
461
+ },
462
+ },
463
+ ],
464
+ };
465
+ }
466
+ /**
467
+ * Workspace autopilot — assess state and route to the right workflow
468
+ */
469
+ getWorkspaceAutopilotPrompt() {
470
+ return {
471
+ messages: [
472
+ {
473
+ role: "user",
474
+ content: {
475
+ type: "text",
476
+ text: `You've just connected to a PICA workspace. Assess its current state and guide me to the most valuable next action.
477
+
478
+ If you're unsure where to start, read pica://docs/agent-guide for the workflow taxonomy.
479
+
480
+ Step 1 — Orient:
481
+ Read the workspace://context resource to get a snapshot of the catalog: org info, catalog size, health score, and top priorities.
482
+
483
+ Step 2 — Route based on what you find:
484
+
485
+ If the catalog is EMPTY (0 works):
486
+ → Use the new-catalog-setup workflow. Welcome me, explain how to import music (Spotify link, spreadsheet, screenshot, or just describe songs), and get started.
487
+
488
+ If the catalog has works but LOW completeness (PICA Score below 50 or many gaps):
489
+ → Use pica_works_query({ health_filter: "low_completeness" }) to find the works that need the most attention.
490
+ → Pick the top 3 and offer to run close-the-loop on them one at a time.
491
+ → Tell me: "Your catalog has [N] works but many have gaps. Want me to start closing the loop on the ones that need the most attention?"
492
+
493
+ If there are DUPLICATE signals (workspace context mentions duplicates):
494
+ → Use the find-duplicates workflow. Tell me how many potential duplicates exist and offer to review them.
495
+
496
+ If works are UNREGISTERED (registration coverage is low):
497
+ → Use the register-my-works workflow. Tell me how many works aren't registered and what's blocking them.
498
+
499
+ If the catalog is HEALTHY (score above 70, few gaps):
500
+ → Use assess-catalog-health for a maintenance check. Tell me: "Your catalog looks solid. Here's a quick health check and what could still improve."
501
+
502
+ If none of the above clearly applies:
503
+ → Use pica_catalog_stats and pica_works_inspect({ sections: ["score"] }) to give me a quick summary, then ask what I'd like to focus on.
504
+
505
+ Step 3 — Explain your routing:
506
+ Tell me WHY you chose the workflow you did, in one sentence. Example: "Your catalog has 42 works but 28 are missing credits, so let's close those gaps first."
507
+
508
+ Step 4 — Offer alternatives:
509
+ After explaining, mention 1-2 other things I could do instead. Example: "Or if you'd rather import more music first, I can help with that too."
510
+
511
+ Important: Don't run all workflows at once. Pick the single most valuable action and commit to it. You can always switch later.`,
512
+ },
513
+ },
514
+ ],
515
+ };
516
+ }
517
+ /**
518
+ * Prepare for sync — get catalog sync-ready
519
+ */
520
+ getPrepareForSyncPrompt() {
521
+ return {
522
+ messages: [
523
+ {
524
+ role: "user",
525
+ content: {
526
+ type: "text",
527
+ text: `Help me get my catalog ready for sync licensing — make sure my works are discoverable and attractive to music supervisors.
528
+
529
+ Pre-flight: if you propose enriching from Spotify/MusicBrainz to fill genre/mood/identifier gaps, read pica://schemas/enrichment-resolve-required for the canonical resolve shape.
530
+
531
+ Steps:
532
+ 1. pica_catalog_stats — get an overview of the catalog
533
+ 2. pica_works_query — sample works to check what's missing for sync readiness
534
+ 3. For each work, check:
535
+ - Has audio been uploaded? (supervisors need to hear it)
536
+ - Has audio been analysed? (BPM, key, energy, mood — needed for search)
537
+ - Are mood tags and genre set? (how supervisors search)
538
+ - Is duration recorded? (supervisors filter by length)
539
+ - Are lyrics transcribed? (for lyrical content search)
540
+ - Is there a Spotify/YouTube link? (supervisors check existing presence)
541
+
542
+ Report:
543
+ - How many works have analysed audio vs unanalysed vs no audio at all
544
+ - How many have mood tags and genre vs missing
545
+ - The fastest path to sync-readiness (which works are closest)
546
+
547
+ Then offer:
548
+ - "Want me to trigger audio analysis on the tracks that have uploads but no analysis?"
549
+ - "Want me to search for sync-ready tracks you already have?" (pica_search_for_sync)
550
+ - "Want me to enrich works from Spotify to pull in genre and mood data?"
551
+
552
+ The goal is making works findable by mood, BPM, key, and energy — that's what sync supervisors search by.`,
553
+ },
554
+ },
555
+ ],
556
+ };
557
+ }
558
+ /**
559
+ * Log a session — guided studio session capture
560
+ */
561
+ getLogASessionPrompt(workId) {
562
+ const workInstruction = workId
563
+ ? `Log this session against work ${workId}.`
564
+ : `Ask me which work this session was for. If I'm not sure or it doesn't have one yet, that's fine — work_id is optional.`;
565
+ return {
566
+ messages: [
567
+ {
568
+ role: "user",
569
+ content: {
570
+ type: "text",
571
+ text: `Help me log a studio session.
572
+
573
+ Pre-flight: read pica://schemas/session-required for the canonical session shape (title, start_time, end_time required; session_type_id from pica_sessions_types; participants; optional work_id/recording_id).
574
+
575
+ ${workInstruction}
576
+
577
+ Walk me through it conversationally — don't dump a form. Capture each piece in turn:
578
+
579
+ 1. What was the session for? — title and a short description (e.g. "vocal recording for track 3")
580
+ 2. What kind of session? — call pica_sessions_types and let me pick (recording, mixing, mastering, writing, production, rehearsal). Pass the chosen type's UUID as session_type_id.
581
+ 3. When was it? — start_time and end_time as ISO 8601. If I give you "yesterday afternoon", confirm a specific time. Default timezone Europe/London unless I say otherwise. If it was a full-day affair, set is_all_day: true.
582
+ 4. Where? — studio name in location, or a virtual link in location_url for remote sessions.
583
+ 5. Who was there? — collect participants as { personId?, userId?, role? }. If I name someone you don't recognise, offer to look them up via pica_people_query first; if they're not on PICA yet, offer pica_collaborators_invite to bring them in.
584
+ 6. What happened? — capture as notes. This is the bit I'll thank you for later.
585
+
586
+ Then call pica_sessions_create with the captured fields. Confirm what was logged and offer the natural next step:
587
+ - "Want me to attach a multimedia file from this session?" (pica_multimedia_create)
588
+ - "Want me to set master ownership splits for any new recording from this session?" (pica_recording_splits_create)
589
+ - "Want me to log another session?"
590
+
591
+ If I skip something, that's fine — only title, start_time, and end_time are strictly required. Don't badger me for the rest.`,
592
+ },
593
+ },
594
+ ],
595
+ };
596
+ }
597
+ /**
598
+ * Set recording splits — guided master ownership split assignment with verify gate
599
+ */
600
+ getSetRecordingSplitsPrompt(recordingId) {
601
+ const recordingInstruction = recordingId
602
+ ? `Work on recording ${recordingId}.`
603
+ : `Ask me which recording to set splits on. If I'm not sure of the ID, use pica_recordings_query to list recent ones and let me pick.`;
604
+ return {
605
+ messages: [
606
+ {
607
+ role: "user",
608
+ content: {
609
+ type: "text",
610
+ text: `Help me set master ownership splits on a recording — these are master-side royalty shares (distinct from writer splits, which are credits on a work).
611
+
612
+ Pre-flight: read pica://schemas/recording-splits-required for the canonical split shape (recording_id, person_id, split_percentage, split_type). Splits must total 100%.
613
+
614
+ ${recordingInstruction}
615
+
616
+ Walk me through it carefully — splits flow into payments, so we want to get this right:
617
+
618
+ 1. Show current state — call pica_recording_splits_list for the recording. If splits already exist, summarise them (who owns what %, total). Ask whether I want to add to them, replace them, or just verify what's there.
619
+
620
+ 2. Capture the proposed splits — for each split:
621
+ - Who owns this share? (person_id from pica_people_query, or offer pica_collaborators_invite if they're not on PICA yet)
622
+ - What percentage? (must total 100% across all splits)
623
+ - What kind? (split_type — typical values: artist, producer, label, featured)
624
+
625
+ 3. Pre-commit dry-run — call pica_recording_splits_create with dry_run: true for each proposed split (per ADR-199). Show me the would-affect preview so I can confirm before persisting. Sum the percentages out loud. If they don't total 100%, stop and ask me to adjust.
626
+
627
+ 4. Confirm explicitly — say something like "I'm about to set [N] splits totalling 100% on this recording. Reply 'yes' to commit, or tell me what to change." Wait for my confirmation. Don't write without it.
628
+
629
+ 5. Commit — call pica_recording_splits_create (dry_run omitted) for each split. Report each one back as it lands.
630
+
631
+ 6. Verify — for each newly-created split, call pica_recording_splits_verify with the split_id to mark it agreed-upon. Report the verified state.
632
+
633
+ 7. Offer the natural next step:
634
+ - "Want me to generate a split sheet PDF for signing?" (pica_split_sheet_generate)
635
+ - "Want me to send the split sheet to the parties?" (pica_split_sheet_send)
636
+ - "Want me to set splits on another recording?"
637
+
638
+ If at any point the totals are off or I waver, stop and re-confirm. Splits are not the place to be ambitious — accuracy beats throughput.`,
639
+ },
640
+ },
641
+ ],
642
+ };
643
+ }
644
+ }
645
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}