@octopusdeploy/mcp-server 1.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +237 -46
  2. package/dist/helpers/activeToolsetConfig.d.ts +4 -0
  3. package/dist/helpers/activeToolsetConfig.d.ts.map +1 -0
  4. package/dist/helpers/activeToolsetConfig.js +18 -0
  5. package/dist/helpers/activeToolsetConfig.js.map +1 -0
  6. package/dist/helpers/errorHandling.d.ts +38 -0
  7. package/dist/helpers/errorHandling.d.ts.map +1 -0
  8. package/dist/helpers/errorHandling.js +75 -0
  9. package/dist/helpers/errorHandling.js.map +1 -0
  10. package/dist/helpers/getClientConfigurationFromEnvironment.d.ts +2 -0
  11. package/dist/helpers/getClientConfigurationFromEnvironment.d.ts.map +1 -1
  12. package/dist/helpers/getClientConfigurationFromEnvironment.js +21 -5
  13. package/dist/helpers/getClientConfigurationFromEnvironment.js.map +1 -1
  14. package/dist/helpers/grepLines.d.ts +38 -0
  15. package/dist/helpers/grepLines.d.ts.map +1 -0
  16. package/dist/helpers/grepLines.js +65 -0
  17. package/dist/helpers/grepLines.js.map +1 -0
  18. package/dist/helpers/methodTier.d.ts +15 -0
  19. package/dist/helpers/methodTier.d.ts.map +1 -0
  20. package/dist/helpers/methodTier.js +25 -0
  21. package/dist/helpers/methodTier.js.map +1 -0
  22. package/dist/helpers/pathAllowlist.d.ts +27 -0
  23. package/dist/helpers/pathAllowlist.d.ts.map +1 -0
  24. package/dist/helpers/pathAllowlist.js +177 -0
  25. package/dist/helpers/pathAllowlist.js.map +1 -0
  26. package/dist/helpers/pathGlob.d.ts +15 -0
  27. package/dist/helpers/pathGlob.d.ts.map +1 -0
  28. package/dist/helpers/pathGlob.js +47 -0
  29. package/dist/helpers/pathGlob.js.map +1 -0
  30. package/dist/helpers/requireConfirmation.d.ts +119 -0
  31. package/dist/helpers/requireConfirmation.d.ts.map +1 -0
  32. package/dist/helpers/requireConfirmation.js +148 -0
  33. package/dist/helpers/requireConfirmation.js.map +1 -0
  34. package/dist/helpers/sensitivePathDenylist.d.ts +32 -0
  35. package/dist/helpers/sensitivePathDenylist.d.ts.map +1 -0
  36. package/dist/helpers/sensitivePathDenylist.js +49 -0
  37. package/dist/helpers/sensitivePathDenylist.js.map +1 -0
  38. package/dist/helpers/spaceResolver.d.ts +4 -0
  39. package/dist/helpers/spaceResolver.d.ts.map +1 -0
  40. package/dist/helpers/spaceResolver.js +18 -0
  41. package/dist/helpers/spaceResolver.js.map +1 -0
  42. package/dist/helpers/stripLinks.d.ts +15 -0
  43. package/dist/helpers/stripLinks.d.ts.map +1 -0
  44. package/dist/helpers/stripLinks.js +19 -0
  45. package/dist/helpers/stripLinks.js.map +1 -0
  46. package/dist/helpers/urlParser.d.ts +16 -0
  47. package/dist/helpers/urlParser.d.ts.map +1 -0
  48. package/dist/helpers/urlParser.js +83 -0
  49. package/dist/helpers/urlParser.js.map +1 -0
  50. package/dist/helpers/userCache.d.ts +14 -0
  51. package/dist/helpers/userCache.d.ts.map +1 -0
  52. package/dist/helpers/userCache.js +16 -0
  53. package/dist/helpers/userCache.js.map +1 -0
  54. package/dist/helpers/validateExecutePath.d.ts +29 -0
  55. package/dist/helpers/validateExecutePath.d.ts.map +1 -0
  56. package/dist/helpers/validateExecutePath.js +62 -0
  57. package/dist/helpers/validateExecutePath.js.map +1 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +64 -15
  60. package/dist/index.js.map +1 -1
  61. package/dist/resources/catalog/capabilities.d.ts +36 -0
  62. package/dist/resources/catalog/capabilities.d.ts.map +1 -0
  63. package/dist/resources/catalog/capabilities.js +90 -0
  64. package/dist/resources/catalog/capabilities.js.map +1 -0
  65. package/dist/resources/catalog/llmsTxt.d.ts +8 -0
  66. package/dist/resources/catalog/llmsTxt.d.ts.map +1 -0
  67. package/dist/resources/catalog/llmsTxt.js +44 -0
  68. package/dist/resources/catalog/llmsTxt.js.map +1 -0
  69. package/dist/resources/dispatch.d.ts +30 -0
  70. package/dist/resources/dispatch.d.ts.map +1 -0
  71. package/dist/resources/dispatch.js +81 -0
  72. package/dist/resources/dispatch.js.map +1 -0
  73. package/dist/resources/featureToggle.d.ts +2 -0
  74. package/dist/resources/featureToggle.d.ts.map +1 -0
  75. package/dist/resources/featureToggle.js +34 -0
  76. package/dist/resources/featureToggle.js.map +1 -0
  77. package/dist/resources/index.d.ts +12 -0
  78. package/dist/resources/index.d.ts.map +1 -0
  79. package/dist/resources/index.js +44 -0
  80. package/dist/resources/index.js.map +1 -0
  81. package/dist/resources/interruption.d.ts +2 -0
  82. package/dist/resources/interruption.d.ts.map +1 -0
  83. package/dist/resources/interruption.js +34 -0
  84. package/dist/resources/interruption.js.map +1 -0
  85. package/dist/resources/release.d.ts +2 -0
  86. package/dist/resources/release.d.ts.map +1 -0
  87. package/dist/resources/release.js +33 -0
  88. package/dist/resources/release.js.map +1 -0
  89. package/dist/resources/rolloutGroup.d.ts +2 -0
  90. package/dist/resources/rolloutGroup.d.ts.map +1 -0
  91. package/dist/resources/rolloutGroup.js +35 -0
  92. package/dist/resources/rolloutGroup.js.map +1 -0
  93. package/dist/resources/runbook.d.ts +2 -0
  94. package/dist/resources/runbook.d.ts.map +1 -0
  95. package/dist/resources/runbook.js +34 -0
  96. package/dist/resources/runbook.js.map +1 -0
  97. package/dist/resources/task.d.ts +2 -0
  98. package/dist/resources/task.d.ts.map +1 -0
  99. package/dist/resources/task.js +68 -0
  100. package/dist/resources/task.js.map +1 -0
  101. package/dist/tools/createRelease.d.ts +3 -0
  102. package/dist/tools/createRelease.d.ts.map +1 -0
  103. package/dist/tools/createRelease.js +151 -0
  104. package/dist/tools/createRelease.js.map +1 -0
  105. package/dist/tools/deployRelease.d.ts +3 -0
  106. package/dist/tools/deployRelease.d.ts.map +1 -0
  107. package/dist/tools/deployRelease.js +227 -0
  108. package/dist/tools/deployRelease.js.map +1 -0
  109. package/dist/tools/execute.d.ts +3 -0
  110. package/dist/tools/execute.d.ts.map +1 -0
  111. package/dist/tools/execute.js +261 -0
  112. package/dist/tools/execute.js.map +1 -0
  113. package/dist/tools/findAccounts.d.ts +3 -0
  114. package/dist/tools/findAccounts.d.ts.map +1 -0
  115. package/dist/tools/findAccounts.js +90 -0
  116. package/dist/tools/findAccounts.js.map +1 -0
  117. package/dist/tools/findCertificates.d.ts +3 -0
  118. package/dist/tools/findCertificates.d.ts.map +1 -0
  119. package/dist/tools/findCertificates.js +98 -0
  120. package/dist/tools/findCertificates.js.map +1 -0
  121. package/dist/tools/findDeploymentTargets.d.ts +3 -0
  122. package/dist/tools/findDeploymentTargets.d.ts.map +1 -0
  123. package/dist/tools/findDeploymentTargets.js +161 -0
  124. package/dist/tools/findDeploymentTargets.js.map +1 -0
  125. package/dist/tools/findFeatureToggles.d.ts +37 -0
  126. package/dist/tools/findFeatureToggles.d.ts.map +1 -0
  127. package/dist/tools/findFeatureToggles.js +139 -0
  128. package/dist/tools/findFeatureToggles.js.map +1 -0
  129. package/dist/tools/findInterruptions.d.ts +79 -0
  130. package/dist/tools/findInterruptions.d.ts.map +1 -0
  131. package/dist/tools/findInterruptions.js +273 -0
  132. package/dist/tools/findInterruptions.js.map +1 -0
  133. package/dist/tools/findReleases.d.ts +3 -0
  134. package/dist/tools/findReleases.d.ts.map +1 -0
  135. package/dist/tools/findReleases.js +138 -0
  136. package/dist/tools/findReleases.js.map +1 -0
  137. package/dist/tools/findRunbooks.d.ts +3 -0
  138. package/dist/tools/findRunbooks.d.ts.map +1 -0
  139. package/dist/tools/findRunbooks.js +139 -0
  140. package/dist/tools/findRunbooks.js.map +1 -0
  141. package/dist/tools/findTenants.d.ts +19 -0
  142. package/dist/tools/findTenants.d.ts.map +1 -0
  143. package/dist/tools/findTenants.js +133 -0
  144. package/dist/tools/findTenants.js.map +1 -0
  145. package/dist/tools/getBranches.d.ts.map +1 -1
  146. package/dist/tools/getBranches.js +51 -33
  147. package/dist/tools/getBranches.js.map +1 -1
  148. package/dist/tools/getCurrentUser.d.ts.map +1 -1
  149. package/dist/tools/getCurrentUser.js +34 -25
  150. package/dist/tools/getCurrentUser.js.map +1 -1
  151. package/dist/tools/getDeploymentFromUrl.d.ts +57 -0
  152. package/dist/tools/getDeploymentFromUrl.d.ts.map +1 -0
  153. package/dist/tools/getDeploymentFromUrl.js +162 -0
  154. package/dist/tools/getDeploymentFromUrl.js.map +1 -0
  155. package/dist/tools/getDeploymentProcess.d.ts.map +1 -1
  156. package/dist/tools/getDeploymentProcess.js +57 -19
  157. package/dist/tools/getDeploymentProcess.js.map +1 -1
  158. package/dist/tools/getKubernetesLiveStatus.d.ts.map +1 -1
  159. package/dist/tools/getKubernetesLiveStatus.js +70 -48
  160. package/dist/tools/getKubernetesLiveStatus.js.map +1 -1
  161. package/dist/tools/getMissingTenantVariables.d.ts.map +1 -1
  162. package/dist/tools/getMissingTenantVariables.js +58 -26
  163. package/dist/tools/getMissingTenantVariables.js.map +1 -1
  164. package/dist/tools/getTaskFromUrl.d.ts +18 -0
  165. package/dist/tools/getTaskFromUrl.d.ts.map +1 -0
  166. package/dist/tools/getTaskFromUrl.js +90 -0
  167. package/dist/tools/getTaskFromUrl.js.map +1 -0
  168. package/dist/tools/getTenantVariables.d.ts.map +1 -1
  169. package/dist/tools/getTenantVariables.js +58 -38
  170. package/dist/tools/getTenantVariables.js.map +1 -1
  171. package/dist/tools/getVariables.d.ts.map +1 -1
  172. package/dist/tools/getVariables.js +12 -9
  173. package/dist/tools/getVariables.js.map +1 -1
  174. package/dist/tools/grepLlmsTxt.d.ts +13 -0
  175. package/dist/tools/grepLlmsTxt.d.ts.map +1 -0
  176. package/dist/tools/grepLlmsTxt.js +105 -0
  177. package/dist/tools/grepLlmsTxt.js.map +1 -0
  178. package/dist/tools/grepTaskLog.d.ts +30 -0
  179. package/dist/tools/grepTaskLog.d.ts.map +1 -0
  180. package/dist/tools/grepTaskLog.js +116 -0
  181. package/dist/tools/grepTaskLog.js.map +1 -0
  182. package/dist/tools/index.d.ts +22 -18
  183. package/dist/tools/index.d.ts.map +1 -1
  184. package/dist/tools/index.js +33 -21
  185. package/dist/tools/index.js.map +1 -1
  186. package/dist/tools/listDeployments.d.ts.map +1 -1
  187. package/dist/tools/listDeployments.js +77 -37
  188. package/dist/tools/listDeployments.js.map +1 -1
  189. package/dist/tools/listEnvironments.d.ts.map +1 -1
  190. package/dist/tools/listEnvironments.js +63 -37
  191. package/dist/tools/listEnvironments.js.map +1 -1
  192. package/dist/tools/listProjects.d.ts.map +1 -1
  193. package/dist/tools/listProjects.js +64 -38
  194. package/dist/tools/listProjects.js.map +1 -1
  195. package/dist/tools/listSpaces.d.ts.map +1 -1
  196. package/dist/tools/listSpaces.js +56 -30
  197. package/dist/tools/listSpaces.js.map +1 -1
  198. package/dist/tools/readResource.d.ts +3 -0
  199. package/dist/tools/readResource.d.ts.map +1 -0
  200. package/dist/tools/readResource.js +50 -0
  201. package/dist/tools/readResource.js.map +1 -0
  202. package/dist/tools/runRunbook.d.ts +3 -0
  203. package/dist/tools/runRunbook.d.ts.map +1 -0
  204. package/dist/tools/runRunbook.js +174 -0
  205. package/dist/tools/runRunbook.js.map +1 -0
  206. package/dist/tools/updateFeatureToggle.d.ts +94 -0
  207. package/dist/tools/updateFeatureToggle.d.ts.map +1 -0
  208. package/dist/tools/updateFeatureToggle.js +308 -0
  209. package/dist/tools/updateFeatureToggle.js.map +1 -0
  210. package/dist/types/featureToggleTypes.d.ts +47 -0
  211. package/dist/types/featureToggleTypes.d.ts.map +1 -0
  212. package/dist/types/featureToggleTypes.js +10 -0
  213. package/dist/types/featureToggleTypes.js.map +1 -0
  214. package/dist/types/resourceConfig.d.ts +17 -0
  215. package/dist/types/resourceConfig.d.ts.map +1 -0
  216. package/dist/types/resourceConfig.js +6 -0
  217. package/dist/types/resourceConfig.js.map +1 -0
  218. package/dist/types/toolAnnotations.d.ts +8 -0
  219. package/dist/types/toolAnnotations.d.ts.map +1 -0
  220. package/dist/types/toolAnnotations.js +28 -0
  221. package/dist/types/toolAnnotations.js.map +1 -0
  222. package/dist/types/toolConfig.d.ts +7 -1
  223. package/dist/types/toolConfig.d.ts.map +1 -1
  224. package/dist/types/toolConfig.js +4 -1
  225. package/dist/types/toolConfig.js.map +1 -1
  226. package/dist/utils/parseConfig.d.ts +1 -1
  227. package/dist/utils/parseConfig.d.ts.map +1 -1
  228. package/dist/utils/parseConfig.js +3 -2
  229. package/dist/utils/parseConfig.js.map +1 -1
  230. package/dist/utils/version.d.ts +2 -0
  231. package/dist/utils/version.d.ts.map +1 -0
  232. package/dist/utils/version.js +3 -0
  233. package/dist/utils/version.js.map +1 -0
  234. package/package.json +9 -3
  235. package/dist/tools/getAccount.d.ts +0 -3
  236. package/dist/tools/getAccount.d.ts.map +0 -1
  237. package/dist/tools/getAccount.js +0 -40
  238. package/dist/tools/getAccount.js.map +0 -1
  239. package/dist/tools/getCertificate.d.ts +0 -3
  240. package/dist/tools/getCertificate.d.ts.map +0 -1
  241. package/dist/tools/getCertificate.js +0 -40
  242. package/dist/tools/getCertificate.js.map +0 -1
  243. package/dist/tools/getDeploymentTarget.d.ts +0 -3
  244. package/dist/tools/getDeploymentTarget.d.ts.map +0 -1
  245. package/dist/tools/getDeploymentTarget.js +0 -66
  246. package/dist/tools/getDeploymentTarget.js.map +0 -1
  247. package/dist/tools/getReleaseById.d.ts +0 -3
  248. package/dist/tools/getReleaseById.d.ts.map +0 -1
  249. package/dist/tools/getReleaseById.js +0 -45
  250. package/dist/tools/getReleaseById.js.map +0 -1
  251. package/dist/tools/getTaskById.d.ts +0 -9
  252. package/dist/tools/getTaskById.d.ts.map +0 -1
  253. package/dist/tools/getTaskById.js +0 -44
  254. package/dist/tools/getTaskById.js.map +0 -1
  255. package/dist/tools/getTaskDetails.d.ts +0 -9
  256. package/dist/tools/getTaskDetails.d.ts.map +0 -1
  257. package/dist/tools/getTaskDetails.js +0 -44
  258. package/dist/tools/getTaskDetails.js.map +0 -1
  259. package/dist/tools/getTaskRaw.d.ts +0 -9
  260. package/dist/tools/getTaskRaw.d.ts.map +0 -1
  261. package/dist/tools/getTaskRaw.js +0 -43
  262. package/dist/tools/getTaskRaw.js.map +0 -1
  263. package/dist/tools/getTenantById.d.ts +0 -3
  264. package/dist/tools/getTenantById.d.ts.map +0 -1
  265. package/dist/tools/getTenantById.js +0 -50
  266. package/dist/tools/getTenantById.js.map +0 -1
  267. package/dist/tools/listAccounts.d.ts +0 -3
  268. package/dist/tools/listAccounts.d.ts.map +0 -1
  269. package/dist/tools/listAccounts.js +0 -54
  270. package/dist/tools/listAccounts.js.map +0 -1
  271. package/dist/tools/listCertificates.d.ts +0 -3
  272. package/dist/tools/listCertificates.d.ts.map +0 -1
  273. package/dist/tools/listCertificates.js +0 -62
  274. package/dist/tools/listCertificates.js.map +0 -1
  275. package/dist/tools/listDeploymentTargets.d.ts +0 -3
  276. package/dist/tools/listDeploymentTargets.d.ts.map +0 -1
  277. package/dist/tools/listDeploymentTargets.js +0 -98
  278. package/dist/tools/listDeploymentTargets.js.map +0 -1
  279. package/dist/tools/listReleases.d.ts +0 -3
  280. package/dist/tools/listReleases.d.ts.map +0 -1
  281. package/dist/tools/listReleases.js +0 -54
  282. package/dist/tools/listReleases.js.map +0 -1
  283. package/dist/tools/listReleasesForProject.d.ts +0 -3
  284. package/dist/tools/listReleasesForProject.d.ts.map +0 -1
  285. package/dist/tools/listReleasesForProject.js +0 -60
  286. package/dist/tools/listReleasesForProject.js.map +0 -1
  287. package/dist/tools/listTenants.d.ts +0 -3
  288. package/dist/tools/listTenants.d.ts.map +0 -1
  289. package/dist/tools/listTenants.js +0 -69
  290. package/dist/tools/listTenants.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ import { Client, resolveSpaceId } from "@octopusdeploy/api-client";
2
+ import { registerResourceDescriptor } from "../types/resourceConfig.js";
3
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
4
+ import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES, } from "../helpers/errorHandling.js";
5
+ import { stripLinks } from "../helpers/stripLinks.js";
6
+ registerResourceDescriptor({
7
+ name: "interruption",
8
+ uriTemplate: "octopus://spaces/{spaceName}/interruptions/{interruptionId}",
9
+ toolset: "interruptions",
10
+ title: "Octopus interruption",
11
+ description: "Full interruption body for a given interruption ID in a space. Includes Form.Elements (the form definition with control types, labels, button options, and Paragraph instructions in Markdown) and Form.Values (any already-submitted values), plus RelatedDocumentIds, ResponsibleTeamIds, ResponsibleUserId, and the responsibility flags. Use this when the find_interruptions slim summary is not enough — for example, when the user wants to see the intervention's instructions or the set of choices on the SubmitButtonGroup.",
12
+ mimeType: "application/json",
13
+ read: async ({ spaceName, interruptionId }) => {
14
+ validateEntityId(interruptionId, "interruption", ENTITY_PREFIXES.interruption);
15
+ try {
16
+ const client = await Client.create(getClientConfigurationFromEnvironment());
17
+ const spaceId = await resolveSpaceId(client, spaceName);
18
+ const interruption = await client.get("~/api/{spaceId}/interruptions/{interruptionId}", { spaceId, interruptionId });
19
+ return {
20
+ mimeType: "application/json",
21
+ text: JSON.stringify(stripLinks(interruption)),
22
+ };
23
+ }
24
+ catch (error) {
25
+ handleOctopusApiError(error, {
26
+ entityType: "interruption",
27
+ entityId: interruptionId,
28
+ spaceName,
29
+ helpText: "Use find_interruptions to find valid interruption IDs.",
30
+ });
31
+ }
32
+ },
33
+ });
34
+ //# sourceMappingURL=interruption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interruption.js","sourceRoot":"","sources":["../../src/resources/interruption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,0BAA0B,CAAC;IACzB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,6DAA6D;IAC1E,OAAO,EAAE,eAAe;IACxB,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EACT,wgBAAwgB;IAC1gB,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE;QAC5C,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;QAE/E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,qCAAqC,EAAE,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,GAAG,CACnC,gDAAgD,EAChD,EAAE,OAAO,EAAE,cAAc,EAAE,CAC5B,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;aAC/C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,EAAE;gBAC3B,UAAU,EAAE,cAAc;gBAC1B,QAAQ,EAAE,cAAc;gBACxB,SAAS;gBACT,QAAQ,EAAE,wDAAwD;aACnE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/resources/release.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { Client, ReleaseRepository } from "@octopusdeploy/api-client";
2
+ import { registerResourceDescriptor } from "../types/resourceConfig.js";
3
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
4
+ import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES, } from "../helpers/errorHandling.js";
5
+ import { stripLinks } from "../helpers/stripLinks.js";
6
+ registerResourceDescriptor({
7
+ name: "release",
8
+ uriTemplate: "octopus://spaces/{spaceName}/releases/{releaseId}",
9
+ toolset: "releases",
10
+ title: "Octopus release",
11
+ description: "Full release object for a given release ID in a space. Body shape mirrors the find_releases tool output for a single release.",
12
+ mimeType: "application/json",
13
+ read: async ({ spaceName, releaseId }) => {
14
+ validateEntityId(releaseId, "release", ENTITY_PREFIXES.release);
15
+ try {
16
+ const client = await Client.create(getClientConfigurationFromEnvironment());
17
+ const release = await new ReleaseRepository(client, spaceName).get(releaseId);
18
+ return {
19
+ mimeType: "application/json",
20
+ text: JSON.stringify(stripLinks(release)),
21
+ };
22
+ }
23
+ catch (error) {
24
+ handleOctopusApiError(error, {
25
+ entityType: "release",
26
+ entityId: releaseId,
27
+ spaceName,
28
+ helpText: "Use find_releases to find valid release IDs.",
29
+ });
30
+ }
31
+ },
32
+ });
33
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/resources/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,0BAA0B,CAAC;IACzB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,mDAAmD;IAChE,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,iBAAiB;IACxB,WAAW,EACT,+HAA+H;IACjI,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACvC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,qCAAqC,EAAE,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,CAChE,SAAS,CACV,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,EAAE;gBAC3B,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,SAAS;gBACnB,SAAS;gBACT,QAAQ,EACN,8CAA8C;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rolloutGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolloutGroup.d.ts","sourceRoot":"","sources":["../../src/resources/rolloutGroup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { Client, resolveSpaceId } from "@octopusdeploy/api-client";
2
+ import { registerResourceDescriptor } from "../types/resourceConfig.js";
3
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
4
+ import { validateEntityId, handleOctopusApiError, } from "../helpers/errorHandling.js";
5
+ import { stripLinks } from "../helpers/stripLinks.js";
6
+ import {} from "../types/featureToggleTypes.js";
7
+ registerResourceDescriptor({
8
+ name: "rolloutGroup",
9
+ uriTemplate: "octopus://spaces/{spaceName}/projects/{projectId}/rolloutgroups/{rolloutGroupId}",
10
+ toolset: "featureToggles",
11
+ title: "Octopus feature toggle rollout group",
12
+ description: "Full rollout group body for a given rollout group ID in a project. Lists the feature toggles bound to the group via FeatureToggleUsages. Read-only — this MCP server does not expose rollout group create/modify/delete; use the Octopus UI for those.",
13
+ mimeType: "application/json",
14
+ read: async ({ spaceName, projectId, rolloutGroupId }) => {
15
+ validateEntityId(rolloutGroupId, "rollout group", "RolloutGroups-");
16
+ try {
17
+ const client = await Client.create(getClientConfigurationFromEnvironment());
18
+ const spaceId = await resolveSpaceId(client, spaceName);
19
+ const group = await client.get("~/api/{spaceId}/projects/{projectId}/featuretoggles/rollout-groups/{rolloutGroupId}", { spaceId, projectId, rolloutGroupId });
20
+ return {
21
+ mimeType: "application/json",
22
+ text: JSON.stringify(stripLinks(group)),
23
+ };
24
+ }
25
+ catch (error) {
26
+ handleOctopusApiError(error, {
27
+ entityType: "rollout group",
28
+ entityId: rolloutGroupId,
29
+ spaceName,
30
+ helpText: "Rollout group IDs surface as RolloutGroupId on toggles returned from find_feature_toggles. They are unique per project.",
31
+ });
32
+ }
33
+ },
34
+ });
35
+ //# sourceMappingURL=rolloutGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolloutGroup.js","sourceRoot":"","sources":["../../src/resources/rolloutGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAA6B,MAAM,gCAAgC,CAAC;AAE3E,0BAA0B,CAAC;IACzB,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,kFAAkF;IACpF,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EACT,wPAAwP;IAC1P,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE;QACvD,gBAAgB,CAAC,cAAc,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,qCAAqC,EAAE,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAC5B,qFAAqF,EACrF,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CACvC,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACxC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,EAAE;gBAC3B,UAAU,EAAE,eAAe;gBAC3B,QAAQ,EAAE,cAAc;gBACxB,SAAS;gBACT,QAAQ,EACN,yHAAyH;aAC5H,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runbook.d.ts","sourceRoot":"","sources":["../../src/resources/runbook.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { Client, resolveSpaceId, } from "@octopusdeploy/api-client";
2
+ import { registerResourceDescriptor } from "../types/resourceConfig.js";
3
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
4
+ import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES, } from "../helpers/errorHandling.js";
5
+ import { stripLinks } from "../helpers/stripLinks.js";
6
+ registerResourceDescriptor({
7
+ name: "runbook",
8
+ uriTemplate: "octopus://spaces/{spaceName}/runbooks/{runbookId}",
9
+ toolset: "runbooks",
10
+ title: "Octopus runbook",
11
+ description: "Full runbook object for a given runbook ID in a space. Body shape mirrors the find_runbooks tool output for a single runbook, plus runtime policy fields (ConnectivityPolicy, DefaultGuidedFailureMode, RunRetentionPolicy) that the slim summary omits.",
12
+ mimeType: "application/json",
13
+ read: async ({ spaceName, runbookId }) => {
14
+ validateEntityId(runbookId, "runbook", ENTITY_PREFIXES.runbook);
15
+ try {
16
+ const client = await Client.create(getClientConfigurationFromEnvironment());
17
+ const spaceId = await resolveSpaceId(client, spaceName);
18
+ const runbook = await client.get("~/api/{spaceId}/runbooks/{id}", { spaceId, id: runbookId });
19
+ return {
20
+ mimeType: "application/json",
21
+ text: JSON.stringify(stripLinks(runbook)),
22
+ };
23
+ }
24
+ catch (error) {
25
+ handleOctopusApiError(error, {
26
+ entityType: "runbook",
27
+ entityId: runbookId,
28
+ spaceName,
29
+ helpText: "Use find_runbooks to find valid runbook IDs.",
30
+ });
31
+ }
32
+ },
33
+ });
34
+ //# sourceMappingURL=runbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runbook.js","sourceRoot":"","sources":["../../src/resources/runbook.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,cAAc,GAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,0BAA0B,CAAC;IACzB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,mDAAmD;IAChE,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,iBAAiB;IACxB,WAAW,EACT,0PAA0P;IAC5P,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACvC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,qCAAqC,EAAE,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAC9B,+BAA+B,EAC/B,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAC3B,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,EAAE;gBAC3B,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,SAAS;gBACnB,SAAS;gBACT,QAAQ,EAAE,8CAA8C;aACzD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/resources/task.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { Client, SpaceServerTaskRepository } from "@octopusdeploy/api-client";
2
+ import { registerResourceDescriptor } from "../types/resourceConfig.js";
3
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
4
+ import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES, } from "../helpers/errorHandling.js";
5
+ import { stripLinks } from "../helpers/stripLinks.js";
6
+ const TASK_HELP_TEXT = "Use find_releases or list_deployments to find tasks via their parent entity, or get_deployment_from_url / get_task_from_url for URL-based lookups.";
7
+ registerResourceDescriptor({
8
+ name: "task",
9
+ uriTemplate: "octopus://spaces/{spaceName}/tasks/{taskId}",
10
+ toolset: "tasks",
11
+ title: "Octopus task summary",
12
+ description: "Lightweight task metadata: state, timing, completion flags, and arguments. Cheap to fetch — use this for polling or status checks. For step timings and embedded log entries use the /details URI; to search the raw activity log call the grep_task_log tool.",
13
+ mimeType: "application/json",
14
+ read: async ({ spaceName, taskId }) => {
15
+ validateEntityId(taskId, "task", ENTITY_PREFIXES.task);
16
+ try {
17
+ const client = await Client.create(getClientConfigurationFromEnvironment());
18
+ const task = await new SpaceServerTaskRepository(client, spaceName).getById(taskId);
19
+ return {
20
+ mimeType: "application/json",
21
+ text: JSON.stringify(stripLinks(task)),
22
+ };
23
+ }
24
+ catch (error) {
25
+ handleOctopusApiError(error, {
26
+ entityType: "task",
27
+ entityId: taskId,
28
+ spaceName,
29
+ helpText: TASK_HELP_TEXT,
30
+ });
31
+ }
32
+ },
33
+ });
34
+ registerResourceDescriptor({
35
+ name: "task-details",
36
+ uriTemplate: "octopus://spaces/{spaceName}/tasks/{taskId}/details",
37
+ toolset: "tasks",
38
+ title: "Octopus task details (structured activity tree)",
39
+ description: "Full ServerTaskDetails payload: the task summary plus Progress, PhysicalLogSize, and the hierarchical ActivityLogs tree (each step's children, status, and embedded log entries). Heavier than the /task summary — fetch when you need step-by-step timings or programmatic access to log entries.",
40
+ mimeType: "application/json",
41
+ read: async ({ spaceName, taskId }) => {
42
+ validateEntityId(taskId, "task", ENTITY_PREFIXES.task);
43
+ try {
44
+ const client = await Client.create(getClientConfigurationFromEnvironment());
45
+ const details = await new SpaceServerTaskRepository(client, spaceName).getDetails(taskId);
46
+ return {
47
+ mimeType: "application/json",
48
+ text: JSON.stringify(stripLinks(details)),
49
+ };
50
+ }
51
+ catch (error) {
52
+ handleOctopusApiError(error, {
53
+ entityType: "task",
54
+ entityId: taskId,
55
+ spaceName,
56
+ helpText: TASK_HELP_TEXT,
57
+ });
58
+ }
59
+ },
60
+ });
61
+ // NOTE: There is intentionally no `octopus://spaces/{spaceName}/tasks/{taskId}/log`
62
+ // resource. Activity logs can be multi-megabyte; exposing them as an addressable
63
+ // resource invites agents to fetch the whole body when they only need a few
64
+ // matching lines. Use the `grep_task_log` tool instead — its parameters mirror
65
+ // GNU grep and it returns only matching slices with totalMatches/context.
66
+ // For structured log entries with categories and timestamps, use the /details
67
+ // URI above (it embeds ActivityLogs[] inline).
68
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/resources/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,cAAc,GAClB,oJAAoJ,CAAC;AAEvJ,0BAA0B,CAAC;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6CAA6C;IAC1D,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,sBAAsB;IAC7B,WAAW,EACT,gQAAgQ;IAClQ,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,qCAAqC,EAAE,CACxC,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,yBAAyB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO,CACzE,MAAM,CACP,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACvC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,EAAE;gBAC3B,UAAU,EAAE,MAAM;gBAClB,QAAQ,EAAE,MAAM;gBAChB,SAAS;gBACT,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,0BAA0B,CAAC;IACzB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,qDAAqD;IAClE,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,iDAAiD;IACxD,WAAW,EACT,oSAAoS;IACtS,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,qCAAqC,EAAE,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,yBAAyB,CACjD,MAAM,EACN,SAAS,CACV,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAErB,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB,CAAC,KAAK,EAAE;gBAC3B,UAAU,EAAE,MAAM;gBAClB,QAAQ,EAAE,MAAM;gBAChB,SAAS;gBACT,QAAQ,EAAE,cAAc;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,oFAAoF;AACpF,iFAAiF;AACjF,4EAA4E;AAC5E,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,+CAA+C"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerCreateReleaseTool(server: McpServer): void;
3
+ //# sourceMappingURL=createRelease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRelease.d.ts","sourceRoot":"","sources":["../../src/tools/createRelease.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QA2K1D"}
@@ -0,0 +1,151 @@
1
+ import { Client, ReleaseRepository } from "@octopusdeploy/api-client";
2
+ import { z } from "zod";
3
+ import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
5
+ import { registerToolDefinition } from "../types/toolConfig.js";
6
+ import { ADDITIVE_WRITE_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
7
+ import { handleOctopusApiError } from "../helpers/errorHandling.js";
8
+ import { requireConfirmation, unconfirmedResponse, } from "../helpers/requireConfirmation.js";
9
+ export function registerCreateReleaseTool(server) {
10
+ server.registerTool("create_release", {
11
+ title: "Create a new release in Octopus Deploy",
12
+ description: `Create a new release for an Octopus Deploy project
13
+
14
+ This tool creates a new release for a project. The space name and project name are required. All other parameters are optional and will use Octopus defaults if not specified.`,
15
+ inputSchema: {
16
+ spaceName: z.string().describe("The space name"),
17
+ projectName: z.string().describe("The project name"),
18
+ releaseVersion: z
19
+ .string()
20
+ .optional()
21
+ .describe("The version for the release (e.g., '1.0.0'). If not specified, Octopus will auto-generate based on project settings."),
22
+ channelName: z
23
+ .string()
24
+ .optional()
25
+ .describe("The channel name (uses default channel if not specified)"),
26
+ packageVersion: z
27
+ .string()
28
+ .optional()
29
+ .describe("Default package version to use for all packages"),
30
+ packages: z
31
+ .array(z.string())
32
+ .optional()
33
+ .describe("Array of package specifications (format depends on Octopus configuration)"),
34
+ gitCommit: z.string().optional().describe("Git commit hash"),
35
+ gitRef: z.string().optional().describe("Git reference (branch or tag)"),
36
+ releaseNotes: z
37
+ .string()
38
+ .optional()
39
+ .describe("Release notes for this release"),
40
+ ignoreIfAlreadyExists: z
41
+ .boolean()
42
+ .optional()
43
+ .describe("If true, skip creation if release already exists (returns existing release)"),
44
+ ignoreChannelRules: z
45
+ .boolean()
46
+ .optional()
47
+ .describe("If true, ignore channel version rules"),
48
+ packagePrerelease: z
49
+ .string()
50
+ .optional()
51
+ .describe("Package prerelease tag"),
52
+ customFields: z
53
+ .record(z.string())
54
+ .optional()
55
+ .describe("Custom field values as key-value pairs"),
56
+ confirm: z
57
+ .boolean()
58
+ .optional()
59
+ .describe("Required only when the MCP client does not support elicitation. Set to true to confirm release creation; otherwise the tool aborts."),
60
+ },
61
+ annotations: ADDITIVE_WRITE_TOOL_ANNOTATIONS,
62
+ }, async ({ spaceName, projectName, releaseVersion, channelName, packageVersion, packages, gitCommit, gitRef, releaseNotes, ignoreIfAlreadyExists, ignoreChannelRules, packagePrerelease, customFields, confirm, }) => {
63
+ try {
64
+ const summary = [
65
+ `Create release for project ${projectName}`,
66
+ releaseVersion ? `version ${releaseVersion}` : null,
67
+ channelName ? `on channel ${channelName}` : null,
68
+ gitRef ? `from ${gitRef}` : null,
69
+ `in space ${spaceName}`,
70
+ ]
71
+ .filter(Boolean)
72
+ .join(" ");
73
+ const command = {
74
+ spaceName: spaceName,
75
+ ProjectName: projectName,
76
+ ...(releaseVersion && { ReleaseVersion: releaseVersion }),
77
+ ...(channelName && { ChannelName: channelName }),
78
+ ...(packageVersion && { PackageVersion: packageVersion }),
79
+ ...(packages && { Packages: packages }),
80
+ ...(gitCommit && { GitCommit: gitCommit }),
81
+ ...(gitRef && { GitRef: gitRef }),
82
+ ...(releaseNotes && { ReleaseNotes: releaseNotes }),
83
+ ...(ignoreIfAlreadyExists !== undefined && {
84
+ IgnoreIfAlreadyExists: ignoreIfAlreadyExists,
85
+ }),
86
+ ...(ignoreChannelRules !== undefined && {
87
+ IgnoreChannelRules: ignoreChannelRules,
88
+ }),
89
+ ...(packagePrerelease && { PackagePrerelease: packagePrerelease }),
90
+ ...(customFields && { CustomFields: customFields }),
91
+ };
92
+ const confirmation = await requireConfirmation(server, {
93
+ message: `${summary}?`,
94
+ fallbackConfirm: confirm,
95
+ change: { source: {}, target: command },
96
+ });
97
+ if (!confirmation.confirmed) {
98
+ return unconfirmedResponse(confirmation, {
99
+ action: "release creation",
100
+ });
101
+ }
102
+ const configuration = getClientConfigurationFromEnvironment();
103
+ const client = await Client.create(configuration);
104
+ const releaseRepository = new ReleaseRepository(client, spaceName);
105
+ const response = await releaseRepository.create(command);
106
+ let versionControlReference;
107
+ try {
108
+ const release = await releaseRepository.get(response.ReleaseId);
109
+ versionControlReference = release.VersionControlReference;
110
+ }
111
+ catch {
112
+ versionControlReference = undefined;
113
+ }
114
+ const encodedSpace = encodeURIComponent(spaceName);
115
+ const encodedId = encodeURIComponent(response.ReleaseId);
116
+ const resourceUri = `octopus://spaces/${encodedSpace}/releases/${encodedId}`;
117
+ return {
118
+ content: [
119
+ {
120
+ type: "text",
121
+ text: JSON.stringify({
122
+ success: true,
123
+ releaseId: response.ReleaseId,
124
+ releaseVersion: response.ReleaseVersion,
125
+ versionControlReference,
126
+ resourceUri,
127
+ message: `Release ${response.ReleaseVersion} created successfully`,
128
+ helpText: "Read resourceUri for the full release body (includes releaseNotes). Use deploy_release to deploy this release to environments.",
129
+ }, null, 2),
130
+ },
131
+ ],
132
+ };
133
+ }
134
+ catch (error) {
135
+ handleOctopusApiError(error, {
136
+ entityType: "release",
137
+ spaceName,
138
+ helpText: "Use list_projects to find valid project names. Ensure you have permissions to create releases and that the project exists.",
139
+ });
140
+ }
141
+ });
142
+ }
143
+ registerToolDefinition({
144
+ toolName: "create_release",
145
+ config: { toolset: "releases", readOnly: false },
146
+ registerFn: registerCreateReleaseTool,
147
+ // ReleaseRepository.create uses the Executions API (~/api/{space}/releases/create/v1)
148
+ // which the api-client refuses to call against servers older than 2022.3.5512.
149
+ minimumOctopusVersion: "2022.3.5512",
150
+ });
151
+ //# sourceMappingURL=createRelease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRelease.js","sourceRoot":"","sources":["../../src/tools/createRelease.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerDeployReleaseTool(server: McpServer): void;
3
+ //# sourceMappingURL=deployRelease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployRelease.d.ts","sourceRoot":"","sources":["../../src/tools/deployRelease.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QA4Q1D"}