@commandable/integration-data 0.0.6 → 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 (220) hide show
  1. package/dist/credentials-index.d.ts.map +1 -1
  2. package/dist/credentials-index.js +119 -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 +5 -5
  56. package/integrations/github/__tests__/write_handlers.test.ts +176 -58
  57. package/integrations/github/handlers/create_file.js +46 -0
  58. package/integrations/github/handlers/delete_file.js +14 -1
  59. package/integrations/github/handlers/edit_file.js +52 -0
  60. package/integrations/github/handlers/edit_files.js +107 -0
  61. package/integrations/github/manifest.json +74 -47
  62. package/integrations/github/prompt.md +36 -0
  63. package/integrations/github/schemas/create_file.json +13 -0
  64. package/integrations/github/schemas/delete_file.json +2 -2
  65. package/integrations/github/schemas/edit_file.json +26 -0
  66. package/integrations/github/schemas/edit_files.json +39 -0
  67. package/integrations/google-calendar/.env.test.example +11 -0
  68. package/integrations/google-calendar/README.md +41 -0
  69. package/integrations/google-calendar/__tests__/write_and_admin_handlers.test.ts +7 -7
  70. package/integrations/google-calendar/manifest.json +27 -17
  71. package/integrations/google-docs/README.md +30 -0
  72. package/integrations/google-drive/README.md +26 -0
  73. package/integrations/google-gmail/.env.test.example +11 -0
  74. package/integrations/google-gmail/README.md +49 -0
  75. package/integrations/google-gmail/handlers/create_draft_email.js +1 -1
  76. package/integrations/google-gmail/handlers/read_email.js +1 -1
  77. package/integrations/google-gmail/handlers/send_email.js +1 -1
  78. package/integrations/google-gmail/manifest.json +36 -25
  79. package/integrations/google-sheet/README.md +27 -0
  80. package/integrations/google-slides/README.md +28 -0
  81. package/integrations/hubspot/.env.test.example +20 -0
  82. package/integrations/hubspot/README.md +48 -0
  83. package/integrations/hubspot/__tests__/get_handlers.test.ts +151 -0
  84. package/integrations/hubspot/__tests__/usage_parity.test.ts +10 -0
  85. package/integrations/hubspot/__tests__/write_handlers.test.ts +244 -0
  86. package/integrations/hubspot/credentials.json +48 -0
  87. package/integrations/hubspot/credentials_hint.md +20 -0
  88. package/integrations/hubspot/credentials_hint_oauth_token.md +16 -0
  89. package/integrations/hubspot/handlers/archive_company.js +13 -0
  90. package/integrations/hubspot/handlers/archive_contact.js +13 -0
  91. package/integrations/hubspot/handlers/archive_deal.js +13 -0
  92. package/integrations/hubspot/handlers/archive_ticket.js +13 -0
  93. package/integrations/hubspot/handlers/create_association.js +18 -0
  94. package/integrations/hubspot/handlers/create_company.js +13 -0
  95. package/integrations/hubspot/handlers/create_contact.js +14 -0
  96. package/integrations/hubspot/handlers/create_deal.js +16 -0
  97. package/integrations/hubspot/handlers/create_note.js +44 -0
  98. package/integrations/hubspot/handlers/create_task.js +48 -0
  99. package/integrations/hubspot/handlers/create_ticket.js +15 -0
  100. package/integrations/hubspot/handlers/get_associations.js +14 -0
  101. package/integrations/hubspot/handlers/get_company.js +18 -0
  102. package/integrations/hubspot/handlers/get_contact.js +18 -0
  103. package/integrations/hubspot/handlers/get_deal.js +18 -0
  104. package/integrations/hubspot/handlers/get_ticket.js +20 -0
  105. package/integrations/hubspot/handlers/list_owners.js +12 -0
  106. package/integrations/hubspot/handlers/list_pipelines.js +5 -0
  107. package/integrations/hubspot/handlers/list_properties.js +11 -0
  108. package/integrations/hubspot/handlers/remove_association.js +22 -0
  109. package/integrations/hubspot/handlers/search_companies.js +43 -0
  110. package/integrations/hubspot/handlers/search_contacts.js +43 -0
  111. package/integrations/hubspot/handlers/search_deals.js +43 -0
  112. package/integrations/hubspot/handlers/search_notes.js +43 -0
  113. package/integrations/hubspot/handlers/search_tasks.js +43 -0
  114. package/integrations/hubspot/handlers/search_tickets.js +43 -0
  115. package/integrations/hubspot/handlers/update_company.js +13 -0
  116. package/integrations/hubspot/handlers/update_contact.js +14 -0
  117. package/integrations/hubspot/handlers/update_deal.js +16 -0
  118. package/integrations/hubspot/handlers/update_task.js +17 -0
  119. package/integrations/hubspot/handlers/update_ticket.js +15 -0
  120. package/integrations/hubspot/manifest.json +230 -0
  121. package/integrations/hubspot/prompt.md +69 -0
  122. package/integrations/hubspot/schemas/archive_company.json +13 -0
  123. package/integrations/hubspot/schemas/archive_contact.json +13 -0
  124. package/integrations/hubspot/schemas/archive_deal.json +9 -0
  125. package/integrations/hubspot/schemas/archive_ticket.json +9 -0
  126. package/integrations/hubspot/schemas/create_association.json +24 -0
  127. package/integrations/hubspot/schemas/create_company.json +14 -0
  128. package/integrations/hubspot/schemas/create_contact.json +15 -0
  129. package/integrations/hubspot/schemas/create_deal.json +20 -0
  130. package/integrations/hubspot/schemas/create_note.json +37 -0
  131. package/integrations/hubspot/schemas/create_task.json +51 -0
  132. package/integrations/hubspot/schemas/create_ticket.json +16 -0
  133. package/integrations/hubspot/schemas/empty.json +6 -0
  134. package/integrations/hubspot/schemas/get_associations.json +30 -0
  135. package/integrations/hubspot/schemas/get_company.json +27 -0
  136. package/integrations/hubspot/schemas/get_contact.json +27 -0
  137. package/integrations/hubspot/schemas/get_deal.json +20 -0
  138. package/integrations/hubspot/schemas/get_ticket.json +20 -0
  139. package/integrations/hubspot/schemas/list_owners.json +25 -0
  140. package/integrations/hubspot/schemas/list_pipelines.json +13 -0
  141. package/integrations/hubspot/schemas/list_properties.json +17 -0
  142. package/integrations/hubspot/schemas/remove_association.json +24 -0
  143. package/integrations/hubspot/schemas/search_companies.json +56 -0
  144. package/integrations/hubspot/schemas/search_contacts.json +56 -0
  145. package/integrations/hubspot/schemas/search_deals.json +43 -0
  146. package/integrations/hubspot/schemas/search_notes.json +43 -0
  147. package/integrations/hubspot/schemas/search_tasks.json +43 -0
  148. package/integrations/hubspot/schemas/search_tickets.json +43 -0
  149. package/integrations/hubspot/schemas/update_company.json +20 -0
  150. package/integrations/hubspot/schemas/update_contact.json +21 -0
  151. package/integrations/hubspot/schemas/update_deal.json +19 -0
  152. package/integrations/hubspot/schemas/update_task.json +31 -0
  153. package/integrations/hubspot/schemas/update_ticket.json +18 -0
  154. package/integrations/jira/.env.test +46 -0
  155. package/integrations/jira/.env.test.example +41 -0
  156. package/integrations/jira/README.md +46 -0
  157. package/integrations/jira/__tests__/get_handlers.test.ts +193 -0
  158. package/integrations/jira/__tests__/usage_parity.test.ts +14 -0
  159. package/integrations/jira/__tests__/write_handlers.test.ts +157 -0
  160. package/integrations/jira/credentials.json +39 -0
  161. package/integrations/jira/credentials_hint.md +4 -0
  162. package/integrations/jira/credentials_hint_api_token.md +6 -0
  163. package/integrations/jira/credentials_hint_oauth_token.md +6 -0
  164. package/integrations/jira/handlers/add_comment.js +9 -0
  165. package/integrations/jira/handlers/assign_issue.js +11 -0
  166. package/integrations/jira/handlers/create_issue.js +37 -0
  167. package/integrations/jira/handlers/create_sprint.js +19 -0
  168. package/integrations/jira/handlers/delete_issue.js +10 -0
  169. package/integrations/jira/handlers/get_backlog_issues.js +13 -0
  170. package/integrations/jira/handlers/get_board.js +6 -0
  171. package/integrations/jira/handlers/get_issue.js +63 -0
  172. package/integrations/jira/handlers/get_issue_comments.js +31 -0
  173. package/integrations/jira/handlers/get_myself.js +14 -0
  174. package/integrations/jira/handlers/get_project.js +28 -0
  175. package/integrations/jira/handlers/get_sprint.js +5 -0
  176. package/integrations/jira/handlers/get_sprint_issues.js +13 -0
  177. package/integrations/jira/handlers/get_transitions.js +23 -0
  178. package/integrations/jira/handlers/list_boards.js +34 -0
  179. package/integrations/jira/handlers/list_projects.js +29 -0
  180. package/integrations/jira/handlers/list_sprints.js +29 -0
  181. package/integrations/jira/handlers/move_issues_to_sprint.js +11 -0
  182. package/integrations/jira/handlers/search_issues.js +43 -0
  183. package/integrations/jira/handlers/search_users.js +21 -0
  184. package/integrations/jira/handlers/transition_issue.js +44 -0
  185. package/integrations/jira/handlers/update_issue.js +40 -0
  186. package/integrations/jira/handlers/update_sprint.js +20 -0
  187. package/integrations/jira/manifest.json +204 -0
  188. package/integrations/jira/prompt.md +80 -0
  189. package/integrations/jira/schemas/add_comment.json +16 -0
  190. package/integrations/jira/schemas/assign_issue.json +16 -0
  191. package/integrations/jira/schemas/create_issue.json +49 -0
  192. package/integrations/jira/schemas/create_sprint.json +29 -0
  193. package/integrations/jira/schemas/delete_issue.json +12 -0
  194. package/integrations/jira/schemas/empty.json +6 -0
  195. package/integrations/jira/schemas/get_backlog_issues.json +33 -0
  196. package/integrations/jira/schemas/get_board.json +13 -0
  197. package/integrations/jira/schemas/get_issue.json +23 -0
  198. package/integrations/jira/schemas/get_issue_comments.json +23 -0
  199. package/integrations/jira/schemas/get_project.json +17 -0
  200. package/integrations/jira/schemas/get_sprint.json +13 -0
  201. package/integrations/jira/schemas/get_sprint_issues.json +33 -0
  202. package/integrations/jira/schemas/get_transitions.json +12 -0
  203. package/integrations/jira/schemas/list_boards.json +27 -0
  204. package/integrations/jira/schemas/list_projects.json +22 -0
  205. package/integrations/jira/schemas/list_sprints.json +29 -0
  206. package/integrations/jira/schemas/move_issues_to_sprint.json +19 -0
  207. package/integrations/jira/schemas/search_issues.json +28 -0
  208. package/integrations/jira/schemas/search_users.json +18 -0
  209. package/integrations/jira/schemas/transition_issue.json +38 -0
  210. package/integrations/jira/schemas/update_issue.json +47 -0
  211. package/integrations/jira/schemas/update_sprint.json +33 -0
  212. package/integrations/new_integration_prompt.md +173 -2
  213. package/integrations/notion/.env.test +10 -0
  214. package/integrations/notion/.env.test.example +13 -0
  215. package/integrations/notion/README.md +42 -0
  216. package/integrations/notion/manifest.json +64 -35
  217. package/integrations/trello/.env.test +6 -0
  218. package/integrations/trello/.env.test.example +9 -0
  219. package/integrations/trello/README.md +50 -0
  220. package/package.json +7 -3
@@ -0,0 +1,42 @@
1
+ async (input) => {
2
+ const limit = typeof input.limit === 'number' ? input.limit : 10
3
+ const start = typeof input.start === 'number' ? input.start : 0
4
+
5
+ const params = new URLSearchParams()
6
+ params.set('cql', String(input.cql))
7
+ params.set('limit', String(limit))
8
+ params.set('start', String(start))
9
+ params.set('expand', 'content.space,content.version')
10
+
11
+ const res = await integration.fetch(`/wiki/rest/api/search?${params}`)
12
+ const data = await res.json()
13
+
14
+ const results = Array.isArray(data?.results)
15
+ ? data.results
16
+ .map((r) => {
17
+ const c = r?.content || {}
18
+ return {
19
+ id: c.id,
20
+ type: c.type,
21
+ title: c.title,
22
+ spaceKey: c?.space?.key,
23
+ version: c?.version?.number,
24
+ lastModified: c?.version?.when,
25
+ excerpt: r?.excerpt,
26
+ webui: c?._links?.webui,
27
+ }
28
+ })
29
+ .filter((x) => x.id)
30
+ : []
31
+
32
+ return {
33
+ cql: input.cql,
34
+ start: data?.start ?? start,
35
+ limit: data?.limit ?? limit,
36
+ size: data?.size ?? results.length,
37
+ totalSize: data?.totalSize,
38
+ results,
39
+ links: data?._links || {},
40
+ }
41
+ }
42
+
@@ -0,0 +1,42 @@
1
+ async (input) => {
2
+ const pageId = encodeURIComponent(String(input.pageId))
3
+
4
+ // Fetch current page to get current version and preserve defaults.
5
+ const currentRes = await integration.fetch(`/wiki/api/v2/pages/${pageId}`)
6
+ const current = await currentRes.json()
7
+
8
+ const currentVersion = Number(current?.version?.number || 0)
9
+ if (!currentVersion)
10
+ throw new Error('Unable to determine current Confluence page version.')
11
+
12
+ const nextVersion = currentVersion + 1
13
+ const title = input.title ? String(input.title) : String(current?.title || '')
14
+ if (!title)
15
+ throw new Error('Missing page title (current page has no title and no new title was provided).')
16
+
17
+ const body = {
18
+ id: String(current?.id || input.pageId),
19
+ status: String(current?.status || 'current'),
20
+ title,
21
+ body: {
22
+ representation: 'storage',
23
+ value: String(input.bodyStorage),
24
+ },
25
+ version: {
26
+ number: nextVersion,
27
+ message: input.versionMessage ? String(input.versionMessage) : undefined,
28
+ minorEdit: Boolean(input.minorEdit),
29
+ },
30
+ }
31
+
32
+ // Remove undefined version message to keep payload clean.
33
+ if (body.version.message === undefined)
34
+ delete body.version.message
35
+
36
+ const res = await integration.fetch(`/wiki/api/v2/pages/${pageId}`, {
37
+ method: 'PUT',
38
+ body,
39
+ })
40
+ return await res.json()
41
+ }
42
+
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "confluence",
3
+ "version": "0.1.0",
4
+ "utils": ["html"],
5
+ "tools": [
6
+ {
7
+ "name": "list_spaces",
8
+ "description": "List Confluence spaces you can access. Use this to discover `spaceId`/`spaceKey` before searching or creating pages. Pagination uses `cursor` from the previous response.",
9
+ "inputSchema": "schemas/list_spaces.json",
10
+ "handler": "handlers/list_spaces.js",
11
+ "scope": "read"
12
+ },
13
+ {
14
+ "name": "get_space",
15
+ "description": "Get a Confluence space by `spaceId`, including its homepage and basic metadata.",
16
+ "inputSchema": "schemas/get_space.json",
17
+ "handler": "handlers/get_space.js",
18
+ "scope": "read"
19
+ },
20
+ {
21
+ "name": "search_pages",
22
+ "description": "Search for pages using CQL (Confluence Query Language). Use this as the primary discovery tool to find page IDs. Example CQL: `space = \"ENG\" AND type = page AND text ~ \"onboarding\" ORDER BY lastmodified DESC`.",
23
+ "inputSchema": "schemas/search_pages.json",
24
+ "handler": "handlers/search_pages.js",
25
+ "scope": "read"
26
+ },
27
+ {
28
+ "name": "read_page",
29
+ "description": "Read a page and return its content in Confluence storage format (XHTML). Set `outputMarkdown: true` to get Markdown instead — useful for quick reading or summarisation but lossy, do not use it if you plan to edit the page.",
30
+ "inputSchema": "schemas/read_page.json",
31
+ "handler": "handlers/read_page.js",
32
+ "scope": "read"
33
+ },
34
+ {
35
+ "name": "get_page_children",
36
+ "description": "List child content under a page (typically child pages). Use this to navigate page hierarchies and build a table-of-contents workflow.",
37
+ "inputSchema": "schemas/get_page_children.json",
38
+ "handler": "handlers/get_page_children.js",
39
+ "scope": "read"
40
+ },
41
+ {
42
+ "name": "get_comments",
43
+ "description": "List footer comments for a page, optionally including their child replies. Use this to review discussion threads on a page.",
44
+ "inputSchema": "schemas/get_comments.json",
45
+ "handler": "handlers/get_comments.js",
46
+ "scope": "read"
47
+ },
48
+ {
49
+ "name": "create_page",
50
+ "description": "Create a new Confluence page. Provide the body as Confluence storage format (XHTML). For simple pages you can use basic HTML like `<h1>`, `<p>`, `<ul>`, `<li>`, `<code>`, and links.",
51
+ "inputSchema": "schemas/create_page.json",
52
+ "handler": "handlers/create_page.js",
53
+ "scope": "write"
54
+ },
55
+ {
56
+ "name": "update_page",
57
+ "description": "Update an existing Confluence page. This tool auto-fetches the current version number and increments it, so you don't need to manage versioning. Provide the body as Confluence storage format (XHTML).",
58
+ "inputSchema": "schemas/update_page.json",
59
+ "handler": "handlers/update_page.js",
60
+ "scope": "write"
61
+ },
62
+ {
63
+ "name": "delete_page",
64
+ "description": "Delete a Confluence page (moves it to trash by default). Use carefully.",
65
+ "inputSchema": "schemas/delete_page.json",
66
+ "handler": "handlers/delete_page.js",
67
+ "scope": "write"
68
+ },
69
+ {
70
+ "name": "add_comment",
71
+ "description": "Add a footer comment to a Confluence page. Provide the body as Confluence storage format (XHTML). Optionally set `parentCommentId` to create a threaded reply.",
72
+ "inputSchema": "schemas/add_comment.json",
73
+ "handler": "handlers/add_comment.js",
74
+ "scope": "write"
75
+ },
76
+ {
77
+ "name": "add_label",
78
+ "description": "Add one or more labels to a Confluence page. Labels are useful for discovery via CQL (`label = \"...\"`).",
79
+ "inputSchema": "schemas/add_label.json",
80
+ "handler": "handlers/add_label.js",
81
+ "scope": "write"
82
+ }
83
+ ]
84
+ }
85
+
@@ -0,0 +1,55 @@
1
+ # Confluence usage guide
2
+
3
+ ## Recommended workflow
4
+
5
+ 1. Use `list_spaces` (or `search_pages`) to discover where content lives.
6
+ 2. Use `search_pages` with CQL to find the right page ID(s).
7
+ 3. Use `read_page` to get the page content as Confluence storage format (XHTML).
8
+ 4. For edits, use `update_page` with storage XHTML in `bodyStorage` (it automatically handles version increments).
9
+
10
+ ## Content format
11
+
12
+ All content is exchanged in **Confluence storage format (XHTML)**. This applies to both reads (`contentStorage` field in `read_page`) and writes (`bodyStorage` field in `create_page`, `update_page`, `add_comment`).
13
+
14
+ Common markup:
15
+
16
+ - Headings: `<h1>Title</h1>`, `<h2>Section</h2>`
17
+ - Paragraphs: `<p>Text</p>`
18
+ - Lists: `<ul><li>Item</li></ul>`, `<ol><li>Item</li></ol>`
19
+ - Inline code: `<code>const x = 1</code>`
20
+ - Code blocks: `<pre><code>...</code></pre>`
21
+ - Links: `<a href="https://example.com">Example</a>`
22
+ - Tables: `<table><tr><th>A</th></tr><tr><td>1</td></tr></table>`
23
+ - Macros: `<ac:structured-macro ac:name="info"><ac:rich-text-body><p>Note</p></ac:rich-text-body></ac:structured-macro>`
24
+
25
+ Using XHTML natively means round-tripping pages preserves all formatting, macros, and Confluence-specific markup.
26
+
27
+ `read_page` accepts `outputMarkdown: true` to return content as Markdown instead of XHTML.
28
+
29
+ ## CQL (Confluence Query Language) quick reference
30
+
31
+ Common patterns for `search_pages.cql`:
32
+
33
+ - Restrict to a space:
34
+ - `space = "ENG" AND type = page`
35
+ - Title match:
36
+ - `title ~ "runbook" AND type = page`
37
+ - Full-text match:
38
+ - `text ~ "oncall" AND type = page`
39
+ - Label match:
40
+ - `label = "runbook" AND type = page`
41
+ - Combine filters:
42
+ - `space = "ENG" AND type = page AND (title ~ "onboarding" OR text ~ "onboarding")`
43
+ - Sort:
44
+ - `... ORDER BY lastmodified DESC`
45
+
46
+ Tips:
47
+ - Prefer small `limit` (e.g. 10) and paginate with `start`.
48
+ - Use labels as a stable way to group pages for later discovery.
49
+
50
+ ## Page hierarchy
51
+
52
+ - Spaces contain pages.
53
+ - Pages can be nested under a parent page (`parentId`).
54
+ - Use `get_page_children` to traverse a documentation tree (e.g. a handbook or runbook index).
55
+
@@ -0,0 +1,22 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID to comment on."
8
+ },
9
+ "bodyStorage": {
10
+ "type": "string",
11
+ "title": "Comment body (storage XHTML)",
12
+ "description": "Confluence storage format (XHTML) comment body."
13
+ },
14
+ "parentCommentId": {
15
+ "type": ["string", "null"],
16
+ "description": "Optional parent footer comment ID to create a threaded reply."
17
+ }
18
+ },
19
+ "required": ["pageId", "bodyStorage"],
20
+ "additionalProperties": false
21
+ }
22
+
@@ -0,0 +1,19 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID."
8
+ },
9
+ "labels": {
10
+ "type": "array",
11
+ "minItems": 1,
12
+ "items": { "type": "string" },
13
+ "description": "Labels to add (without the `global:` prefix). Example: `design-doc`, `runbook`."
14
+ }
15
+ },
16
+ "required": ["pageId", "labels"],
17
+ "additionalProperties": false
18
+ }
19
+
@@ -0,0 +1,33 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "spaceId": {
5
+ "type": "string",
6
+ "title": "Space ID",
7
+ "description": "The space ID where the page will be created."
8
+ },
9
+ "title": {
10
+ "type": "string",
11
+ "title": "Title",
12
+ "description": "Page title."
13
+ },
14
+ "bodyStorage": {
15
+ "type": "string",
16
+ "title": "Body (storage XHTML)",
17
+ "description": "Confluence storage format (XHTML) body value."
18
+ },
19
+ "parentId": {
20
+ "type": ["string", "null"],
21
+ "description": "Optional parent page ID to create this page under."
22
+ },
23
+ "status": {
24
+ "type": "string",
25
+ "enum": ["current", "draft"],
26
+ "default": "current",
27
+ "description": "Create as published (current) or as a draft."
28
+ }
29
+ },
30
+ "required": ["spaceId", "title", "bodyStorage"],
31
+ "additionalProperties": false
32
+ }
33
+
@@ -0,0 +1,23 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID."
8
+ },
9
+ "purge": {
10
+ "type": "boolean",
11
+ "default": false,
12
+ "description": "If true, permanently purge the page (only works for trashed pages with admin permission)."
13
+ },
14
+ "draft": {
15
+ "type": "boolean",
16
+ "default": false,
17
+ "description": "If true, delete a draft page."
18
+ }
19
+ },
20
+ "required": ["pageId"],
21
+ "additionalProperties": false
22
+ }
23
+
@@ -0,0 +1,6 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {},
4
+ "additionalProperties": false
5
+ }
6
+
@@ -0,0 +1,24 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID."
8
+ },
9
+ "limit": {
10
+ "type": "integer",
11
+ "minimum": 1,
12
+ "maximum": 250,
13
+ "default": 50,
14
+ "description": "Maximum number of comments to return."
15
+ },
16
+ "cursor": {
17
+ "type": ["string", "null"],
18
+ "description": "Pagination cursor from a previous response."
19
+ }
20
+ },
21
+ "required": ["pageId"],
22
+ "additionalProperties": false
23
+ }
24
+
@@ -0,0 +1,28 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID."
8
+ },
9
+ "limit": {
10
+ "type": "integer",
11
+ "minimum": 1,
12
+ "maximum": 250,
13
+ "default": 50,
14
+ "description": "Maximum number of children to return."
15
+ },
16
+ "cursor": {
17
+ "type": ["string", "null"],
18
+ "description": "Pagination cursor from a previous response."
19
+ },
20
+ "sort": {
21
+ "type": "string",
22
+ "description": "Optional sort key (API-specific)."
23
+ }
24
+ },
25
+ "required": ["pageId"],
26
+ "additionalProperties": false
27
+ }
28
+
@@ -0,0 +1,18 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "spaceId": {
5
+ "type": "string",
6
+ "title": "Space ID",
7
+ "description": "The Confluence space ID."
8
+ },
9
+ "includePermissions": {
10
+ "type": "boolean",
11
+ "default": false,
12
+ "description": "If true, include permissions in the response (may be verbose)."
13
+ }
14
+ },
15
+ "required": ["spaceId"],
16
+ "additionalProperties": false
17
+ }
18
+
@@ -0,0 +1,36 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "ids": {
5
+ "type": "array",
6
+ "items": { "type": "string" },
7
+ "description": "Optional list of space IDs to filter by."
8
+ },
9
+ "keys": {
10
+ "type": "array",
11
+ "items": { "type": "string" },
12
+ "description": "Optional list of space keys to filter by."
13
+ },
14
+ "type": {
15
+ "type": "string",
16
+ "description": "Optional space type filter (e.g. global, personal)."
17
+ },
18
+ "status": {
19
+ "type": "string",
20
+ "description": "Optional space status filter (e.g. current, archived)."
21
+ },
22
+ "limit": {
23
+ "type": "integer",
24
+ "minimum": 1,
25
+ "maximum": 250,
26
+ "default": 50,
27
+ "description": "Maximum number of spaces to return."
28
+ },
29
+ "cursor": {
30
+ "type": ["string", "null"],
31
+ "description": "Pagination cursor from a previous response."
32
+ }
33
+ },
34
+ "additionalProperties": false
35
+ }
36
+
@@ -0,0 +1,28 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID."
8
+ },
9
+ "includeLabels": {
10
+ "type": "boolean",
11
+ "default": true,
12
+ "description": "Include labels in the response."
13
+ },
14
+ "includeProperties": {
15
+ "type": "boolean",
16
+ "default": false,
17
+ "description": "Include content properties (may be verbose)."
18
+ },
19
+ "outputMarkdown": {
20
+ "type": "boolean",
21
+ "default": false,
22
+ "description": "Return content as Markdown instead of Confluence storage XHTML. Useful for quick reading or summarisation. Lossy — macros and rich formatting are stripped. Do not use this format if you intend to edit the page."
23
+ }
24
+ },
25
+ "required": ["pageId"],
26
+ "additionalProperties": false
27
+ }
28
+
@@ -0,0 +1,26 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "cql": {
5
+ "type": "string",
6
+ "title": "CQL",
7
+ "description": "Confluence Query Language string. Example: `space = \"ENG\" AND type = page AND text ~ \"onboarding\" ORDER BY lastmodified DESC`."
8
+ },
9
+ "limit": {
10
+ "type": "integer",
11
+ "minimum": 1,
12
+ "maximum": 50,
13
+ "default": 10,
14
+ "description": "Maximum results to return."
15
+ },
16
+ "start": {
17
+ "type": "integer",
18
+ "minimum": 0,
19
+ "default": 0,
20
+ "description": "Offset into results for pagination (v1 search)."
21
+ }
22
+ },
23
+ "required": ["cql"],
24
+ "additionalProperties": false
25
+ }
26
+
@@ -0,0 +1,31 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "pageId": {
5
+ "type": "string",
6
+ "title": "Page ID",
7
+ "description": "The Confluence page ID."
8
+ },
9
+ "title": {
10
+ "type": ["string", "null"],
11
+ "description": "New page title. If omitted, the existing title is preserved."
12
+ },
13
+ "bodyStorage": {
14
+ "type": "string",
15
+ "title": "Body (storage XHTML)",
16
+ "description": "Confluence storage format (XHTML) body value."
17
+ },
18
+ "versionMessage": {
19
+ "type": ["string", "null"],
20
+ "description": "Optional version message for the update."
21
+ },
22
+ "minorEdit": {
23
+ "type": "boolean",
24
+ "default": false,
25
+ "description": "If true, mark the update as a minor edit when supported."
26
+ }
27
+ },
28
+ "required": ["pageId", "bodyStorage"],
29
+ "additionalProperties": false
30
+ }
31
+
@@ -0,0 +1,16 @@
1
+ # GitHub
2
+ # Two credential variants are supported -- provide one or both to test each variant:
3
+ #
4
+ # classic_pat variant: supports ALL tools including create_repo / delete_repo
5
+ # Get one at: Settings → Developer settings → Personal access tokens → Tokens (classic)
6
+ # Recommended scopes: repo, delete_repo, read:user
7
+ _GITHUB_CLASSIC_PAT=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
8
+ #
9
+ # fine_grained_pat variant: supports most tools, but NOT create_repo / delete_repo
10
+ # Get one at: Settings → Developer settings → Personal access tokens → Fine-grained tokens
11
+ _GITHUB_FINE_GRAINED_PAT=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
12
+ #
13
+ # Required for GitHub write tests (create issues/comments/etc.)
14
+ # Owner/repo should point at a safe test repo you control.
15
+ _GITHUB_TEST_OWNER=commandable
16
+ _GITHUB_TEST_REPO=repo-for-integration-tests
@@ -0,0 +1,17 @@
1
+ # GitHub live integration tests
2
+ #
3
+ # Two credential variants are supported — provide one or both to test each variant:
4
+ #
5
+ # classic_pat variant: supports ALL tools including create_repo / delete_repo
6
+ # Get one at: Settings → Developer settings → Personal access tokens → Tokens (classic)
7
+ # Recommended scopes: repo, delete_repo, read:user
8
+ _GITHUB_CLASSIC_PAT=
9
+ #
10
+ # fine_grained_pat variant: supports most tools, but NOT create_repo / delete_repo
11
+ # Get one at: Settings → Developer settings → Personal access tokens → Fine-grained tokens
12
+ _GITHUB_FINE_GRAINED_PAT=
13
+ #
14
+ # Required for write tests (create issues/comments/etc.)
15
+ # Owner/repo should point at a safe test repo you control.
16
+ _GITHUB_TEST_OWNER=
17
+ _GITHUB_TEST_REPO=
@@ -0,0 +1,75 @@
1
+ # GitHub
2
+
3
+ **47 tools** across 6 toolsets
4
+
5
+ ![GitHub tests](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/theomccabe/771bd329f303087690c522afa1baa6f3/raw/test-github.json)
6
+
7
+ ## Credential variants
8
+
9
+ | Variant | Label |
10
+ |---|---|
11
+ | `classic_pat` | Classic Personal Access Token _(default)_ |
12
+ | `fine_grained_pat` | Fine-Grained Personal Access Token |
13
+
14
+ ## Toolsets
15
+
16
+ | Toolset | Description |
17
+ |---|---|
18
+ | `code` | Read, search, and manage repository code and branches |
19
+ | `issues` | Create, search, and manage GitHub issues |
20
+ | `pull_requests` | Create, review, and merge pull requests |
21
+ | `ci` | Monitor GitHub Actions workflows and debug failures |
22
+ | `releases` | Manage releases and view tags |
23
+ | `repo_admin` | Create, delete, fork, and discover repositories |
24
+
25
+ ## Tools
26
+
27
+ | Tool | Scope | Toolset | Description |
28
+ |---|---|---|---|
29
+ | `get_me` | read | `repo_admin` | Get the authenticated user's profile. Use this to find out who you are authenticated as b… |
30
+ | `list_repos` | read | `repo_admin` | List repositories for the authenticated user. |
31
+ | `get_repo` | read | `code` | Get details for a repository (description, default branch, visibility, topics, stats). |
32
+ | `search_repos` | read | `repo_admin` | Search GitHub repositories. Supports stars, forks, language, topic, and user filters (e.g… |
33
+ | `get_file_contents` | read | `code` | Get the content of a file from a repository. Returns decoded UTF-8 text. Use ref to read … |
34
+ | `get_repo_tree` | read | `code` | Get the full file/directory tree of a repository. Returns all paths and types. Use path_f… |
35
+ | `search_code` | read | `code` | Search for code across GitHub repositories using GitHub's code search syntax. Examples: '… |
36
+ | `list_branches` | read | `code` | List branches in a repository. Supports pagination and filtering by protection status. |
37
+ | `list_commits` | read | `code` | List commits for a repository. Filter by branch/tag (sha), file path, or author. Paginate… |
38
+ | `get_commit` | read | `code` | Get the full details of a specific commit including its message, author, file changes, an… |
39
+ | `list_tags` | read | `code` | List tags for a repository. Use this to see available versions before creating a release. |
40
+ | `list_issues` | read | `issues` | List issues for a repository. Filter by state (open/closed/all), labels (comma-separated)… |
41
+ | `get_issue` | read | `issues` | Get full details of a specific issue including its body, labels, assignees, and milestone. |
42
+ | `list_issue_comments` | read | `issues` | List all comments on an issue. Use this to read the full discussion thread before replyin… |
43
+ | `search_issues` | read | `issues` | Search issues using GitHub search syntax (e.g. 'is:open is:issue label:bug repo:owner/rep… |
44
+ | `list_labels` | read | `issues` | List all labels available in a repository. Call this before add_labels_to_issue to see wh… |
45
+ | `list_pull_requests` | read | `pull_requests` | List pull requests for a repository. Filter by state, head branch, base branch. Sort and … |
46
+ | `get_pull_request` | read | `pull_requests` | Get full details of a specific pull request including title, body, state, merge status, h… |
47
+ | `get_pull_request_diff` | read | `pull_requests` | Get the raw unified diff for a pull request. Returns the complete diff of all changes. Fo… |
48
+ | `list_pull_request_files` | read | `pull_requests` | List the files changed in a pull request with their status (added/modified/deleted) and p… |
49
+ | `list_pull_request_comments` | read | `pull_requests` | List inline review comments on a pull request (comments attached to specific lines of cod… |
50
+ | `search_pull_requests` | read | `pull_requests` | Search pull requests using GitHub search syntax. Use 'is:pr' to scope to PRs (e.g. 'is:pr… |
51
+ | `list_releases` | read | `releases` | List all releases for a repository, newest first. |
52
+ | `get_latest_release` | read | `releases` | Get the latest published release for a repository. Use this to quickly check the current … |
53
+ | `list_workflow_runs` | read | `ci` | List GitHub Actions workflow runs for a repository. Filter by branch, status (e.g. 'failu… |
54
+ | `get_workflow_run` | read | `ci` | Get details of a specific GitHub Actions workflow run including its status, conclusion, t… |
55
+ | `get_job_logs` | read | `ci` | Get the log output for a specific GitHub Actions workflow job. Use this to diagnose CI fa… |
56
+ | `create_repo` | write | `repo_admin` | Create a new GitHub repository under the authenticated user's account. |
57
+ | `delete_repo` | write | `repo_admin` | Permanently delete a repository. This is irreversible. Requires the delete_repo scope on … |
58
+ | `fork_repo` | write | `repo_admin` | Fork a repository into your account or an organization. The fork is created asynchronousl… |
59
+ | `create_branch` | write | `code` | Create a new branch in a repository, branching from the repo's default branch by default. |
60
+ | `delete_branch` | write | `code` | Delete a branch. Typically used after a pull request is merged. Use list_branches to find… |
61
+ | `edit_file` | write | `code` | Edit a file using search/replace. Fetches the file, applies edits, and commits the result… |
62
+ | `edit_files` | write | `code` | Create, edit, and delete multiple files in a single atomic commit. Use action 'create' wi… |
63
+ | `create_file` | write | `code` | Create a new file or overwrite an existing file's content in a single commit. Handles SHA… |
64
+ | `delete_file` | write | `code` | Delete a file from a repository. The file's SHA is fetched automatically. Creates a commi… |
65
+ | `create_pull_request` | write | `pull_requests` | Open a new pull request from a head branch into a base branch. |
66
+ | `update_pull_request` | write | `pull_requests` | Edit a pull request's title, body, state (open/closed), base branch, or draft status. |
67
+ | `merge_pull_request` | write | `pull_requests` | Merge a pull request. Supports merge, squash, and rebase merge methods. |
68
+ | `request_pull_request_reviewers` | write | `pull_requests` | Request specific users or teams to review a pull request. |
69
+ | `create_pull_request_review` | write | `pull_requests` | Submit a pull request review. Use event=APPROVE to approve, REQUEST_CHANGES to request ch… |
70
+ | `create_issue` | write | `issues` | Create a new issue in a repository. Optionally assign users and add labels. |
71
+ | `update_issue` | write | `issues` | Update fields on an existing issue (title, body, state, assignees, labels, milestone). |
72
+ | `close_issue` | write | `issues` | Close an issue. |
73
+ | `comment_on_issue` | write | `issues` | Add a comment to an issue or pull request (GitHub PRs share the issue comment thread). Us… |
74
+ | `add_labels_to_issue` | write | `issues` | Add labels to an issue or pull request. Use list_labels to discover available labels befo… |
75
+ | `create_release` | write | `releases` | Create a new release from a tag. Can auto-generate release notes from commits. Set draft=… |