@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
@@ -1,41 +1,79 @@
1
- import { Client, resolveSpaceId, ProjectRepository } from "@octopusdeploy/api-client";
1
+ import { Client, resolveSpaceId, ProjectRepository, } from "@octopusdeploy/api-client";
2
2
  import { z } from "zod";
3
3
  import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
4
  import { registerToolDefinition } from "../types/toolConfig.js";
5
+ import { READ_ONLY_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
5
6
  import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
6
7
  import {} from "../types/deploymentProcessTypes.js";
7
8
  import { getProjectBranches } from "../helpers/vcsProjectHelpers.js";
8
9
  export function registerGetDeploymentProcessTool(server) {
9
- server.tool("get_deployment_process", `Get deployment process by ID
10
-
11
- This tool retrieves a deployment process by its ID. Each project has a deployment process attached, and releases/deployments can also have frozen processes attached.`, {
12
- spaceName: z.string(),
13
- projectId: z.string().optional().describe("The ID of the project to retrieve the deployment process for. If processId is not provided, this parameter is required."),
14
- processId: z.string().optional().describe("The ID of the deployment process to retrieve. If not provided, the deployment process for the project will be retrieved."),
15
- branchName: z.string().optional().describe("Optional branch name to get the deployment process for a specific branch (if using version controlled projects). Try `main` or `master` if unsure."),
16
- includeDetails: z.boolean().optional().default(false).describe("Include detailed properties for steps and actions. Defaults to false."),
17
- }, {
10
+ server.registerTool("get_deployment_process", {
18
11
  title: "Get deployment process details from Octopus Deploy",
19
- readOnlyHint: true,
20
- }, async ({ spaceName, processId, projectId, branchName, includeDetails = false }) => {
12
+ description: `Get deployment process by ID
13
+
14
+ This tool retrieves a deployment process by its ID. Each project has a deployment process attached, and releases/deployments can also have frozen processes attached.`,
15
+ inputSchema: {
16
+ spaceName: z.string(),
17
+ projectId: z
18
+ .string()
19
+ .optional()
20
+ .describe("The ID of the project to retrieve the deployment process for. If processId is not provided, this parameter is required."),
21
+ processId: z
22
+ .string()
23
+ .optional()
24
+ .describe("The ID of the deployment process to retrieve. If not provided, the deployment process for the project will be retrieved."),
25
+ branchName: z
26
+ .string()
27
+ .optional()
28
+ .describe("Optional branch name to get the deployment process for a specific branch (if using version controlled projects). Try `main` or `master` if unsure."),
29
+ includeDetails: z
30
+ .boolean()
31
+ .optional()
32
+ .default(false)
33
+ .describe("Include detailed properties for steps and actions. Defaults to false."),
34
+ },
35
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
36
+ }, async ({ spaceName, processId, projectId, branchName, includeDetails = false, }) => {
21
37
  if (!processId && !projectId) {
22
- throw new Error("Either processId or projectId must be provided.");
38
+ throw new Error("Either processId or projectId must be provided. " +
39
+ "Use list_projects to find project IDs (starting with 'Projects-') or " +
40
+ "use list_deployments to find process IDs (starting with 'DeploymentProcesses-').");
41
+ }
42
+ if (projectId && !projectId.startsWith("Projects-")) {
43
+ throw new Error(`Invalid project ID format '${projectId}'. Project IDs should start with 'Projects-' followed by numbers. ` +
44
+ "Use list_projects to find valid project IDs.");
45
+ }
46
+ if (processId && !processId.startsWith("DeploymentProcesses-")) {
47
+ throw new Error(`Invalid process ID format '${processId}'. Process IDs should start with 'DeploymentProcesses-' followed by numbers. ` +
48
+ "Use list_deployments to find valid process IDs.");
23
49
  }
24
50
  const configuration = getClientConfigurationFromEnvironment();
25
51
  const client = await Client.create(configuration);
26
52
  const spaceId = await resolveSpaceId(client, spaceName);
27
- const projectRepository = projectId ? new ProjectRepository(client, spaceName) : null;
28
- const project = projectRepository && projectId ? await projectRepository.get(projectId) : null;
53
+ const projectRepository = projectId
54
+ ? new ProjectRepository(client, spaceName)
55
+ : null;
56
+ const project = projectRepository && projectId
57
+ ? await projectRepository.get(projectId)
58
+ : null;
29
59
  // If we were not supplied a processId, we assume we are retrieving the process for the specified project.
30
60
  if (!processId) {
31
61
  processId = project?.DeploymentProcessId;
32
62
  }
33
63
  if (project?.IsVersionControlled && !branchName) {
34
- throw new Error("Branch name must be provided for version controlled projects.");
64
+ throw new Error(`Branch name required for version controlled project '${projectId}'. ` +
65
+ "Try 'main' or 'master', or use get_branches tool to list available branches.");
35
66
  }
36
67
  // If using branchName get the canonical ref first
37
- const branches = branchName && projectId && await getProjectBranches(client, spaceId, projectId, { take: 1, searchByName: branchName });
38
- const gitRef = branches && branches.Items.length > 0 ? branches.Items[0].CanonicalName : undefined;
68
+ const branches = branchName &&
69
+ projectId &&
70
+ (await getProjectBranches(client, spaceId, projectId, {
71
+ take: 1,
72
+ searchByName: branchName,
73
+ }));
74
+ const gitRef = branches && branches.Items.length > 0
75
+ ? branches.Items[0].CanonicalName
76
+ : undefined;
39
77
  const url = gitRef
40
78
  ? `~/api/{spaceId}/projects/{projectId}/{gitRef}/deploymentprocesses`
41
79
  : `~/api/{spaceId}/deploymentprocesses/{processId}`;
@@ -43,7 +81,7 @@ This tool retrieves a deployment process by its ID. Each project has a deploymen
43
81
  spaceId,
44
82
  projectId,
45
83
  processId,
46
- gitRef
84
+ gitRef,
47
85
  });
48
86
  const deploymentProcess = {
49
87
  spaceId: response.SpaceId,
@@ -1 +1 @@
1
- {"version":3,"file":"getDeploymentProcess.js","sourceRoot":"","sources":["../../src/tools/getDeploymentProcess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getDeploymentProcess.js","sourceRoot":"","sources":["../../src/tools/getDeploymentProcess.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getKubernetesLiveStatus.d.ts","sourceRoot":"","sources":["../../src/tools/getKubernetesLiveStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,QAiEpE"}
1
+ {"version":3,"file":"getKubernetesLiveStatus.d.ts","sourceRoot":"","sources":["../../src/tools/getKubernetesLiveStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,QAwFpE"}
@@ -3,57 +3,79 @@ import { z } from "zod";
3
3
  import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
4
  import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
5
5
  import { registerToolDefinition } from "../types/toolConfig.js";
6
+ import { READ_ONLY_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
7
+ import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES, isErrorWithMessage } from "../helpers/errorHandling.js";
6
8
  export function registerGetKubernetesLiveStatusTool(server) {
7
- server.tool("get_kubernetes_live_status", `Get Kubernetes live status for a project and environment
8
-
9
- This tool retrieves the live status of Kubernetes resources for a specific project and environment. Optionally include a tenant ID for multi-tenant deployments.`, {
10
- spaceName: z.string().describe("The space name"),
11
- projectId: z.string().describe("The ID of the project"),
12
- environmentId: z.string().describe("The ID of the environment"),
13
- tenantId: z.string().optional().describe("The ID of the tenant (for multi-tenant deployments)"),
14
- summaryOnly: z.boolean().optional().describe("Return summary information only")
15
- }, {
9
+ server.registerTool("get_kubernetes_live_status", {
16
10
  title: "Get Kubernetes live status from Octopus Deploy",
17
- readOnlyHint: true,
11
+ description: `Get Kubernetes live status for a project and environment
12
+
13
+ This tool retrieves the live status of Kubernetes resources for a specific project and environment. Optionally include a tenant ID for multi-tenant deployments.`,
14
+ inputSchema: {
15
+ spaceName: z.string().describe("The space name"),
16
+ projectId: z.string().describe("The ID of the project"),
17
+ environmentId: z.string().describe("The ID of the environment"),
18
+ tenantId: z.string().optional().describe("The ID of the tenant (for multi-tenant deployments)"),
19
+ summaryOnly: z.boolean().optional().describe("Return summary information only")
20
+ },
21
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
18
22
  }, async ({ spaceName, projectId, environmentId, tenantId, summaryOnly = false }) => {
19
- const configuration = getClientConfigurationFromEnvironment();
20
- const client = await Client.create(configuration);
21
- const observabilityRepository = new ObservabilityRepository(client, spaceName);
22
- const liveStatus = await observabilityRepository.getLiveStatus(projectId, environmentId, tenantId, summaryOnly);
23
- return {
24
- content: [
25
- {
26
- type: "text",
27
- text: JSON.stringify({
28
- projectId,
29
- environmentId,
30
- tenantId,
31
- summaryOnly: summaryOnly,
32
- liveStatus: {
33
- machineStatuses: liveStatus.MachineStatuses?.map((machine) => ({
34
- machineId: machine.MachineId,
35
- status: machine.Status,
36
- resources: machine.Resources?.map((resource) => ({
37
- name: resource.Name,
38
- namespace: resource.Namespace,
39
- kind: resource.Kind,
40
- healthStatus: resource.HealthStatus,
41
- syncStatus: resource.SyncStatus,
42
- machineId: resource.MachineId,
43
- children: resource.Children,
44
- desiredResourceId: resource.DesiredResourceId,
45
- resourceId: resource.ResourceId
46
- }))
47
- })),
48
- summary: liveStatus.Summary ? {
49
- status: liveStatus.Summary.Status,
50
- lastUpdated: liveStatus.Summary.LastUpdated
51
- } : undefined
52
- }
53
- }),
54
- },
55
- ],
56
- };
23
+ validateEntityId(projectId, 'project', ENTITY_PREFIXES.project);
24
+ validateEntityId(environmentId, 'environment', ENTITY_PREFIXES.environment);
25
+ if (tenantId) {
26
+ validateEntityId(tenantId, 'tenant', ENTITY_PREFIXES.tenant);
27
+ }
28
+ try {
29
+ const configuration = getClientConfigurationFromEnvironment();
30
+ const client = await Client.create(configuration);
31
+ const observabilityRepository = new ObservabilityRepository(client, spaceName);
32
+ const liveStatus = await observabilityRepository.getLiveStatus(projectId, environmentId, tenantId, summaryOnly);
33
+ if (!liveStatus || (!liveStatus.MachineStatuses && !liveStatus.Summary)) {
34
+ throw new Error(`No Kubernetes live status found for project '${projectId}' in environment '${environmentId}'${tenantId ? ` for tenant '${tenantId}'` : ''}. ` +
35
+ "This may indicate that the project is not deployed to Kubernetes in this environment, or the resources are not being monitored.");
36
+ }
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: JSON.stringify({
42
+ projectId,
43
+ environmentId,
44
+ tenantId,
45
+ summaryOnly: summaryOnly,
46
+ liveStatus: {
47
+ machineStatuses: liveStatus.MachineStatuses?.map((machine) => ({
48
+ machineId: machine.MachineId,
49
+ status: machine.Status,
50
+ resources: machine.Resources?.map((resource) => ({
51
+ name: resource.Name,
52
+ namespace: resource.Namespace,
53
+ kind: resource.Kind,
54
+ healthStatus: resource.HealthStatus,
55
+ syncStatus: resource.SyncStatus,
56
+ machineId: resource.MachineId,
57
+ children: resource.Children,
58
+ desiredResourceId: resource.DesiredResourceId,
59
+ resourceId: resource.ResourceId
60
+ }))
61
+ })),
62
+ summary: liveStatus.Summary ? {
63
+ status: liveStatus.Summary.Status,
64
+ lastUpdated: liveStatus.Summary.LastUpdated
65
+ } : undefined
66
+ }
67
+ }),
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ catch (error) {
73
+ if (isErrorWithMessage(error, 'minimum version')) {
74
+ throw new Error(`Kubernetes live status requires Octopus Deploy version 2025.3 or later. ` +
75
+ "This feature is not available in your Octopus Deploy instance version.");
76
+ }
77
+ handleOctopusApiError(error, { spaceName });
78
+ }
57
79
  });
58
80
  }
59
81
  registerToolDefinition({
@@ -1 +1 @@
1
- {"version":3,"file":"getKubernetesLiveStatus.js","sourceRoot":"","sources":["../../src/tools/getKubernetesLiveStatus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getKubernetesLiveStatus.js","sourceRoot":"","sources":["../../src/tools/getKubernetesLiveStatus.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getMissingTenantVariables.d.ts","sourceRoot":"","sources":["../../src/tools/getMissingTenantVariables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,SAAS,QA4CtE"}
1
+ {"version":3,"file":"getMissingTenantVariables.d.ts","sourceRoot":"","sources":["../../src/tools/getMissingTenantVariables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,SAAS,QA0EtE"}
@@ -3,40 +3,72 @@ import { z } from "zod";
3
3
  import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
4
  import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
5
5
  import { registerToolDefinition } from "../types/toolConfig.js";
6
+ import { READ_ONLY_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
7
+ import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES } from "../helpers/errorHandling.js";
6
8
  export function registerGetMissingTenantVariablesTool(server) {
7
- server.tool("get_missing_tenant_variables", `Get missing tenant variables
8
-
9
- This tool retrieves tenant variables that are missing values. Optionally filter by tenant, project, or environment.`, {
10
- spaceName: z.string().describe("The space name"),
11
- tenantId: z.string().optional().describe("Filter by specific tenant ID"),
12
- projectId: z.string().optional().describe("Filter by specific project ID"),
13
- environmentId: z.string().optional().describe("Filter by specific environment ID"),
14
- includeDetails: z.boolean().optional().describe("Include detailed information about missing variables")
15
- }, {
9
+ server.registerTool("get_missing_tenant_variables", {
16
10
  title: "Get missing tenant variables from Octopus Deploy",
17
- readOnlyHint: true,
11
+ description: `Get missing tenant variables
12
+
13
+ This tool retrieves tenant variables that are missing values. Optionally filter by tenant, project, or environment.`,
14
+ inputSchema: {
15
+ spaceName: z.string().describe("The space name"),
16
+ tenantId: z.string().optional().describe("Filter by specific tenant ID"),
17
+ projectId: z.string().optional().describe("Filter by specific project ID"),
18
+ environmentId: z.string().optional().describe("Filter by specific environment ID"),
19
+ includeDetails: z.boolean().optional().describe("Include detailed information about missing variables")
20
+ },
21
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
18
22
  }, async ({ spaceName, tenantId, projectId, environmentId, includeDetails = false }) => {
19
- const configuration = getClientConfigurationFromEnvironment();
20
- const client = await Client.create(configuration);
21
- const tenantRepository = new TenantRepository(client, spaceName);
23
+ if (tenantId) {
24
+ validateEntityId(tenantId, 'tenant', ENTITY_PREFIXES.tenant);
25
+ }
26
+ if (projectId) {
27
+ validateEntityId(projectId, 'project', ENTITY_PREFIXES.project);
28
+ }
29
+ if (environmentId) {
30
+ validateEntityId(environmentId, 'environment', ENTITY_PREFIXES.environment);
31
+ }
22
32
  const filterOptions = {
23
33
  tenantId,
24
34
  projectId,
25
35
  environmentId
26
36
  };
27
- const missingVariables = await tenantRepository.missingVariables(filterOptions, includeDetails);
28
- return {
29
- content: [
30
- {
31
- type: "text",
32
- text: JSON.stringify({
33
- filters: filterOptions,
34
- includeDetails,
35
- missingVariables
36
- }),
37
- },
38
- ],
39
- };
37
+ try {
38
+ const configuration = getClientConfigurationFromEnvironment();
39
+ const client = await Client.create(configuration);
40
+ const tenantRepository = new TenantRepository(client, spaceName);
41
+ const missingVariables = await tenantRepository.missingVariables(filterOptions, includeDetails);
42
+ if (!missingVariables || (Array.isArray(missingVariables) && missingVariables.length === 0)) {
43
+ const filterDescription = Object.entries(filterOptions)
44
+ .filter(([, value]) => value)
45
+ .map(([key, value]) => `${key}: ${value}`)
46
+ .join(', ') || 'no filters';
47
+ return {
48
+ content: [
49
+ {
50
+ type: "text",
51
+ text: `No missing tenant variables found with filters: ${filterDescription}. All required variables appear to be configured.`,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ return {
57
+ content: [
58
+ {
59
+ type: "text",
60
+ text: JSON.stringify({
61
+ filters: filterOptions,
62
+ includeDetails,
63
+ missingVariables
64
+ }),
65
+ },
66
+ ],
67
+ };
68
+ }
69
+ catch (error) {
70
+ handleOctopusApiError(error, { spaceName });
71
+ }
40
72
  });
41
73
  }
42
74
  registerToolDefinition({
@@ -1 +1 @@
1
- {"version":3,"file":"getMissingTenantVariables.js","sourceRoot":"","sources":["../../src/tools/getMissingTenantVariables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,UAAU,qCAAqC,CAAC,MAAiB;IACrE,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B;;sHAEkH,EAClH;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACxE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC1E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAClF,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;KACxG,EACD;QACE,KAAK,EAAE,kDAAkD;QACzD,YAAY,EAAE,IAAI;KACnB,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,GAAG,KAAK,EAAE,EAAE,EAAE;QAClF,MAAM,aAAa,GAAG,qCAAqC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEjE,MAAM,aAAa,GAAG;YACpB,QAAQ;YACR,SAAS;YACT,aAAa;SACd,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAEhG,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,aAAa;wBACtB,cAAc;wBACd,gBAAgB;qBACjB,CAAC;iBACH;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,sBAAsB,CAAC;IACrB,QAAQ,EAAE,8BAA8B;IACxC,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9C,UAAU,EAAE,qCAAqC;CAClD,CAAC,CAAC"}
1
+ {"version":3,"file":"getMissingTenantVariables.js","sourceRoot":"","sources":["../../src/tools/getMissingTenantVariables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Client } from '@octopusdeploy/api-client';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export interface GetTaskFromUrlParams {
4
+ url: string;
5
+ }
6
+ export declare function getTaskFromUrl(client: Client, params: GetTaskFromUrlParams): Promise<{
7
+ task: import("@octopusdeploy/api-client").ServerTaskDetails;
8
+ resolvedSpaceName: string;
9
+ resolvedTaskId: string;
10
+ urlInfo: {
11
+ originalUrl: string;
12
+ extractedSpaceId: string;
13
+ extractedTaskId: string;
14
+ resourceType: "project" | "tenant" | "deployment" | "release" | "task" | "unknown" | undefined;
15
+ };
16
+ }>;
17
+ export declare function registerGetTaskFromUrlTool(server: McpServer): void;
18
+ //# sourceMappingURL=getTaskFromUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTaskFromUrl.d.ts","sourceRoot":"","sources":["../../src/tools/getTaskFromUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA6B,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB;;;;;;;;;;GA0ChF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAiD3D"}
@@ -0,0 +1,90 @@
1
+ import { Client, SpaceServerTaskRepository } from '@octopusdeploy/api-client';
2
+ import { z } from 'zod';
3
+ import { getClientConfigurationFromEnvironment } from '../helpers/getClientConfigurationFromEnvironment.js';
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { registerToolDefinition } from '../types/toolConfig.js';
6
+ import { READ_ONLY_TOOL_ANNOTATIONS } from '../types/toolAnnotations.js';
7
+ import { tasksDescription } from '../types/taskTypes.js';
8
+ import { parseOctopusUrl, extractTaskId } from '../helpers/urlParser.js';
9
+ import { resolveSpaceNameFromId } from '../helpers/spaceResolver.js';
10
+ import { validateEntityId, ENTITY_PREFIXES } from '../helpers/errorHandling.js';
11
+ export async function getTaskFromUrl(client, params) {
12
+ const { url } = params;
13
+ if (!url) {
14
+ throw new Error("URL is required");
15
+ }
16
+ const urlParts = parseOctopusUrl(url);
17
+ if (!urlParts.spaceId) {
18
+ throw new Error("Could not extract space ID from URL. URL must contain a space identifier like 'Spaces-1234'");
19
+ }
20
+ const spaceName = await resolveSpaceNameFromId(client, urlParts.spaceId);
21
+ const taskId = extractTaskId(url);
22
+ if (!taskId) {
23
+ throw new Error(`Could not extract task ID from URL. ` +
24
+ `URL must contain a task identifier (ServerTasks-XXXXX). ` +
25
+ `If you have a deployment URL, use get_deployment_from_url first to resolve the task ID, ` +
26
+ `then fetch octopus://spaces/{spaceName}/tasks/{taskId}/details for the structured activity tree, or call grep_task_log to search the raw log.`);
27
+ }
28
+ validateEntityId(taskId, 'task', ENTITY_PREFIXES.task);
29
+ const serverTaskRepository = new SpaceServerTaskRepository(client, spaceName);
30
+ const response = await serverTaskRepository.getDetails(taskId);
31
+ return {
32
+ task: response,
33
+ resolvedSpaceName: spaceName,
34
+ resolvedTaskId: taskId,
35
+ urlInfo: {
36
+ originalUrl: url,
37
+ extractedSpaceId: urlParts.spaceId,
38
+ extractedTaskId: taskId,
39
+ resourceType: urlParts.resourceType,
40
+ }
41
+ };
42
+ }
43
+ export function registerGetTaskFromUrlTool(server) {
44
+ server.registerTool('get_task_from_url', {
45
+ title: 'Get task details from an Octopus Deploy URL',
46
+ description: `Get task details from an Octopus Deploy task URL. Returns full task details including execution logs and state.
47
+
48
+ Accepts task URLs like:
49
+ https://your-octopus.com/app#/Spaces-1/tasks/ServerTasks-456
50
+
51
+ Key features:
52
+ - Returns full task details including execution logs
53
+ - Handles space ID to space name resolution automatically
54
+ - Validates task ID format
55
+
56
+ For deployment URLs:
57
+ If you have a deployment URL, use this workflow:
58
+ 1. Call get_deployment_from_url with the deployment URL
59
+ 2. Use the returned taskResourceUri (structured tree) or call grep_task_log with the returned taskId to search the raw log
60
+
61
+ ${tasksDescription}`,
62
+ inputSchema: {
63
+ url: z.string()
64
+ .describe("Full Octopus Deploy task URL containing a task ID (e.g., https://your-octopus.com/app#/Spaces-1/tasks/ServerTasks-456)")
65
+ },
66
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
67
+ }, async (args) => {
68
+ const { url } = args;
69
+ if (!url) {
70
+ throw new Error("URL is required");
71
+ }
72
+ const configuration = getClientConfigurationFromEnvironment();
73
+ const client = await Client.create(configuration);
74
+ const result = await getTaskFromUrl(client, { url });
75
+ return {
76
+ content: [
77
+ {
78
+ type: "text",
79
+ text: JSON.stringify(result, null, 2),
80
+ },
81
+ ],
82
+ };
83
+ });
84
+ }
85
+ registerToolDefinition({
86
+ toolName: "get_task_from_url",
87
+ config: { toolset: "tasks", readOnly: true },
88
+ registerFn: registerGetTaskFromUrlTool,
89
+ });
90
+ //# sourceMappingURL=getTaskFromUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTaskFromUrl.js","sourceRoot":"","sources":["../../src/tools/getTaskFromUrl.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getTenantVariables.d.ts","sourceRoot":"","sources":["../../src/tools/getTenantVariables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,QAuD/D"}
1
+ {"version":3,"file":"getTenantVariables.d.ts","sourceRoot":"","sources":["../../src/tools/getTenantVariables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,QA4E/D"}