@commandable/integration-data 0.0.5 → 0.0.7

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 (387) hide show
  1. package/dist/credentials-index.d.ts.map +1 -1
  2. package/dist/credentials-index.js +183 -0
  3. package/dist/credentials-index.js.map +1 -1
  4. package/dist/index.d.ts +2 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/loader.d.ts +33 -0
  9. package/dist/loader.d.ts.map +1 -1
  10. package/dist/loader.js +36 -4
  11. package/dist/loader.js.map +1 -1
  12. package/integrations/__tests__/liveHarness.ts +16 -3
  13. package/integrations/airtable/.env.test +9 -0
  14. package/integrations/airtable/.env.test.example +11 -0
  15. package/integrations/airtable/README.md +27 -0
  16. package/integrations/airtable/__tests__/get_handlers.test.ts +43 -5
  17. package/integrations/confluence/.env.test +25 -0
  18. package/integrations/confluence/.env.test.example +36 -0
  19. package/integrations/confluence/README.md +28 -0
  20. package/integrations/confluence/__tests__/get_handlers.test.ts +121 -0
  21. package/integrations/confluence/__tests__/usage_parity.test.ts +14 -0
  22. package/integrations/confluence/__tests__/write_handlers.test.ts +131 -0
  23. package/integrations/confluence/credentials.json +39 -0
  24. package/integrations/confluence/credentials_hint.md +4 -0
  25. package/integrations/confluence/credentials_hint_api_token.md +9 -0
  26. package/integrations/confluence/credentials_hint_oauth_token.md +8 -0
  27. package/integrations/confluence/handlers/add_comment.js +19 -0
  28. package/integrations/confluence/handlers/add_label.js +16 -0
  29. package/integrations/confluence/handlers/create_page.js +22 -0
  30. package/integrations/confluence/handlers/delete_page.js +17 -0
  31. package/integrations/confluence/handlers/get_comments.js +33 -0
  32. package/integrations/confluence/handlers/get_page_children.js +30 -0
  33. package/integrations/confluence/handlers/get_space.js +22 -0
  34. package/integrations/confluence/handlers/list_spaces.js +39 -0
  35. package/integrations/confluence/handlers/read_page.js +49 -0
  36. package/integrations/confluence/handlers/search_pages.js +42 -0
  37. package/integrations/confluence/handlers/update_page.js +42 -0
  38. package/integrations/confluence/manifest.json +85 -0
  39. package/integrations/confluence/prompt.md +55 -0
  40. package/integrations/confluence/schemas/add_comment.json +22 -0
  41. package/integrations/confluence/schemas/add_label.json +19 -0
  42. package/integrations/confluence/schemas/create_page.json +33 -0
  43. package/integrations/confluence/schemas/delete_page.json +23 -0
  44. package/integrations/confluence/schemas/empty.json +6 -0
  45. package/integrations/confluence/schemas/get_comments.json +24 -0
  46. package/integrations/confluence/schemas/get_page_children.json +28 -0
  47. package/integrations/confluence/schemas/get_space.json +18 -0
  48. package/integrations/confluence/schemas/list_spaces.json +36 -0
  49. package/integrations/confluence/schemas/read_page.json +28 -0
  50. package/integrations/confluence/schemas/search_pages.json +26 -0
  51. package/integrations/confluence/schemas/update_page.json +31 -0
  52. package/integrations/github/.env.test +16 -0
  53. package/integrations/github/.env.test.example +17 -0
  54. package/integrations/github/README.md +75 -0
  55. package/integrations/github/__tests__/get_handlers.test.ts +207 -12
  56. package/integrations/github/__tests__/write_handlers.test.ts +323 -55
  57. package/integrations/github/handlers/create_commit.js +10 -2
  58. package/integrations/github/handlers/create_file.js +46 -0
  59. package/integrations/github/handlers/create_pull_request_review.js +10 -0
  60. package/integrations/github/handlers/create_release.js +14 -0
  61. package/integrations/github/handlers/delete_branch.js +8 -0
  62. package/integrations/github/handlers/delete_file.js +22 -0
  63. package/integrations/github/handlers/edit_file.js +52 -0
  64. package/integrations/github/handlers/edit_files.js +107 -0
  65. package/integrations/github/handlers/fork_repo.js +10 -0
  66. package/integrations/github/handlers/get_commit.js +8 -0
  67. package/integrations/github/handlers/get_file_contents.js +21 -0
  68. package/integrations/github/handlers/get_job_logs.js +6 -0
  69. package/integrations/github/handlers/get_latest_release.js +4 -0
  70. package/integrations/github/handlers/get_me.js +4 -0
  71. package/integrations/github/handlers/get_pull_request.js +4 -0
  72. package/integrations/github/handlers/get_pull_request_diff.js +8 -0
  73. package/integrations/github/handlers/get_repo_tree.js +12 -0
  74. package/integrations/github/handlers/get_workflow_run.js +4 -0
  75. package/integrations/github/handlers/list_branches.js +6 -1
  76. package/integrations/github/handlers/list_commits.js +5 -6
  77. package/integrations/github/handlers/list_issue_comments.js +8 -0
  78. package/integrations/github/handlers/list_issues.js +5 -6
  79. package/integrations/github/handlers/list_labels.js +8 -0
  80. package/integrations/github/handlers/list_pull_request_comments.js +8 -0
  81. package/integrations/github/handlers/list_pull_request_files.js +8 -0
  82. package/integrations/github/handlers/list_pull_requests.js +7 -2
  83. package/integrations/github/handlers/list_releases.js +8 -0
  84. package/integrations/github/handlers/list_tags.js +8 -0
  85. package/integrations/github/handlers/list_workflow_runs.js +11 -0
  86. package/integrations/github/handlers/request_pull_request_reviewers.js +10 -0
  87. package/integrations/github/handlers/search_code.js +8 -0
  88. package/integrations/github/handlers/search_issues.js +8 -0
  89. package/integrations/github/handlers/search_pull_requests.js +8 -0
  90. package/integrations/github/handlers/search_repos.js +10 -0
  91. package/integrations/github/handlers/update_pull_request.js +13 -0
  92. package/integrations/github/manifest.json +86 -21
  93. package/integrations/github/prompt.md +36 -0
  94. package/integrations/github/schemas/create_file.json +13 -0
  95. package/integrations/github/schemas/create_pull_request_review.json +17 -0
  96. package/integrations/github/schemas/create_release.json +16 -0
  97. package/integrations/github/schemas/delete_branch.json +10 -0
  98. package/integrations/github/schemas/delete_file.json +13 -0
  99. package/integrations/github/schemas/edit_file.json +26 -0
  100. package/integrations/github/schemas/edit_files.json +39 -0
  101. package/integrations/github/schemas/fork_repo.json +11 -0
  102. package/integrations/github/schemas/get_commit.json +12 -0
  103. package/integrations/github/schemas/get_file_contents.json +11 -0
  104. package/integrations/github/schemas/get_job_logs.json +10 -0
  105. package/integrations/github/schemas/get_pull_request.json +10 -0
  106. package/integrations/github/schemas/get_pull_request_diff.json +10 -0
  107. package/integrations/github/schemas/get_repo_tree.json +12 -0
  108. package/integrations/github/schemas/get_workflow_run.json +10 -0
  109. package/integrations/github/schemas/list_branches.json +12 -0
  110. package/integrations/github/schemas/list_commits.json +5 -3
  111. package/integrations/github/schemas/list_issue_comments.json +12 -0
  112. package/integrations/github/schemas/list_issues.json +4 -2
  113. package/integrations/github/schemas/list_labels.json +11 -0
  114. package/integrations/github/schemas/list_pull_request_comments.json +12 -0
  115. package/integrations/github/schemas/list_pull_request_files.json +12 -0
  116. package/integrations/github/schemas/list_pull_requests.json +7 -1
  117. package/integrations/github/schemas/list_releases.json +11 -0
  118. package/integrations/github/schemas/list_tags.json +11 -0
  119. package/integrations/github/schemas/list_workflow_runs.json +18 -0
  120. package/integrations/github/schemas/request_pull_request_reviewers.json +20 -0
  121. package/integrations/github/schemas/search_code.json +10 -0
  122. package/integrations/github/schemas/search_issues.json +10 -0
  123. package/integrations/github/schemas/search_pull_requests.json +10 -0
  124. package/integrations/github/schemas/search_repos.json +12 -0
  125. package/integrations/github/schemas/update_pull_request.json +15 -0
  126. package/integrations/google-calendar/.env.test.example +11 -0
  127. package/integrations/google-calendar/README.md +41 -0
  128. package/integrations/google-calendar/__tests__/write_and_admin_handlers.test.ts +7 -20
  129. package/integrations/google-calendar/handlers/get_event.js +5 -1
  130. package/integrations/google-calendar/handlers/list_events.js +2 -0
  131. package/integrations/google-calendar/manifest.json +27 -18
  132. package/integrations/google-calendar/prompt.md +68 -0
  133. package/integrations/google-calendar/schemas/id_calendar_event.json +4 -2
  134. package/integrations/google-calendar/schemas/list_events.json +10 -8
  135. package/integrations/google-docs/README.md +30 -0
  136. package/integrations/google-docs/__tests__/get_handlers.test.ts +4 -19
  137. package/integrations/google-docs/__tests__/write_handlers.test.ts +31 -48
  138. package/integrations/google-docs/handlers/read_document.js +189 -0
  139. package/integrations/google-docs/manifest.json +16 -31
  140. package/integrations/google-docs/prompt.md +49 -0
  141. package/integrations/google-docs/schemas/{get_document_text.json → read_document.json} +5 -2
  142. package/integrations/google-docs/todo.md +18 -0
  143. package/integrations/google-drive/README.md +26 -0
  144. package/integrations/google-drive/__tests__/handlers.test.ts +43 -0
  145. package/integrations/google-drive/__tests__/usage_parity.test.ts +9 -0
  146. package/integrations/google-drive/handlers/get_file.js +2 -4
  147. package/integrations/google-drive/handlers/get_file_content.js +41 -0
  148. package/integrations/google-drive/handlers/list_files.js +15 -0
  149. package/integrations/google-drive/handlers/search_files.js +20 -0
  150. package/integrations/google-drive/handlers/share_file.js +20 -0
  151. package/integrations/google-drive/manifest.json +37 -10
  152. package/integrations/google-drive/prompt.md +59 -0
  153. package/integrations/google-drive/schemas/get_file.json +2 -2
  154. package/integrations/google-drive/schemas/get_file_content.json +11 -0
  155. package/integrations/google-drive/schemas/list_files.json +12 -0
  156. package/integrations/google-drive/schemas/search_files.json +14 -0
  157. package/integrations/google-drive/schemas/share_file.json +23 -0
  158. package/integrations/google-gmail/.env.test.example +11 -0
  159. package/integrations/google-gmail/README.md +49 -0
  160. package/integrations/google-gmail/__tests__/get_handlers.test.ts +134 -0
  161. package/integrations/google-gmail/__tests__/usage_parity.test.ts +9 -0
  162. package/integrations/google-gmail/__tests__/write_and_admin_handlers.test.ts +211 -0
  163. package/integrations/google-gmail/credentials.json +57 -0
  164. package/integrations/google-gmail/credentials_hint_oauth_token.md +8 -0
  165. package/integrations/google-gmail/credentials_hint_service_account.md +10 -0
  166. package/integrations/google-gmail/handlers/create_draft_email.js +27 -0
  167. package/integrations/google-gmail/handlers/create_label.js +12 -0
  168. package/integrations/google-gmail/handlers/delete_draft.js +13 -0
  169. package/integrations/google-gmail/handlers/delete_label.js +13 -0
  170. package/integrations/google-gmail/handlers/delete_message.js +13 -0
  171. package/integrations/google-gmail/handlers/delete_thread.js +13 -0
  172. package/integrations/google-gmail/handlers/get_draft.js +6 -0
  173. package/integrations/google-gmail/handlers/get_label.js +6 -0
  174. package/integrations/google-gmail/handlers/get_message.js +14 -0
  175. package/integrations/google-gmail/handlers/get_profile.js +5 -0
  176. package/integrations/google-gmail/handlers/get_thread.js +14 -0
  177. package/integrations/google-gmail/handlers/list_drafts.js +15 -0
  178. package/integrations/google-gmail/handlers/list_labels.js +5 -0
  179. package/integrations/google-gmail/handlers/list_messages.js +19 -0
  180. package/integrations/google-gmail/handlers/list_threads.js +19 -0
  181. package/integrations/google-gmail/handlers/modify_message.js +11 -0
  182. package/integrations/google-gmail/handlers/modify_thread.js +11 -0
  183. package/integrations/google-gmail/handlers/read_email.js +56 -0
  184. package/integrations/google-gmail/handlers/send_draft.js +15 -0
  185. package/integrations/google-gmail/handlers/send_email.js +22 -0
  186. package/integrations/google-gmail/handlers/trash_message.js +6 -0
  187. package/integrations/google-gmail/handlers/trash_thread.js +6 -0
  188. package/integrations/google-gmail/handlers/untrash_message.js +6 -0
  189. package/integrations/google-gmail/handlers/untrash_thread.js +6 -0
  190. package/integrations/google-gmail/handlers/update_label.js +15 -0
  191. package/integrations/google-gmail/manifest.json +44 -0
  192. package/integrations/google-gmail/prompt.md +52 -0
  193. package/integrations/google-gmail/schemas/create_draft_email.json +16 -0
  194. package/integrations/google-gmail/schemas/create_label.json +26 -0
  195. package/integrations/google-gmail/schemas/get_message.json +20 -0
  196. package/integrations/{google-docs/schemas/get_document_structured.json → google-gmail/schemas/get_profile.json} +4 -2
  197. package/integrations/google-gmail/schemas/get_thread.json +20 -0
  198. package/integrations/google-gmail/schemas/id_draft.json +16 -0
  199. package/integrations/google-gmail/schemas/id_label.json +16 -0
  200. package/integrations/google-gmail/schemas/id_message.json +16 -0
  201. package/integrations/google-gmail/schemas/id_thread.json +16 -0
  202. package/integrations/google-gmail/schemas/list_drafts.json +30 -0
  203. package/integrations/{google-sheet/schemas/get_developer_metadata.json → google-gmail/schemas/list_labels.json} +4 -3
  204. package/integrations/google-gmail/schemas/list_messages.json +35 -0
  205. package/integrations/google-gmail/schemas/list_threads.json +35 -0
  206. package/integrations/google-gmail/schemas/modify_message.json +24 -0
  207. package/integrations/google-gmail/schemas/modify_thread.json +24 -0
  208. package/integrations/google-gmail/schemas/read_email.json +10 -0
  209. package/integrations/google-gmail/schemas/send_draft.json +29 -0
  210. package/integrations/google-gmail/schemas/send_email.json +17 -0
  211. package/integrations/google-gmail/schemas/update_label.json +33 -0
  212. package/integrations/google-sheet/README.md +27 -0
  213. package/integrations/google-sheet/__tests__/get_handlers.test.ts +6 -52
  214. package/integrations/google-sheet/__tests__/write_handlers.test.ts +0 -20
  215. package/integrations/google-sheet/handlers/get_spreadsheet.js +2 -0
  216. package/integrations/google-sheet/handlers/read_sheet.js +75 -0
  217. package/integrations/google-sheet/manifest.json +13 -62
  218. package/integrations/google-sheet/prompt.md +49 -0
  219. package/integrations/google-sheet/schemas/get_spreadsheet.json +5 -4
  220. package/integrations/google-sheet/schemas/read_sheet.json +21 -0
  221. package/integrations/google-slides/README.md +28 -0
  222. package/integrations/google-slides/__tests__/get_handlers.test.ts +12 -9
  223. package/integrations/google-slides/handlers/read_presentation.js +51 -0
  224. package/integrations/google-slides/manifest.json +13 -13
  225. package/integrations/google-slides/prompt.md +56 -0
  226. package/integrations/hubspot/.env.test.example +20 -0
  227. package/integrations/hubspot/README.md +48 -0
  228. package/integrations/hubspot/__tests__/get_handlers.test.ts +151 -0
  229. package/integrations/hubspot/__tests__/usage_parity.test.ts +10 -0
  230. package/integrations/hubspot/__tests__/write_handlers.test.ts +244 -0
  231. package/integrations/hubspot/credentials.json +48 -0
  232. package/integrations/hubspot/credentials_hint.md +20 -0
  233. package/integrations/hubspot/credentials_hint_oauth_token.md +16 -0
  234. package/integrations/hubspot/handlers/archive_company.js +13 -0
  235. package/integrations/hubspot/handlers/archive_contact.js +13 -0
  236. package/integrations/hubspot/handlers/archive_deal.js +13 -0
  237. package/integrations/hubspot/handlers/archive_ticket.js +13 -0
  238. package/integrations/hubspot/handlers/create_association.js +18 -0
  239. package/integrations/hubspot/handlers/create_company.js +13 -0
  240. package/integrations/hubspot/handlers/create_contact.js +14 -0
  241. package/integrations/hubspot/handlers/create_deal.js +16 -0
  242. package/integrations/hubspot/handlers/create_note.js +44 -0
  243. package/integrations/hubspot/handlers/create_task.js +48 -0
  244. package/integrations/hubspot/handlers/create_ticket.js +15 -0
  245. package/integrations/hubspot/handlers/get_associations.js +14 -0
  246. package/integrations/hubspot/handlers/get_company.js +18 -0
  247. package/integrations/hubspot/handlers/get_contact.js +18 -0
  248. package/integrations/hubspot/handlers/get_deal.js +18 -0
  249. package/integrations/hubspot/handlers/get_ticket.js +20 -0
  250. package/integrations/hubspot/handlers/list_owners.js +12 -0
  251. package/integrations/hubspot/handlers/list_pipelines.js +5 -0
  252. package/integrations/hubspot/handlers/list_properties.js +11 -0
  253. package/integrations/hubspot/handlers/remove_association.js +22 -0
  254. package/integrations/hubspot/handlers/search_companies.js +43 -0
  255. package/integrations/hubspot/handlers/search_contacts.js +43 -0
  256. package/integrations/hubspot/handlers/search_deals.js +43 -0
  257. package/integrations/hubspot/handlers/search_notes.js +43 -0
  258. package/integrations/hubspot/handlers/search_tasks.js +43 -0
  259. package/integrations/hubspot/handlers/search_tickets.js +43 -0
  260. package/integrations/hubspot/handlers/update_company.js +13 -0
  261. package/integrations/hubspot/handlers/update_contact.js +14 -0
  262. package/integrations/hubspot/handlers/update_deal.js +16 -0
  263. package/integrations/hubspot/handlers/update_task.js +17 -0
  264. package/integrations/hubspot/handlers/update_ticket.js +15 -0
  265. package/integrations/hubspot/manifest.json +230 -0
  266. package/integrations/hubspot/prompt.md +69 -0
  267. package/integrations/hubspot/schemas/archive_company.json +13 -0
  268. package/integrations/hubspot/schemas/archive_contact.json +13 -0
  269. package/integrations/hubspot/schemas/archive_deal.json +9 -0
  270. package/integrations/hubspot/schemas/archive_ticket.json +9 -0
  271. package/integrations/hubspot/schemas/create_association.json +24 -0
  272. package/integrations/hubspot/schemas/create_company.json +14 -0
  273. package/integrations/hubspot/schemas/create_contact.json +15 -0
  274. package/integrations/hubspot/schemas/create_deal.json +20 -0
  275. package/integrations/hubspot/schemas/create_note.json +37 -0
  276. package/integrations/hubspot/schemas/create_task.json +51 -0
  277. package/integrations/hubspot/schemas/create_ticket.json +16 -0
  278. package/integrations/hubspot/schemas/empty.json +6 -0
  279. package/integrations/hubspot/schemas/get_associations.json +30 -0
  280. package/integrations/hubspot/schemas/get_company.json +27 -0
  281. package/integrations/hubspot/schemas/get_contact.json +27 -0
  282. package/integrations/hubspot/schemas/get_deal.json +20 -0
  283. package/integrations/hubspot/schemas/get_ticket.json +20 -0
  284. package/integrations/hubspot/schemas/list_owners.json +25 -0
  285. package/integrations/hubspot/schemas/list_pipelines.json +13 -0
  286. package/integrations/hubspot/schemas/list_properties.json +17 -0
  287. package/integrations/hubspot/schemas/remove_association.json +24 -0
  288. package/integrations/hubspot/schemas/search_companies.json +56 -0
  289. package/integrations/hubspot/schemas/search_contacts.json +56 -0
  290. package/integrations/hubspot/schemas/search_deals.json +43 -0
  291. package/integrations/hubspot/schemas/search_notes.json +43 -0
  292. package/integrations/hubspot/schemas/search_tasks.json +43 -0
  293. package/integrations/hubspot/schemas/search_tickets.json +43 -0
  294. package/integrations/hubspot/schemas/update_company.json +20 -0
  295. package/integrations/hubspot/schemas/update_contact.json +21 -0
  296. package/integrations/hubspot/schemas/update_deal.json +19 -0
  297. package/integrations/hubspot/schemas/update_task.json +31 -0
  298. package/integrations/hubspot/schemas/update_ticket.json +18 -0
  299. package/integrations/jira/.env.test +46 -0
  300. package/integrations/jira/.env.test.example +41 -0
  301. package/integrations/jira/README.md +46 -0
  302. package/integrations/jira/__tests__/get_handlers.test.ts +193 -0
  303. package/integrations/jira/__tests__/usage_parity.test.ts +14 -0
  304. package/integrations/jira/__tests__/write_handlers.test.ts +157 -0
  305. package/integrations/jira/credentials.json +39 -0
  306. package/integrations/jira/credentials_hint.md +4 -0
  307. package/integrations/jira/credentials_hint_api_token.md +6 -0
  308. package/integrations/jira/credentials_hint_oauth_token.md +6 -0
  309. package/integrations/jira/handlers/add_comment.js +9 -0
  310. package/integrations/jira/handlers/assign_issue.js +11 -0
  311. package/integrations/jira/handlers/create_issue.js +37 -0
  312. package/integrations/jira/handlers/create_sprint.js +19 -0
  313. package/integrations/jira/handlers/delete_issue.js +10 -0
  314. package/integrations/jira/handlers/get_backlog_issues.js +13 -0
  315. package/integrations/jira/handlers/get_board.js +6 -0
  316. package/integrations/jira/handlers/get_issue.js +63 -0
  317. package/integrations/jira/handlers/get_issue_comments.js +31 -0
  318. package/integrations/jira/handlers/get_myself.js +14 -0
  319. package/integrations/jira/handlers/get_project.js +28 -0
  320. package/integrations/jira/handlers/get_sprint.js +5 -0
  321. package/integrations/jira/handlers/get_sprint_issues.js +13 -0
  322. package/integrations/jira/handlers/get_transitions.js +23 -0
  323. package/integrations/jira/handlers/list_boards.js +34 -0
  324. package/integrations/jira/handlers/list_projects.js +29 -0
  325. package/integrations/jira/handlers/list_sprints.js +29 -0
  326. package/integrations/jira/handlers/move_issues_to_sprint.js +11 -0
  327. package/integrations/jira/handlers/search_issues.js +43 -0
  328. package/integrations/jira/handlers/search_users.js +21 -0
  329. package/integrations/jira/handlers/transition_issue.js +44 -0
  330. package/integrations/jira/handlers/update_issue.js +40 -0
  331. package/integrations/jira/handlers/update_sprint.js +20 -0
  332. package/integrations/jira/manifest.json +204 -0
  333. package/integrations/jira/prompt.md +80 -0
  334. package/integrations/jira/schemas/add_comment.json +16 -0
  335. package/integrations/jira/schemas/assign_issue.json +16 -0
  336. package/integrations/jira/schemas/create_issue.json +49 -0
  337. package/integrations/jira/schemas/create_sprint.json +29 -0
  338. package/integrations/jira/schemas/delete_issue.json +12 -0
  339. package/integrations/jira/schemas/empty.json +6 -0
  340. package/integrations/jira/schemas/get_backlog_issues.json +33 -0
  341. package/integrations/jira/schemas/get_board.json +13 -0
  342. package/integrations/jira/schemas/get_issue.json +23 -0
  343. package/integrations/jira/schemas/get_issue_comments.json +23 -0
  344. package/integrations/jira/schemas/get_project.json +17 -0
  345. package/integrations/jira/schemas/get_sprint.json +13 -0
  346. package/integrations/jira/schemas/get_sprint_issues.json +33 -0
  347. package/integrations/jira/schemas/get_transitions.json +12 -0
  348. package/integrations/jira/schemas/list_boards.json +27 -0
  349. package/integrations/jira/schemas/list_projects.json +22 -0
  350. package/integrations/jira/schemas/list_sprints.json +29 -0
  351. package/integrations/jira/schemas/move_issues_to_sprint.json +19 -0
  352. package/integrations/jira/schemas/search_issues.json +28 -0
  353. package/integrations/jira/schemas/search_users.json +18 -0
  354. package/integrations/jira/schemas/transition_issue.json +38 -0
  355. package/integrations/jira/schemas/update_issue.json +47 -0
  356. package/integrations/jira/schemas/update_sprint.json +33 -0
  357. package/integrations/new_integration_prompt.md +177 -2
  358. package/integrations/notion/.env.test +10 -0
  359. package/integrations/notion/.env.test.example +13 -0
  360. package/integrations/notion/README.md +42 -0
  361. package/integrations/notion/manifest.json +64 -35
  362. package/integrations/trello/.env.test +6 -0
  363. package/integrations/trello/.env.test.example +9 -0
  364. package/integrations/trello/README.md +50 -0
  365. package/package.json +7 -3
  366. package/integrations/google-calendar/handlers/update_event.js +0 -5
  367. package/integrations/google-calendar/schemas/update_event.json +0 -10
  368. package/integrations/google-docs/handlers/get_document.js +0 -12
  369. package/integrations/google-docs/handlers/get_document_structured.js +0 -6
  370. package/integrations/google-docs/handlers/get_document_text.js +0 -17
  371. package/integrations/google-docs/schemas/get_document.json +0 -11
  372. package/integrations/google-sheet/handlers/batch_clear_values_by_data_filter.js +0 -6
  373. package/integrations/google-sheet/handlers/batch_get_values.js +0 -16
  374. package/integrations/google-sheet/handlers/batch_update_values_by_data_filter.js +0 -16
  375. package/integrations/google-sheet/handlers/get_developer_metadata.js +0 -6
  376. package/integrations/google-sheet/handlers/get_spreadsheet_by_data_filter.js +0 -10
  377. package/integrations/google-sheet/handlers/get_values.js +0 -14
  378. package/integrations/google-sheet/handlers/get_values_by_data_filter.js +0 -14
  379. package/integrations/google-sheet/handlers/search_developer_metadata.js +0 -7
  380. package/integrations/google-sheet/schemas/batch_clear_values_by_data_filter.json +0 -10
  381. package/integrations/google-sheet/schemas/batch_get_values.json +0 -13
  382. package/integrations/google-sheet/schemas/batch_update_values_by_data_filter.json +0 -25
  383. package/integrations/google-sheet/schemas/get_spreadsheet_by_data_filter.json +0 -11
  384. package/integrations/google-sheet/schemas/get_values.json +0 -13
  385. package/integrations/google-sheet/schemas/get_values_by_data_filter.json +0 -17
  386. package/integrations/google-sheet/schemas/search_developer_metadata.json +0 -14
  387. package/integrations/google-slides/handlers/get_presentation.js +0 -6
@@ -6,7 +6,7 @@ Write a new integration-data folder for `<INTEGRATION_NAME>`.
6
6
 
7
7
  Create `commandable-mcp/packages/server/integration-data/<name>/` containing:
8
8
 
9
- - `manifest.json`: flat `tools[]`; each tool has `name`, `description`, `inputSchema` (relative path), `handler` (relative path), `scope` (`read` | `write` | optionally `admin`)
9
+ - `manifest.json`: flat `tools[]`; each tool has `name`, `description`, `inputSchema` (relative path), `handler` (relative path), `scope` (`read` | `write` | optionally `admin`). If the integration has genuinely independent workflow areas, add a top-level `toolsets` map and a `toolset` field on each tool (see **Toolsets** section below).
10
10
  - `schemas/*.json`: JSON Schema for each tool input. Prefer `additionalProperties: false` for strict contracts; use `true` only for pass-through bodies (common in Google APIs). Reuse `empty.json` for no-arg tools.
11
11
  - `handlers/*.js`: async arrow functions `async (input) => { ... }` using `integration.fetch(path, init?)` for all HTTP calls. Pass `body` as a plain object (proxy will JSON-stringify). Return parsed JSON.
12
12
  - `credentials.json`: `{ schema, injection }` where `schema` is JSON Schema for secrets and `injection` is `headers` and/or `query` templates using `{{placeholder}}`
@@ -38,4 +38,179 @@ If an endpoint is already clean and self-contained, just proxy it.
38
38
  - `notion/`: clean proxying + optional `prompt.md`
39
39
  - `google-calendar/`: query param building + `read`/`write`/`admin` scopes
40
40
  - `trello/`: query-param credential injection + `displayCards`
41
- - `google-docs/`, `google-slides/`: higher-level write helpers over batchUpdate APIs
41
+ - `google-docs/`, `google-slides/`: higher-level write helpers over batchUpdate APIs
42
+
43
+
44
+
45
+ IMPORTANT: Think through how an AI agent might use an integration and any tweaks to the rest api that might be needed to support actual agentic use cases
46
+
47
+ ---
48
+
49
+ ## Lessons from GSuite: what we changed and why
50
+
51
+ We overhauled all six Google integrations (Gmail, Drive, Calendar, Docs, Sheets, Slides) after benchmarking against taylorwilsdon's [google_workspace_mcp](https://github.com/taylorwilsdon/google_workspace_mcp) and reviewing MCP agent-consumption best practices. The principles below should guide every new integration.
52
+
53
+ ### 1. `read_*` tools should return agent-friendly content, not raw API JSON
54
+
55
+ Raw API responses (nested JSON, base64-encoded bodies, massive resource trees) waste context tokens and force agents to write parsing logic they hallucinate. Instead:
56
+
57
+ - **Docs**: `read_document` converts the Docs API body into clean Markdown (headings, bold/italic/strikethrough, links, code spans, lists with nesting, tables). Falls back to plain text if conversion fails.
58
+ - **Sheets**: `read_sheet` returns a Markdown table with A1 column headers (A, B, C…) and row numbers, so the agent can immediately construct cell references like `B3` for writes.
59
+ - **Slides**: `read_presentation` extracts text from every slide's shapes and returns a human-readable summary with slide IDs, rather than the raw presentation resource.
60
+ - **Gmail**: `read_email` decodes base64 body parts and flattens headers into `{ subject, from, to, date, body }` instead of returning the nested payload tree.
61
+
62
+ **Pattern**: if the API returns structured data meant for programmatic consumption, build a `read_*` tool that converts it into the simplest text format an LLM can understand (usually Markdown). Reserve `get_*` tools for metadata that enables further API calls (e.g. `get_spreadsheet` for sheet names/IDs).
63
+
64
+ ### 2. Delete tools that agents cannot realistically use
65
+
66
+ We deleted 14 tools that were either too programmatic, too verbose, or redundant:
67
+
68
+ - **DataFilter-based tools** (Sheets): `get_spreadsheet_by_data_filter`, `get_values_by_data_filter`, `batch_update_values_by_data_filter`, `batch_clear_values_by_data_filter` -- DataFilter objects are structured JSON that agents cannot construct reliably.
69
+ - **Developer metadata tools** (Sheets): `search_developer_metadata`, `get_developer_metadata` -- niche API that no agent workflow needs.
70
+ - **Raw RFC822 tools** (Gmail): `send_message`, `create_draft` -- require manual MIME construction and base64url encoding. Replaced by `send_email` and `create_draft_email` which accept flat fields (to, subject, body).
71
+ - **Redundant update tools** (Calendar): `update_event` (full PUT replace) removed in favour of `patch_event` (partial update), which is safer and more intuitive.
72
+ - **Raw read tools** (Docs): `get_document`, `get_document_structured`, `get_document_text` all replaced by the single `read_document` markdown tool.
73
+ - **Raw value tools** (Sheets): `get_values`, `batch_get_values` replaced by `read_sheet`.
74
+
75
+ **Pattern**: if a tool requires the agent to construct complex structured input (MIME encoding, DataFilter objects, GridRange specs), either abstract it away with a high-level tool or delete it. If multiple tools serve the same purpose at different abstraction levels, keep only the one agents can use.
76
+
77
+ ### 3. Naming convention: `read_*` vs `get_*`
78
+
79
+ - **`read_*`** tools return content in agent-friendly format (Markdown, extracted text). These are the primary tools agents should use for consuming content.
80
+ - **`get_*`** tools return API metadata/resources for further programmatic calls (e.g. `get_spreadsheet` for sheet names/IDs, `get_file` for file metadata).
81
+
82
+ This naming tells the agent which tool to reach for when it wants to understand content vs when it needs IDs/metadata for a follow-up call.
83
+
84
+ ### 4. Encode domain knowledge in Markdown table output (Sheets example)
85
+
86
+ For Sheets, the `read_sheet` tool returns a Markdown table with A1 column letters as headers and row numbers as the first column:
87
+
88
+ ```
89
+ | | A | B | C |
90
+ |---|---------|---------|------|
91
+ | 1 | Name | Revenue | Cost |
92
+ | 2 | Widget | 1500 | 800 |
93
+ ```
94
+
95
+ This means the agent sees "Widget's revenue is in B2" and can directly call `update_values` with range `Sheet1!B2`. The content and the addressing metadata are unified in a single output -- no need for a separate metadata call.
96
+
97
+ ### 5. Abstract away encoding/transport complexity
98
+
99
+ The #1 anti-pattern in MCP tool design is exposing encoding details to the agent. Examples we fixed:
100
+
101
+ - **Gmail send/draft**: agents were expected to construct RFC822 MIME messages and base64url-encode them. Now `send_email` and `create_draft_email` accept flat fields and handle encoding internally.
102
+ - **Docs markdown**: agents were getting raw `body.content` JSON arrays. Now `read_document` walks the document tree and produces Markdown.
103
+
104
+ **Pattern**: if the API requires a transform (base64, MIME, URL encoding, JSON tree walking), do it in the handler. The agent should only deal with human-readable strings and simple key-value inputs.
105
+
106
+ #### Sandbox globals: use `btoa`/`atob`, not `Buffer`
107
+
108
+ Handlers run inside a locked-down VM sandbox. `Buffer` is explicitly set to `undefined` in the context — using it will throw `Cannot read properties of undefined (reading 'from')` at runtime. Use the Web-standard equivalents instead:
109
+
110
+ - **Encoding to base64url** (e.g. RFC822 MIME for Gmail):
111
+ ```js
112
+ const raw = btoa(unescape(encodeURIComponent(str))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
113
+ ```
114
+ - **Decoding base64url to UTF-8** (e.g. Gmail message body parts):
115
+ ```js
116
+ const text = decodeURIComponent(escape(atob(data.replace(/-/g, '+').replace(/_/g, '/'))))
117
+ ```
118
+
119
+ `btoa`/`atob`, `URL`, `URLSearchParams`, `encodeURIComponent`, `decodeURIComponent`, `unescape`, and `escape` are all available in the sandbox. `Buffer`, `process`, `require`, `fetch`, `eval`, `Function`, `setTimeout`, and `global` are not.
120
+
121
+ ### 6. Rich tool descriptions are critical
122
+
123
+ Every tool description should include: what it does, when to use it (vs alternatives), key parameter hints, and cross-references to related tools. Examples:
124
+
125
+ - `read_sheet`: "...the coordinates in the output can be used directly with update_values and append_values for writes. Use get_spreadsheet first to discover sheet names."
126
+ - `send_email`: "...For replies, provide replyToMessageId and threadId to keep the reply in the same conversation thread."
127
+ - `patch_event`: "...Use this as the standard event update method."
128
+
129
+ ### 7. `prompt.md` files should document non-obvious API patterns
130
+
131
+ Each integration's `prompt.md` should cover workflow guidance agents need but can't infer from tool descriptions alone:
132
+
133
+ - Gmail: search query syntax (`is:unread`, `from:`, `has:attachment`), threading pattern, system label IDs
134
+ - Calendar: RFC3339 format, `singleEvents=true` + `orderBy=startTime`, all-day vs timed events
135
+ - Sheets: A1 notation reference, `valueInputOption` (`USER_ENTERED` vs `RAW`), recommended read-then-write workflow
136
+ - Docs: index-based editing abstracted by first-match tools, marker pattern explanation
137
+ - Slides: EMU units, slide addressing (0-based index vs objectId), predefined layouts
138
+
139
+ ### 8. Toolsets: grouping tools for LLM focus
140
+
141
+ Toolsets let users selectively enable subsets of an integration's tools so the LLM isn't drowned in irrelevant tool definitions. They reduce context-window pollution and improve tool selection accuracy.
142
+
143
+ **When to use toolsets (multi-toolset)**
144
+
145
+ Only add toolsets when the integration covers **genuinely independent agent workflows** -- work areas where an agent would realistically want one subset and NOT the others. The test: "would an agent doing task A ever need the tools from group B?" If the answer is usually yes, they belong in the same toolset.
146
+
147
+ Good splits (independent workflows):
148
+ - **GitHub**: Code & Files, Issues, Pull Requests, CI, Releases, Repository Management -- a PR reviewer doesn't need release tools.
149
+ - **Gmail**: Email (search + read + compose) vs Organize (label, archive, trash, delete) -- reading and replying is one workflow; inbox triage is another.
150
+ - **Calendar**: Events (the core scheduling workflow) vs Sharing (ACL/permission management most agents never touch).
151
+ - **Notion**: Pages (content, blocks, comments, users) vs Databases (query, create, update databases) -- distinct Notion concepts.
152
+
153
+ **When NOT to use toolsets (single toolset = omit entirely)**
154
+
155
+ If the integration is a single-purpose app where all tools serve one workflow, don't add `toolsets` at all. Tools without a `toolset` field always load, so omitting is clean and zero-ceremony.
156
+
157
+ Examples that are correctly single-toolset:
158
+ - **Google Docs** (12 tools): "edit a document" is one job. Splitting reading from editing or text from styling is splitting by code structure, not by user intent.
159
+ - **Google Sheets** (10 tools): "work with spreadsheet data" is one job.
160
+ - **Google Slides** (11 tools): "edit a presentation" is one job.
161
+ - **Google Drive** (9 tools): small integration, all file operations.
162
+ - **Trello** (34 tools): you can't work with cards without board context. It's one workflow.
163
+ - **Airtable** (11 tools): schema discovery and record operations are one workflow.
164
+
165
+ **Don't duplicate `scope`**
166
+
167
+ `scope` (read/write/admin) already controls access levels. If the only meaningful split is read vs write, that's handled. Toolsets are about **what domain you're working in**, not what permission level you have.
168
+
169
+ **Manifest structure** when toolsets are used:
170
+
171
+ ```json
172
+ {
173
+ "toolsets": {
174
+ "events": {
175
+ "label": "Events",
176
+ "description": "Browse, schedule, and manage calendar events"
177
+ },
178
+ "sharing": {
179
+ "label": "Sharing",
180
+ "description": "Control who can access calendars"
181
+ }
182
+ },
183
+ "tools": [
184
+ { "name": "list_events", ..., "toolset": "events" },
185
+ { "name": "list_acl", ..., "toolset": "sharing" }
186
+ ]
187
+ }
188
+ ```
189
+
190
+ Each toolset key must be `snake_case`. Every tool must reference a key that exists in `toolsets`. The `label` is a short human-readable name; `description` is one sentence explaining what the toolset covers.
191
+
192
+ ### 9. Reference implementation comparison
193
+
194
+ When building a new integration, check if an established open-source MCP server already exists for that API. Compare:
195
+ - Which tools do they include vs exclude?
196
+ - How do they format output for agent consumption?
197
+ - Do they have any abstraction patterns we should adopt?
198
+
199
+ taylorwilsdon's `google_workspace_mcp` was our reference. Key differences we adopted:
200
+ - Markdown content extraction (Docs, Slides)
201
+ - Flat-field email tools instead of raw MIME
202
+ - A1-annotated sheet output
203
+ - Removal of overly-programmatic tools (DataFilter, developer metadata)
204
+ - Text extraction from presentation slides instead of raw JSON
205
+
206
+ ### 10. Escape hatches and plain-text fallbacks
207
+
208
+ Complex conversion logic (like Docs-to-Markdown) can fail on edge cases. Always include a fallback path. Our `read_document` handler attempts full Markdown conversion but falls back to plain-text extraction if the result is empty. This ensures the agent always gets something useful.
209
+
210
+ ### 11. Future: native API format exports
211
+
212
+ Google Drive's `files.export` API now supports `text/markdown` as an export MIME type for Docs. We currently use custom Docs API -> Markdown conversion to keep the integration self-contained (no cross-API dependency on Drive scopes). A `todo.md` in `google-docs/` tracks this for future investigation when we add cross-provider fetch support.
213
+
214
+
215
+
216
+ Important hint - when researching a new integration - it can be really useful to read existing MCP servers for that integration. they may be open source and freely avaialable. This should give you an idea of the right kind of abstractions to use and tools to provide.
@@ -0,0 +1,10 @@
1
+ # Notion
2
+ # NOTION_TOKEN is your Notion **Internal Integration Secret**.
3
+ # Create it via:
4
+ # - `https://www.notion.so/profile/integrations/internal` (Internal Integration), OR
5
+ # - Notion UI: Settings & members → Connections → Develop or manage integrations
6
+ # Then share your anchor page with the integration.
7
+ NOTION_TOKEN=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
8
+ # Required for Notion write tests: anchor page id under which tests will create/archive a dedicated database per run
9
+ # Parent page ID is the last path segment of the page URL (32-char hex, with or without dashes).
10
+ NOTION_TEST_PARENT_PAGE_ID=315c13426a2080728c80c8155dddbbcb
@@ -0,0 +1,13 @@
1
+ # Notion live integration tests
2
+ #
3
+ # NOTION_TOKEN is your Notion Internal Integration Secret.
4
+ # Create it via:
5
+ # - https://www.notion.so/profile/integrations/internal (Internal Integration), OR
6
+ # - Notion UI: Settings & members → Connections → Develop or manage integrations
7
+ # Then share your anchor page with the integration.
8
+ NOTION_TOKEN=
9
+ #
10
+ # Required for write tests: anchor page under which tests will create/archive a dedicated
11
+ # database per run. Parent page ID is the last path segment of the page URL
12
+ # (32-char hex, with or without dashes).
13
+ NOTION_TEST_PARENT_PAGE_ID=
@@ -0,0 +1,42 @@
1
+ # Notion
2
+
3
+ **19 tools** across 2 toolsets
4
+
5
+ ![Notion tests](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/theomccabe/771bd329f303087690c522afa1baa6f3/raw/test-notion.json)
6
+
7
+ ## Credential variants
8
+
9
+ | Variant | Label |
10
+ |---|---|
11
+ | `internal_integration` | Internal Integration Token _(default)_ |
12
+
13
+ ## Toolsets
14
+
15
+ | Toolset | Description |
16
+ |---|---|
17
+ | `pages` | Find, read, and edit Notion pages, blocks, comments, and users |
18
+ | `databases` | Query and manage Notion databases |
19
+
20
+ ## Tools
21
+
22
+ | Tool | Scope | Toolset | Description |
23
+ |---|---|---|---|
24
+ | `search` | read | `pages` | Search across all accessible Notion content (pages, databases). |
25
+ | `retrieve_page` | read | `pages` | Retrieve a page by ID. |
26
+ | `retrieve_page_property_item` | read | `pages` | Retrieve a specific page property item (handles rollups and pagination). |
27
+ | `list_block_children` | read | `pages` | List child blocks for a block (including page blocks). |
28
+ | `retrieve_block` | read | `pages` | Retrieve a block by ID. |
29
+ | `list_users` | read | `pages` | List users in the workspace. |
30
+ | `retrieve_user` | read | `pages` | Retrieve a user by ID. |
31
+ | `list_comments` | read | `pages` | List comments for a given discussion or page block. |
32
+ | `get_me` | read | `pages` | Retrieve the authenticated user (bot) profile. |
33
+ | `create_page` | write | `pages` | Create a new page in a database or as a child of a page. |
34
+ | `update_page_properties` | write | `pages` | Update page properties, archive/unarchive, icon and cover. |
35
+ | `append_block_children` | write | `pages` | Append child blocks to a block (including page blocks). |
36
+ | `update_block` | write | `pages` | Update a block (content, archived state, etc). |
37
+ | `delete_block` | write | `pages` | Archive a block (soft delete). |
38
+ | `create_comment` | write | `pages` | Create a comment on a discussion or block. |
39
+ | `retrieve_database` | read | `databases` | Retrieve a database by ID. |
40
+ | `query_database` | read | `databases` | Query a database with optional filter, sorts, and pagination. |
41
+ | `create_database` | write | `databases` | Create a new database under a page. |
42
+ | `update_database` | write | `databases` | Update database title, description, properties, or archived state. |
@@ -1,139 +1,168 @@
1
1
  {
2
2
  "name": "notion",
3
3
  "version": "0.1.0",
4
+ "toolsets": {
5
+ "pages": {
6
+ "label": "Pages",
7
+ "description": "Find, read, and edit Notion pages, blocks, comments, and users"
8
+ },
9
+ "databases": {
10
+ "label": "Databases",
11
+ "description": "Query and manage Notion databases"
12
+ }
13
+ },
4
14
  "tools": [
5
15
  {
6
16
  "name": "search",
7
17
  "description": "Search across all accessible Notion content (pages, databases).",
8
18
  "inputSchema": "schemas/search.json",
9
19
  "handler": "handlers/search.js",
10
- "scope": "read"
20
+ "scope": "read",
21
+ "toolset": "pages"
11
22
  },
12
23
  {
13
24
  "name": "retrieve_page",
14
25
  "description": "Retrieve a page by ID.",
15
26
  "inputSchema": "schemas/id_page.json",
16
27
  "handler": "handlers/retrieve_page.js",
17
- "scope": "read"
28
+ "scope": "read",
29
+ "toolset": "pages"
18
30
  },
19
31
  {
20
- "name": "retrieve_database",
21
- "description": "Retrieve a database by ID.",
22
- "inputSchema": "schemas/id_database.json",
23
- "handler": "handlers/retrieve_database.js",
24
- "scope": "read"
25
- },
26
- {
27
- "name": "query_database",
28
- "description": "Query a database with optional filter, sorts, and pagination.",
29
- "inputSchema": "schemas/query_database.json",
30
- "handler": "handlers/query_database.js",
31
- "scope": "read"
32
+ "name": "retrieve_page_property_item",
33
+ "description": "Retrieve a specific page property item (handles rollups and pagination).",
34
+ "inputSchema": "schemas/retrieve_page_property_item.json",
35
+ "handler": "handlers/retrieve_page_property_item.js",
36
+ "scope": "read",
37
+ "toolset": "pages"
32
38
  },
33
39
  {
34
40
  "name": "list_block_children",
35
41
  "description": "List child blocks for a block (including page blocks).",
36
42
  "inputSchema": "schemas/list_block_children.json",
37
43
  "handler": "handlers/list_block_children.js",
38
- "scope": "read"
44
+ "scope": "read",
45
+ "toolset": "pages"
39
46
  },
40
47
  {
41
48
  "name": "retrieve_block",
42
49
  "description": "Retrieve a block by ID.",
43
50
  "inputSchema": "schemas/id_block.json",
44
51
  "handler": "handlers/retrieve_block.js",
45
- "scope": "read"
52
+ "scope": "read",
53
+ "toolset": "pages"
46
54
  },
47
55
  {
48
56
  "name": "list_users",
49
57
  "description": "List users in the workspace.",
50
58
  "inputSchema": "schemas/list_users.json",
51
59
  "handler": "handlers/list_users.js",
52
- "scope": "read"
60
+ "scope": "read",
61
+ "toolset": "pages"
53
62
  },
54
63
  {
55
64
  "name": "retrieve_user",
56
65
  "description": "Retrieve a user by ID.",
57
66
  "inputSchema": "schemas/id_user.json",
58
67
  "handler": "handlers/retrieve_user.js",
59
- "scope": "read"
68
+ "scope": "read",
69
+ "toolset": "pages"
60
70
  },
61
71
  {
62
72
  "name": "list_comments",
63
73
  "description": "List comments for a given discussion or page block.",
64
74
  "inputSchema": "schemas/list_comments.json",
65
75
  "handler": "handlers/list_comments.js",
66
- "scope": "read"
76
+ "scope": "read",
77
+ "toolset": "pages"
67
78
  },
68
79
  {
69
80
  "name": "get_me",
70
81
  "description": "Retrieve the authenticated user (bot) profile.",
71
82
  "inputSchema": "schemas/empty.json",
72
83
  "handler": "handlers/get_me.js",
73
- "scope": "read"
74
- },
75
- {
76
- "name": "retrieve_page_property_item",
77
- "description": "Retrieve a specific page property item (handles rollups and pagination).",
78
- "inputSchema": "schemas/retrieve_page_property_item.json",
79
- "handler": "handlers/retrieve_page_property_item.js",
80
- "scope": "read"
84
+ "scope": "read",
85
+ "toolset": "pages"
81
86
  },
82
87
  {
83
88
  "name": "create_page",
84
89
  "description": "Create a new page in a database or as a child of a page.",
85
90
  "inputSchema": "schemas/create_page.json",
86
91
  "handler": "handlers/create_page.js",
87
- "scope": "write"
92
+ "scope": "write",
93
+ "toolset": "pages"
88
94
  },
89
95
  {
90
96
  "name": "update_page_properties",
91
97
  "description": "Update page properties, archive/unarchive, icon and cover.",
92
98
  "inputSchema": "schemas/update_page_properties.json",
93
99
  "handler": "handlers/update_page_properties.js",
94
- "scope": "write"
100
+ "scope": "write",
101
+ "toolset": "pages"
95
102
  },
96
103
  {
97
104
  "name": "append_block_children",
98
105
  "description": "Append child blocks to a block (including page blocks).",
99
106
  "inputSchema": "schemas/append_block_children.json",
100
107
  "handler": "handlers/append_block_children.js",
101
- "scope": "write"
108
+ "scope": "write",
109
+ "toolset": "pages"
102
110
  },
103
111
  {
104
112
  "name": "update_block",
105
113
  "description": "Update a block (content, archived state, etc).",
106
114
  "inputSchema": "schemas/update_block.json",
107
115
  "handler": "handlers/update_block.js",
108
- "scope": "write"
116
+ "scope": "write",
117
+ "toolset": "pages"
109
118
  },
110
119
  {
111
120
  "name": "delete_block",
112
121
  "description": "Archive a block (soft delete).",
113
122
  "inputSchema": "schemas/delete_block.json",
114
123
  "handler": "handlers/delete_block.js",
115
- "scope": "write"
124
+ "scope": "write",
125
+ "toolset": "pages"
116
126
  },
117
127
  {
118
128
  "name": "create_comment",
119
129
  "description": "Create a comment on a discussion or block.",
120
130
  "inputSchema": "schemas/create_comment.json",
121
131
  "handler": "handlers/create_comment.js",
122
- "scope": "write"
132
+ "scope": "write",
133
+ "toolset": "pages"
134
+ },
135
+ {
136
+ "name": "retrieve_database",
137
+ "description": "Retrieve a database by ID.",
138
+ "inputSchema": "schemas/id_database.json",
139
+ "handler": "handlers/retrieve_database.js",
140
+ "scope": "read",
141
+ "toolset": "databases"
142
+ },
143
+ {
144
+ "name": "query_database",
145
+ "description": "Query a database with optional filter, sorts, and pagination.",
146
+ "inputSchema": "schemas/query_database.json",
147
+ "handler": "handlers/query_database.js",
148
+ "scope": "read",
149
+ "toolset": "databases"
123
150
  },
124
151
  {
125
152
  "name": "create_database",
126
153
  "description": "Create a new database under a page.",
127
154
  "inputSchema": "schemas/create_database.json",
128
155
  "handler": "handlers/create_database.js",
129
- "scope": "write"
156
+ "scope": "write",
157
+ "toolset": "databases"
130
158
  },
131
159
  {
132
160
  "name": "update_database",
133
161
  "description": "Update database title, description, properties, or archived state.",
134
162
  "inputSchema": "schemas/update_database.json",
135
163
  "handler": "handlers/update_database.js",
136
- "scope": "write"
164
+ "scope": "write",
165
+ "toolset": "databases"
137
166
  }
138
167
  ]
139
168
  }
@@ -0,0 +1,6 @@
1
+ # Trello (credentials mode uses key+token as query params; tests create/close/delete a board per run)
2
+ # Get an API key + token:
3
+ # - Key: `https://trello.com/power-ups/admin` (select your Power-Up, then API key)
4
+ # - Token: `https://trello.com/1/authorize?expiration=never&name=CommandableTests&scope=read,write&response_type=token&key=<YOUR_KEY>`
5
+ TRELLO_API_KEY=a54b5d6ea14cee2ae85d754a5e923f86
6
+ TRELLO_API_TOKEN=ATTA990a95b3d0f319385075acad0dd80915c056a35350c34a198bb47f0e664ead3865118535
@@ -0,0 +1,9 @@
1
+ # Trello live integration tests
2
+ #
3
+ # Tests create/close/delete a board per run — credentials use key+token as query params.
4
+ #
5
+ # Get an API key + token:
6
+ # - Key: https://trello.com/power-ups/admin (select your Power-Up, then API key)
7
+ # - Token: https://trello.com/1/authorize?expiration=never&name=CommandableTests&scope=read,write&response_type=token&key=<YOUR_KEY>
8
+ TRELLO_API_KEY=
9
+ TRELLO_API_TOKEN=
@@ -0,0 +1,50 @@
1
+ # Trello
2
+
3
+ **34 tools**
4
+
5
+ ![Trello tests](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/theomccabe/771bd329f303087690c522afa1baa6f3/raw/test-trello.json)
6
+
7
+ ## Credential variants
8
+
9
+ | Variant | Label |
10
+ |---|---|
11
+ | `api_key_token` | API Key + Token _(default)_ |
12
+
13
+ ## Tools
14
+
15
+ | Tool | Scope | Description |
16
+ |---|---|---|
17
+ | `get_member` | read | Fetch the current member profile. |
18
+ | `get_member_boards` | read | List boards for the current member. |
19
+ | `get_member_organizations` | read | List organizations (workspaces) for the current member. |
20
+ | `get_board` | read | Fetch a board by id. |
21
+ | `get_board_lists` | read | List lists on a board. |
22
+ | `get_board_cards` | read | List cards on a board. |
23
+ | `get_board_members` | read | List members on a board. |
24
+ | `get_board_labels` | read | List labels on a board. |
25
+ | `get_board_custom_fields` | read | List custom fields on a board. |
26
+ | `get_board_memberships` | read | List memberships for a board. |
27
+ | `get_list` | read | Fetch a list by id. |
28
+ | `get_list_cards` | read | List cards in a list. |
29
+ | `get_card` | read | Fetch a card by id. |
30
+ | `get_card_members` | read | List members assigned to a card. |
31
+ | `get_card_attachments` | read | List attachments on a card. |
32
+ | `get_card_actions` | read | List actions (activity) on a card. |
33
+ | `get_card_checklists` | read | List checklists on a card. |
34
+ | `get_card_custom_field_items` | read | Get custom field items on a card. |
35
+ | `get_organization` | read | Fetch an organization (workspace) by id. |
36
+ | `get_organization_boards` | read | List boards in an organization (workspace). |
37
+ | `search` | read | Search across boards, cards, and members. |
38
+ | `create_board` | write | Create a new board. |
39
+ | `close_board` | write | Close a board (set closed=true). |
40
+ | `delete_board` | write | Permanently delete a closed board. |
41
+ | `create_card` | write | Create a new card in a list. |
42
+ | `update_card` | write | Update a card's fields (name, desc, due, list, etc). |
43
+ | `delete_card` | write | Delete a card. |
44
+ | `move_card_to_list` | write | Move a card to another list. |
45
+ | `add_member_to_card` | write | Add a member to a card. |
46
+ | `remove_member_from_card` | write | Remove a member from a card. |
47
+ | `add_checklist_to_card` | write | Create a checklist on a card. |
48
+ | `create_list` | write | Create a new list on a board. |
49
+ | `update_list` | write | Update a list (name, pos, closed). |
50
+ | `archive_list` | write | Archive a list (set closed=true). |
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@commandable/integration-data",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Integration data (manifests, schemas, handlers, credential configs) for Commandable integrations.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/mynt-ai/commandable-app.git",
9
- "directory": "commandable-mcp/packages/integration-data"
8
+ "url": "git+https://github.com/commandable/commandable-mcp.git",
9
+ "directory": "packages/integration-data"
10
+ },
11
+ "homepage": "https://github.com/commandable/commandable-mcp#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/commandable/commandable-mcp/issues"
10
14
  },
11
15
  "type": "module",
12
16
  "main": "./dist/index.js",
@@ -1,5 +0,0 @@
1
- async (input) => {
2
- const path = `/calendars/${encodeURIComponent(input.calendarId)}/events/${encodeURIComponent(input.eventId)}`
3
- const res = await integration.fetch(path, { method: 'PUT', body: input.body })
4
- return await res.json()
5
- }
@@ -1,10 +0,0 @@
1
- {
2
- "type": "object",
3
- "properties": {
4
- "calendarId": { "type": "string" },
5
- "eventId": { "type": "string" },
6
- "body": { "type": "object" }
7
- },
8
- "required": ["calendarId", "eventId", "body"],
9
- "additionalProperties": false
10
- }
@@ -1,12 +0,0 @@
1
- async (input) => {
2
- const { documentId, suggestionsViewMode, includeTabsAndSpaces } = input
3
- const params = new URLSearchParams()
4
- if (suggestionsViewMode)
5
- params.set('suggestionsViewMode', String(suggestionsViewMode))
6
- if (includeTabsAndSpaces !== undefined)
7
- params.set('includeTabsAndSpaces', String(includeTabsAndSpaces))
8
- const qs = params.toString()
9
- const path = `/documents/${encodeURIComponent(documentId)}${qs ? `?${qs}` : ''}`
10
- const res = await integration.fetch(path)
11
- return await res.json()
12
- }
@@ -1,6 +0,0 @@
1
- async (input) => {
2
- const { documentId } = input
3
- const res = await integration.fetch(`/documents/${encodeURIComponent(documentId)}`)
4
- const doc = await res.json()
5
- return { documentId: doc?.documentId || documentId, body: doc?.body }
6
- }
@@ -1,17 +0,0 @@
1
- async (input) => {
2
- const { documentId } = input
3
- const res = await integration.fetch(`/documents/${encodeURIComponent(documentId)}`)
4
- const doc = await res.json()
5
- const content = doc?.body?.content || []
6
- let text = ''
7
- for (const el of content) {
8
- const paragraphs = el.paragraph ? [el.paragraph] : []
9
- for (const p of paragraphs) {
10
- for (const e of p.elements || []) {
11
- text += e.textRun?.content || ''
12
- }
13
- text += '\n'
14
- }
15
- }
16
- return { documentId: doc?.documentId || documentId, text }
17
- }
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "type": "object",
4
- "properties": {
5
- "documentId": { "type": "string", "description": "The document ID of the Google Doc." },
6
- "suggestionsViewMode": { "type": "string", "enum": ["DEFAULT_FOR_CURRENT_ACCESS", "SUGGESTIONS_INLINE", "PREVIEW_SUGGESTIONS_ACCEPTED", "PREVIEW_WITHOUT_SUGGESTIONS"], "description": "How to view suggested changes." },
7
- "includeTabsAndSpaces": { "type": "boolean", "description": "Include tabs and spaces in the text content." }
8
- },
9
- "required": ["documentId"],
10
- "additionalProperties": false
11
- }
@@ -1,6 +0,0 @@
1
- async (input) => {
2
- const { spreadsheetId, dataFilters } = input
3
- const path = `/spreadsheets/${encodeURIComponent(spreadsheetId)}/values:batchClearByDataFilter`
4
- const res = await integration.fetch(path, { method: 'POST', body: { dataFilters } })
5
- return await res.json()
6
- }