@octopusdeploy/mcp-server 0.1.2

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 (167) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +210 -0
  3. package/dist/helpers/getClientConfigurationFromEnvironment.d.ts +7 -0
  4. package/dist/helpers/getClientConfigurationFromEnvironment.d.ts.map +1 -0
  5. package/dist/helpers/getClientConfigurationFromEnvironment.js +31 -0
  6. package/dist/helpers/getClientConfigurationFromEnvironment.js.map +1 -0
  7. package/dist/helpers/getPublicUrl.d.ts +2 -0
  8. package/dist/helpers/getPublicUrl.d.ts.map +1 -0
  9. package/dist/helpers/getPublicUrl.js +4 -0
  10. package/dist/helpers/getPublicUrl.js.map +1 -0
  11. package/dist/helpers/vcsProjectHelpers.d.ts +4 -0
  12. package/dist/helpers/vcsProjectHelpers.d.ts.map +1 -0
  13. package/dist/helpers/vcsProjectHelpers.js +21 -0
  14. package/dist/helpers/vcsProjectHelpers.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +74 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/resources/index.d.ts +3 -0
  20. package/dist/resources/index.d.ts.map +1 -0
  21. package/dist/resources/index.js +4 -0
  22. package/dist/resources/index.js.map +1 -0
  23. package/dist/resources/spacesResource.d.ts +3 -0
  24. package/dist/resources/spacesResource.d.ts.map +1 -0
  25. package/dist/resources/spacesResource.js +54 -0
  26. package/dist/resources/spacesResource.js.map +1 -0
  27. package/dist/tools/getBranches.d.ts +3 -0
  28. package/dist/tools/getBranches.d.ts.map +1 -0
  29. package/dist/tools/getBranches.js +55 -0
  30. package/dist/tools/getBranches.js.map +1 -0
  31. package/dist/tools/getCurrentUser.d.ts +3 -0
  32. package/dist/tools/getCurrentUser.d.ts.map +1 -0
  33. package/dist/tools/getCurrentUser.js +40 -0
  34. package/dist/tools/getCurrentUser.js.map +1 -0
  35. package/dist/tools/getDeploymentProcess.d.ts +3 -0
  36. package/dist/tools/getDeploymentProcess.d.ts.map +1 -0
  37. package/dist/tools/getDeploymentProcess.js +91 -0
  38. package/dist/tools/getDeploymentProcess.js.map +1 -0
  39. package/dist/tools/getDeploymentTarget.d.ts +3 -0
  40. package/dist/tools/getDeploymentTarget.d.ts.map +1 -0
  41. package/dist/tools/getDeploymentTarget.js +66 -0
  42. package/dist/tools/getDeploymentTarget.js.map +1 -0
  43. package/dist/tools/getKubernetesLiveStatus.d.ts +3 -0
  44. package/dist/tools/getKubernetesLiveStatus.d.ts.map +1 -0
  45. package/dist/tools/getKubernetesLiveStatus.js +64 -0
  46. package/dist/tools/getKubernetesLiveStatus.js.map +1 -0
  47. package/dist/tools/getLatestDeployment.d.ts +3 -0
  48. package/dist/tools/getLatestDeployment.d.ts.map +1 -0
  49. package/dist/tools/getLatestDeployment.js +85 -0
  50. package/dist/tools/getLatestDeployment.js.map +1 -0
  51. package/dist/tools/getMissingTenantVariables.d.ts +3 -0
  52. package/dist/tools/getMissingTenantVariables.d.ts.map +1 -0
  53. package/dist/tools/getMissingTenantVariables.js +47 -0
  54. package/dist/tools/getMissingTenantVariables.js.map +1 -0
  55. package/dist/tools/getReleaseById.d.ts +3 -0
  56. package/dist/tools/getReleaseById.d.ts.map +1 -0
  57. package/dist/tools/getReleaseById.js +45 -0
  58. package/dist/tools/getReleaseById.js.map +1 -0
  59. package/dist/tools/getTaskById.d.ts +9 -0
  60. package/dist/tools/getTaskById.d.ts.map +1 -0
  61. package/dist/tools/getTaskById.js +44 -0
  62. package/dist/tools/getTaskById.js.map +1 -0
  63. package/dist/tools/getTaskDetails.d.ts +9 -0
  64. package/dist/tools/getTaskDetails.d.ts.map +1 -0
  65. package/dist/tools/getTaskDetails.js +44 -0
  66. package/dist/tools/getTaskDetails.js.map +1 -0
  67. package/dist/tools/getTaskRaw.d.ts +9 -0
  68. package/dist/tools/getTaskRaw.d.ts.map +1 -0
  69. package/dist/tools/getTaskRaw.js +43 -0
  70. package/dist/tools/getTaskRaw.js.map +1 -0
  71. package/dist/tools/getTenantById.d.ts +3 -0
  72. package/dist/tools/getTenantById.d.ts.map +1 -0
  73. package/dist/tools/getTenantById.js +45 -0
  74. package/dist/tools/getTenantById.js.map +1 -0
  75. package/dist/tools/getTenantVariables.d.ts +3 -0
  76. package/dist/tools/getTenantVariables.d.ts.map +1 -0
  77. package/dist/tools/getTenantVariables.js +58 -0
  78. package/dist/tools/getTenantVariables.js.map +1 -0
  79. package/dist/tools/index.d.ts +24 -0
  80. package/dist/tools/index.d.ts.map +1 -0
  81. package/dist/tools/index.js +49 -0
  82. package/dist/tools/index.js.map +1 -0
  83. package/dist/tools/listDeploymentTargets.d.ts +3 -0
  84. package/dist/tools/listDeploymentTargets.d.ts.map +1 -0
  85. package/dist/tools/listDeploymentTargets.js +98 -0
  86. package/dist/tools/listDeploymentTargets.js.map +1 -0
  87. package/dist/tools/listDeployments.d.ts +3 -0
  88. package/dist/tools/listDeployments.d.ts.map +1 -0
  89. package/dist/tools/listDeployments.js +70 -0
  90. package/dist/tools/listDeployments.js.map +1 -0
  91. package/dist/tools/listEnvironments.d.ts +3 -0
  92. package/dist/tools/listEnvironments.d.ts.map +1 -0
  93. package/dist/tools/listEnvironments.js +42 -0
  94. package/dist/tools/listEnvironments.js.map +1 -0
  95. package/dist/tools/listProjects.d.ts +3 -0
  96. package/dist/tools/listProjects.d.ts.map +1 -0
  97. package/dist/tools/listProjects.js +44 -0
  98. package/dist/tools/listProjects.js.map +1 -0
  99. package/dist/tools/listReleases.d.ts +3 -0
  100. package/dist/tools/listReleases.d.ts.map +1 -0
  101. package/dist/tools/listReleases.js +54 -0
  102. package/dist/tools/listReleases.js.map +1 -0
  103. package/dist/tools/listReleasesForProject.d.ts +3 -0
  104. package/dist/tools/listReleasesForProject.d.ts.map +1 -0
  105. package/dist/tools/listReleasesForProject.js +60 -0
  106. package/dist/tools/listReleasesForProject.js.map +1 -0
  107. package/dist/tools/listSpaces.d.ts +3 -0
  108. package/dist/tools/listSpaces.d.ts.map +1 -0
  109. package/dist/tools/listSpaces.js +38 -0
  110. package/dist/tools/listSpaces.js.map +1 -0
  111. package/dist/tools/listTenants.d.ts +3 -0
  112. package/dist/tools/listTenants.d.ts.map +1 -0
  113. package/dist/tools/listTenants.js +64 -0
  114. package/dist/tools/listTenants.js.map +1 -0
  115. package/dist/types/baseResource.d.ts +14 -0
  116. package/dist/types/baseResource.d.ts.map +1 -0
  117. package/dist/types/baseResource.js +3 -0
  118. package/dist/types/baseResource.js.map +1 -0
  119. package/dist/types/deploymentProcessTypes.d.ts +33 -0
  120. package/dist/types/deploymentProcessTypes.d.ts.map +1 -0
  121. package/dist/types/deploymentProcessTypes.js +20 -0
  122. package/dist/types/deploymentProcessTypes.js.map +1 -0
  123. package/dist/types/deploymentTargetTypes.d.ts +74 -0
  124. package/dist/types/deploymentTargetTypes.d.ts.map +1 -0
  125. package/dist/types/deploymentTargetTypes.js +32 -0
  126. package/dist/types/deploymentTargetTypes.js.map +1 -0
  127. package/dist/types/gitBranchTypes.d.ts +11 -0
  128. package/dist/types/gitBranchTypes.d.ts.map +1 -0
  129. package/dist/types/gitBranchTypes.js +2 -0
  130. package/dist/types/gitBranchTypes.js.map +1 -0
  131. package/dist/types/projectTypes.d.ts +2 -0
  132. package/dist/types/projectTypes.d.ts.map +1 -0
  133. package/dist/types/projectTypes.js +2 -0
  134. package/dist/types/projectTypes.js.map +1 -0
  135. package/dist/types/resourceCollection.d.ts +9 -0
  136. package/dist/types/resourceCollection.d.ts.map +1 -0
  137. package/dist/types/resourceCollection.js +2 -0
  138. package/dist/types/resourceCollection.js.map +1 -0
  139. package/dist/types/spaceTypes.d.ts +2 -0
  140. package/dist/types/spaceTypes.d.ts.map +1 -0
  141. package/dist/types/spaceTypes.js +2 -0
  142. package/dist/types/spaceTypes.js.map +1 -0
  143. package/dist/types/taskTypes.d.ts +2 -0
  144. package/dist/types/taskTypes.d.ts.map +1 -0
  145. package/dist/types/taskTypes.js +2 -0
  146. package/dist/types/taskTypes.js.map +1 -0
  147. package/dist/types/tenantsTypes.d.ts +2 -0
  148. package/dist/types/tenantsTypes.d.ts.map +1 -0
  149. package/dist/types/tenantsTypes.js +2 -0
  150. package/dist/types/tenantsTypes.js.map +1 -0
  151. package/dist/types/toolConfig.d.ts +19 -0
  152. package/dist/types/toolConfig.d.ts.map +1 -0
  153. package/dist/types/toolConfig.js +17 -0
  154. package/dist/types/toolConfig.js.map +1 -0
  155. package/dist/utils/clientInfo.d.ts +20 -0
  156. package/dist/utils/clientInfo.d.ts.map +1 -0
  157. package/dist/utils/clientInfo.js +23 -0
  158. package/dist/utils/clientInfo.js.map +1 -0
  159. package/dist/utils/logger.d.ts +45 -0
  160. package/dist/utils/logger.d.ts.map +1 -0
  161. package/dist/utils/logger.js +130 -0
  162. package/dist/utils/logger.js.map +1 -0
  163. package/dist/utils/parseConfig.d.ts +4 -0
  164. package/dist/utils/parseConfig.d.ts.map +1 -0
  165. package/dist/utils/parseConfig.js +21 -0
  166. package/dist/utils/parseConfig.js.map +1 -0
  167. package/package.json +50 -0
@@ -0,0 +1,21 @@
1
+ import {} from "@octopusdeploy/api-client";
2
+ import {} from "../types/gitBranchTypes.js";
3
+ export async function getProjectBranches(client, spaceId, projectId, options) {
4
+ const queryParams = {};
5
+ if (options?.searchByName) {
6
+ queryParams.searchByName = options.searchByName;
7
+ }
8
+ if (options?.skip !== undefined) {
9
+ queryParams.skip = options.skip.toString();
10
+ }
11
+ if (options?.take !== undefined) {
12
+ queryParams.take = options.take.toString();
13
+ }
14
+ const result = await client.get("~/api/{spaceId}/projects/{projectId}/git/branches{?skip,take,searchByName}", {
15
+ spaceId,
16
+ projectId,
17
+ ...queryParams,
18
+ });
19
+ return result;
20
+ }
21
+ //# sourceMappingURL=vcsProjectHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcsProjectHelpers.js","sourceRoot":"","sources":["../../src/helpers/vcsProjectHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAkD,MAAM,4BAA4B,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,OAAe,EACf,SAAiB,EACjB,OAAmC;IAEnC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC7B,4EAA4E,EAC5E;QACE,OAAO;QACP,SAAS;QACT,GAAG,WAAW;KACf,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare const SEMVER_VERSION: string;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAcA,eAAO,MAAM,cAAc,QAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { registerTools } from "./tools/index.js";
5
+ import { Command } from "commander";
6
+ import dotenv from "dotenv";
7
+ import { createToolsetConfig } from "./utils/parseConfig.js";
8
+ import { DEFAULT_TOOLSETS } from "./types/toolConfig.js";
9
+ import { getClientConfigurationFromEnvironment } from "./helpers/getClientConfigurationFromEnvironment.js";
10
+ import { setClientInfo } from "./utils/clientInfo.js";
11
+ import { logger } from "./utils/logger.js";
12
+ import packageJson from "../package.json" with { type: "json" };
13
+ export const SEMVER_VERSION = packageJson.version;
14
+ dotenv.config({ quiet: true });
15
+ // Parse command line arguments
16
+ const program = new Command();
17
+ program
18
+ .name("octopus-mcp-server")
19
+ .description("Octopus Deploy MCP Server")
20
+ .version(SEMVER_VERSION)
21
+ .option("-s, --server-url <url>", "Octopus server URL")
22
+ .option("-k, --api-key <key>", "Octopus API key")
23
+ .option("--toolsets <toolsets>", `Comma-separated list of toolsets to enable, or "all" (default: all). Available toolsets: ${DEFAULT_TOOLSETS.join(", ")}`)
24
+ .option("--read-only", "Enable read-only mode (default: enabled)", true)
25
+ .option("--log-level <level>", "Minimum log level (info, error)", "info")
26
+ .option("--log-file <path>", "Log file path or filename (default: mcp-server-log.txt)")
27
+ .option("-q, --quiet", "Disable file logging, only log errors to console", false)
28
+ .parse();
29
+ const options = program.opts();
30
+ // Configure logger based on command line options
31
+ if (options.logFile) {
32
+ logger.setLogFilePath(options.logFile);
33
+ }
34
+ logger.setLogLevel(logger.parseLogLevel(options.logLevel));
35
+ logger.setQuietMode(options.quiet);
36
+ // Pass CLI options to tools registration
37
+ if (options.serverUrl) {
38
+ process.env.CLI_SERVER_URL = options.serverUrl;
39
+ }
40
+ if (options.apiKey) {
41
+ process.env.CLI_API_KEY = options.apiKey;
42
+ }
43
+ // Test configuration
44
+ getClientConfigurationFromEnvironment();
45
+ // Create toolset configuration
46
+ const toolsetConfig = createToolsetConfig(options.toolsets, options.readOnly);
47
+ const server = new McpServer({
48
+ name: "Octopus Deploy",
49
+ description: "Official Octopus Deploy MCP server.",
50
+ version: SEMVER_VERSION,
51
+ });
52
+ // Set up initialization callback to capture client info
53
+ server.server.oninitialized = () => {
54
+ const clientInfo = server.server.getClientVersion();
55
+ if (clientInfo) {
56
+ setClientInfo(clientInfo.name, clientInfo.version);
57
+ logger.info(`Client initialized: ${clientInfo.name} v${clientInfo.version}`);
58
+ }
59
+ else {
60
+ logger.info("Client initialized but no client info available");
61
+ }
62
+ };
63
+ registerTools(server, toolsetConfig);
64
+ logger.info(`Starting Octopus Deploy MCP server (version: ${SEMVER_VERSION})`);
65
+ // Start server
66
+ async function runServer() {
67
+ const transport = new StdioServerTransport();
68
+ await server.connect(transport);
69
+ }
70
+ runServer().catch((error) => {
71
+ logger.error(`Fatal error running server: ${error.message}\n${error.stack}`);
72
+ process.exit(1);
73
+ });
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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 registerResources(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,QAClD"}
@@ -0,0 +1,4 @@
1
+ import {} from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export function registerResources(server) {
3
+ }
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AAEzE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;AACnD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSpacesResource(server: McpServer): void;
3
+ //# sourceMappingURL=spacesResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacesResource.d.ts","sourceRoot":"","sources":["../../src/resources/spacesResource.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAIjD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QA0DvD"}
@@ -0,0 +1,54 @@
1
+ import { McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
3
+ import { Client, SpaceRepository } from "@octopusdeploy/api-client";
4
+ export function registerSpacesResource(server) {
5
+ const config = getClientConfigurationFromEnvironment();
6
+ const instanceURL = new URL(config.instanceURL);
7
+ server.resource("octopus_space", new ResourceTemplate(`octopus://${instanceURL.host}/spaces/{name}`, {
8
+ list: async () => {
9
+ const configuration = getClientConfigurationFromEnvironment();
10
+ const client = await Client.create(configuration);
11
+ const spaceRepository = new SpaceRepository(client);
12
+ const spacesResponse = await spaceRepository.list({});
13
+ return {
14
+ resources: spacesResponse.Items.map((space) => {
15
+ return {
16
+ uri: `octopus://${instanceURL.host}/spaces/${space.Name}`,
17
+ name: space.Name,
18
+ description: space.Description || "",
19
+ };
20
+ }),
21
+ };
22
+ },
23
+ complete: {
24
+ name: async (name) => {
25
+ const configuration = getClientConfigurationFromEnvironment();
26
+ const client = await Client.create(configuration);
27
+ const spaceRepository = new SpaceRepository(client);
28
+ const spaces = await spaceRepository.list({ partialName: name });
29
+ return spaces.Items.map((space) => space.Name);
30
+ },
31
+ },
32
+ }), {}, async (uri, { name }) => {
33
+ const configuration = getClientConfigurationFromEnvironment();
34
+ const client = await Client.create(configuration);
35
+ const spaceRepository = new SpaceRepository(client);
36
+ const partialName = Array.isArray(name) ? name[0] : name;
37
+ const decodedName = decodeURIComponent(partialName);
38
+ const spaces = await spaceRepository.list({ partialName: decodedName });
39
+ if (spaces.Items.length === 0) {
40
+ throw new Error(`Space with name '${partialName}' not found`);
41
+ }
42
+ const space = spaces.Items[0];
43
+ return {
44
+ contents: [
45
+ {
46
+ uri: uri.toString(),
47
+ text: JSON.stringify(space),
48
+ mimeType: "application/json",
49
+ },
50
+ ],
51
+ };
52
+ });
53
+ }
54
+ //# sourceMappingURL=spacesResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacesResource.js","sourceRoot":"","sources":["../../src/resources/spacesResource.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 registerGetBranchesTool(server: McpServer): void;
3
+ //# sourceMappingURL=getBranches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBranches.d.ts","sourceRoot":"","sources":["../../src/tools/getBranches.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAmDxD"}
@@ -0,0 +1,55 @@
1
+ import { Client, resolveSpaceId } from "@octopusdeploy/api-client";
2
+ import { z } from "zod";
3
+ import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { registerToolDefinition } from "../types/toolConfig.js";
5
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
6
+ import { getProjectBranches } from "../helpers/vcsProjectHelpers.js";
7
+ export function registerGetBranchesTool(server) {
8
+ server.tool("get_branches", `Get Git branches for a version-controlled project
9
+
10
+ This tool retrieves Git branches for a specific project in a space. The space name and project ID are required. Optionally provide searchByName, skip, and take parameters for filtering and pagination.`, {
11
+ spaceName: z.string(),
12
+ projectId: z.string(),
13
+ searchByName: z.string().optional(),
14
+ skip: z.number().optional(),
15
+ take: z.number().optional(),
16
+ }, {
17
+ title: "Get Git branches for a version-controlled project",
18
+ readOnlyHint: true,
19
+ }, async ({ spaceName, projectId, searchByName, skip, take }) => {
20
+ const configuration = getClientConfigurationFromEnvironment();
21
+ const client = await Client.create(configuration);
22
+ const spaceId = await resolveSpaceId(client, spaceName);
23
+ const options = {
24
+ searchByName,
25
+ skip,
26
+ take,
27
+ };
28
+ const branches = await getProjectBranches(client, spaceId, projectId, options);
29
+ return {
30
+ content: [
31
+ {
32
+ type: "text",
33
+ text: JSON.stringify({
34
+ Items: branches.Items.map(branch => ({
35
+ Name: branch.Name,
36
+ IsProtected: branch.IsProtected,
37
+ CanonicalName: branch.CanonicalName,
38
+ })),
39
+ TotalResults: branches.TotalResults,
40
+ ItemsPerPage: branches.ItemsPerPage,
41
+ NumberOfPages: branches.NumberOfPages,
42
+ LastPageNumber: branches.LastPageNumber,
43
+ ItemType: branches.ItemType,
44
+ }),
45
+ },
46
+ ],
47
+ };
48
+ });
49
+ }
50
+ registerToolDefinition({
51
+ toolName: "get_branches",
52
+ config: { toolset: "context", readOnly: true },
53
+ registerFn: registerGetBranchesTool
54
+ });
55
+ //# sourceMappingURL=getBranches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBranches.js","sourceRoot":"","sources":["../../src/tools/getBranches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,cAAc,EACd;;yMAEqM,EACrM;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,EACD;QACE,KAAK,EAAE,mDAAmD;QAC1D,YAAY,EAAE,IAAI;KACnB,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3D,MAAM,aAAa,GAAG,qCAAqC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG;YACd,YAAY;YACZ,IAAI;YACJ,IAAI;SACL,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;4BACnC,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;yBACpC,CAAC,CAAC;wBACH,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;wBACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;wBACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;qBAC5B,CAAC;iBACH;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,sBAAsB,CAAC;IACrB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9C,UAAU,EAAE,uBAAuB;CACpC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGetCurrentUserTool(server: McpServer): void;
3
+ //# sourceMappingURL=getCurrentUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCurrentUser.d.ts","sourceRoot":"","sources":["../../src/tools/getCurrentUser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAsC3D"}
@@ -0,0 +1,40 @@
1
+ import { Client } from "@octopusdeploy/api-client";
2
+ import {} from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { registerToolDefinition } from "../types/toolConfig.js";
4
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
5
+ export function registerGetCurrentUserTool(server) {
6
+ server.tool("get_current_user", `Get information about the current authenticated user
7
+
8
+ This tool retrieves information about the currently authenticated user from the Octopus Deploy API.`, {}, {
9
+ title: "Get current user information",
10
+ readOnlyHint: true,
11
+ }, async () => {
12
+ const configuration = getClientConfigurationFromEnvironment();
13
+ const client = await Client.create(configuration);
14
+ const user = await client.get("~/api/users/me");
15
+ const currentUser = {
16
+ id: user.Id,
17
+ username: user.Username,
18
+ displayName: user.DisplayName,
19
+ isActive: user.IsActive,
20
+ isService: user.IsService,
21
+ emailAddress: user.EmailAddress,
22
+ canPasswordBeEdited: user.CanPasswordBeEdited,
23
+ isRequestor: user.IsRequestor,
24
+ };
25
+ return {
26
+ content: [
27
+ {
28
+ type: "text",
29
+ text: JSON.stringify(currentUser),
30
+ },
31
+ ],
32
+ };
33
+ });
34
+ }
35
+ registerToolDefinition({
36
+ toolName: "get_current_user",
37
+ config: { toolset: "context", readOnly: true },
38
+ registerFn: registerGetCurrentUserTool
39
+ });
40
+ //# sourceMappingURL=getCurrentUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCurrentUser.js","sourceRoot":"","sources":["../../src/tools/getCurrentUser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAa5G,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB;;oGAEgG,EAChG,EAAE,EACF;QACE,KAAK,EAAE,8BAA8B;QACrC,YAAY,EAAE,IAAI;KACnB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,aAAa,GAAG,qCAAqC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAc,gBAAgB,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG;YAClB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;iBAClC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,sBAAsB,CAAC;IACrB,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9C,UAAU,EAAE,0BAA0B;CACvC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGetDeploymentProcessTool(server: McpServer): void;
3
+ //# sourceMappingURL=getDeploymentProcess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDeploymentProcess.d.ts","sourceRoot":"","sources":["../../src/tools/getDeploymentProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,QA6FjE"}
@@ -0,0 +1,91 @@
1
+ import { Client, resolveSpaceId, ProjectRepository } from "@octopusdeploy/api-client";
2
+ import { z } from "zod";
3
+ import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { registerToolDefinition } from "../types/toolConfig.js";
5
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
6
+ import {} from "../types/deploymentProcessTypes.js";
7
+ import { getProjectBranches } from "../helpers/vcsProjectHelpers.js";
8
+ 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
+ }, {
18
+ title: "Get deployment process details from Octopus Deploy",
19
+ readOnlyHint: true,
20
+ }, async ({ spaceName, processId, projectId, branchName, includeDetails = false }) => {
21
+ const configuration = getClientConfigurationFromEnvironment();
22
+ const client = await Client.create(configuration);
23
+ const spaceId = await resolveSpaceId(client, spaceName);
24
+ const projectRepository = projectId ? new ProjectRepository(client, spaceName) : null;
25
+ const project = projectRepository && projectId ? await projectRepository.get(projectId) : null;
26
+ if (!processId && !projectId) {
27
+ throw new Error("Either processId or projectId must be provided.");
28
+ }
29
+ if (project?.IsVersionControlled && !branchName) {
30
+ throw new Error("Branch name must be provided for version controlled projects.");
31
+ }
32
+ // If using branchName get the canonical ref first
33
+ const branches = branchName && projectId && await getProjectBranches(client, spaceId, projectId, { take: 1, searchByName: branchName });
34
+ const gitRef = branches && branches.Items.length > 0 ? branches.Items[0].CanonicalName : undefined;
35
+ const url = gitRef
36
+ ? `~/api/{spaceId}/projects/{projectId}/{gitRef}/deploymentprocesses`
37
+ : `~/api/{spaceId}/deploymentprocesses/{processId}`;
38
+ const response = await client.get(url, {
39
+ spaceId,
40
+ projectId,
41
+ processId,
42
+ gitRef
43
+ });
44
+ const deploymentProcess = {
45
+ spaceId: response.SpaceId,
46
+ id: response.Id,
47
+ projectId: response.ProjectId,
48
+ version: response.Version,
49
+ lastSnapshotId: response.LastSnapshotId,
50
+ steps: response.Steps.map((step) => {
51
+ const mappedStep = {
52
+ id: step.Id,
53
+ name: step.Name,
54
+ condition: step.Condition,
55
+ startTrigger: step.StartTrigger,
56
+ packageRequirement: step.PackageRequirement,
57
+ ...(includeDetails && { properties: step.Properties }),
58
+ actions: step.Actions.map((action) => {
59
+ if (includeDetails) {
60
+ return action;
61
+ }
62
+ else {
63
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
64
+ const { Properties, ...actionWithoutProperties } = action;
65
+ return actionWithoutProperties;
66
+ }
67
+ }),
68
+ };
69
+ return mappedStep;
70
+ }),
71
+ };
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: `Retrieved deployment process with ID '${deploymentProcess.id}' in space '${spaceName}'${branchName ? ` for branch '${branchName}'` : ""}.`,
77
+ },
78
+ {
79
+ type: "text",
80
+ text: JSON.stringify(deploymentProcess),
81
+ },
82
+ ],
83
+ };
84
+ });
85
+ }
86
+ registerToolDefinition({
87
+ toolName: "get_deployment_process",
88
+ config: { toolset: "projects", readOnly: true },
89
+ registerFn: registerGetDeploymentProcessTool
90
+ });
91
+ //# sourceMappingURL=getDeploymentProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDeploymentProcess.js","sourceRoot":"","sources":["../../src/tools/getDeploymentProcess.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 registerGetDeploymentTargetTool(server: McpServer): void;
3
+ //# sourceMappingURL=getDeploymentTarget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDeploymentTarget.d.ts","sourceRoot":"","sources":["../../src/tools/getDeploymentTarget.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,QAiEhE"}
@@ -0,0 +1,66 @@
1
+ import { Client, resolveSpaceId } from "@octopusdeploy/api-client";
2
+ import { z } from "zod";
3
+ import {} from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { registerToolDefinition } from "../types/toolConfig.js";
5
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
6
+ import {} from "../types/deploymentTargetTypes.js";
7
+ export function registerGetDeploymentTargetTool(server) {
8
+ server.tool("get_deployment_target", `Get a specific deployment target (machine) by ID
9
+
10
+ This tool retrieves detailed information about a specific deployment target using its ID. The space name and target ID are both required.`, {
11
+ spaceName: z.string(),
12
+ targetId: z.string(),
13
+ }, {
14
+ title: "Get a specific deployment target from an Octopus Deploy space",
15
+ readOnlyHint: true,
16
+ }, async ({ spaceName, targetId }) => {
17
+ const configuration = getClientConfigurationFromEnvironment();
18
+ const client = await Client.create(configuration);
19
+ const spaceId = await resolveSpaceId(client, spaceName);
20
+ const target = await client.get("~/api/{spaceId}/machines/{id}", {
21
+ spaceId,
22
+ id: targetId,
23
+ });
24
+ const deploymentTarget = {
25
+ spaceId: target.SpaceId,
26
+ id: target.Id,
27
+ name: target.Name,
28
+ slug: target.Slug,
29
+ isDisabled: target.IsDisabled,
30
+ healthStatus: target.HealthStatus,
31
+ statusSummary: target.StatusSummary,
32
+ environmentIds: target.EnvironmentIds,
33
+ roles: target.Roles,
34
+ tenantedDeploymentParticipation: target.TenantedDeploymentParticipation,
35
+ tenantIds: target.TenantIds,
36
+ tenantTags: target.TenantTags,
37
+ endpoint: {
38
+ id: target.Endpoint.Id,
39
+ communicationStyle: target.Endpoint.CommunicationStyle,
40
+ uri: target.Endpoint.Uri,
41
+ fingerprint: target.Endpoint.Fingerprint,
42
+ proxyId: target.Endpoint.ProxyId,
43
+ tentacleVersionDetails: target.Endpoint.TentacleVersionDetails,
44
+ },
45
+ shellName: target.ShellName,
46
+ machinePolicyId: target.MachinePolicyId,
47
+ hasLatestCalamari: target.HasLatestCalamari,
48
+ isInProcess: target.IsInProcess,
49
+ links: target.Links,
50
+ };
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: JSON.stringify(deploymentTarget),
56
+ },
57
+ ],
58
+ };
59
+ });
60
+ }
61
+ registerToolDefinition({
62
+ toolName: "get_deployment_target",
63
+ config: { toolset: "machines", readOnly: true },
64
+ registerFn: registerGetDeploymentTargetTool
65
+ });
66
+ //# sourceMappingURL=getDeploymentTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDeploymentTarget.js","sourceRoot":"","sources":["../../src/tools/getDeploymentTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAiC,MAAM,mCAAmC,CAAC;AAElF,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB;;0IAEsI,EACtI;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,EACD;QACE,KAAK,EAAE,+DAA+D;QACtE,YAAY,EAAE,IAAI;KACnB,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChC,MAAM,aAAa,GAAG,qCAAqC,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC7B,+BAA+B,EAC/B;YACE,OAAO;YACP,EAAE,EAAE,QAAQ;SACb,CACF,CAAC;QAEF,MAAM,gBAAgB,GAAG;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;YACvE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE;gBACR,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBACtB,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB;gBACtD,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;gBACxB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;gBACxC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAChC,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB;aAC/D;YACD,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,sBAAsB,CAAC;IACrB,QAAQ,EAAE,uBAAuB;IACjC,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC/C,UAAU,EAAE,+BAA+B;CAC5C,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGetKubernetesLiveStatusTool(server: McpServer): void;
3
+ //# sourceMappingURL=getKubernetesLiveStatus.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,64 @@
1
+ import { Client, ObservabilityRepository } 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
+ 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
+ }, {
16
+ title: "Get Kubernetes live status from Octopus Deploy",
17
+ readOnlyHint: true,
18
+ }, 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
+ };
57
+ });
58
+ }
59
+ registerToolDefinition({
60
+ toolName: "get_kubernetes_live_status",
61
+ config: { toolset: "kubernetes", readOnly: true },
62
+ registerFn: registerGetKubernetesLiveStatusTool
63
+ });
64
+ //# sourceMappingURL=getKubernetesLiveStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getKubernetesLiveStatus.js","sourceRoot":"","sources":["../../src/tools/getKubernetesLiveStatus.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 registerGetLatestDeploymentTool(server: McpServer): void;
3
+ //# sourceMappingURL=getLatestDeployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLatestDeployment.d.ts","sourceRoot":"","sources":["../../src/tools/getLatestDeployment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,QAqFhE"}