@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,365 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ import { formatAsText, formatSuccess, MY_IDENTITY_WRITE_PROPERTIES, ORG_PROFILE_WRITE_PROPERTIES, } from "@withpica/mcp-utils";
3
+ export class SettingsTools {
4
+ pica;
5
+ constructor(pica) {
6
+ this.pica = pica;
7
+ }
8
+ getTools() {
9
+ // NOTE: `pica_credits_history` was removed from the MCP surface 2026-04-22
10
+ // (see docs/MCP_REFINEMENT_LOG.md entry B-001). withPICA is subscription-only;
11
+ // surfacing a credit-transaction-history tool was billing-model drift.
12
+ // The SDK method `settings.creditsHistory()` is still available for internal
13
+ // telemetry.
14
+ return [
15
+ {
16
+ definition: {
17
+ name: "pica_storage_status",
18
+ description: "Check storage configuration and connection health — which cloud " +
19
+ "provider is active (PICA default, your own S3, GCS, Azure, R2, or " +
20
+ "Backblaze), bucket names, region, and the last-test result so the " +
21
+ "agent can say 'your S3 bucket failed its last health check' without " +
22
+ "re-running a probe. Never returns credentials. Pair with " +
23
+ "pica_storage_configure_start to set up BYOC, or pica_storage_disconnect " +
24
+ "to revert to PICA default.",
25
+ workflows: "infrastructure",
26
+ inputSchema: {
27
+ type: "object",
28
+ properties: {},
29
+ },
30
+ annotations: {
31
+ readOnlyHint: true,
32
+ idempotentHint: true,
33
+ },
34
+ },
35
+ executor: this.storageStatus.bind(this),
36
+ },
37
+ {
38
+ definition: {
39
+ name: "pica_organisation_profile",
40
+ description: "Get your account profile — display name, tagline, IPI number, " +
41
+ "default currency, social links, and carbon tracking status.",
42
+ workflows: "infrastructure",
43
+ inputSchema: {
44
+ type: "object",
45
+ properties: {},
46
+ },
47
+ },
48
+ executor: this.orgProfile.bind(this),
49
+ },
50
+ {
51
+ definition: {
52
+ name: "pica_user_profile",
53
+ description: "Get your user profile — name, email, role, creative types, " +
54
+ "AI disclosure defaults, and onboarding status.",
55
+ workflows: "infrastructure",
56
+ inputSchema: {
57
+ type: "object",
58
+ properties: {},
59
+ },
60
+ },
61
+ executor: this.userProfile.bind(this),
62
+ },
63
+ {
64
+ definition: {
65
+ name: "pica_update_privacy_settings",
66
+ description: "Update your marketing / privacy preferences. Use this to unsubscribe " +
67
+ "from product emails — set receive_news_announcements=false and/or " +
68
+ "receive_monthly_digest=false. Writes the same fields the settings " +
69
+ "UI does; both flags default to true for new accounts. " +
70
+ "Subject is always the authenticated user (no user_id parameter " +
71
+ "accepted).",
72
+ workflows: "infrastructure",
73
+ inputSchema: {
74
+ type: "object",
75
+ properties: {
76
+ receive_news_announcements: {
77
+ type: "boolean",
78
+ description: "Product announcements, drip sequences, weekly roundups, " +
79
+ "and all other non-transactional marketing email. " +
80
+ "Set to false to unsubscribe from everything.",
81
+ },
82
+ receive_monthly_digest: {
83
+ type: "boolean",
84
+ description: "Monthly catalog digest — a separate opt-out from the " +
85
+ "news/announcements flag. Set to false to stop receiving it.",
86
+ },
87
+ },
88
+ },
89
+ },
90
+ executor: this.updatePrivacySettings.bind(this),
91
+ },
92
+ {
93
+ definition: {
94
+ name: "pica_get_privacy_settings",
95
+ description: "Read your marketing / privacy preferences. Returns the same flags " +
96
+ "the settings UI shows: receive_news_announcements and " +
97
+ "receive_monthly_digest. Use this to check current opt-in state " +
98
+ "before calling pica_update_privacy_settings. Subject is always " +
99
+ "the authenticated user (no user_id parameter accepted).",
100
+ workflows: "infrastructure",
101
+ inputSchema: {
102
+ type: "object",
103
+ properties: {},
104
+ },
105
+ annotations: {
106
+ readOnlyHint: true,
107
+ idempotentHint: true,
108
+ },
109
+ },
110
+ executor: this.getPrivacySettings.bind(this),
111
+ },
112
+ {
113
+ definition: {
114
+ name: "pica_delete_my_account",
115
+ description: "Request deletion of your PICA account. Creates a soft-delete " +
116
+ "request with a 30-day reversal window (same semantics as the " +
117
+ "settings UI). Your catalog data is retained per legal-compliance " +
118
+ "rules; personal data (name, bio, credentials, chat history) is " +
119
+ "erased on the scheduled cutover. Subject is always the " +
120
+ "authenticated user; no user_id parameter accepted. The agent " +
121
+ "is responsible for confirming with the user before invoking " +
122
+ "this tool.",
123
+ workflows: "infrastructure",
124
+ inputSchema: {
125
+ type: "object",
126
+ properties: {
127
+ reason: {
128
+ type: "string",
129
+ description: "Optional free-text reason for leaving. Surfaced to the " +
130
+ "PICA team for product feedback; never shared externally.",
131
+ },
132
+ },
133
+ },
134
+ annotations: {
135
+ destructiveHint: true,
136
+ idempotentHint: false,
137
+ },
138
+ },
139
+ executor: this.deleteMyAccount.bind(this),
140
+ },
141
+ {
142
+ definition: {
143
+ name: "pica_update_my_identity",
144
+ description: "Capture or update your own identity — full_name (your account name), " +
145
+ "stage_name, IPI, ISNI, IPN, PRO. " +
146
+ "Lazy-creates your person record if needed. After the write, we re-run " +
147
+ "cross-org discovery with your new identifiers and return the count of " +
148
+ "newly-visible credits / ownership claims / artist links so the agent " +
149
+ "can say 'found N more — claim them?' in the same turn. " +
150
+ "Subject is always the authenticated user; no user_id parameter " +
151
+ "accepted.",
152
+ workflows: "infrastructure",
153
+ inputSchema: {
154
+ type: "object",
155
+ properties: MY_IDENTITY_WRITE_PROPERTIES,
156
+ },
157
+ annotations: {
158
+ idempotentHint: true,
159
+ },
160
+ },
161
+ executor: this.updateMyIdentity.bind(this),
162
+ },
163
+ {
164
+ definition: {
165
+ name: "pica_update_organisation_profile",
166
+ description: "Update your account profile — name, org_type, display_name, tagline, " +
167
+ "ipi_number. Use 'name' to fix typos from signup (e.g., rename a placeholder " +
168
+ "like 'My Organization' to your real org name). Scope is bounded to the " +
169
+ "authenticated caller's org; the org id is derived from the auth context, " +
170
+ "never accepted as a parameter.",
171
+ workflows: "infrastructure",
172
+ inputSchema: {
173
+ type: "object",
174
+ properties: ORG_PROFILE_WRITE_PROPERTIES,
175
+ },
176
+ annotations: {
177
+ idempotentHint: true,
178
+ },
179
+ },
180
+ executor: this.updateOrganisationProfile.bind(this),
181
+ },
182
+ {
183
+ definition: {
184
+ name: "pica_export_my_data",
185
+ description: "Request a GDPR Article 15 / 20 data export. Queues a background " +
186
+ "job and returns a job_id immediately; a signed download link is " +
187
+ "emailed to your PICA account address when the export completes. " +
188
+ "Format is JSON by default (v1). Subject is always the " +
189
+ "authenticated user; no user_id parameter accepted.",
190
+ workflows: "infrastructure",
191
+ inputSchema: {
192
+ type: "object",
193
+ properties: {},
194
+ },
195
+ annotations: {
196
+ idempotentHint: false,
197
+ },
198
+ },
199
+ executor: this.exportMyData.bind(this),
200
+ },
201
+ ];
202
+ }
203
+ async storageStatus(_args) {
204
+ const result = await this.pica.settings.storageConfig();
205
+ const config = result?.data || result;
206
+ // ADR-217 — surface the enhanced shape to the agent. Never include
207
+ // credentials. The GET endpoint already masks secret fields and only
208
+ // returns the un-masked region; we read just the structured non-secret
209
+ // fields so a future credential leak in `config.credentials` cannot
210
+ // accidentally appear in tool output.
211
+ const provider = config?.provider || "pica_s3";
212
+ const isByoc = typeof config?.is_byoc === "boolean"
213
+ ? config.is_byoc
214
+ : provider !== "pica_s3";
215
+ const lastTestStatus = config?.last_test_status ?? "untested";
216
+ const lastTestedAt = config?.last_tested_at ?? null;
217
+ const lastTestError = config?.last_test_error ?? null;
218
+ const region = config?.region ?? null;
219
+ const buckets = config?.buckets || { audio: "", media: "", documents: "" };
220
+ const summary = isByoc
221
+ ? `Storage provider: ${provider} (your own bucket). Last test: ${lastTestStatus}` +
222
+ (lastTestStatus === "failed" && lastTestError
223
+ ? ` — ${lastTestError}`
224
+ : "")
225
+ : `Storage provider: pica_s3 (PICA default — always available).`;
226
+ return formatSuccess(summary, {
227
+ provider,
228
+ is_byoc: isByoc,
229
+ buckets: {
230
+ audio: buckets.audio || "",
231
+ media: buckets.media || "",
232
+ documents: buckets.documents || "",
233
+ },
234
+ region,
235
+ last_tested_at: lastTestedAt,
236
+ last_test_status: lastTestStatus,
237
+ last_test_error: lastTestError,
238
+ });
239
+ }
240
+ async orgProfile(_args) {
241
+ const result = await this.pica.settings.orgProfile();
242
+ const org = result?.data || result;
243
+ return formatSuccess(`Organisation: ${org?.display_name || "unnamed"}`, org);
244
+ }
245
+ async userProfile(_args) {
246
+ const result = await this.pica.settings.userProfile();
247
+ const profile = result?.data || result;
248
+ return formatSuccess(`User: ${profile?.full_name || profile?.email || "unknown"}`, profile);
249
+ }
250
+ async updatePrivacySettings(args) {
251
+ // Only forward the two flags we expose — silently drops any other
252
+ // key the agent might pass so we don't accidentally PATCH
253
+ // unrelated profile fields through this tool.
254
+ const payload = {};
255
+ if (typeof args.receive_news_announcements === "boolean") {
256
+ payload.receive_news_announcements = args.receive_news_announcements;
257
+ }
258
+ if (typeof args.receive_monthly_digest === "boolean") {
259
+ payload.receive_monthly_digest = args.receive_monthly_digest;
260
+ }
261
+ if (Object.keys(payload).length === 0) {
262
+ return formatAsText("No change — pass receive_news_announcements and/or receive_monthly_digest.");
263
+ }
264
+ const result = await this.pica.settings.updatePrivacySettings(payload);
265
+ const updated = result?.data || result;
266
+ const flags = [
267
+ `receive_news_announcements: ${updated?.receive_news_announcements ?? "unchanged"}`,
268
+ `receive_monthly_digest: ${updated?.receive_monthly_digest ?? "unchanged"}`,
269
+ ].join(", ");
270
+ return formatSuccess(`Privacy settings updated — ${flags}`, updated);
271
+ }
272
+ async getPrivacySettings(_args) {
273
+ const result = await this.pica.settings.getPrivacySettings();
274
+ const profile = result?.data || result;
275
+ // Only surface the flags the paired update tool writes. Keeps the
276
+ // get/update pair symmetric and prevents this tool from leaking
277
+ // unrelated profile fields (full_name, role, bio, etc.) to the agent.
278
+ const flags = {
279
+ receive_news_announcements: profile?.receive_news_announcements ?? null,
280
+ receive_monthly_digest: profile?.receive_monthly_digest ?? null,
281
+ };
282
+ const summary = [
283
+ `receive_news_announcements: ${flags.receive_news_announcements ?? "unset"}`,
284
+ `receive_monthly_digest: ${flags.receive_monthly_digest ?? "unset"}`,
285
+ ].join(", ");
286
+ return formatSuccess(`Privacy settings — ${summary}`, flags);
287
+ }
288
+ async deleteMyAccount(args) {
289
+ // Defensively reject any caller-supplied user_id. ADR-184 rule 2 —
290
+ // the subject is always the authenticated user; accepting a user_id
291
+ // is a prompt-injection vector. The schema doesn't advertise it, but
292
+ // agents sometimes send speculative keys; ignore anything other than
293
+ // the documented `reason`.
294
+ const payload = {};
295
+ if (typeof args.reason === "string" && args.reason.trim()) {
296
+ payload.reason = args.reason.trim();
297
+ }
298
+ const result = await this.pica.gdpr.deleteMyAccount(payload);
299
+ const data = result?.data || result;
300
+ return formatSuccess(`Account deletion requested. 30-day reversal window begins now. ` +
301
+ `A pre-deletion data export will be prepared automatically.`, data);
302
+ }
303
+ async exportMyData(_args) {
304
+ const result = await this.pica.gdpr.exportMyData();
305
+ const data = result?.data || result;
306
+ return formatSuccess(`Data export queued (job_id: ${data?.job_id ?? "unknown"}). ` +
307
+ `A signed download link will be emailed to your PICA account address ` +
308
+ `when the job completes.`, data);
309
+ }
310
+ async updateMyIdentity(args) {
311
+ // ADR-184 rule 2 — silently drop any caller-supplied user_id. Only
312
+ // forward the documented identity fields so a speculative agent key
313
+ // can't leak data through this tool.
314
+ const payload = {};
315
+ for (const key of Object.keys(MY_IDENTITY_WRITE_PROPERTIES)) {
316
+ const value = args[key];
317
+ if (value === undefined)
318
+ continue;
319
+ if (value === null || typeof value === "string") {
320
+ payload[key] = value;
321
+ }
322
+ }
323
+ if (Object.keys(payload).length === 0) {
324
+ return formatAsText("No change — pass at least one of: full_name, stage_name, cae_ipi_number, isni, ipn, pro_name, pro_member_number.");
325
+ }
326
+ const result = await this.pica.settings.updateMyIdentity(payload);
327
+ const data = result?.data || result;
328
+ const updated = Array.isArray(data?.updated) ? data.updated : [];
329
+ const disc = data?.discoveries_added || {
330
+ credits: 0,
331
+ custody: 0,
332
+ artists: 0,
333
+ };
334
+ const fieldsLine = updated.length > 0
335
+ ? `Updated: ${updated.join(", ")}.`
336
+ : "No fields changed.";
337
+ const discTotal = disc.credits + disc.custody + disc.artists;
338
+ const discLine = discTotal > 0
339
+ ? `Found ${disc.credits} new credits, ${disc.custody} ownership claims, ${disc.artists} artist links — call pica_discoveries_query to review.`
340
+ : "No new discoveries from this update.";
341
+ return formatSuccess(`${fieldsLine} ${discLine}`, data);
342
+ }
343
+ async updateOrganisationProfile(args) {
344
+ const payload = {};
345
+ for (const key of Object.keys(ORG_PROFILE_WRITE_PROPERTIES)) {
346
+ const value = args[key];
347
+ if (value === undefined)
348
+ continue;
349
+ if (value === null || typeof value === "string") {
350
+ payload[key] = value;
351
+ }
352
+ }
353
+ if (Object.keys(payload).length === 0) {
354
+ return formatAsText("No change — pass at least one of: org_type, display_name, tagline, ipi_number.");
355
+ }
356
+ const result = await this.pica.settings.updateOrganisationProfile(payload);
357
+ const data = result?.data || result;
358
+ const updated = Array.isArray(data?.updated) ? data.updated : [];
359
+ const msg = updated.length > 0
360
+ ? `Organisation profile updated — ${updated.join(", ")}.`
361
+ : "No fields changed.";
362
+ return formatSuccess(msg, data);
363
+ }
364
+ }
365
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/tools/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Share Links MCP Tools — ADR-139 Step 3
3
+ *
4
+ * "Share my song with Tony" or "Send a link to Mark to upload stems"
5
+ * — conversational actions that need MCP tools.
6
+ */
7
+ import { PicaClient } from "@withpica/mcp-sdk";
8
+ import type { ToolDefinition, ToolExecutor } from "./index.js";
9
+ export declare class ShareLinksTools {
10
+ private pica;
11
+ constructor(pica: PicaClient);
12
+ getTools(): Array<{
13
+ definition: ToolDefinition;
14
+ executor: ToolExecutor;
15
+ }>;
16
+ private listShareLinks;
17
+ private createShareLink;
18
+ private inspectShareLink;
19
+ private updateShareLink;
20
+ private deleteShareLink;
21
+ }
22
+ //# sourceMappingURL=share-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-links.d.ts","sourceRoot":"","sources":["../../src/tools/share-links.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAS3E,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAa;gBAEb,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YAyH3D,cAAc;YAoBd,eAAe;YAkCf,gBAAgB;YAOhB,eAAe;YAiBf,eAAe;CAM9B"}
@@ -0,0 +1,188 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ import { formatSuccess, SHARE_LINKS_WRITE_PROPERTIES, SHARE_LINKS_CREATE_REQUIRED, SHARE_LINKS_UPDATE_PROPERTIES, } from "@withpica/mcp-utils";
3
+ export class ShareLinksTools {
4
+ pica;
5
+ constructor(pica) {
6
+ this.pica = pica;
7
+ }
8
+ getTools() {
9
+ return [
10
+ {
11
+ definition: {
12
+ name: "pica_share_links_list",
13
+ description: "List existing share links, optionally filtered by work. " +
14
+ "Shows active links with view/download counts and expiry status.",
15
+ workflows: "infrastructure",
16
+ inputSchema: {
17
+ type: "object",
18
+ properties: {
19
+ work_id: {
20
+ type: "string",
21
+ description: "Filter share links for a specific work (UUID)",
22
+ },
23
+ },
24
+ },
25
+ },
26
+ executor: this.listShareLinks.bind(this),
27
+ },
28
+ {
29
+ definition: {
30
+ name: "pica_share_links_create",
31
+ description: "Create a share link for a work, playlist, or release. " +
32
+ "Supports password protection, view-count limits, expiry, access-type scoping " +
33
+ "(allowed_person_ids for known people, sent_to_emails for external recipients), " +
34
+ "granular view controls (collaborators, financials, comments), notify-on-access, " +
35
+ "and audio watermarking. Returns a URL the recipient can use to access the content.",
36
+ workflows: "infrastructure",
37
+ inputSchema: {
38
+ type: "object",
39
+ properties: SHARE_LINKS_WRITE_PROPERTIES,
40
+ required: [...SHARE_LINKS_CREATE_REQUIRED],
41
+ },
42
+ },
43
+ executor: this.createShareLink.bind(this),
44
+ },
45
+ {
46
+ definition: {
47
+ name: "pica_share_links_inspect",
48
+ description: "Get full details for a single share link by id — name, description, " +
49
+ "expiry, view counts, access controls, password-protected flag, and " +
50
+ "the linked work's title + primary artist. Use after pica_share_links_list " +
51
+ "to drill into a specific link, or after pica_share_links_create to verify.",
52
+ workflows: "infrastructure",
53
+ inputSchema: {
54
+ type: "object",
55
+ properties: {
56
+ id: {
57
+ type: "string",
58
+ description: "Share link ID (UUID).",
59
+ },
60
+ },
61
+ required: ["id"],
62
+ },
63
+ annotations: {
64
+ readOnlyHint: true,
65
+ idempotentHint: true,
66
+ },
67
+ },
68
+ executor: this.inspectShareLink.bind(this),
69
+ },
70
+ {
71
+ definition: {
72
+ name: "pica_share_links_update",
73
+ description: "Update a narrow set of share-link fields — name, description, " +
74
+ "personal_message, expires_at, max_views, is_active, password. " +
75
+ "Permission-bearing fields (access_type, allow_*, allowed_person_ids, " +
76
+ "watermark_audio, sent_to_emails) are NOT updatable post-create — " +
77
+ "revoke and recreate to change permissions. Set is_active=false to " +
78
+ "deactivate without deleting; set password=null to remove the password.",
79
+ workflows: "infrastructure",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {
83
+ id: {
84
+ type: "string",
85
+ description: "Share link ID (UUID).",
86
+ },
87
+ ...SHARE_LINKS_UPDATE_PROPERTIES,
88
+ },
89
+ required: ["id"],
90
+ },
91
+ annotations: {
92
+ idempotentHint: true,
93
+ },
94
+ },
95
+ executor: this.updateShareLink.bind(this),
96
+ },
97
+ {
98
+ definition: {
99
+ name: "pica_share_links_delete",
100
+ description: "Hard-delete a share link by id. The link becomes inaccessible " +
101
+ "immediately. To deactivate without losing the audit trail, prefer " +
102
+ "pica_share_links_update with is_active=false.",
103
+ workflows: "infrastructure",
104
+ inputSchema: {
105
+ type: "object",
106
+ properties: {
107
+ id: {
108
+ type: "string",
109
+ description: "Share link ID (UUID).",
110
+ },
111
+ },
112
+ required: ["id"],
113
+ },
114
+ annotations: {
115
+ destructiveHint: true,
116
+ idempotentHint: false,
117
+ },
118
+ },
119
+ executor: this.deleteShareLink.bind(this),
120
+ },
121
+ ];
122
+ }
123
+ async listShareLinks(args) {
124
+ const data = await this.pica.shareLinks.list({
125
+ work_id: args.work_id,
126
+ });
127
+ const links = Array.isArray(data) ? data : [];
128
+ const hints = [];
129
+ if (!links.length && args.work_id) {
130
+ hints.push({
131
+ gap: "no_share_links",
132
+ suggestion: "Create a share link for this work (pica_share_links_create)",
133
+ severity: "nice_to_have",
134
+ });
135
+ }
136
+ return formatSuccess(`Found ${links.length} share link(s)`, links, hints);
137
+ }
138
+ async createShareLink(args) {
139
+ if (!args.work_id && !args.work_ids?.length && !args.release_id) {
140
+ return formatSuccess("Please provide a work_id, work_ids (array), or release_id to create a share link", null);
141
+ }
142
+ // Pass through every property the shared schema advertises. The admin
143
+ // route's allow-list (lib/services/share-links-write-constants.ts —
144
+ // ADR-174 Phase 2 item 20 slice 1) rejects anything outside the
145
+ // contract; column defaults apply when a field is omitted.
146
+ const payload = {};
147
+ for (const key of Object.keys(args)) {
148
+ if (args[key] !== undefined)
149
+ payload[key] = args[key];
150
+ }
151
+ if (payload.allow_download === undefined)
152
+ payload.allow_download = false;
153
+ const data = await this.pica.shareLinks.create(payload);
154
+ const hints = [];
155
+ if (data?.token) {
156
+ hints.push({
157
+ gap: "share_link_created",
158
+ suggestion: `Share link created — send the URL to the recipient`,
159
+ severity: "nice_to_have",
160
+ });
161
+ }
162
+ return formatSuccess("Share link created", data, hints);
163
+ }
164
+ async inspectShareLink(args) {
165
+ const data = await this.pica.shareLinks.get(args.id);
166
+ return formatSuccess("Share link details", data);
167
+ }
168
+ async updateShareLink(args) {
169
+ const { id, ...updates } = args;
170
+ // Forward only the keys explicitly passed — preserves the route's
171
+ // "narrow allow-list" semantics (any unknown key 400s with a
172
+ // helpful redirect message). Empty payload also 400s server-side
173
+ // so agents get a clear "nothing to update" response instead of a
174
+ // silent no-op.
175
+ const payload = {};
176
+ for (const key of Object.keys(updates)) {
177
+ if (updates[key] !== undefined)
178
+ payload[key] = updates[key];
179
+ }
180
+ const data = await this.pica.shareLinks.update(id, payload);
181
+ return formatSuccess("Share link updated", data);
182
+ }
183
+ async deleteShareLink(args) {
184
+ await this.pica.shareLinks.delete(args.id);
185
+ return formatSuccess(`Share link ${args.id} deleted`);
186
+ }
187
+ }
188
+ //# sourceMappingURL=share-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-links.js","sourceRoot":"","sources":["../../src/tools/share-links.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { ToolDefinition, ToolExecutor } from "./index.js";
2
+ export type SignupTransport = "stdio" | "http";
3
+ export interface SignupToolsConfig {
4
+ /** Base PICA API URL (e.g. `https://withpica.com/api`). Trailing slash tolerated. */
5
+ apiUrl: string;
6
+ /** Stamped into the JWT body so the page knows which credential issuance branch to take. */
7
+ transport: SignupTransport;
8
+ /**
9
+ * HTTP only — DCR client identifier from the OAuth discovery context
10
+ * so the connector flow can be resumed after onboarding completes.
11
+ * MUST be null for stdio (the route enforces this server-side too).
12
+ */
13
+ clientId?: string | null;
14
+ }
15
+ export declare class SignupTools {
16
+ private readonly apiUrl;
17
+ private readonly transport;
18
+ private readonly clientId;
19
+ constructor(config: SignupToolsConfig);
20
+ getTools(): Array<{
21
+ definition: ToolDefinition;
22
+ executor: ToolExecutor;
23
+ }>;
24
+ private signupStart;
25
+ }
26
+ //# sourceMappingURL=signup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/tools/signup.ts"],"names":[],"mappings":"AA+BA,OAAO,EACL,cAAc,EACd,YAAY,EAGb,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,SAAS,EAAE,eAAe,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAWD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAE7B,MAAM,EAAE,iBAAiB;IAoBrC,QAAQ,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,cAAc,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC;YAmD3D,WAAW;CAuL1B"}