@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,21 @@
1
+ /**
2
+ * Notes Tools — add and manage notes on works, people, and general catalog observations
3
+ *
4
+ * Backed by the assistant_memory system (type: "note") via REST routes (/api/admin/notes/*).
5
+ * Notes support auto-linking to works and people mentioned in the text via Tier 1 extraction.
6
+ */
7
+ import { PicaClient } from "@withpica/mcp-sdk";
8
+ import { ToolDefinition, ToolExecutor } from "./index.js";
9
+ export declare class NotesTools {
10
+ private pica;
11
+ constructor(pica: PicaClient);
12
+ getTools(): Array<{
13
+ definition: ToolDefinition;
14
+ executor: ToolExecutor;
15
+ }>;
16
+ private listNotes;
17
+ private getNote;
18
+ private createNote;
19
+ private deleteNote;
20
+ }
21
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../src/tools/notes.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAGtE,qBAAa,UAAU;IACrB,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;YAyF3D,SAAS;YAWT,OAAO;YAKP,UAAU;YAKV,UAAU;CAIzB"}
@@ -0,0 +1,115 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ import { formatSuccess, formatStructuredList } from "@withpica/mcp-utils";
3
+ export class NotesTools {
4
+ pica;
5
+ constructor(pica) {
6
+ this.pica = pica;
7
+ }
8
+ getTools() {
9
+ return [
10
+ {
11
+ definition: {
12
+ name: "pica_notes_list",
13
+ description: "List notes — filter by search query, linked work, or linked person. Notes can be attached to works, people, or stand alone.",
14
+ workflows: "infrastructure",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ q: {
19
+ type: "string",
20
+ description: "Search notes by content or title",
21
+ },
22
+ work_id: {
23
+ type: "string",
24
+ description: "Filter notes linked to a specific work",
25
+ },
26
+ person_id: {
27
+ type: "string",
28
+ description: "Filter notes linked to a specific person",
29
+ },
30
+ limit: {
31
+ type: "number",
32
+ description: "Max results (default 20)",
33
+ },
34
+ },
35
+ },
36
+ },
37
+ executor: this.listNotes.bind(this),
38
+ },
39
+ {
40
+ definition: {
41
+ name: "pica_notes_get",
42
+ description: "Get a specific note by ID.",
43
+ workflows: "infrastructure",
44
+ inputSchema: {
45
+ type: "object",
46
+ properties: {
47
+ id: { type: "string", description: "Note ID" },
48
+ },
49
+ required: ["id"],
50
+ },
51
+ },
52
+ executor: this.getNote.bind(this),
53
+ },
54
+ {
55
+ definition: {
56
+ name: "pica_notes_create",
57
+ description: "Add a note to the catalog. Notes can be linked to specific works or people, or stand alone as general observations. PICA auto-detects mentions of works and people in the note text. " +
58
+ "Stored as `assistant_memory` rows with type='note' — other assistant_memory columns " +
59
+ "(scope, type, key, confidence, source, expires_at, metadata) are service-managed by " +
60
+ "captureNote() and not settable from the tool surface.",
61
+ workflows: "infrastructure",
62
+ inputSchema: {
63
+ type: "object",
64
+ properties: {
65
+ content: {
66
+ type: "string",
67
+ description: "The note text. Mention work titles or people names — PICA auto-links entities via AI extraction.",
68
+ },
69
+ },
70
+ required: ["content"],
71
+ },
72
+ },
73
+ executor: this.createNote.bind(this),
74
+ },
75
+ {
76
+ definition: {
77
+ name: "pica_notes_delete",
78
+ description: "Delete a catalog note by id (destructive — no undo).",
79
+ workflows: "infrastructure",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {
83
+ id: { type: "string", description: "Note ID to delete" },
84
+ },
85
+ required: ["id"],
86
+ },
87
+ },
88
+ executor: this.deleteNote.bind(this),
89
+ },
90
+ ];
91
+ }
92
+ async listNotes(args) {
93
+ const result = await this.pica.notes.list({
94
+ q: args.q,
95
+ work: args.work_id,
96
+ person: args.person_id,
97
+ limit: args.limit,
98
+ });
99
+ const notes = Array.isArray(result) ? result : [];
100
+ return formatStructuredList(notes, "note");
101
+ }
102
+ async getNote(args) {
103
+ const note = await this.pica.notes.get(args.id);
104
+ return formatSuccess("Note retrieved", note);
105
+ }
106
+ async createNote(args) {
107
+ const note = await this.pica.notes.create(args.content);
108
+ return formatSuccess("Note added", note);
109
+ }
110
+ async deleteNote(args) {
111
+ await this.pica.notes.delete(args.id);
112
+ return formatSuccess(`Note ${args.id} deleted`);
113
+ }
114
+ }
115
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/tools/notes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Notifications Tools — check and manage PICA notifications via MCP
3
+ */
4
+ import { PicaClient } from "@withpica/mcp-sdk";
5
+ import { ToolDefinition, ToolExecutor } from "./index.js";
6
+ export declare class NotificationsTools {
7
+ private pica;
8
+ constructor(pica: PicaClient);
9
+ getTools(): Array<{
10
+ definition: ToolDefinition;
11
+ executor: ToolExecutor;
12
+ }>;
13
+ /**
14
+ * ADR-218 Primitive B — read the cross-transport notification feed.
15
+ */
16
+ private discoveriesRecent;
17
+ /**
18
+ * ADR-218 Primitive C — acknowledge cross-transport notifications.
19
+ */
20
+ private discoveriesAcknowledge;
21
+ private listPending;
22
+ private cancelPending;
23
+ private notifyUserAt;
24
+ private listNotifications;
25
+ private notifyPerson;
26
+ private markRead;
27
+ }
28
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAQtE,qBAAa,kBAAkB;IAC7B,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;IAsLzE;;OAEG;YACW,iBAAiB;IAwE/B;;OAEG;YACW,sBAAsB;YAkCtB,WAAW;YAeX,aAAa;YAuCb,YAAY;YA4CZ,iBAAiB;YAoBjB,YAAY;YA0CZ,QAAQ;CAOvB"}
@@ -0,0 +1,417 @@
1
+ // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import { formatAsText, formatSuccess, formatStructuredList, formatValidationError, } from "@withpica/mcp-utils";
4
+ export class NotificationsTools {
5
+ pica;
6
+ constructor(pica) {
7
+ this.pica = pica;
8
+ }
9
+ getTools() {
10
+ return [
11
+ {
12
+ definition: {
13
+ name: "pica_notifications_list",
14
+ description: "Check for notifications from PICA — new collaborator invites, " +
15
+ "enrichment results, verification requests, credit disputes, " +
16
+ "and other flagged items that need attention.",
17
+ workflows: "infrastructure",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {},
21
+ },
22
+ },
23
+ executor: this.listNotifications.bind(this),
24
+ },
25
+ {
26
+ definition: {
27
+ name: "pica_notify_person",
28
+ description: "Send a notification to a person in the catalog. If the person has a PICA account, " +
29
+ "they get an in-app notification + Telegram message (if connected). " +
30
+ "If they're not a PICA user yet, returns a hint to use pica_collaborators_invite instead. " +
31
+ "Use for credit verification requests, song updates, or any message to a collaborator.",
32
+ workflows: "infrastructure",
33
+ inputSchema: {
34
+ type: "object",
35
+ properties: {
36
+ person_id: {
37
+ type: "string",
38
+ description: "The person's ID in your catalog",
39
+ },
40
+ message: {
41
+ type: "string",
42
+ description: "What to tell them (e.g. 'please verify your writing credit on Midnight Run')",
43
+ },
44
+ work_id: {
45
+ type: "string",
46
+ description: "Optional work ID for context — links the notification to a specific work",
47
+ },
48
+ },
49
+ required: ["person_id", "message"],
50
+ },
51
+ },
52
+ executor: this.notifyPerson.bind(this),
53
+ },
54
+ {
55
+ definition: {
56
+ name: "pica_notifications_mark_read",
57
+ description: "Mark one or more notifications as read.",
58
+ workflows: "infrastructure",
59
+ inputSchema: {
60
+ type: "object",
61
+ properties: {
62
+ notification_ids: {
63
+ type: "array",
64
+ items: { type: "string" },
65
+ description: "IDs of notifications to mark as read",
66
+ },
67
+ },
68
+ required: ["notification_ids"],
69
+ },
70
+ },
71
+ executor: this.markRead.bind(this),
72
+ },
73
+ {
74
+ definition: {
75
+ name: "pica_notify_user_at",
76
+ description: "Schedule a one-shot Telegram reminder for the future. The user can ask for reminders in any natural phrasing — 'remind me tomorrow at 9', 'ping me in 2 hours', 'check on this next monday'. Convert their phrasing to an ISO 8601 UTC timestamp before calling. Ask the user for their timezone once if you don't already know it. The message body IS the receipt — make it self-contained so the user reading it cold knows what to do. Delivery goes via Telegram, so pica_telegram_connect must be paired first. Per-user cap: 100 pending reminders.",
77
+ workflows: "infrastructure",
78
+ inputSchema: {
79
+ type: "object",
80
+ properties: {
81
+ message: {
82
+ type: "string",
83
+ description: "The reminder body text. Self-contained — include enough context that the user reading it cold knows what to do. 1-4000 characters.",
84
+ },
85
+ deliver_at: {
86
+ type: "string",
87
+ description: "ISO 8601 UTC timestamp. Must be in the future and within 1 year. Convert from natural language using the user's timezone — ask first if you don't know it.",
88
+ },
89
+ },
90
+ required: ["message", "deliver_at"],
91
+ },
92
+ },
93
+ executor: this.notifyUserAt.bind(this),
94
+ },
95
+ {
96
+ definition: {
97
+ name: "pica_notify_user_list_pending",
98
+ description: "List all pending scheduled Telegram reminders for the current user, ordered by deliver_at ascending. Use to show the user what reminders are queued or to find an id for pica_notify_user_cancel.",
99
+ workflows: "infrastructure",
100
+ inputSchema: { type: "object", properties: {} },
101
+ },
102
+ executor: this.listPending.bind(this),
103
+ },
104
+ {
105
+ definition: {
106
+ name: "pica_notify_user_cancel",
107
+ description: "Cancel a pending scheduled reminder by id. Idempotent — if the reminder was already delivered or already cancelled, this surfaces that state gracefully instead of erroring. Use cancel + pica_notify_user_at together to reschedule a reminder.",
108
+ workflows: "infrastructure",
109
+ inputSchema: {
110
+ type: "object",
111
+ properties: {
112
+ id: {
113
+ type: "string",
114
+ description: "The scheduled_notifications row id — get it from pica_notify_user_list_pending or from the response of pica_notify_user_at.",
115
+ },
116
+ },
117
+ required: ["id"],
118
+ },
119
+ },
120
+ executor: this.cancelPending.bind(this),
121
+ },
122
+ // --- ADR-218 cross-transport awareness ---
123
+ {
124
+ definition: {
125
+ name: "pica_notifications_recent",
126
+ description: "Read the recent cross-transport notification feed for the org — events that PICA has surfaced about your catalog (credit disputes, enrichment matches, " +
127
+ "audio analysis outcomes, etc.). Distinct from `pica_notifications_list`: this reads the `discovery_events` ledger that " +
128
+ "ALL surfaces (MCP, Telegram, web, email) share, so it stays in sync with what was sent to the user's Telegram channel. " +
129
+ "Pass `unread_only: true` to see only events the agent has not yet acknowledged via " +
130
+ "`pica_notification_acknowledge`. Default limit 20, max 100. The agent's ambient envelope at " +
131
+ "_meta.session_state.notifications.unread_count tells you whether there's anything new before you call this.",
132
+ workflows: "infrastructure",
133
+ inputSchema: {
134
+ type: "object",
135
+ properties: {
136
+ limit: {
137
+ type: "number",
138
+ description: "Optional. Default 20, max 100. Number of recent events to return.",
139
+ },
140
+ unread_only: {
141
+ type: "boolean",
142
+ description: "Optional. When true, filters to events the MCP surface has not acknowledged.",
143
+ },
144
+ },
145
+ },
146
+ },
147
+ executor: this.discoveriesRecent.bind(this),
148
+ },
149
+ {
150
+ definition: {
151
+ name: "pica_notification_acknowledge",
152
+ description: "Acknowledge one or more cross-transport notifications. Appends 'mcp' to the event's `seen_in` array — " +
153
+ "idempotent, so re-acknowledging is a safe no-op. Once acknowledged, the same event will NOT be re-fired to " +
154
+ "the user's Telegram channel on subsequent emits of the same dedup key (until_resolved-strategy alerts like " +
155
+ "credits_low_balance, system_warning, cascade_proposal_created). Use after summarising the events to the user " +
156
+ "or after taking the action they describe — keeps the user from being re-pinged about the same thing on " +
157
+ "another surface.",
158
+ workflows: "infrastructure",
159
+ inputSchema: {
160
+ type: "object",
161
+ properties: {
162
+ event_ids: {
163
+ type: "array",
164
+ items: { type: "string" },
165
+ description: "Discovery event UUIDs returned from `pica_notifications_recent`.",
166
+ },
167
+ },
168
+ required: ["event_ids"],
169
+ },
170
+ },
171
+ executor: this.discoveriesAcknowledge.bind(this),
172
+ },
173
+ ];
174
+ }
175
+ /**
176
+ * ADR-218 Primitive B — read the cross-transport notification feed.
177
+ */
178
+ async discoveriesRecent(args) {
179
+ const limit = typeof args.limit === "number" ? args.limit : undefined;
180
+ const unreadOnly = typeof args.unread_only === "boolean" ? args.unread_only : false;
181
+ try {
182
+ const events = await this.pica.discoveries.recent({
183
+ limit,
184
+ unreadOnly,
185
+ });
186
+ if (events.length === 0) {
187
+ return formatAsText({
188
+ count: 0,
189
+ unread_only: unreadOnly,
190
+ message: unreadOnly
191
+ ? "No unacknowledged notifications. The agent's inbox is clear."
192
+ : "No recent notifications in the cross-transport feed.",
193
+ });
194
+ }
195
+ const summary = events.slice(0, 10).map((e) => {
196
+ const ackTag = e.seen_in.includes("mcp") ? " (acknowledged)" : "";
197
+ return `[${e.severity}] ${e.title}${ackTag} — ${e.event_type} @ ${e.created_at}`;
198
+ });
199
+ const more = events.length > 10
200
+ ? `\n\n_+${events.length - 10} more — pass a higher limit to see them._`
201
+ : "";
202
+ return {
203
+ content: [
204
+ {
205
+ type: "text",
206
+ text: `${events.length} notification${events.length === 1 ? "" : "s"}${unreadOnly ? " (unacknowledged)" : ""}:\n\n${summary.join("\n")}${more}`,
207
+ },
208
+ ],
209
+ structuredContent: {
210
+ kind: "pica.card.notifications_recent",
211
+ version: 1,
212
+ data: {
213
+ count: events.length,
214
+ unread_only: unreadOnly,
215
+ events: events.map((e) => ({
216
+ id: e.id,
217
+ event_type: e.event_type,
218
+ category: e.category,
219
+ title: e.title,
220
+ description: e.description,
221
+ entity_type: e.entity_type,
222
+ entity_id: e.entity_id,
223
+ entity_name: e.entity_name,
224
+ severity: e.severity,
225
+ source: e.source,
226
+ link: e.link,
227
+ happened_at: e.created_at,
228
+ seen_in: e.seen_in,
229
+ acknowledged_by_mcp: e.seen_in.includes("mcp"),
230
+ })),
231
+ },
232
+ },
233
+ };
234
+ }
235
+ catch (err) {
236
+ return formatAsText({
237
+ error: `Failed to fetch recent notifications: ${err?.message || String(err)}`,
238
+ });
239
+ }
240
+ }
241
+ /**
242
+ * ADR-218 Primitive C — acknowledge cross-transport notifications.
243
+ */
244
+ async discoveriesAcknowledge(args) {
245
+ const ids = Array.isArray(args.event_ids)
246
+ ? args.event_ids.filter((v) => typeof v === "string" && v.length > 0)
247
+ : [];
248
+ if (ids.length === 0) {
249
+ return formatValidationError({
250
+ event_ids: "event_ids must be a non-empty array of UUID strings",
251
+ });
252
+ }
253
+ try {
254
+ const result = await this.pica.discoveries.acknowledge(ids);
255
+ return formatSuccess(result.acknowledged === 0
256
+ ? "Already acknowledged — no rows changed."
257
+ : `Acknowledged ${result.acknowledged} of ${ids.length} notification${ids.length === 1 ? "" : "s"} for the MCP surface.`, {
258
+ acknowledged: result.acknowledged,
259
+ surface: result.surface,
260
+ requested: ids.length,
261
+ });
262
+ }
263
+ catch (err) {
264
+ return formatAsText({
265
+ error: `Failed to acknowledge notifications: ${err?.message || String(err)}`,
266
+ });
267
+ }
268
+ }
269
+ async listPending(_args) {
270
+ try {
271
+ const result = await this.pica.notifications.listScheduled();
272
+ const data = result?.data || result || [];
273
+ const items = Array.isArray(data) ? data : [];
274
+ return formatStructuredList(items, "scheduled reminder", {
275
+ count: items.length,
276
+ });
277
+ }
278
+ catch (err) {
279
+ return formatAsText({
280
+ error: `Failed to list pending reminders: ${err?.message || String(err)}`,
281
+ });
282
+ }
283
+ }
284
+ async cancelPending(args) {
285
+ if (!args.id || typeof args.id !== "string") {
286
+ return formatValidationError({ id: "id is required" });
287
+ }
288
+ try {
289
+ const result = await this.pica.notifications.cancelScheduled(args.id);
290
+ const data = result?.data || result;
291
+ if (data?.status === "sent") {
292
+ return formatAsText({
293
+ cancelled: false,
294
+ status: "sent",
295
+ message: `Already delivered on ${data.sent_at} — can't cancel.`,
296
+ data,
297
+ });
298
+ }
299
+ if (data?.status === "cancelled" && data?.deliver_at) {
300
+ return formatSuccess(`Cancelled — was scheduled for ${data.deliver_at}.`, { cancelled: true, id: data.id, deliver_at: data.deliver_at });
301
+ }
302
+ if (data?.status === "failed") {
303
+ return formatAsText({
304
+ cancelled: false,
305
+ status: "failed",
306
+ message: `Reminder already marked failed: ${data.error_text || "unknown"}`,
307
+ data,
308
+ });
309
+ }
310
+ return formatSuccess("Cancelled.", { cancelled: true, data });
311
+ }
312
+ catch (err) {
313
+ const message = err?.message || String(err);
314
+ return formatAsText({
315
+ cancelled: false,
316
+ error: `Failed to cancel reminder: ${message}`,
317
+ });
318
+ }
319
+ }
320
+ async notifyUserAt(args) {
321
+ if (!args.message ||
322
+ typeof args.message !== "string" ||
323
+ !args.message.trim()) {
324
+ return formatValidationError({ message: "message is required" });
325
+ }
326
+ if (!args.deliver_at || typeof args.deliver_at !== "string") {
327
+ return formatValidationError({
328
+ deliver_at: "deliver_at is required (ISO 8601 UTC)",
329
+ });
330
+ }
331
+ try {
332
+ const result = await this.pica.notifications.schedule({
333
+ message: args.message.trim(),
334
+ deliverAt: args.deliver_at,
335
+ source: typeof args.source === "string" ? args.source : undefined,
336
+ });
337
+ const data = result?.data || result;
338
+ return formatSuccess(`Reminder scheduled for ${data.deliver_at}. I'll ping you on Telegram when it fires.`, {
339
+ id: data.id,
340
+ deliver_at: data.deliver_at,
341
+ message: data.message,
342
+ status: data.status,
343
+ completion_hints: {
344
+ list: "pica_notify_user_list_pending",
345
+ cancel: "pica_notify_user_cancel",
346
+ },
347
+ });
348
+ }
349
+ catch (err) {
350
+ const message = err?.message || String(err);
351
+ return formatAsText({
352
+ scheduled: false,
353
+ error: `Failed to schedule reminder: ${message}`,
354
+ });
355
+ }
356
+ }
357
+ async listNotifications(_args) {
358
+ try {
359
+ const result = await this.pica.notifications.list();
360
+ const notifications = result?.notifications || result || [];
361
+ const items = Array.isArray(notifications) ? notifications : [];
362
+ const unread = items.filter((n) => !n.read_at);
363
+ return formatStructuredList(items, "notification", {
364
+ total: items.length,
365
+ unread: unread.length,
366
+ });
367
+ }
368
+ catch (err) {
369
+ return formatAsText({
370
+ error: `Failed to list notifications: ${err?.message || String(err)}`,
371
+ });
372
+ }
373
+ }
374
+ async notifyPerson(args) {
375
+ if (!args.person_id?.trim()) {
376
+ return formatValidationError({ person_id: "person_id is required" });
377
+ }
378
+ if (!args.message?.trim()) {
379
+ return formatValidationError({ message: "message is required" });
380
+ }
381
+ try {
382
+ const result = await this.pica.notifications.sendToPerson({
383
+ person_id: args.person_id,
384
+ message: args.message,
385
+ work_id: args.work_id,
386
+ });
387
+ const data = result.data || result;
388
+ if (!data.delivered) {
389
+ return formatAsText({
390
+ delivered: false,
391
+ person_name: data.person_name,
392
+ reason: data.reason,
393
+ hint: data.hint,
394
+ });
395
+ }
396
+ const channels = [];
397
+ if (data.channels?.in_app)
398
+ channels.push("in-app");
399
+ if (data.channels?.telegram)
400
+ channels.push("Telegram");
401
+ if (data.channels?.email)
402
+ channels.push("email");
403
+ return formatSuccess(`Notified ${data.person_name} via ${channels.join(" + ")}`, data);
404
+ }
405
+ catch (err) {
406
+ return formatAsText({
407
+ error: `Failed to notify person: ${err?.message || String(err)}`,
408
+ });
409
+ }
410
+ }
411
+ async markRead(args) {
412
+ const ids = args.notification_ids;
413
+ await this.pica.notifications.markRead(ids);
414
+ return formatSuccess(`Marked ${ids.length} notification${ids.length !== 1 ? "s" : ""} as read`);
415
+ }
416
+ }
417
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Onboarding Tools — pica_acknowledge_onboarding.
3
+ *
4
+ * OAuth-from-MCP signups (Claude.ai / ChatGPT / Cursor) bypass the
5
+ * /onboarding wizard via the auth/callback isOAuthSignup branch.
6
+ * The /api/mcp gate at handleMcpRequest then refuses every other
7
+ * tool until the agent walks the user through identity / security
8
+ * / intent and calls this tool to flip
9
+ * user_profiles.mcp_onboarding_acknowledged=true.
10
+ *
11
+ * Companion to fix/oauth-new-user-signup-redirect (Stage 3).
12
+ */
13
+ import { PicaClient } from "@withpica/mcp-sdk";
14
+ import { ToolDefinition, ToolExecutor } from "./index.js";
15
+ export declare class OnboardingTools {
16
+ private pica;
17
+ constructor(pica: PicaClient);
18
+ getTools(): Array<{
19
+ definition: ToolDefinition;
20
+ executor: ToolExecutor;
21
+ }>;
22
+ private acknowledge;
23
+ }
24
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/tools/onboarding.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAEtE,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;YAuC3D,WAAW;CA6C1B"}