@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
package/README.md ADDED
@@ -0,0 +1,304 @@
1
+ # PICA MCP Server
2
+
3
+ Model Context Protocol (MCP) server for the PICA Platform. Enables **any MCP-compatible AI assistant** to interact with your PICA music catalog.
4
+
5
+ ## What is MCP?
6
+
7
+ The Model Context Protocol (MCP) is an open standard that enables AI assistants to securely access external data and functionality. With this MCP server, any MCP-compatible AI can interact with your PICA catalog.
8
+
9
+ ## Compatible AI Assistants
10
+
11
+ - **Claude Desktop** - Anthropic's desktop AI assistant
12
+ - **ChatGPT** - OpenAI's assistant (when MCP support is available)
13
+ - **Custom AI tools** - Any application that implements the MCP protocol
14
+ - **Future AI assistants** - As more tools adopt MCP
15
+
16
+ ## Features
17
+
18
+ ### 24 AI-Callable Tools
19
+
20
+ **Works Management (8 tools)**
21
+
22
+ - `pica_works_list` - List musical works
23
+ - `pica_works_get` - Get work details
24
+ - `pica_works_create` - Create new work
25
+ - `pica_works_update` - Update work
26
+ - `pica_works_delete` - Delete work
27
+ - `pica_works_verify` - Verify work
28
+ - `pica_works_search` - Search works
29
+ - `pica_works_bulk_delete` - Delete multiple works
30
+
31
+ **People Management (8 tools)**
32
+
33
+ - `pica_people_list` - List people
34
+ - `pica_people_get` - Get person details
35
+ - `pica_people_create` - Create new person
36
+ - `pica_people_update` - Update person
37
+ - `pica_people_delete` - Delete person
38
+ - `pica_people_search` - Search people
39
+ - `pica_people_enrich_isni` - Enrich from ISNI
40
+ - `pica_people_enrich_musicbrainz` - Enrich from MusicBrainz
41
+
42
+ **Recordings Management (5 tools)**
43
+
44
+ - `pica_recordings_query` - List/search recordings; filter by `work_id` (replaces removed `pica_recordings_by_work`)
45
+ - `pica_recordings_inspect` - Get recording details (sections-based)
46
+ - `pica_recordings_create` - Create new recording
47
+ - `pica_recordings_update` - Update recording
48
+ - `pica_recordings_delete` - Delete recording
49
+
50
+ **Search & Analytics (2 tools)**
51
+
52
+ - `pica_search_all` - Search across all entities
53
+ - `pica_catalog_stats` - Get catalog statistics
54
+
55
+ ### 4 Data Resources
56
+
57
+ Read-only access to catalog data:
58
+
59
+ - `works://list` - All works
60
+ - `people://list` - All people
61
+ - `recordings://list` - All recordings
62
+ - `catalog://stats` - Catalog statistics
63
+
64
+ ### 4 Workflow Prompts
65
+
66
+ Pre-configured prompts for common tasks:
67
+
68
+ - `analyze-catalog` - Comprehensive catalog analysis
69
+ - `find-duplicates` - Find duplicate entries
70
+ - `enrich-metadata` - Identify enrichment opportunities
71
+ - `verify-works` - Review unverified works
72
+
73
+ ## Installation
74
+
75
+ ### NPM (Recommended)
76
+
77
+ ```bash
78
+ npm install -g @withpica/mcp-server
79
+ ```
80
+
81
+ ### From Source
82
+
83
+ ```bash
84
+ cd mcp-server
85
+ npm install
86
+ npm run build
87
+ npm link
88
+ ```
89
+
90
+ ## Configuration
91
+
92
+ ### Get Your PICA API Key
93
+
94
+ 1. Log into PICA at https://withpica.com
95
+ 2. Go to Settings → API Keys
96
+ 3. Generate a new API key
97
+ 4. Copy the key for use below
98
+
99
+ ### Claude Desktop Setup
100
+
101
+ Add to your Claude Desktop configuration file:
102
+
103
+ **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
104
+ **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
105
+
106
+ ```json
107
+ {
108
+ "mcpServers": {
109
+ "pica": {
110
+ "command": "npx",
111
+ "args": ["-y", "@withpica/mcp-server"],
112
+ "env": {
113
+ "PICA_API_KEY": "your-api-key-here"
114
+ }
115
+ }
116
+ }
117
+ }
118
+ ```
119
+
120
+ ### Other MCP-Compatible AI Assistants
121
+
122
+ The setup process is similar for any MCP-compatible tool:
123
+
124
+ 1. Configure the MCP server command: `npx -y @withpica/mcp-server`
125
+ 2. Set the `PICA_API_KEY` environment variable
126
+ 3. The AI can now access all PICA tools and resources
127
+
128
+ ## Usage Examples
129
+
130
+ ### Example 1: List Your Works
131
+
132
+ **User**: "Show me my musical works"
133
+
134
+ **AI** uses: `pica_works_list`
135
+
136
+ **Result**: List of works with titles, ISWCs, verification status, etc.
137
+
138
+ ### Example 2: Create a Work
139
+
140
+ **User**: "Create a new composition called 'Moonlight Sonata No. 2'"
141
+
142
+ **AI** uses: `pica_works_create` with appropriate parameters
143
+
144
+ **Result**: New work created with generated ID
145
+
146
+ ### Example 3: Analyze Catalog
147
+
148
+ **User**: "Analyze my catalog"
149
+
150
+ **AI** uses: `analyze-catalog` prompt
151
+
152
+ **AI calls**:
153
+
154
+ - `pica_catalog_stats` - Get statistics
155
+ - `pica_works_list` - Review works
156
+ - `pica_people_list` - Review people
157
+
158
+ **Result**: Comprehensive analysis with insights and recommendations
159
+
160
+ ### Example 4: Find Duplicates
161
+
162
+ **User**: "Find duplicate entries"
163
+
164
+ **AI** uses: `find-duplicates` prompt
165
+
166
+ **AI calls**:
167
+
168
+ - `pica_works_list` - Get all works
169
+ - `pica_people_list` - Get all people
170
+
171
+ **Result**: List of potential duplicates with merge recommendations
172
+
173
+ ### Example 5: Enrich Metadata
174
+
175
+ **User**: "Enrich Mozart's profile from ISNI"
176
+
177
+ **AI** uses: `pica_people_enrich_isni` with person ID and ISNI
178
+
179
+ **Result**: Person record updated with enriched data from ISNI
180
+
181
+ ## Use Cases
182
+
183
+ ### For Catalog Managers
184
+
185
+ - "Show me all unverified works"
186
+ - "Find duplicate entries"
187
+ - "List works missing ISWC codes"
188
+ - "Enrich all people from ISNI"
189
+
190
+ ### For Data Analysis
191
+
192
+ - "What's the average duration of my compositions?"
193
+ - "Who are my most prolific composers?"
194
+ - "Which works have the most recordings?"
195
+ - "Show me catalog statistics"
196
+
197
+ ### For Enrichment
198
+
199
+ - "Find all people that could be enriched from MusicBrainz"
200
+ - "Suggest ISNI matches for unverified artists"
201
+ - "Which works are missing metadata?"
202
+
203
+ ### For Bulk Operations
204
+
205
+ - "Create works from this list"
206
+ - "Verify all completed works"
207
+ - "Delete test entries"
208
+
209
+ ## Environment Variables
210
+
211
+ - `PICA_API_KEY` (required) - Your PICA API key
212
+ - `PICA_API_URL` (optional) - API base URL (default: https://withpica.com/api)
213
+ - `DEBUG` (optional) - Enable debug logging (set to 'true' or '1')
214
+
215
+ ## Development
216
+
217
+ ### Build
218
+
219
+ ```bash
220
+ npm run build
221
+ ```
222
+
223
+ ### Development Mode
224
+
225
+ ```bash
226
+ npm run dev
227
+ ```
228
+
229
+ ### Local Testing
230
+
231
+ ```bash
232
+ PICA_API_KEY=your-key npm run dev
233
+ ```
234
+
235
+ ## Troubleshooting
236
+
237
+ ### "PICA_API_KEY environment variable is required"
238
+
239
+ Make sure you've set the API key in your MCP server configuration:
240
+
241
+ ```json
242
+ {
243
+ "env": {
244
+ "PICA_API_KEY": "your-actual-api-key"
245
+ }
246
+ }
247
+ ```
248
+
249
+ ### "Authentication failed"
250
+
251
+ - Verify your API key is correct
252
+ - Check that the API key hasn't been revoked
253
+ - Generate a new API key if needed
254
+
255
+ ### Tools Not Showing Up
256
+
257
+ 1. Restart your AI assistant after configuring the MCP server
258
+ 2. Check the MCP server logs for errors
259
+ 3. Verify the configuration file syntax is correct
260
+
261
+ ### Connection Issues
262
+
263
+ - Ensure you have an internet connection
264
+ - Check that https://withpica.com is accessible
265
+ - Verify no firewall is blocking the connection
266
+
267
+ ## Architecture
268
+
269
+ ```
270
+ MCP Server for PICA
271
+ ├── Protocol Handler (MCP standard)
272
+ ├── Authentication (API key)
273
+ ├── Tools (24 AI-callable functions)
274
+ │ ├── Works Management (8)
275
+ │ ├── People Management (8)
276
+ │ ├── Recordings Management (6)
277
+ │ └── Search & Analytics (2)
278
+ ├── Resources (4 data providers)
279
+ └── Prompts (4 workflows)
280
+ ```
281
+
282
+ ## Security
283
+
284
+ - All requests require a valid PICA API key
285
+ - API keys are transmitted securely over HTTPS
286
+ - Data access is scoped to your organization
287
+ - No data is stored by the MCP server
288
+
289
+ ## Support
290
+
291
+ - **Documentation**: https://docs.withpica.com
292
+ - **Issues**: https://github.com/withpica/pica/issues
293
+ - **Email**: support@withpica.com
294
+
295
+ ## License
296
+
297
+ MIT
298
+
299
+ ## Credits
300
+
301
+ Built with:
302
+
303
+ - [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/sdk) - MCP SDK
304
+ - [@withpica/sdk](https://www.npmjs.com/package/@withpica/sdk) - PICA TypeScript SDK
@@ -0,0 +1,2 @@
1
+ export declare const DOWNLOAD_HTML: string;
2
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/apps/download.ts"],"names":[],"mappings":"AAgIA,eAAO,MAAM,aAAa,QAIzB,CAAC"}
@@ -0,0 +1,125 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ /**
3
+ * pica_download MCP App card — file delivery.
4
+ *
5
+ * Shows filename, mime_type, size, and an optional description, then a copper
6
+ * "download" button wired to app.downloadFile(). After dispatch the button
7
+ * flips to a "downloaded" state with a secondary "download again" action.
8
+ *
9
+ * DOM API only — never innerHTML.
10
+ */
11
+ import { buildAppHtml } from "./shared.js";
12
+ const DOWNLOAD_BODY = `
13
+ <div class="stack gap-6">
14
+ <header>
15
+ <h1 class="heading heading-lg">download ready</h1>
16
+ <p class="text-secondary">your file is ready to save</p>
17
+ </header>
18
+
19
+ <div class="card-flat dl-file">
20
+ <div class="dl-icon" id="dl-icon">\u25CF</div>
21
+ <div class="dl-meta">
22
+ <div class="heading heading-sm" id="dl-filename">file</div>
23
+ <div class="text-tertiary" id="dl-sub" style="font-size: 12px; margin-top: 4px;"></div>
24
+ <div class="text-secondary" id="dl-description" style="font-size: 13px; margin-top: 8px; display: none;"></div>
25
+ <div class="text-tertiary" id="dl-expires" style="font-size: 11px; margin-top: 6px; display: none;"></div>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="row" style="gap: 12px;">
30
+ <button class="btn-copper" id="dl-button">download</button>
31
+ <a class="btn-ghost" id="dl-fallback" href="#" target="_blank" rel="noopener">or open in browser</a>
32
+ </div>
33
+ </div>
34
+
35
+ <style>
36
+ .dl-file {
37
+ display: flex;
38
+ gap: 16px;
39
+ align-items: flex-start;
40
+ }
41
+ .dl-icon {
42
+ font-size: 32px;
43
+ color: var(--accent);
44
+ flex: 0 0 auto;
45
+ line-height: 1;
46
+ padding-top: 4px;
47
+ }
48
+ .dl-meta { flex: 1 1 auto; min-width: 0; }
49
+ #dl-filename { word-break: break-all; }
50
+ </style>
51
+ `;
52
+ const DOWNLOAD_JS = `
53
+ var dlState = { file: null };
54
+
55
+ function dlFormatBytes(bytes) {
56
+ if (bytes == null || isNaN(bytes)) return "";
57
+ if (bytes < 1024) return bytes + " B";
58
+ if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
59
+ if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(1) + " MB";
60
+ return (bytes / (1024 * 1024 * 1024)).toFixed(2) + " GB";
61
+ }
62
+
63
+ function dlRender() {
64
+ var f = dlState.file;
65
+ if (!f) return;
66
+
67
+ var filenameEl = document.getElementById("dl-filename");
68
+ if (filenameEl) filenameEl.textContent = f.filename;
69
+
70
+ var subParts = [];
71
+ if (f.mime_type) subParts.push(f.mime_type);
72
+ if (f.size) subParts.push(dlFormatBytes(f.size));
73
+ var subEl = document.getElementById("dl-sub");
74
+ if (subEl) subEl.textContent = subParts.join(" \u00B7 ");
75
+
76
+ if (f.description) {
77
+ var descEl = document.getElementById("dl-description");
78
+ if (descEl) {
79
+ descEl.textContent = f.description;
80
+ descEl.style.display = "block";
81
+ }
82
+ }
83
+
84
+ if (f.expires_at) {
85
+ var expEl = document.getElementById("dl-expires");
86
+ if (expEl) {
87
+ expEl.textContent = "link expires " + f.expires_at;
88
+ expEl.style.display = "block";
89
+ }
90
+ }
91
+
92
+ var fallback = document.getElementById("dl-fallback");
93
+ if (fallback) fallback.setAttribute("href", f.url);
94
+ }
95
+
96
+ function dlTriggerDownload() {
97
+ var f = dlState.file;
98
+ if (!f) return;
99
+ var btn = document.getElementById("dl-button");
100
+
101
+ if (app && typeof app.downloadFile === "function") {
102
+ try {
103
+ app.downloadFile({ url: f.url, filename: f.filename });
104
+ if (btn) {
105
+ btn.textContent = "download again";
106
+ btn.classList.remove("btn-copper");
107
+ btn.classList.add("btn-ghost");
108
+ }
109
+ return;
110
+ } catch (err) {
111
+ console.warn("[pica_download] downloadFile failed:", err);
112
+ }
113
+ }
114
+ }
115
+
116
+ window.onPicaToolResult = function (data) {
117
+ if (!data || !data.file) return;
118
+ dlState.file = data.file;
119
+ dlRender();
120
+ var btn = document.getElementById("dl-button");
121
+ if (btn) btn.addEventListener("click", dlTriggerDownload);
122
+ };
123
+ `;
124
+ export const DOWNLOAD_HTML = buildAppHtml("pica \u2014 download", DOWNLOAD_BODY, DOWNLOAD_JS);
125
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/apps/download.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCrB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CACvC,sBAAsB,EACtB,aAAa,EACb,WAAW,CACZ,CAAC"}