@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,510 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ import { ResourceError } from "@withpica/mcp-utils";
3
+ import { readFileSync } from "fs";
4
+ import { join } from "path";
5
+ import { WITHPICA_PRIMER } from "./llms-primer.js";
6
+ import { WELCOME_MARKDOWN } from "./welcome.js";
7
+ import { AGENT_GUIDE_AUTHENTICATED, AGENT_GUIDE_LOBBY } from "./agent-guide.js";
8
+ import { REQUIRED_SCHEMAS } from "./required-schemas.generated.js";
9
+ import { UPLOAD_HTML } from "../apps/upload.js";
10
+ import { DOWNLOAD_HTML } from "../apps/download.js";
11
+ import { RELEASE_HTML } from "../apps/release.js";
12
+ import { PICA_STORAGE_CONNECT_DOMAINS } from "../apps/shared.js";
13
+ export class ResourceRegistry {
14
+ pica;
15
+ config;
16
+ constructor(pica, config) {
17
+ this.pica = pica;
18
+ this.config = config;
19
+ }
20
+ /**
21
+ * List all available resources
22
+ */
23
+ listResources() {
24
+ const resources = [
25
+ {
26
+ uri: "pica://welcome",
27
+ name: "Welcome to PICA",
28
+ description: "Getting started guide — how to sign in and what you can do",
29
+ mimeType: "text/markdown",
30
+ },
31
+ {
32
+ uri: "pica://docs/agent-guide",
33
+ name: "Agent Guide — How to Use PICA",
34
+ description: "Workflow-by-workflow guide for agents — what tools to call in what order, common gotchas, pointers to schema resources. Lobby mode returns a sign-in-focused variant; authenticated mode returns the full workflow map.",
35
+ mimeType: "text/markdown",
36
+ },
37
+ ];
38
+ if (this.config?.lobbyMode || !this.pica) {
39
+ return resources;
40
+ }
41
+ resources.push({
42
+ uri: "llms://primer",
43
+ name: "PICA Domain Primer",
44
+ description: "Plain-language description of PICA's domain model, entity relationships, and recommended agent workflows. Read this first.",
45
+ mimeType: "text/markdown",
46
+ }, {
47
+ uri: "works://list",
48
+ name: "All Works",
49
+ description: "Complete list of musical works in the catalog",
50
+ mimeType: "application/json",
51
+ }, {
52
+ uri: "people://list",
53
+ name: "All People",
54
+ description: "Complete list of people (artists, composers, etc.)",
55
+ mimeType: "application/json",
56
+ }, {
57
+ uri: "recordings://list",
58
+ name: "All Recordings",
59
+ description: "Complete list of recordings",
60
+ mimeType: "application/json",
61
+ }, {
62
+ uri: "catalog://stats",
63
+ name: "Catalog Statistics",
64
+ description: "Statistics and metrics about the catalog",
65
+ mimeType: "application/json",
66
+ }, {
67
+ uri: "catalog://health",
68
+ name: "Catalog Health (PICA Score)",
69
+ description: "PICA Score — composite legibility index (0-100) with grade, 4-pillar breakdown, and actionable suggestions",
70
+ mimeType: "application/json",
71
+ }, {
72
+ uri: "workspace://context",
73
+ name: "Workspace Context",
74
+ description: "Aggregated workspace orientation — org info, catalog stats, health score, and top priorities in one call",
75
+ mimeType: "application/json",
76
+ }, {
77
+ uri: "events://recent",
78
+ name: "Recent Events",
79
+ description: "Recent webhook delivery events — what happened in this workspace recently",
80
+ mimeType: "application/json",
81
+ }, {
82
+ uri: "api://openapi",
83
+ name: "OpenAPI Specification",
84
+ description: "OpenAPI 3.1 spec for the top 20 PICA API endpoints — works, people, recordings, agreements, credits, search, health",
85
+ mimeType: "text/yaml",
86
+ }, {
87
+ uri: "ui://pica/upload",
88
+ name: "Upload Files",
89
+ description: "Generic file upload card — drop zone for audio, photos, documents, anything",
90
+ mimeType: "text/html;profile=mcp-app",
91
+ }, {
92
+ uri: "ui://pica/download",
93
+ name: "Download File",
94
+ description: "File download card — shows file metadata and a download button",
95
+ mimeType: "text/html;profile=mcp-app",
96
+ }, {
97
+ uri: "ui://pica/release",
98
+ name: "Release Card",
99
+ description: "Release rich-render card — cover art + markdown summary (ADR-208 Phase 3 Primitive D, Phase 3 stub)",
100
+ mimeType: "text/html;profile=mcp-app",
101
+ }, {
102
+ uri: "pica://schemas/work-required",
103
+ name: "Required Fields — Register a Work",
104
+ description: "Required + recommended fields, CHECK enums, and companion-call orchestration for pica_works_create. Read before calling the work-create workflow.",
105
+ mimeType: "application/json",
106
+ }, {
107
+ uri: "pica://schemas/recording-required",
108
+ name: "Required Fields — Register a Recording",
109
+ description: "Required + recommended fields, CHECK enums, and companion-call orchestration for pica_recordings_create.",
110
+ mimeType: "application/json",
111
+ }, {
112
+ uri: "pica://schemas/work-credits-required",
113
+ name: "Required Fields — Attach Work Credits",
114
+ description: "Per-row required fields and CHECK enums for pica_credits_update (writer/composer/publisher splits, sum to 100).",
115
+ mimeType: "application/json",
116
+ }, {
117
+ uri: "pica://schemas/recording-credits-required",
118
+ name: "Required Fields — Attach Recording Credits",
119
+ description: "Per-row required fields and the role enum for pica_recording_credits_update (MainArtist / FeaturedArtist / Producer / Engineer / etc.).",
120
+ mimeType: "application/json",
121
+ }, {
122
+ uri: "pica://schemas/person-required",
123
+ name: "Required Fields — Register a Person",
124
+ description: "Required + recommended fields for pica_people_create (writers, performers, publishers; identifiers settable inline).",
125
+ mimeType: "application/json",
126
+ }, {
127
+ uri: "pica://schemas/audio-upload-required",
128
+ name: "Required Fields — Upload Audio (3-Step Chain)",
129
+ description: "Required fields per step of the audio-upload chain (pica_audio_presigned_upload → pica_audio_complete_upload → pica_audio_analyze + poll), plus audio_files file_type / classification CHECK enums.",
130
+ mimeType: "application/json",
131
+ }, {
132
+ uri: "pica://schemas/enrichment-resolve-required",
133
+ name: "Required Fields — Run Enrichment",
134
+ description: "Required fields for pica_resolve_work / _person / _recording and the proposals review chain (list → apply / reject). Includes enrichment_proposals entity_type / status / proposal_action enums.",
135
+ mimeType: "application/json",
136
+ }, {
137
+ uri: "pica://schemas/agreement-required",
138
+ name: "Required Fields — Create an Agreement",
139
+ description: "Required + recommended fields for pica_agreements_create plus link-work and template-render companions. Includes agreements agreement_type / status / other_party_type CHECK enums.",
140
+ mimeType: "application/json",
141
+ }, {
142
+ uri: "pica://schemas/multimedia-required",
143
+ name: "Required Fields — Add Multimedia",
144
+ description: "Required fields for pica_multimedia_create and the import / YouTube / link-work companions. Includes multimedia_items content_type / classification CHECK enums.",
145
+ mimeType: "application/json",
146
+ }, {
147
+ uri: "pica://schemas/export-required",
148
+ name: "Required Fields — Export the Catalog",
149
+ description: "Five export destinations (CSV, song-registration, industry-ready, CAR, AI-consent) with destination guidance.",
150
+ mimeType: "application/json",
151
+ }, {
152
+ uri: "pica://schemas/claim-required",
153
+ name: "Required Fields — Claim a Discovery",
154
+ description: "Required fields for pica_discoveries_query and the typed claim verbs (credit / custody / artist), plus the generic discoveries_review surface. Includes discovered_credits / _custody / _artists status + match_basis + custody_type CHECK enums.",
155
+ mimeType: "application/json",
156
+ }, {
157
+ uri: "pica://schemas/session-required",
158
+ name: "Required Fields — Log a Studio Session",
159
+ description: "Required + recommended fields for pica_sessions_create plus the pica_sessions_types lookup companion. Status values are documented but not DB-CHECK-enforced.",
160
+ mimeType: "application/json",
161
+ }, {
162
+ uri: "pica://schemas/split-sheet-required",
163
+ name: "Required Fields — Generate a Split Sheet (Publishing)",
164
+ description: "Required fields for pica_split_sheet_generate. Pre-condition: writer credits on the work must total 100%. Companion calls cover send / get / list.",
165
+ mimeType: "application/json",
166
+ }, {
167
+ uri: "pica://schemas/recording-splits-required",
168
+ name: "Required Fields — Assign Master Ownership Splits",
169
+ description: "Required + recommended fields for pica_recording_splits_create. Includes recording_splits split_type + role CHECK enums. Distinct from publishing splits on works.",
170
+ mimeType: "application/json",
171
+ });
172
+ return resources;
173
+ }
174
+ /**
175
+ * Read a resource by URI
176
+ */
177
+ async readResource(uri) {
178
+ switch (uri) {
179
+ case "pica://welcome":
180
+ return {
181
+ contents: [
182
+ {
183
+ uri: "pica://welcome",
184
+ mimeType: "text/markdown",
185
+ text: WELCOME_MARKDOWN,
186
+ },
187
+ ],
188
+ };
189
+ case "pica://docs/agent-guide": {
190
+ const lobby = this.config?.lobbyMode || !this.pica;
191
+ return {
192
+ contents: [
193
+ {
194
+ uri: "pica://docs/agent-guide",
195
+ mimeType: "text/markdown",
196
+ text: lobby ? AGENT_GUIDE_LOBBY : AGENT_GUIDE_AUTHENTICATED,
197
+ },
198
+ ],
199
+ };
200
+ }
201
+ default:
202
+ break;
203
+ }
204
+ if (!this.pica) {
205
+ throw new ResourceError(`Resource not available in lobby mode: ${uri}`);
206
+ }
207
+ switch (uri) {
208
+ case "llms://primer":
209
+ return {
210
+ contents: [
211
+ {
212
+ uri: "llms://primer",
213
+ mimeType: "text/markdown",
214
+ text: WITHPICA_PRIMER,
215
+ },
216
+ ],
217
+ };
218
+ case "works://list":
219
+ return await this.getWorksList();
220
+ case "people://list":
221
+ return await this.getPeopleList();
222
+ case "recordings://list":
223
+ return await this.getRecordingsList();
224
+ case "catalog://stats":
225
+ return await this.getCatalogStats();
226
+ case "catalog://health":
227
+ return await this.getCatalogHealth();
228
+ case "workspace://context":
229
+ return await this.getWorkspaceContext();
230
+ case "events://recent":
231
+ return await this.getRecentEvents();
232
+ case "api://openapi":
233
+ return this.getOpenAPISpec();
234
+ case "ui://pica/upload":
235
+ return {
236
+ contents: [
237
+ {
238
+ uri: "ui://pica/upload",
239
+ mimeType: "text/html;profile=mcp-app",
240
+ text: UPLOAD_HTML,
241
+ _meta: {
242
+ ui: {
243
+ csp: {
244
+ connectDomains: PICA_STORAGE_CONNECT_DOMAINS,
245
+ },
246
+ },
247
+ },
248
+ },
249
+ ],
250
+ };
251
+ case "ui://pica/download":
252
+ return {
253
+ contents: [
254
+ {
255
+ uri: "ui://pica/download",
256
+ mimeType: "text/html;profile=mcp-app",
257
+ text: DOWNLOAD_HTML,
258
+ _meta: {
259
+ ui: {
260
+ csp: {
261
+ connectDomains: PICA_STORAGE_CONNECT_DOMAINS,
262
+ },
263
+ },
264
+ },
265
+ },
266
+ ],
267
+ };
268
+ case "ui://pica/release":
269
+ return {
270
+ contents: [
271
+ {
272
+ uri: "ui://pica/release",
273
+ mimeType: "text/html;profile=mcp-app",
274
+ text: RELEASE_HTML,
275
+ },
276
+ ],
277
+ };
278
+ case "pica://schemas/work-required":
279
+ case "pica://schemas/recording-required":
280
+ case "pica://schemas/work-credits-required":
281
+ case "pica://schemas/recording-credits-required":
282
+ case "pica://schemas/person-required":
283
+ case "pica://schemas/audio-upload-required":
284
+ case "pica://schemas/enrichment-resolve-required":
285
+ case "pica://schemas/agreement-required":
286
+ case "pica://schemas/multimedia-required":
287
+ case "pica://schemas/export-required":
288
+ case "pica://schemas/claim-required":
289
+ case "pica://schemas/session-required":
290
+ case "pica://schemas/split-sheet-required":
291
+ case "pica://schemas/recording-splits-required": {
292
+ const key = uri.replace("pica://schemas/", "");
293
+ const body = REQUIRED_SCHEMAS[key];
294
+ if (!body)
295
+ throw new ResourceError(`Schema not found: ${uri}`);
296
+ return {
297
+ contents: [
298
+ {
299
+ uri,
300
+ mimeType: "application/json",
301
+ text: JSON.stringify(body, null, 2),
302
+ },
303
+ ],
304
+ };
305
+ }
306
+ default:
307
+ throw new ResourceError(`Resource not found: ${uri}`);
308
+ }
309
+ }
310
+ /**
311
+ * Get OpenAPI specification resource
312
+ */
313
+ getOpenAPISpec() {
314
+ // Try multiple paths to find the spec file
315
+ const possiblePaths = [
316
+ join(process.cwd(), "docs/api/openapi.yaml"),
317
+ join(process.cwd(), "../docs/api/openapi.yaml"),
318
+ ];
319
+ for (const specPath of possiblePaths) {
320
+ try {
321
+ const yamlContent = readFileSync(specPath, "utf-8");
322
+ return {
323
+ contents: [
324
+ {
325
+ uri: "api://openapi",
326
+ mimeType: "text/yaml",
327
+ text: yamlContent,
328
+ },
329
+ ],
330
+ };
331
+ }
332
+ catch {
333
+ // Try next path
334
+ }
335
+ }
336
+ throw new ResourceError("OpenAPI spec not found. Expected at docs/api/openapi.yaml");
337
+ }
338
+ /**
339
+ * Get works list resource
340
+ */
341
+ async getWorksList() {
342
+ const works = await this.pica.works.list({ limit: 1000 });
343
+ return {
344
+ contents: [
345
+ {
346
+ uri: "works://list",
347
+ mimeType: "application/json",
348
+ text: JSON.stringify({
349
+ total: works.length,
350
+ works: works.map((work) => ({
351
+ id: work.id,
352
+ title: work.title,
353
+ work_type: work.work_type,
354
+ iswc: work.iswc,
355
+ is_verified: work.is_verified,
356
+ duration_seconds: work.duration_seconds,
357
+ })),
358
+ }, null, 2),
359
+ },
360
+ ],
361
+ };
362
+ }
363
+ /**
364
+ * Get people list resource
365
+ */
366
+ async getPeopleList() {
367
+ const people = await this.pica.people.list({ limit: 1000 });
368
+ return {
369
+ contents: [
370
+ {
371
+ uri: "people://list",
372
+ mimeType: "application/json",
373
+ text: JSON.stringify({
374
+ total: people.length,
375
+ people: people.map((person) => ({
376
+ id: person.id,
377
+ first_name: person.first_name,
378
+ last_name: person.last_name,
379
+ email: person.email,
380
+ isni: person.isni,
381
+ musicbrainz_id: person.musicbrainz_id,
382
+ })),
383
+ }, null, 2),
384
+ },
385
+ ],
386
+ };
387
+ }
388
+ /**
389
+ * Get recordings list resource
390
+ */
391
+ async getRecordingsList() {
392
+ const recordings = await this.pica.recordings.list({ limit: 1000 });
393
+ return {
394
+ contents: [
395
+ {
396
+ uri: "recordings://list",
397
+ mimeType: "application/json",
398
+ text: JSON.stringify({
399
+ total: recordings.length,
400
+ recordings: recordings.map((recording) => ({
401
+ id: recording.id,
402
+ title: recording.title,
403
+ isrc: recording.isrc,
404
+ duration_seconds: recording.duration_seconds,
405
+ work_id: recording.work_id,
406
+ })),
407
+ }, null, 2),
408
+ },
409
+ ],
410
+ };
411
+ }
412
+ /**
413
+ * Get catalog statistics resource
414
+ */
415
+ async getCatalogStats() {
416
+ const [works, people, recordings] = await Promise.all([
417
+ this.pica.works.list({ limit: 1000 }),
418
+ this.pica.people.list({ limit: 1000 }),
419
+ this.pica.recordings.list({ limit: 1000 }),
420
+ ]);
421
+ const stats = {
422
+ overview: {
423
+ total_works: works.length,
424
+ total_people: people.length,
425
+ total_recordings: recordings.length,
426
+ last_updated: new Date().toISOString(),
427
+ },
428
+ works: {
429
+ total: works.length,
430
+ verified: works.filter((w) => w.is_verified).length,
431
+ unverified: works.filter((w) => !w.is_verified).length,
432
+ with_iswc: works.filter((w) => w.iswc).length,
433
+ by_type: {
434
+ composition: works.filter((w) => w.work_type === "composition")
435
+ .length,
436
+ arrangement: works.filter((w) => w.work_type === "arrangement")
437
+ .length,
438
+ adaptation: works.filter((w) => w.work_type === "adaptation").length,
439
+ translation: works.filter((w) => w.work_type === "translation")
440
+ .length,
441
+ },
442
+ },
443
+ people: {
444
+ total: people.length,
445
+ with_email: people.filter((p) => p.email).length,
446
+ with_isni: people.filter((p) => p.isni).length,
447
+ with_musicbrainz: people.filter((p) => p.musicbrainz_id).length,
448
+ },
449
+ recordings: {
450
+ total: recordings.length,
451
+ with_isrc: recordings.filter((r) => r.isrc).length,
452
+ },
453
+ };
454
+ return {
455
+ contents: [
456
+ {
457
+ uri: "catalog://stats",
458
+ mimeType: "application/json",
459
+ text: JSON.stringify(stats, null, 2),
460
+ },
461
+ ],
462
+ };
463
+ }
464
+ /**
465
+ * Get catalog health (PICA Score) resource
466
+ */
467
+ async getCatalogHealth() {
468
+ const score = await this.pica.picaScore.get();
469
+ return {
470
+ contents: [
471
+ {
472
+ uri: "catalog://health",
473
+ mimeType: "application/json",
474
+ text: JSON.stringify(score, null, 2),
475
+ },
476
+ ],
477
+ };
478
+ }
479
+ /**
480
+ * Get workspace context resource — aggregated orientation for agents
481
+ */
482
+ async getWorkspaceContext() {
483
+ const context = await this.pica.workspace.getContext();
484
+ return {
485
+ contents: [
486
+ {
487
+ uri: "workspace://context",
488
+ mimeType: "application/json",
489
+ text: JSON.stringify(context, null, 2),
490
+ },
491
+ ],
492
+ };
493
+ }
494
+ /**
495
+ * Get recent events resource — webhook deliveries
496
+ */
497
+ async getRecentEvents() {
498
+ const events = await this.pica.workspace.getRecentEvents(20);
499
+ return {
500
+ contents: [
501
+ {
502
+ uri: "events://recent",
503
+ mimeType: "application/json",
504
+ text: JSON.stringify(events, null, 2),
505
+ },
506
+ ],
507
+ };
508
+ }
509
+ }
510
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
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_resolve_work (fans out across Spotify/MLC/MusicBrainz/etc.) \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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms-primer.d.ts","sourceRoot":"","sources":["../../src/resources/llms-primer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,0qHAiE3B,CAAC"}
@@ -0,0 +1,68 @@
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_resolve_work (fans out across Spotify/MLC/MusicBrainz/etc.) → 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
@@ -0,0 +1 @@
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"}