@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
@@ -0,0 +1,27 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const lines = []
4
+ if (input.to) lines.push(`To: ${input.to}`)
5
+ lines.push(`Subject: ${input.subject || ''}`)
6
+ if (input.cc) lines.push(`Cc: ${input.cc}`)
7
+ if (input.bcc) lines.push(`Bcc: ${input.bcc}`)
8
+ if (input.replyToMessageId) lines.push(`In-Reply-To: ${input.replyToMessageId}`)
9
+ lines.push('MIME-Version: 1.0')
10
+ if (input.htmlBody) {
11
+ lines.push('Content-Type: text/html; charset=UTF-8')
12
+ lines.push('', input.htmlBody)
13
+ }
14
+ else {
15
+ lines.push('Content-Type: text/plain; charset=UTF-8')
16
+ lines.push('', input.body || '')
17
+ }
18
+ const raw = btoa(unescape(encodeURIComponent(lines.join('\r\n')))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
19
+ const message = { raw }
20
+ if (input.threadId) message.threadId = input.threadId
21
+
22
+ const res = await integration.fetch(`/users/${userId}/drafts`, {
23
+ method: 'POST',
24
+ body: { message },
25
+ })
26
+ return await res.json()
27
+ }
@@ -0,0 +1,12 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const body = { name: input.name }
4
+ if (input.messageListVisibility)
5
+ body.messageListVisibility = input.messageListVisibility
6
+ if (input.labelListVisibility)
7
+ body.labelListVisibility = input.labelListVisibility
8
+ if (input.color)
9
+ body.color = input.color
10
+ const res = await integration.fetch(`/users/${userId}/labels`, { method: 'POST', body })
11
+ return await res.json()
12
+ }
@@ -0,0 +1,13 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const draftId = encodeURIComponent(input.draftId)
4
+ const res = await integration.fetch(`/users/${userId}/drafts/${draftId}`, { method: 'DELETE' })
5
+ if (res.status === 204)
6
+ return { success: true }
7
+ try {
8
+ return await res.json()
9
+ }
10
+ catch {
11
+ return { success: true }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const labelId = encodeURIComponent(input.labelId)
4
+ const res = await integration.fetch(`/users/${userId}/labels/${labelId}`, { method: 'DELETE' })
5
+ if (res.status === 204)
6
+ return { success: true }
7
+ try {
8
+ return await res.json()
9
+ }
10
+ catch {
11
+ return { success: true }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const messageId = encodeURIComponent(input.messageId)
4
+ const res = await integration.fetch(`/users/${userId}/messages/${messageId}`, { method: 'DELETE' })
5
+ if (res.status === 204)
6
+ return { success: true }
7
+ try {
8
+ return await res.json()
9
+ }
10
+ catch {
11
+ return { success: true }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const threadId = encodeURIComponent(input.threadId)
4
+ const res = await integration.fetch(`/users/${userId}/threads/${threadId}`, { method: 'DELETE' })
5
+ if (res.status === 204)
6
+ return { success: true }
7
+ try {
8
+ return await res.json()
9
+ }
10
+ catch {
11
+ return { success: true }
12
+ }
13
+ }
@@ -0,0 +1,6 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const draftId = encodeURIComponent(input.draftId)
4
+ const res = await integration.fetch(`/users/${userId}/drafts/${draftId}`)
5
+ return await res.json()
6
+ }
@@ -0,0 +1,6 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const labelId = encodeURIComponent(input.labelId)
4
+ const res = await integration.fetch(`/users/${userId}/labels/${labelId}`)
5
+ return await res.json()
6
+ }
@@ -0,0 +1,14 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const messageId = encodeURIComponent(input.messageId)
4
+ const params = new URLSearchParams()
5
+ if (input.format)
6
+ params.set('format', input.format)
7
+ if (Array.isArray(input.metadataHeaders)) {
8
+ for (const header of input.metadataHeaders)
9
+ params.append('metadataHeaders', String(header))
10
+ }
11
+ const qs = params.toString()
12
+ const res = await integration.fetch(`/users/${userId}/messages/${messageId}${qs ? `?${qs}` : ''}`)
13
+ return await res.json()
14
+ }
@@ -0,0 +1,5 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const res = await integration.fetch(`/users/${userId}/profile`)
4
+ return await res.json()
5
+ }
@@ -0,0 +1,14 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const threadId = encodeURIComponent(input.threadId)
4
+ const params = new URLSearchParams()
5
+ if (input.format)
6
+ params.set('format', input.format)
7
+ if (Array.isArray(input.metadataHeaders)) {
8
+ for (const header of input.metadataHeaders)
9
+ params.append('metadataHeaders', String(header))
10
+ }
11
+ const qs = params.toString()
12
+ const res = await integration.fetch(`/users/${userId}/threads/${threadId}${qs ? `?${qs}` : ''}`)
13
+ return await res.json()
14
+ }
@@ -0,0 +1,15 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const params = new URLSearchParams()
4
+ if (input.q)
5
+ params.set('q', input.q)
6
+ if (input.maxResults !== undefined)
7
+ params.set('maxResults', String(input.maxResults))
8
+ if (input.pageToken)
9
+ params.set('pageToken', input.pageToken)
10
+ if (input.includeSpamTrash !== undefined)
11
+ params.set('includeSpamTrash', String(input.includeSpamTrash))
12
+ const qs = params.toString()
13
+ const res = await integration.fetch(`/users/${userId}/drafts${qs ? `?${qs}` : ''}`)
14
+ return await res.json()
15
+ }
@@ -0,0 +1,5 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const res = await integration.fetch(`/users/${userId}/labels`)
4
+ return await res.json()
5
+ }
@@ -0,0 +1,19 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const params = new URLSearchParams()
4
+ if (input.q)
5
+ params.set('q', input.q)
6
+ if (Array.isArray(input.labelIds)) {
7
+ for (const labelId of input.labelIds)
8
+ params.append('labelIds', String(labelId))
9
+ }
10
+ if (input.maxResults !== undefined)
11
+ params.set('maxResults', String(input.maxResults))
12
+ if (input.pageToken)
13
+ params.set('pageToken', input.pageToken)
14
+ if (input.includeSpamTrash !== undefined)
15
+ params.set('includeSpamTrash', String(input.includeSpamTrash))
16
+ const qs = params.toString()
17
+ const res = await integration.fetch(`/users/${userId}/messages${qs ? `?${qs}` : ''}`)
18
+ return await res.json()
19
+ }
@@ -0,0 +1,19 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const params = new URLSearchParams()
4
+ if (input.q)
5
+ params.set('q', input.q)
6
+ if (Array.isArray(input.labelIds)) {
7
+ for (const labelId of input.labelIds)
8
+ params.append('labelIds', String(labelId))
9
+ }
10
+ if (input.maxResults !== undefined)
11
+ params.set('maxResults', String(input.maxResults))
12
+ if (input.pageToken)
13
+ params.set('pageToken', input.pageToken)
14
+ if (input.includeSpamTrash !== undefined)
15
+ params.set('includeSpamTrash', String(input.includeSpamTrash))
16
+ const qs = params.toString()
17
+ const res = await integration.fetch(`/users/${userId}/threads${qs ? `?${qs}` : ''}`)
18
+ return await res.json()
19
+ }
@@ -0,0 +1,11 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const messageId = encodeURIComponent(input.messageId)
4
+ const body = {}
5
+ if (Array.isArray(input.addLabelIds))
6
+ body.addLabelIds = input.addLabelIds
7
+ if (Array.isArray(input.removeLabelIds))
8
+ body.removeLabelIds = input.removeLabelIds
9
+ const res = await integration.fetch(`/users/${userId}/messages/${messageId}/modify`, { method: 'POST', body })
10
+ return await res.json()
11
+ }
@@ -0,0 +1,11 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const threadId = encodeURIComponent(input.threadId)
4
+ const body = {}
5
+ if (Array.isArray(input.addLabelIds))
6
+ body.addLabelIds = input.addLabelIds
7
+ if (Array.isArray(input.removeLabelIds))
8
+ body.removeLabelIds = input.removeLabelIds
9
+ const res = await integration.fetch(`/users/${userId}/threads/${threadId}/modify`, { method: 'POST', body })
10
+ return await res.json()
11
+ }
@@ -0,0 +1,56 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const messageId = encodeURIComponent(input.messageId)
4
+ const res = await integration.fetch(`/users/${userId}/messages/${messageId}?format=full`)
5
+ const msg = await res.json()
6
+
7
+ const getHeader = (name) => {
8
+ const h = (msg.payload?.headers || []).find(h => h.name.toLowerCase() === name.toLowerCase())
9
+ return h?.value || ''
10
+ }
11
+
12
+ const decodeBase64url = (data) => {
13
+ if (!data) return ''
14
+ try {
15
+ return decodeURIComponent(escape(atob(data.replace(/-/g, '+').replace(/_/g, '/'))))
16
+ }
17
+ catch {
18
+ return ''
19
+ }
20
+ }
21
+
22
+ // Recursively extract text body, preferring text/plain over text/html
23
+ const extractBody = (part) => {
24
+ if (!part) return ''
25
+ if (part.mimeType === 'text/plain' && part.body?.data)
26
+ return decodeBase64url(part.body.data)
27
+ if (part.parts) {
28
+ // Depth-first: try text/plain first across all parts
29
+ for (const p of part.parts) {
30
+ if (p.mimeType === 'text/plain' && p.body?.data)
31
+ return decodeBase64url(p.body.data)
32
+ }
33
+ // Recurse into nested multipart
34
+ for (const p of part.parts) {
35
+ const text = extractBody(p)
36
+ if (text) return text
37
+ }
38
+ }
39
+ if (part.mimeType === 'text/html' && part.body?.data)
40
+ return decodeBase64url(part.body.data)
41
+ return ''
42
+ }
43
+
44
+ return {
45
+ id: msg.id,
46
+ threadId: msg.threadId,
47
+ labelIds: msg.labelIds || [],
48
+ subject: getHeader('Subject'),
49
+ from: getHeader('From'),
50
+ to: getHeader('To'),
51
+ cc: getHeader('Cc'),
52
+ date: getHeader('Date'),
53
+ snippet: msg.snippet || '',
54
+ body: extractBody(msg.payload),
55
+ }
56
+ }
@@ -0,0 +1,15 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const body = {}
4
+ if (input.draftId)
5
+ body.id = input.draftId
6
+ if (input.raw) {
7
+ body.message = { raw: input.raw }
8
+ if (input.threadId)
9
+ body.message.threadId = input.threadId
10
+ if (Array.isArray(input.labelIds))
11
+ body.message.labelIds = input.labelIds
12
+ }
13
+ const res = await integration.fetch(`/users/${userId}/drafts/send`, { method: 'POST', body })
14
+ return await res.json()
15
+ }
@@ -0,0 +1,22 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const lines = [`To: ${input.to}`, `Subject: ${input.subject}`]
4
+ if (input.cc) lines.push(`Cc: ${input.cc}`)
5
+ if (input.bcc) lines.push(`Bcc: ${input.bcc}`)
6
+ if (input.replyToMessageId) lines.push(`In-Reply-To: ${input.replyToMessageId}`)
7
+ lines.push('MIME-Version: 1.0')
8
+ if (input.htmlBody) {
9
+ lines.push('Content-Type: text/html; charset=UTF-8')
10
+ lines.push('', input.htmlBody)
11
+ }
12
+ else {
13
+ lines.push('Content-Type: text/plain; charset=UTF-8')
14
+ lines.push('', input.body)
15
+ }
16
+ const mime = lines.join('\r\n')
17
+ const raw = btoa(unescape(encodeURIComponent(mime))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
18
+ const body = { raw }
19
+ if (input.threadId) body.threadId = input.threadId
20
+ const res = await integration.fetch(`/users/${userId}/messages/send`, { method: 'POST', body })
21
+ return await res.json()
22
+ }
@@ -0,0 +1,6 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const messageId = encodeURIComponent(input.messageId)
4
+ const res = await integration.fetch(`/users/${userId}/messages/${messageId}/trash`, { method: 'POST' })
5
+ return await res.json()
6
+ }
@@ -0,0 +1,6 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const threadId = encodeURIComponent(input.threadId)
4
+ const res = await integration.fetch(`/users/${userId}/threads/${threadId}/trash`, { method: 'POST' })
5
+ return await res.json()
6
+ }
@@ -0,0 +1,6 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const messageId = encodeURIComponent(input.messageId)
4
+ const res = await integration.fetch(`/users/${userId}/messages/${messageId}/untrash`, { method: 'POST' })
5
+ return await res.json()
6
+ }
@@ -0,0 +1,6 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const threadId = encodeURIComponent(input.threadId)
4
+ const res = await integration.fetch(`/users/${userId}/threads/${threadId}/untrash`, { method: 'POST' })
5
+ return await res.json()
6
+ }
@@ -0,0 +1,15 @@
1
+ async (input) => {
2
+ const userId = encodeURIComponent(input.userId || 'me')
3
+ const labelId = encodeURIComponent(input.labelId)
4
+ const body = {}
5
+ if (input.name !== undefined)
6
+ body.name = input.name
7
+ if (input.messageListVisibility !== undefined)
8
+ body.messageListVisibility = input.messageListVisibility
9
+ if (input.labelListVisibility !== undefined)
10
+ body.labelListVisibility = input.labelListVisibility
11
+ if (input.color !== undefined)
12
+ body.color = input.color
13
+ const res = await integration.fetch(`/users/${userId}/labels/${labelId}`, { method: 'PATCH', body })
14
+ return await res.json()
15
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "google-gmail",
3
+ "version": "0.1.0",
4
+ "toolsets": {
5
+ "email": {
6
+ "label": "Email",
7
+ "description": "Search, read, compose, and send emails and drafts"
8
+ },
9
+ "organize": {
10
+ "label": "Organize",
11
+ "description": "Label, archive, trash, and delete messages and threads"
12
+ }
13
+ },
14
+ "tools": [
15
+ { "name": "get_profile", "description": "Get mailbox profile details for the authenticated user, including email address, messages total, threads total, and history ID. Useful for confirming the active account.", "inputSchema": "schemas/get_profile.json", "handler": "handlers/get_profile.js", "scope": "read", "toolset": "email" },
16
+ { "name": "list_messages", "description": "List message IDs matching a Gmail search query or label filters. Returns only IDs and threadIds, not full content -- use read_email or get_message to fetch content for specific messages. Supports Gmail query operators: 'is:unread', 'from:user@example.com', 'to:user@example.com', 'subject:keyword', 'has:attachment', 'after:2024/01/01', 'before:2024/12/31', 'newer_than:7d', 'label:INBOX', 'in:sent'. Defaults to 20 results. Use pageToken from the response for the next page.", "inputSchema": "schemas/list_messages.json", "handler": "handlers/list_messages.js", "scope": "read", "toolset": "email" },
17
+ { "name": "read_email", "description": "Read an email by message ID and return a flat, decoded result with subject, from, to, cc, date, snippet, body text, labelIds, and threadId. Use this for reading email content -- it handles base64 decoding and header extraction automatically. For raw API access or advanced format options, use get_message instead.", "inputSchema": "schemas/read_email.json", "handler": "handlers/read_email.js", "scope": "read", "toolset": "email" },
18
+ { "name": "get_message", "description": "Get the raw Gmail message resource by message ID. Returns the full nested payload including base64url-encoded body parts and all headers. For most use cases, prefer read_email which decodes the response into a flat readable format. Use format='minimal' for lightweight ID+threadId+labelIds only, format='metadata' with metadataHeaders for specific headers only.", "inputSchema": "schemas/get_message.json", "handler": "handlers/get_message.js", "scope": "read", "toolset": "email" },
19
+ { "name": "list_threads", "description": "List thread IDs matching a Gmail search query or label filters. Similar to list_messages but grouped by conversation thread. Returns only IDs -- use get_thread to fetch full thread content. Supports the same Gmail query operators as list_messages. Defaults to 20 results. Use pageToken from the response for the next page.", "inputSchema": "schemas/list_threads.json", "handler": "handlers/list_threads.js", "scope": "read", "toolset": "email" },
20
+ { "name": "get_thread", "description": "Get a full thread resource by thread ID, including all messages in the conversation. Use list_threads to find thread IDs. Use format='minimal' to get only message IDs within the thread without full content.", "inputSchema": "schemas/get_thread.json", "handler": "handlers/get_thread.js", "scope": "read", "toolset": "email" },
21
+ { "name": "list_drafts", "description": "List drafts in the mailbox. Returns draft IDs and the nested message ID. Use get_draft to fetch full draft content. Defaults to 20 results. Use pageToken for the next page.", "inputSchema": "schemas/list_drafts.json", "handler": "handlers/list_drafts.js", "scope": "read", "toolset": "email" },
22
+ { "name": "get_draft", "description": "Get a draft by draft ID. Returns the draft object including the nested message resource. Use list_drafts to find draft IDs.", "inputSchema": "schemas/id_draft.json", "handler": "handlers/get_draft.js", "scope": "read", "toolset": "email" },
23
+
24
+ { "name": "send_email", "description": "Send an email by providing flat fields: to, subject, and body. Handles MIME encoding and base64url conversion internally. For replies, provide replyToMessageId (the original message's ID) and threadId to keep the reply in the same conversation thread. Supports plain text and HTML bodies, CC, and BCC.", "inputSchema": "schemas/send_email.json", "handler": "handlers/send_email.js", "scope": "write", "toolset": "email" },
25
+ { "name": "create_draft_email", "description": "Create a draft email using flat fields: subject, body, and optionally to, cc, bcc. Handles MIME encoding internally. The draft is saved but not sent -- use send_draft to send it later. For replies, provide replyToMessageId and threadId. Supports plain text and HTML bodies.", "inputSchema": "schemas/create_draft_email.json", "handler": "handlers/create_draft_email.js", "scope": "write", "toolset": "email" },
26
+ { "name": "delete_draft", "description": "Permanently delete a draft by its draft ID. Use list_drafts to find draft IDs. This cannot be undone.", "inputSchema": "schemas/id_draft.json", "handler": "handlers/delete_draft.js", "scope": "write", "toolset": "email" },
27
+ { "name": "send_draft", "description": "Send an existing draft by draft ID, or send a one-off draft payload (provide raw instead of draftId). One of draftId or raw must be provided. To send a previously created draft, provide only draftId. To send a new message without saving first, use send_email instead.", "inputSchema": "schemas/send_draft.json", "handler": "handlers/send_draft.js", "scope": "write", "toolset": "email" },
28
+
29
+ { "name": "list_labels", "description": "List all labels in the user's mailbox, including system labels (INBOX, SENT, DRAFT, SPAM, TRASH, STARRED, IMPORTANT, UNREAD) and user-created labels. Returns label IDs needed for filtering in list_messages and list_threads.", "inputSchema": "schemas/list_labels.json", "handler": "handlers/list_labels.js", "scope": "read", "toolset": "organize" },
30
+ { "name": "get_label", "description": "Get details for a specific label by its label ID. Returns name, type, visibility settings, and message/thread counts. Use list_labels first to find the label ID.", "inputSchema": "schemas/id_label.json", "handler": "handlers/get_label.js", "scope": "read", "toolset": "organize" },
31
+ { "name": "modify_message", "description": "Add or remove labels on a single message. Provide addLabelIds, removeLabelIds, or both. Common label IDs: 'INBOX', 'UNREAD', 'STARRED', 'IMPORTANT', 'TRASH', 'SPAM'. To archive a message, remove 'INBOX'. To mark as read, remove 'UNREAD'. Use list_labels to find custom label IDs.", "inputSchema": "schemas/modify_message.json", "handler": "handlers/modify_message.js", "scope": "write", "toolset": "organize" },
32
+ { "name": "trash_message", "description": "Move a message to the Trash. The message is not permanently deleted and can be restored with untrash_message. To permanently delete, use delete_message.", "inputSchema": "schemas/id_message.json", "handler": "handlers/trash_message.js", "scope": "write", "toolset": "organize" },
33
+ { "name": "untrash_message", "description": "Restore a message from Trash back to the Inbox. Use list_messages with labelIds=['TRASH'] to find trashed message IDs.", "inputSchema": "schemas/id_message.json", "handler": "handlers/untrash_message.js", "scope": "write", "toolset": "organize" },
34
+ { "name": "delete_message", "description": "Permanently and immediately delete a message by ID. This cannot be undone. For recoverable deletion, use trash_message instead.", "inputSchema": "schemas/id_message.json", "handler": "handlers/delete_message.js", "scope": "write", "toolset": "organize" },
35
+ { "name": "modify_thread", "description": "Add or remove labels on all messages in a thread at once. Provide addLabelIds, removeLabelIds, or both. Common label IDs: 'INBOX', 'UNREAD', 'STARRED', 'IMPORTANT'. To archive a thread, remove 'INBOX'. Use list_labels to find custom label IDs.", "inputSchema": "schemas/modify_thread.json", "handler": "handlers/modify_thread.js", "scope": "write", "toolset": "organize" },
36
+ { "name": "trash_thread", "description": "Move an entire thread to Trash. All messages in the thread are trashed. Can be reversed with untrash_thread.", "inputSchema": "schemas/id_thread.json", "handler": "handlers/trash_thread.js", "scope": "write", "toolset": "organize" },
37
+ { "name": "untrash_thread", "description": "Restore an entire thread from Trash. Use list_threads with labelIds=['TRASH'] to find trashed thread IDs.", "inputSchema": "schemas/id_thread.json", "handler": "handlers/untrash_thread.js", "scope": "write", "toolset": "organize" },
38
+ { "name": "delete_thread", "description": "Permanently and immediately delete an entire thread and all its messages. This cannot be undone. For recoverable deletion, use trash_thread instead.", "inputSchema": "schemas/id_thread.json", "handler": "handlers/delete_thread.js", "scope": "write", "toolset": "organize" },
39
+
40
+ { "name": "create_label", "description": "Create a new mailbox label with optional visibility and color settings. Label names must be unique. After creating a label, use its returned ID with modify_message or modify_thread to apply it.", "inputSchema": "schemas/create_label.json", "handler": "handlers/create_label.js", "scope": "admin", "toolset": "organize" },
41
+ { "name": "update_label", "description": "Update (patch) an existing mailbox label's name, color, or visibility settings by label ID. Use list_labels to find label IDs.", "inputSchema": "schemas/update_label.json", "handler": "handlers/update_label.js", "scope": "admin", "toolset": "organize" },
42
+ { "name": "delete_label", "description": "Permanently delete a mailbox label by label ID. Messages with this label will have it removed but will not be deleted. Use list_labels to find label IDs. System labels (INBOX, SENT, etc.) cannot be deleted.", "inputSchema": "schemas/id_label.json", "handler": "handlers/delete_label.js", "scope": "admin", "toolset": "organize" }
43
+ ]
44
+ }
@@ -0,0 +1,52 @@
1
+ ## Gmail search query syntax
2
+
3
+ Gmail's `q` parameter supports a powerful search language. Key operators:
4
+
5
+ - `is:unread` / `is:read` — filter by read status
6
+ - `is:starred`, `is:important` — filter by markers
7
+ - `from:user@example.com` — sender filter
8
+ - `to:user@example.com`, `cc:user@example.com` — recipient filters
9
+ - `subject:keyword` — subject line search
10
+ - `has:attachment` — messages with attachments
11
+ - `filename:report.pdf` — specific attachment filename
12
+ - `label:INBOX` — filter by label (use label name or ID)
13
+ - `after:2024/01/01`, `before:2024/12/31` — date range (YYYY/MM/DD)
14
+ - `newer_than:7d`, `older_than:1y` — relative time (d=days, m=months, y=years)
15
+ - `in:sent`, `in:drafts`, `in:trash`, `in:spam` — folder filters
16
+ - `larger:5M`, `smaller:1M` — size filters
17
+
18
+ Combine operators with spaces (implicit AND): `from:alice is:unread has:attachment`
19
+
20
+ ## Recommended workflows
21
+
22
+ **Reading emails:**
23
+ 1. Use `list_messages` with a `q` query to find relevant message IDs
24
+ 2. Use `read_email` on each ID to get decoded subject, from, to, date, and body text
25
+ 3. For raw access or advanced format options, use `get_message` with `format='full'`
26
+
27
+ **Searching for threads:**
28
+ 1. Use `list_threads` with `q` to find conversation threads
29
+ 2. Use `get_thread` to retrieve all messages in a conversation at once
30
+
31
+ **Sending email:**
32
+ - Use `send_email` for the vast majority of cases -- it accepts plain `to`, `subject`, `body` fields
33
+ - Use `create_draft_email` + `send_draft` when you want to create a draft for review before sending
34
+
35
+ **Replying to an email:**
36
+ 1. Get the original message with `read_email` to obtain its `threadId` and `id`
37
+ 2. Call `send_email` with `replyToMessageId` = original message `id` and `threadId` = original `threadId`
38
+ 3. The reply will appear in the same conversation thread
39
+
40
+ ## Label IDs
41
+
42
+ System label IDs (always uppercase): `INBOX`, `UNREAD`, `STARRED`, `IMPORTANT`, `SENT`, `DRAFT`, `SPAM`, `TRASH`, `CATEGORY_PERSONAL`, `CATEGORY_SOCIAL`, `CATEGORY_PROMOTIONS`, `CATEGORY_UPDATES`, `CATEGORY_FORUMS`
43
+
44
+ User-created labels have auto-generated IDs. Use `list_labels` to discover them.
45
+
46
+ ## Archiving and organizing
47
+
48
+ - Archive a message: `modify_message` with `removeLabelIds=['INBOX']`
49
+ - Mark as read: `modify_message` with `removeLabelIds=['UNREAD']`
50
+ - Star a message: `modify_message` with `addLabelIds=['STARRED']`
51
+ - Apply a label: `modify_message` with `addLabelIds=['<labelId>']`
52
+ - Use `modify_thread` to apply the same operation to all messages in a thread at once
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "userId": { "type": "string", "description": "User email or 'me'. Defaults to 'me'." },
6
+ "to": { "type": "string", "description": "Recipient email address. Optional for drafts." },
7
+ "cc": { "type": "string", "description": "CC recipients, comma-separated." },
8
+ "bcc": { "type": "string", "description": "BCC recipients, comma-separated." },
9
+ "subject": { "type": "string", "description": "Draft subject line." },
10
+ "body": { "type": "string", "description": "Plain text draft body. Used when htmlBody is not provided." },
11
+ "htmlBody": { "type": "string", "description": "HTML draft body. If provided, takes precedence over body." },
12
+ "replyToMessageId": { "type": "string", "description": "Message ID being replied to. Sets In-Reply-To header." },
13
+ "threadId": { "type": "string", "description": "Thread ID to place the draft in an existing conversation." }
14
+ },
15
+ "additionalProperties": false
16
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["name"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
7
+ "name": { "type": "string", "description": "Label display name." },
8
+ "messageListVisibility": {
9
+ "type": "string",
10
+ "enum": ["show", "hide"]
11
+ },
12
+ "labelListVisibility": {
13
+ "type": "string",
14
+ "enum": ["labelShow", "labelShowIfUnread", "labelHide"]
15
+ },
16
+ "color": {
17
+ "type": "object",
18
+ "properties": {
19
+ "textColor": { "type": "string", "description": "Hex color, e.g. #000000" },
20
+ "backgroundColor": { "type": "string", "description": "Hex color, e.g. #ffffff" }
21
+ },
22
+ "additionalProperties": false
23
+ }
24
+ },
25
+ "additionalProperties": false
26
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["messageId"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
7
+ "messageId": { "type": "string", "description": "Gmail message ID." },
8
+ "format": {
9
+ "type": "string",
10
+ "enum": ["minimal", "full", "raw", "metadata"],
11
+ "description": "Message format. Defaults to full."
12
+ },
13
+ "metadataHeaders": {
14
+ "type": "array",
15
+ "description": "Headers to include when format is metadata.",
16
+ "items": { "type": "string" }
17
+ }
18
+ },
19
+ "additionalProperties": false
20
+ }
@@ -2,8 +2,10 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "type": "object",
4
4
  "properties": {
5
- "documentId": { "type": "string" }
5
+ "userId": {
6
+ "type": "string",
7
+ "description": "User email address or the special value 'me'. Defaults to 'me'."
8
+ }
6
9
  },
7
- "required": ["documentId"],
8
10
  "additionalProperties": false
9
11
  }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["threadId"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
7
+ "threadId": { "type": "string", "description": "Gmail thread ID." },
8
+ "format": {
9
+ "type": "string",
10
+ "enum": ["minimal", "full", "metadata"],
11
+ "description": "Thread message format. Defaults to full."
12
+ },
13
+ "metadataHeaders": {
14
+ "type": "array",
15
+ "description": "Headers to include when format is metadata.",
16
+ "items": { "type": "string" }
17
+ }
18
+ },
19
+ "additionalProperties": false
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["draftId"],
5
+ "properties": {
6
+ "userId": {
7
+ "type": "string",
8
+ "description": "User email address or 'me'. Defaults to 'me'."
9
+ },
10
+ "draftId": {
11
+ "type": "string",
12
+ "description": "Gmail draft ID."
13
+ }
14
+ },
15
+ "additionalProperties": false
16
+ }