@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
@@ -4,119 +4,70 @@
4
4
  "tools": [
5
5
  {
6
6
  "name": "get_spreadsheet",
7
- "description": "Retrieve spreadsheet metadata and optionally grid data.",
7
+ "description": "Retrieve spreadsheet metadata including all sheet names, IDs, and properties. Set includeGridData=false (the default) to get only metadata without cell values. Use read_sheet for cell content. Use the 'fields' parameter to limit the response (e.g. fields='sheets.properties' to get only sheet names and IDs). The spreadsheetId appears in the URL: https://docs.google.com/spreadsheets/d/{spreadsheetId}/.",
8
8
  "inputSchema": "schemas/get_spreadsheet.json",
9
9
  "handler": "handlers/get_spreadsheet.js",
10
10
  "scope": "read"
11
11
  },
12
12
  {
13
- "name": "get_spreadsheet_by_data_filter",
14
- "description": "Retrieve spreadsheet metadata using DataFilters.",
15
- "inputSchema": "schemas/get_spreadsheet_by_data_filter.json",
16
- "handler": "handlers/get_spreadsheet_by_data_filter.js",
17
- "scope": "read"
18
- },
19
- {
20
- "name": "get_values",
21
- "description": "Get values from a single A1 range.",
22
- "inputSchema": "schemas/get_values.json",
23
- "handler": "handlers/get_values.js",
24
- "scope": "read"
25
- },
26
- {
27
- "name": "batch_get_values",
28
- "description": "Batch get values for multiple A1 ranges.",
29
- "inputSchema": "schemas/batch_get_values.json",
30
- "handler": "handlers/batch_get_values.js",
31
- "scope": "read"
32
- },
33
- {
34
- "name": "get_values_by_data_filter",
35
- "description": "Batch get values using DataFilters.",
36
- "inputSchema": "schemas/get_values_by_data_filter.json",
37
- "handler": "handlers/get_values_by_data_filter.js",
38
- "scope": "read"
39
- },
40
- {
41
- "name": "search_developer_metadata",
42
- "description": "Search developer metadata in a spreadsheet.",
43
- "inputSchema": "schemas/search_developer_metadata.json",
44
- "handler": "handlers/search_developer_metadata.js",
45
- "scope": "read"
46
- },
47
- {
48
- "name": "get_developer_metadata",
49
- "description": "Get a developer metadata entry by ID.",
50
- "inputSchema": "schemas/get_developer_metadata.json",
51
- "handler": "handlers/get_developer_metadata.js",
13
+ "name": "read_sheet",
14
+ "description": "Read cell values from a sheet range and return as a Markdown table with A1 column headers and row numbers. Use this to read and understand spreadsheet data -- the coordinates in the output can be used directly with update_values and append_values for writes. Supports optional valueRenderOption for formulas or raw numbers. Use get_spreadsheet first to discover sheet names.",
15
+ "inputSchema": "schemas/read_sheet.json",
16
+ "handler": "handlers/read_sheet.js",
52
17
  "scope": "read"
53
18
  },
54
19
  {
55
20
  "name": "create_spreadsheet",
56
- "description": "Create a new spreadsheet.",
21
+ "description": "Create a new Google Spreadsheet. Accepts a full spreadsheet resource body, allowing you to specify the title, initial sheets, and cell data. Minimum: provide {title: 'My Spreadsheet'}. Returns the created spreadsheet including its spreadsheetId.",
57
22
  "inputSchema": "schemas/create_spreadsheet.json",
58
23
  "handler": "handlers/create_spreadsheet.js",
59
24
  "scope": "write"
60
25
  },
61
26
  {
62
27
  "name": "update_values",
63
- "description": "Update values in a range (PUT).",
28
+ "description": "Write values to a specific A1 range, replacing existing content. Use valueInputOption='USER_ENTERED' to parse values as the user would type them (supports formulas, dates, currency). Use 'RAW' to store values as literal strings. Provide values as a 2D array (rows of columns).",
64
29
  "inputSchema": "schemas/update_values.json",
65
30
  "handler": "handlers/update_values.js",
66
31
  "scope": "write"
67
32
  },
68
33
  {
69
34
  "name": "append_values",
70
- "description": "Append values after the last row of a range.",
35
+ "description": "Append rows of values after the last row of existing data in a range. Useful for adding new rows to a table without knowing the exact next row number. Uses USER_ENTERED valueInputOption by default. The range determines which sheet to append to.",
71
36
  "inputSchema": "schemas/append_values.json",
72
37
  "handler": "handlers/append_values.js",
73
38
  "scope": "write"
74
39
  },
75
40
  {
76
41
  "name": "batch_update_values",
77
- "description": "Batch update values across multiple ranges.",
42
+ "description": "Write values to multiple A1 ranges in a single API call. More efficient than calling update_values multiple times. Provide a data array where each item has range and values. Use valueInputOption='USER_ENTERED' for formulas and dates.",
78
43
  "inputSchema": "schemas/batch_update_values.json",
79
44
  "handler": "handlers/batch_update_values.js",
80
45
  "scope": "write"
81
46
  },
82
- {
83
- "name": "batch_update_values_by_data_filter",
84
- "description": "Batch update values using DataFilters.",
85
- "inputSchema": "schemas/batch_update_values_by_data_filter.json",
86
- "handler": "handlers/batch_update_values_by_data_filter.js",
87
- "scope": "write"
88
- },
89
47
  {
90
48
  "name": "clear_values",
91
- "description": "Clear values in the specified range.",
49
+ "description": "Clear all values (but not formatting) in the specified A1 range. The cells remain but their content is removed. To clear formatting as well, use batch_update with a repeatCell request.",
92
50
  "inputSchema": "schemas/clear_values.json",
93
51
  "handler": "handlers/clear_values.js",
94
52
  "scope": "write"
95
53
  },
96
54
  {
97
55
  "name": "batch_clear_values",
98
- "description": "Batch clear values across multiple ranges.",
56
+ "description": "Clear values from multiple A1 ranges in a single API call. More efficient than calling clear_values multiple times.",
99
57
  "inputSchema": "schemas/batch_clear_values.json",
100
58
  "handler": "handlers/batch_clear_values.js",
101
59
  "scope": "write"
102
60
  },
103
- {
104
- "name": "batch_clear_values_by_data_filter",
105
- "description": "Batch clear values using DataFilters.",
106
- "inputSchema": "schemas/batch_clear_values_by_data_filter.json",
107
- "handler": "handlers/batch_clear_values_by_data_filter.js",
108
- "scope": "write"
109
- },
110
61
  {
111
62
  "name": "batch_update",
112
- "description": "Send a batchUpdate request (addSheet, deleteSheet, etc).",
63
+ "description": "Send a spreadsheets.batchUpdate request for structural changes such as addSheet, deleteSheet, duplicateSheet, insertDimension, deleteDimension, mergeCells, sortRange, addConditionalFormatRule, and more. Accepts a requests array. Use update_values or batch_update_values for writing cell data.",
113
64
  "inputSchema": "schemas/batch_update.json",
114
65
  "handler": "handlers/batch_update.js",
115
66
  "scope": "write"
116
67
  },
117
68
  {
118
69
  "name": "copy_to_spreadsheet",
119
- "description": "Copy a sheet to another spreadsheet.",
70
+ "description": "Copy a specific sheet (tab) from one spreadsheet to another. Provide the source spreadsheetId, the sheetId (integer, from get_spreadsheet), and the destination spreadsheetId. Returns the copied sheet's properties in the destination spreadsheet.",
120
71
  "inputSchema": "schemas/copy_to_spreadsheet.json",
121
72
  "handler": "handlers/copy_to_spreadsheet.js",
122
73
  "scope": "write"
@@ -0,0 +1,49 @@
1
+ ## A1 notation
2
+
3
+ Ranges use A1 notation: `SheetName!StartCell:EndCell`
4
+
5
+ Examples:
6
+ - `Sheet1!A1:D10` — cells A1 to D10 on Sheet1
7
+ - `Sheet1!A:A` — entire column A
8
+ - `Sheet1!1:5` — rows 1 through 5
9
+ - `Sheet1` — entire sheet (all data)
10
+ - `A1:D10` — if the spreadsheet has only one sheet, sheet name can be omitted
11
+ - `'My Sheet'!A1:B5` — sheet names with spaces must be quoted with single quotes
12
+
13
+ Use `get_spreadsheet` with `fields='sheets.properties'` first to discover all sheet names and their IDs.
14
+
15
+ ## valueInputOption
16
+
17
+ Controls how input values are interpreted in `update_values`, `append_values`, and `batch_update_values`:
18
+
19
+ - `USER_ENTERED` *(recommended)* — values are parsed as if a user typed them. Supports formulas (`=SUM(A1:A10)`), dates (`1/15/2024`), currency (`$1,234.56`), and percentages (`50%`)
20
+ - `RAW` — values are stored as literal strings, no parsing. Use when you want exact string storage
21
+
22
+ ## valueRenderOption
23
+
24
+ Controls how values are returned in `read_sheet`:
25
+
26
+ - `FORMATTED_VALUE` *(default)* — returns values as displayed in the UI (e.g. `"$1,234.56"`, `"50%"`)
27
+ - `UNFORMATTED_VALUE` — returns raw numbers (e.g. `1234.56`, `0.5`)
28
+ - `FORMULA` — returns formulas as strings (e.g. `"=SUM(A1:A10)"`)
29
+
30
+ ## Recommended workflow
31
+
32
+ 1. Call `get_spreadsheet` with `fields='sheets.properties'` to get sheet names and sheetIds
33
+ 2. Use `read_sheet` with an A1 range to read data as markdown plus explicit row/column coordinates
34
+ 3. Use the coordinates from `read_sheet` output (e.g. `B3`) with `update_values` or `append_values` for writes
35
+
36
+ ## Structural changes
37
+
38
+ For adding/removing sheets, inserting/deleting rows or columns, or formatting cells, use `batch_update` with the appropriate request types:
39
+ - `addSheet` — add a new tab
40
+ - `deleteSheet` — remove a tab (requires sheetId, not name)
41
+ - `insertDimension` — insert rows or columns
42
+ - `deleteDimension` — delete rows or columns
43
+ - `repeatCell` — apply formatting to a range
44
+
45
+ ## Large spreadsheets
46
+
47
+ Avoid calling `get_spreadsheet` with `includeGridData=true` on large spreadsheets -- it can return megabytes of data. Instead:
48
+ - Use `read_sheet` with specific ranges
49
+ - Use `get_spreadsheet` with `fields='sheets.properties'` to get sheet metadata only
@@ -3,13 +3,14 @@
3
3
  "type": "object",
4
4
  "required": ["spreadsheetId"],
5
5
  "properties": {
6
- "spreadsheetId": { "type": "string", "description": "ID of the spreadsheet" },
7
- "includeGridData": { "type": "boolean", "description": "Whether to include grid data" },
6
+ "spreadsheetId": { "type": "string", "description": "Spreadsheet ID. Found in the spreadsheet URL: https://docs.google.com/spreadsheets/d/{spreadsheetId}/." },
7
+ "includeGridData": { "type": "boolean", "description": "Whether to include cell grid data. Defaults to false. Set to true only when you need cell values -- use get_values or batch_get_values for targeted range reads instead." },
8
8
  "ranges": {
9
9
  "type": "array",
10
10
  "items": { "type": "string" },
11
- "description": "Optional A1 ranges to include"
12
- }
11
+ "description": "Optional A1 notation ranges to include when includeGridData is true. Example: ['Sheet1!A1:D10', 'Sheet2!A:A']."
12
+ },
13
+ "fields": { "type": "string", "description": "Partial response fields selector to reduce response size. Example: 'sheets.properties' to get only sheet names and IDs without cell data. See Sheets API fields reference." }
13
14
  },
14
15
  "additionalProperties": false
15
16
  }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["spreadsheetId"],
5
+ "properties": {
6
+ "spreadsheetId": {
7
+ "type": "string",
8
+ "description": "Spreadsheet ID from URL: https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit"
9
+ },
10
+ "range": {
11
+ "type": "string",
12
+ "description": "A1 notation range to read, e.g. 'Sheet1!A1:D20'. Defaults to 'A1:Z1000'."
13
+ },
14
+ "valueRenderOption": {
15
+ "type": "string",
16
+ "enum": ["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"],
17
+ "description": "How values should be represented in the output."
18
+ }
19
+ },
20
+ "additionalProperties": false
21
+ }
@@ -0,0 +1,28 @@
1
+ # Google Slides
2
+
3
+ **11 tools**
4
+
5
+ ![Google Slides tests](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/theomccabe/771bd329f303087690c522afa1baa6f3/raw/test-google-slides.json)
6
+
7
+ ## Credential variants
8
+
9
+ | Variant | Label |
10
+ |---|---|
11
+ | `service_account` | Service Account (recommended) _(default)_ |
12
+ | `oauth_token` | OAuth Access Token (short-lived) |
13
+
14
+ ## Tools
15
+
16
+ | Tool | Scope | Description |
17
+ |---|---|---|
18
+ | `read_presentation` | read | Read a Google Slides presentation and return a human-readable summary including the title… |
19
+ | `get_page_thumbnail` | read | Generate a thumbnail image URL for a specific slide (page) in a presentation. Requires th… |
20
+ | `create_presentation` | write | Create a new empty Google Slides presentation with an optional title. Returns the created… |
21
+ | `batch_update` | write | Send a presentations.batchUpdate request for low-level slide modifications. Accepts an ar… |
22
+ | `append_text_to_title_of_slide_index` | write | Append text to the title shape of a specific slide by its 0-based index (slideIndex=0 is … |
23
+ | `replace_text_first_match` | write | Replace the first occurrence of text anywhere in the presentation with new text. Note: th… |
24
+ | `style_text_first_match` | write | Find the first occurrence of text in the presentation and apply a text style to it (bold,… |
25
+ | `insert_shape_after_first_match` | write | Find the first slide containing a text match and insert a rectangle shape on that slide a… |
26
+ | `insert_image_after_first_match` | write | Find the first slide containing a text match and insert an image on that slide from a URL… |
27
+ | `create_slide_after_first_match` | write | Find the first slide containing a text match and create a new blank slide immediately aft… |
28
+ | `set_background_color_for_slide_index` | write | Set the background color for a specific slide by its 0-based index (slideIndex=0 is the f… |
@@ -47,25 +47,28 @@ suite('google-slides read handlers (live)', () => {
47
47
  await safeCleanup(async () => drive.write('delete_file')({ fileId: folderId }))
48
48
  }, 60000)
49
49
 
50
- it('get_presentation returns metadata', async () => {
50
+ it('read_presentation returns human-readable content', async () => {
51
51
  if (!presentationId)
52
52
  return expect(true).toBe(true)
53
- const handler = slides.read('get_presentation')
53
+ const handler = slides.read('read_presentation')
54
54
  const result = await handler({ presentationId })
55
- expect(result?.presentationId || Array.isArray(result?.slides)).toBeTruthy()
55
+ expect(typeof result).toBe('string')
56
+ expect(String(result)).toContain('Presentation:')
56
57
  }, 30000)
57
58
 
58
59
  it('get_page_thumbnail returns URL data', async () => {
59
60
  if (!presentationId)
60
61
  return expect(true).toBe(true)
61
- // First query the presentation to discover a page id
62
- const getPresentation = slides.read('get_presentation')
63
- const meta = await getPresentation({ presentationId })
64
- const firstSlide = meta?.slides?.[0]
65
- if (!firstSlide?.objectId)
62
+ // Query the readable summary and parse "Slide 1: ID <objectId>, ..."
63
+ const readPresentation = slides.read('read_presentation')
64
+ const summary = await readPresentation({ presentationId })
65
+ const text = String(summary || '')
66
+ const match = text.match(/Slide 1: ID ([^,\n]+)/)
67
+ const firstSlideObjectId = match?.[1]
68
+ if (!firstSlideObjectId)
66
69
  return expect(true).toBe(true)
67
70
  const handler = slides.read('get_page_thumbnail')
68
- const result = await handler({ presentationId, 'pageObjectId': firstSlide.objectId, 'thumbnailProperties.thumbnailSize': 'MEDIUM', 'thumbnailProperties.mimeType': 'PNG' })
71
+ const result = await handler({ presentationId, 'pageObjectId': firstSlideObjectId, 'thumbnailProperties.thumbnailSize': 'MEDIUM', 'thumbnailProperties.mimeType': 'PNG' })
69
72
  expect(typeof result?.contentUrl === 'string' || typeof result?.thumbnailUrl === 'string').toBe(true)
70
73
  }, 30000)
71
74
  })
@@ -0,0 +1,51 @@
1
+ async (input) => {
2
+ const extractSlideText = (slide) => {
3
+ const lines = []
4
+ for (const element of slide?.pageElements || []) {
5
+ const textElements = element?.shape?.text?.textElements || []
6
+ let combined = ''
7
+ for (const t of textElements) {
8
+ combined += t?.textRun?.content || ''
9
+ }
10
+ const trimmed = combined
11
+ .split('\n')
12
+ .map((line) => line.trim())
13
+ .filter(Boolean)
14
+ lines.push(...trimmed)
15
+ }
16
+ return lines
17
+ }
18
+
19
+ const { presentationId } = input
20
+ const path = `/presentations/${encodeURIComponent(presentationId)}`
21
+ const res = await integration.fetch(path)
22
+ const presentation = await res.json()
23
+
24
+ const title = presentation?.title || 'Untitled presentation'
25
+ const deckId = presentation?.presentationId || presentationId
26
+ const slides = presentation?.slides || []
27
+
28
+ const lines = [
29
+ `Presentation: "${title}" (ID: ${deckId})`,
30
+ `URL: https://docs.google.com/presentation/d/${deckId}/edit`,
31
+ `Total Slides: ${slides.length}`,
32
+ '',
33
+ ]
34
+
35
+ for (let i = 0; i < slides.length; i += 1) {
36
+ const slide = slides[i]
37
+ const slideId = slide?.objectId || `slide_${i + 1}`
38
+ const elementCount = (slide?.pageElements || []).length
39
+ lines.push(`Slide ${i + 1}: ID ${slideId}, ${elementCount} element(s)`)
40
+
41
+ const textLines = extractSlideText(slide)
42
+ if (!textLines.length) {
43
+ lines.push(' > (No text content)')
44
+ } else {
45
+ for (const text of textLines) lines.push(` > ${text}`)
46
+ }
47
+ lines.push('')
48
+ }
49
+
50
+ return lines.join('\n').trim()
51
+ }
@@ -3,39 +3,39 @@
3
3
  "version": "0.1.0",
4
4
  "tools": [
5
5
  {
6
- "name": "get_presentation",
7
- "description": "Retrieve presentation metadata, including slides/pages and elements.",
6
+ "name": "read_presentation",
7
+ "description": "Read a Google Slides presentation and return a human-readable summary including the title, slide count, and text content extracted from each slide. Returns the text found in all shapes on each slide with slide IDs for reference. Use this to understand what is in a presentation before editing. For low-level modifications, use batch_update.",
8
8
  "inputSchema": "schemas/get_presentation.json",
9
- "handler": "handlers/get_presentation.js",
9
+ "handler": "handlers/read_presentation.js",
10
10
  "scope": "read"
11
11
  },
12
12
  {
13
13
  "name": "get_page_thumbnail",
14
- "description": "Get a thumbnail image for a page (slide) in a presentation.",
14
+ "description": "Generate a thumbnail image URL for a specific slide (page) in a presentation. Requires the presentation ID and the slide's objectId (page ID from read_presentation). Returns a contentUrl for the thumbnail image. Useful for previewing slides.",
15
15
  "inputSchema": "schemas/get_page_thumbnail.json",
16
16
  "handler": "handlers/get_page_thumbnail.js",
17
17
  "scope": "read"
18
18
  },
19
19
  {
20
20
  "name": "create_presentation",
21
- "description": "Create a new presentation with optional initial title.",
21
+ "description": "Create a new empty Google Slides presentation with an optional title. Returns the created presentation's metadata including its presentationId, which is needed for all subsequent operations.",
22
22
  "inputSchema": "schemas/create_presentation.json",
23
23
  "handler": "handlers/create_presentation.js",
24
24
  "scope": "write"
25
25
  },
26
26
  {
27
27
  "name": "batch_update",
28
- "description": "Send a batchUpdate request to modify presentation structure and content.",
28
+ "description": "Send a presentations.batchUpdate request for low-level slide modifications. Accepts an array of requests (createSlide, deleteObject, insertText, deleteText, createShape, createTable, replaceAllText, updateTextStyle, updateShapeProperties, etc.). For common text and styling operations, prefer the higher-level tools: replace_text_first_match, style_text_first_match, insert_shape_after_first_match, etc.",
29
29
  "inputSchema": "schemas/batch_update.json",
30
30
  "handler": "handlers/batch_update.js",
31
31
  "scope": "write"
32
32
  },
33
- { "name": "append_text_to_title_of_slide_index", "description": "Append text to the title shape of the specified slide (slideIndex, default 0).", "inputSchema": "schemas/append_text_to_title_of_first_slide.json", "handler": "handlers/append_text_to_title_of_first_slide.js", "scope": "write" },
34
- { "name": "replace_text_first_match", "description": "Replace text for the first match anywhere in the presentation.", "inputSchema": "schemas/replace_text_first_match.json", "handler": "handlers/replace_text_first_match.js", "scope": "write" },
35
- { "name": "style_text_first_match", "description": "Apply text style to the first match of given text.", "inputSchema": "schemas/style_text_first_match.json", "handler": "handlers/style_text_first_match.js", "scope": "write" },
36
- { "name": "insert_shape_after_first_match", "description": "Insert a rectangle shape near the first match of text on a slide.", "inputSchema": "schemas/insert_shape_after_first_match.json", "handler": "handlers/insert_shape_after_first_match.js", "scope": "write" },
37
- { "name": "insert_image_after_first_match", "description": "Insert an image near the first match of text on a slide.", "inputSchema": "schemas/insert_image_after_first_match.json", "handler": "handlers/insert_image_after_first_match.js", "scope": "write" },
38
- { "name": "create_slide_after_first_match", "description": "Create a new slide after the slide that contains the first text match.", "inputSchema": "schemas/create_slide_after_first_match.json", "handler": "handlers/create_slide_after_first_match.js", "scope": "write" },
39
- { "name": "set_background_color_for_slide_index", "description": "Set background color for a slide by index.", "inputSchema": "schemas/set_background_color_for_slide_index.json", "handler": "handlers/set_background_color_for_slide_index.js", "scope": "write" }
33
+ { "name": "append_text_to_title_of_slide_index", "description": "Append text to the title shape of a specific slide by its 0-based index (slideIndex=0 is the first slide, default). Fetches the presentation to find the title shape's objectId then inserts text at the end of its content.", "inputSchema": "schemas/append_text_to_title_of_first_slide.json", "handler": "handlers/append_text_to_title_of_first_slide.js", "scope": "write" },
34
+ { "name": "replace_text_first_match", "description": "Replace the first occurrence of text anywhere in the presentation with new text. Note: the Slides API replaceAllText always replaces all occurrences; this tool uses replaceAllText internally. For replacing only one instance, use style_text_first_match to locate and style the match, then follow up with batch_update. Returns the API response.", "inputSchema": "schemas/replace_text_first_match.json", "handler": "handlers/replace_text_first_match.js", "scope": "write" },
35
+ { "name": "style_text_first_match", "description": "Find the first occurrence of text in the presentation and apply a text style to it (bold, italic, fontSize, foregroundColor, etc.). Uses a marker pattern: replaces the text with a unique marker, finds the marker's objectId and range, applies the style, then restores the original text. Returns {applied: true/false}.", "inputSchema": "schemas/style_text_first_match.json", "handler": "handlers/style_text_first_match.js", "scope": "write" },
36
+ { "name": "insert_shape_after_first_match", "description": "Find the first slide containing a text match and insert a rectangle shape on that slide at the specified position. Positions use EMU units (1 inch = 914400 EMU). Returns {applied: true/false}.", "inputSchema": "schemas/insert_shape_after_first_match.json", "handler": "handlers/insert_shape_after_first_match.js", "scope": "write" },
37
+ { "name": "insert_image_after_first_match", "description": "Find the first slide containing a text match and insert an image on that slide from a URL. Position and size use EMU units (1 inch = 914400 EMU). Returns {applied: true/false}.", "inputSchema": "schemas/insert_image_after_first_match.json", "handler": "handlers/insert_image_after_first_match.js", "scope": "write" },
38
+ { "name": "create_slide_after_first_match", "description": "Find the first slide containing a text match and create a new blank slide immediately after it. Useful for inserting slides at a specific position in the deck. Returns {applied: true/false} and the new slide's objectId.", "inputSchema": "schemas/create_slide_after_first_match.json", "handler": "handlers/create_slide_after_first_match.js", "scope": "write" },
39
+ { "name": "set_background_color_for_slide_index", "description": "Set the background color for a specific slide by its 0-based index (slideIndex=0 is the first slide). Provide r, g, b values in 0.0-1.0 range (e.g. r=1.0, g=0.0, b=0.0 for red). Fetches the presentation first to resolve the slide's objectId from the index.", "inputSchema": "schemas/set_background_color_for_slide_index.json", "handler": "handlers/set_background_color_for_slide_index.js", "scope": "write" }
40
40
  ]
41
41
  }
@@ -0,0 +1,56 @@
1
+ ## Presentation and slide IDs
2
+
3
+ The presentationId appears in the Google Slides URL:
4
+ `https://docs.google.com/presentation/d/{presentationId}/edit`
5
+
6
+ Each slide has an `objectId` (a string like `p` or `g12345abcde`). Use `read_presentation` first to discover slide objectIds and extracted text content by slide.
7
+
8
+ ## Slide addressing
9
+
10
+ The higher-level tools use `slideIndex` (0-based integer):
11
+ - `slideIndex=0` — first slide
12
+ - `slideIndex=1` — second slide
13
+
14
+ The lower-level `batch_update` requires `objectId` strings. Use `read_presentation` output to map slide order and IDs before editing.
15
+ If you need raw structure details, call `batch_update` only for the operation you are performing.
16
+
17
+ ## First-match tools
18
+
19
+ The `*_first_match` tools search all slides for text content by JSON-stringifying each slide's content. They use the marker pattern (replace → find → act → restore), making 3 API calls per operation. They return `{applied: true/false}`.
20
+
21
+ ## EMU units
22
+
23
+ Positions and sizes in the `batch_update` API use EMU (English Metric Units):
24
+ - 1 inch = 914400 EMU
25
+ - 1 cm ≈ 360000 EMU
26
+ - Standard slide dimensions: 9144000 × 5143500 EMU (10 × 5.625 inches, 16:9)
27
+
28
+ ## Common batch_update operations
29
+
30
+ ```json
31
+ { "requests": [
32
+ { "createSlide": { "insertionIndex": 1, "slideLayoutReference": { "predefinedLayout": "BLANK" } } },
33
+ { "insertText": { "objectId": "shapeId", "text": "Hello World", "insertionIndex": 0 } },
34
+ { "updateTextStyle": {
35
+ "objectId": "shapeId",
36
+ "style": { "bold": true, "fontSize": { "magnitude": 24, "unit": "PT" } },
37
+ "fields": "bold,fontSize",
38
+ "textRange": { "type": "ALL" }
39
+ }},
40
+ { "replaceAllText": {
41
+ "containsText": { "text": "{{placeholder}}" },
42
+ "replaceText": "New value"
43
+ }}
44
+ ]}
45
+ ```
46
+
47
+ ## Predefined slide layouts
48
+
49
+ Use with `createSlide`: `BLANK`, `CAPTION_ONLY`, `TITLE`, `TITLE_AND_BODY`, `TITLE_AND_TWO_COLUMNS`, `TITLE_ONLY`, `SECTION_HEADER`, `SECTION_TITLE_AND_DESCRIPTION`, `ONE_COLUMN_TEXT`, `MAIN_POINT`, `BIG_NUMBER`
50
+
51
+ ## Colors
52
+
53
+ In `batch_update`, colors use RGB values in 0.0–1.0 range:
54
+ ```json
55
+ { "opaqueColor": { "rgbColor": { "red": 1.0, "green": 0.5, "blue": 0.0 } } }
56
+ ```
@@ -0,0 +1,20 @@
1
+ # HubSpot live integration tests
2
+ #
3
+ # HUBSPOT_TOKEN is a private app access token.
4
+ # Create one at: https://developers.hubspot.com/docs/api/private-apps
5
+ # Required scopes: crm.objects.contacts.read/write, crm.objects.companies.read/write,
6
+ # crm.objects.deals.read/write, tickets (read/write), notes (read/write)
7
+ HUBSPOT_TOKEN=
8
+ #
9
+ # Optional: seed IDs for read tests (the suite will discover them automatically if omitted)
10
+ HUBSPOT_TEST_CONTACT_ID=
11
+ HUBSPOT_TEST_COMPANY_ID=
12
+ HUBSPOT_TEST_DEAL_ID=
13
+ HUBSPOT_TEST_TICKET_ID=
14
+ #
15
+ # Optional: pipeline/stage IDs for write tests
16
+ # Find these in HubSpot: Settings → CRM → Deals/Tickets → Pipelines
17
+ HUBSPOT_TEST_DEAL_PIPELINE_ID=
18
+ HUBSPOT_TEST_DEAL_STAGE_ID=
19
+ HUBSPOT_TEST_TICKET_PIPELINE_ID=
20
+ HUBSPOT_TEST_TICKET_STAGE_ID=
@@ -0,0 +1,48 @@
1
+ # HubSpot
2
+
3
+ **31 tools**
4
+
5
+ ![HubSpot tests](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/theomccabe/771bd329f303087690c522afa1baa6f3/raw/test-hubspot.json)
6
+
7
+ ## Credential variants
8
+
9
+ | Variant | Label |
10
+ |---|---|
11
+ | `private_app_token` | Private App Token _(default)_ |
12
+ | `oauth_token` | OAuth Access Token |
13
+
14
+ ## Tools
15
+
16
+ | Tool | Scope | Description |
17
+ |---|---|---|
18
+ | `search_contacts` | read | Search for contacts. Use query for simple free-text search, and filters for precise prope… |
19
+ | `get_contact` | read | Get a contact by ID. Use properties to request specific fields, and associations to inclu… |
20
+ | `create_contact` | write | Create a contact. Provide common fields (firstname/lastname/email) and/or a properties ma… |
21
+ | `update_contact` | write | Update a contact by ID. Provide any fields to update as common fields and/or in the prope… |
22
+ | `archive_contact` | write | Archive (delete) a contact by ID. This moves the record to the recycle bin. |
23
+ | `search_companies` | read | Search for companies. Use query for free-text search and filters for property-based filte… |
24
+ | `get_company` | read | Get a company by ID. Use properties to request specific fields, and associations to inclu… |
25
+ | `create_company` | write | Create a company. Provide name/domain and/or a properties map for other HubSpot company p… |
26
+ | `update_company` | write | Update a company by ID. Provide any fields to update as common fields and/or in the prope… |
27
+ | `archive_company` | write | Archive (delete) a company by ID. This moves the record to the recycle bin. |
28
+ | `list_owners` | read | List CRM owners (users) available in the HubSpot account. Useful for assigning owners to … |
29
+ | `list_properties` | read | List properties for an object type (e.g. contacts, companies, deals, tickets). Use this t… |
30
+ | `list_pipelines` | read | List pipelines and stages for an object type (commonly deals or tickets). Use this to fin… |
31
+ | `get_associations` | read | Get associations from a CRM record to another object type. Returns the associated record … |
32
+ | `create_association` | write | Create a default (unlabeled) association between two CRM records. Example: associate a co… |
33
+ | `remove_association` | write | Remove an association between two CRM records. This uses HubSpot's association batch arch… |
34
+ | `search_deals` | read | Search for deals. Use query for free-text search and filters for property-based filtering… |
35
+ | `get_deal` | read | Get a deal by ID. Use properties to request specific fields, and associations to include … |
36
+ | `create_deal` | write | Create a deal. Provide dealname/amount/pipeline/dealstage and/or a properties map for oth… |
37
+ | `update_deal` | write | Update a deal by ID. Common updates include moving stages via dealstage. Fields not provi… |
38
+ | `archive_deal` | write | Archive (delete) a deal by ID. This moves the record to the recycle bin. |
39
+ | `search_tickets` | read | Search for tickets. Use query for free-text search and filters for property-based filteri… |
40
+ | `get_ticket` | read | Get a ticket by ID. Use properties to request specific fields, and associations to includ… |
41
+ | `create_ticket` | write | Create a ticket. Provide subject/content/pipeline/stage and/or a properties map for other… |
42
+ | `update_ticket` | write | Update a ticket by ID. Common updates include changing hs_pipeline_stage. Fields not prov… |
43
+ | `archive_ticket` | write | Archive (delete) a ticket by ID. This moves the record to the recycle bin. |
44
+ | `search_notes` | read | Search notes. Use query for free-text search and filters for precise property-based filte… |
45
+ | `create_note` | write | Create a note and (optionally) associate it to one or more CRM records (contacts, compani… |
46
+ | `search_tasks` | read | Search tasks. Use query for free-text search and filters for precise property-based filte… |
47
+ | `create_task` | write | Create a task and (optionally) associate it to one or more CRM records. Provide subject/b… |
48
+ | `update_task` | write | Update a task by ID. Common updates include setting hs_task_status to COMPLETED. |