@octopusdeploy/mcp-server 1.1.0 → 2.1.1
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.
- package/README.md +202 -47
- package/dist/helpers/activeToolsetConfig.d.ts +4 -0
- package/dist/helpers/activeToolsetConfig.d.ts.map +1 -0
- package/dist/helpers/activeToolsetConfig.js +18 -0
- package/dist/helpers/activeToolsetConfig.js.map +1 -0
- package/dist/helpers/errorHandling.d.ts +3 -0
- package/dist/helpers/errorHandling.d.ts.map +1 -1
- package/dist/helpers/errorHandling.js +4 -1
- package/dist/helpers/errorHandling.js.map +1 -1
- package/dist/helpers/getClientConfigurationFromEnvironment.d.ts +2 -0
- package/dist/helpers/getClientConfigurationFromEnvironment.d.ts.map +1 -1
- package/dist/helpers/getClientConfigurationFromEnvironment.js +20 -4
- package/dist/helpers/getClientConfigurationFromEnvironment.js.map +1 -1
- package/dist/helpers/grepLines.d.ts +38 -0
- package/dist/helpers/grepLines.d.ts.map +1 -0
- package/dist/helpers/grepLines.js +65 -0
- package/dist/helpers/grepLines.js.map +1 -0
- package/dist/helpers/methodTier.d.ts +15 -0
- package/dist/helpers/methodTier.d.ts.map +1 -0
- package/dist/helpers/methodTier.js +25 -0
- package/dist/helpers/methodTier.js.map +1 -0
- package/dist/helpers/pathAllowlist.d.ts +27 -0
- package/dist/helpers/pathAllowlist.d.ts.map +1 -0
- package/dist/helpers/pathAllowlist.js +177 -0
- package/dist/helpers/pathAllowlist.js.map +1 -0
- package/dist/helpers/pathGlob.d.ts +15 -0
- package/dist/helpers/pathGlob.d.ts.map +1 -0
- package/dist/helpers/pathGlob.js +47 -0
- package/dist/helpers/pathGlob.js.map +1 -0
- package/dist/helpers/requireConfirmation.d.ts +119 -0
- package/dist/helpers/requireConfirmation.d.ts.map +1 -0
- package/dist/helpers/requireConfirmation.js +148 -0
- package/dist/helpers/requireConfirmation.js.map +1 -0
- package/dist/helpers/sensitivePathDenylist.d.ts +32 -0
- package/dist/helpers/sensitivePathDenylist.d.ts.map +1 -0
- package/dist/helpers/sensitivePathDenylist.js +49 -0
- package/dist/helpers/sensitivePathDenylist.js.map +1 -0
- package/dist/helpers/stripLinks.d.ts +15 -0
- package/dist/helpers/stripLinks.d.ts.map +1 -0
- package/dist/helpers/stripLinks.js +19 -0
- package/dist/helpers/stripLinks.js.map +1 -0
- package/dist/helpers/userCache.d.ts +14 -0
- package/dist/helpers/userCache.d.ts.map +1 -0
- package/dist/helpers/userCache.js +16 -0
- package/dist/helpers/userCache.js.map +1 -0
- package/dist/helpers/validateExecutePath.d.ts +29 -0
- package/dist/helpers/validateExecutePath.d.ts.map +1 -0
- package/dist/helpers/validateExecutePath.js +62 -0
- package/dist/helpers/validateExecutePath.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -9
- package/dist/index.js.map +1 -1
- package/dist/resources/catalog/capabilities.d.ts +36 -0
- package/dist/resources/catalog/capabilities.d.ts.map +1 -0
- package/dist/resources/catalog/capabilities.js +89 -0
- package/dist/resources/catalog/capabilities.js.map +1 -0
- package/dist/resources/catalog/llmsTxt.d.ts +8 -0
- package/dist/resources/catalog/llmsTxt.d.ts.map +1 -0
- package/dist/resources/catalog/llmsTxt.js +44 -0
- package/dist/resources/catalog/llmsTxt.js.map +1 -0
- package/dist/resources/dispatch.d.ts +30 -0
- package/dist/resources/dispatch.d.ts.map +1 -0
- package/dist/resources/dispatch.js +81 -0
- package/dist/resources/dispatch.js.map +1 -0
- package/dist/resources/featureToggle.d.ts +2 -0
- package/dist/resources/featureToggle.d.ts.map +1 -0
- package/dist/resources/featureToggle.js +34 -0
- package/dist/resources/featureToggle.js.map +1 -0
- package/dist/resources/index.d.ts +12 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +44 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/interruption.d.ts +2 -0
- package/dist/resources/interruption.d.ts.map +1 -0
- package/dist/resources/interruption.js +34 -0
- package/dist/resources/interruption.js.map +1 -0
- package/dist/resources/release.d.ts +2 -0
- package/dist/resources/release.d.ts.map +1 -0
- package/dist/resources/release.js +33 -0
- package/dist/resources/release.js.map +1 -0
- package/dist/resources/rolloutGroup.d.ts +2 -0
- package/dist/resources/rolloutGroup.d.ts.map +1 -0
- package/dist/resources/rolloutGroup.js +35 -0
- package/dist/resources/rolloutGroup.js.map +1 -0
- package/dist/resources/runbook.d.ts +2 -0
- package/dist/resources/runbook.d.ts.map +1 -0
- package/dist/resources/runbook.js +34 -0
- package/dist/resources/runbook.js.map +1 -0
- package/dist/resources/task.d.ts +2 -0
- package/dist/resources/task.d.ts.map +1 -0
- package/dist/resources/task.js +68 -0
- package/dist/resources/task.js.map +1 -0
- package/dist/tools/createRelease.d.ts.map +1 -1
- package/dist/tools/createRelease.js +93 -50
- package/dist/tools/createRelease.js.map +1 -1
- package/dist/tools/deployRelease.d.ts.map +1 -1
- package/dist/tools/deployRelease.js +117 -97
- package/dist/tools/deployRelease.js.map +1 -1
- package/dist/tools/execute.d.ts +3 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +262 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/findAccounts.d.ts.map +1 -1
- package/dist/tools/findAccounts.js +15 -12
- package/dist/tools/findAccounts.js.map +1 -1
- package/dist/tools/findCertificates.d.ts.map +1 -1
- package/dist/tools/findCertificates.js +19 -16
- package/dist/tools/findCertificates.js.map +1 -1
- package/dist/tools/findDeploymentTargets.d.ts.map +1 -1
- package/dist/tools/findDeploymentTargets.js +26 -23
- package/dist/tools/findDeploymentTargets.js.map +1 -1
- package/dist/tools/findFeatureToggles.d.ts +37 -0
- package/dist/tools/findFeatureToggles.d.ts.map +1 -0
- package/dist/tools/findFeatureToggles.js +139 -0
- package/dist/tools/findFeatureToggles.js.map +1 -0
- package/dist/tools/findInterruptions.d.ts +79 -0
- package/dist/tools/findInterruptions.d.ts.map +1 -0
- package/dist/tools/findInterruptions.js +273 -0
- package/dist/tools/findInterruptions.js.map +1 -0
- package/dist/tools/findReleases.d.ts.map +1 -1
- package/dist/tools/findReleases.js +90 -48
- package/dist/tools/findReleases.js.map +1 -1
- package/dist/tools/findRunbooks.d.ts +3 -0
- package/dist/tools/findRunbooks.d.ts.map +1 -0
- package/dist/tools/findRunbooks.js +139 -0
- package/dist/tools/findRunbooks.js.map +1 -0
- package/dist/tools/findTenants.d.ts.map +1 -1
- package/dist/tools/findTenants.js +28 -25
- package/dist/tools/findTenants.js.map +1 -1
- package/dist/tools/getBranches.d.ts.map +1 -1
- package/dist/tools/getBranches.js +13 -10
- package/dist/tools/getBranches.js.map +1 -1
- package/dist/tools/getCurrentUser.d.ts.map +1 -1
- package/dist/tools/getCurrentUser.js +7 -4
- package/dist/tools/getCurrentUser.js.map +1 -1
- package/dist/tools/getDeploymentFromUrl.d.ts +8 -3
- package/dist/tools/getDeploymentFromUrl.d.ts.map +1 -1
- package/dist/tools/getDeploymentFromUrl.js +46 -18
- package/dist/tools/getDeploymentFromUrl.js.map +1 -1
- package/dist/tools/getDeploymentProcess.d.ts.map +1 -1
- package/dist/tools/getDeploymentProcess.js +26 -23
- package/dist/tools/getDeploymentProcess.js.map +1 -1
- package/dist/tools/getKubernetesLiveStatus.d.ts.map +1 -1
- package/dist/tools/getKubernetesLiveStatus.js +13 -10
- package/dist/tools/getKubernetesLiveStatus.js.map +1 -1
- package/dist/tools/getMissingTenantVariables.d.ts.map +1 -1
- package/dist/tools/getMissingTenantVariables.js +13 -10
- package/dist/tools/getMissingTenantVariables.js.map +1 -1
- package/dist/tools/getTaskFromUrl.d.ts +2 -3
- package/dist/tools/getTaskFromUrl.d.ts.map +1 -1
- package/dist/tools/getTaskFromUrl.js +33 -33
- package/dist/tools/getTaskFromUrl.js.map +1 -1
- package/dist/tools/getTenantVariables.d.ts.map +1 -1
- package/dist/tools/getTenantVariables.js +13 -10
- package/dist/tools/getTenantVariables.js.map +1 -1
- package/dist/tools/getVariables.d.ts.map +1 -1
- package/dist/tools/getVariables.js +12 -9
- package/dist/tools/getVariables.js.map +1 -1
- package/dist/tools/grepLlmsTxt.d.ts +13 -0
- package/dist/tools/grepLlmsTxt.d.ts.map +1 -0
- package/dist/tools/grepLlmsTxt.js +105 -0
- package/dist/tools/grepLlmsTxt.js.map +1 -0
- package/dist/tools/grepTaskLog.d.ts +30 -0
- package/dist/tools/grepTaskLog.d.ts.map +1 -0
- package/dist/tools/grepTaskLog.js +116 -0
- package/dist/tools/grepTaskLog.js.map +1 -0
- package/dist/tools/index.d.ts +11 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +21 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/listDeployments.d.ts.map +1 -1
- package/dist/tools/listDeployments.js +22 -13
- package/dist/tools/listDeployments.js.map +1 -1
- package/dist/tools/listEnvironments.d.ts.map +1 -1
- package/dist/tools/listEnvironments.js +12 -9
- package/dist/tools/listEnvironments.js.map +1 -1
- package/dist/tools/listProjects.d.ts.map +1 -1
- package/dist/tools/listProjects.js +10 -7
- package/dist/tools/listProjects.js.map +1 -1
- package/dist/tools/listSpaces.d.ts.map +1 -1
- package/dist/tools/listSpaces.js +9 -6
- package/dist/tools/listSpaces.js.map +1 -1
- package/dist/tools/readResource.d.ts +3 -0
- package/dist/tools/readResource.d.ts.map +1 -0
- package/dist/tools/readResource.js +50 -0
- package/dist/tools/readResource.js.map +1 -0
- package/dist/tools/runRunbook.d.ts +3 -0
- package/dist/tools/runRunbook.d.ts.map +1 -0
- package/dist/tools/runRunbook.js +174 -0
- package/dist/tools/runRunbook.js.map +1 -0
- package/dist/tools/updateFeatureToggle.d.ts +94 -0
- package/dist/tools/updateFeatureToggle.d.ts.map +1 -0
- package/dist/tools/updateFeatureToggle.js +308 -0
- package/dist/tools/updateFeatureToggle.js.map +1 -0
- package/dist/types/featureToggleTypes.d.ts +47 -0
- package/dist/types/featureToggleTypes.d.ts.map +1 -0
- package/dist/types/featureToggleTypes.js +10 -0
- package/dist/types/featureToggleTypes.js.map +1 -0
- package/dist/types/resourceConfig.d.ts +17 -0
- package/dist/types/resourceConfig.d.ts.map +1 -0
- package/dist/types/resourceConfig.js +6 -0
- package/dist/types/resourceConfig.js.map +1 -0
- package/dist/types/toolAnnotations.d.ts +8 -0
- package/dist/types/toolAnnotations.d.ts.map +1 -0
- package/dist/types/toolAnnotations.js +28 -0
- package/dist/types/toolAnnotations.js.map +1 -0
- package/dist/types/toolConfig.d.ts +15 -1
- package/dist/types/toolConfig.d.ts.map +1 -1
- package/dist/types/toolConfig.js +4 -1
- package/dist/types/toolConfig.js.map +1 -1
- package/dist/utils/parseConfig.d.ts +1 -1
- package/dist/utils/parseConfig.d.ts.map +1 -1
- package/dist/utils/parseConfig.js +3 -2
- package/dist/utils/parseConfig.js.map +1 -1
- package/package.json +4 -4
- package/dist/tools/getTaskById.d.ts +0 -9
- package/dist/tools/getTaskById.d.ts.map +0 -1
- package/dist/tools/getTaskById.js +0 -51
- package/dist/tools/getTaskById.js.map +0 -1
- package/dist/tools/getTaskDetails.d.ts +0 -9
- package/dist/tools/getTaskDetails.d.ts.map +0 -1
- package/dist/tools/getTaskDetails.js +0 -65
- package/dist/tools/getTaskDetails.js.map +0 -1
- package/dist/tools/getTaskRaw.d.ts +0 -9
- package/dist/tools/getTaskRaw.d.ts.map +0 -1
- package/dist/tools/getTaskRaw.js +0 -50
- package/dist/tools/getTaskRaw.js.map +0 -1
- package/dist/tools/listReleasesForProject.d.ts +0 -3
- package/dist/tools/listReleasesForProject.d.ts.map +0 -1
- package/dist/tools/listReleasesForProject.js +0 -60
- package/dist/tools/listReleasesForProject.js.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type GrepMatch } from "../helpers/grepLines.js";
|
|
3
|
+
export interface GrepLlmsTxtResult {
|
|
4
|
+
pattern: string;
|
|
5
|
+
totalLines: number;
|
|
6
|
+
totalMatches: number;
|
|
7
|
+
returnedMatches: number;
|
|
8
|
+
truncated: boolean;
|
|
9
|
+
matches: GrepMatch[];
|
|
10
|
+
catalogResourceUri: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function registerGrepLlmsTxtTool(server: McpServer): void;
|
|
13
|
+
//# sourceMappingURL=grepLlmsTxt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepLlmsTxt.d.ts","sourceRoot":"","sources":["../../src/tools/grepLlmsTxt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAsDD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA0DxD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import {} from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { registerToolDefinition } from "../types/toolConfig.js";
|
|
4
|
+
import { READ_ONLY_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
|
|
5
|
+
import { grepLines, MAX_CONTEXT, MAX_COUNT_HARD_CAP, } from "../helpers/grepLines.js";
|
|
6
|
+
import { fetchLlmsTxt } from "../resources/catalog/llmsTxt.js";
|
|
7
|
+
const inputSchema = {
|
|
8
|
+
pattern: z
|
|
9
|
+
.string()
|
|
10
|
+
.min(1)
|
|
11
|
+
.describe("Regex (default) or literal substring (when fixedString=true). Tested against each line of llms.txt independently — same model as `grep`."),
|
|
12
|
+
caseInsensitive: z
|
|
13
|
+
.boolean()
|
|
14
|
+
.default(false)
|
|
15
|
+
.describe("Equivalent to grep -i. Default false."),
|
|
16
|
+
invertMatch: z
|
|
17
|
+
.boolean()
|
|
18
|
+
.default(false)
|
|
19
|
+
.describe("Equivalent to grep -v: return lines that do NOT match. Default false."),
|
|
20
|
+
fixedString: z
|
|
21
|
+
.boolean()
|
|
22
|
+
.default(false)
|
|
23
|
+
.describe("Equivalent to grep -F: treat pattern as a literal substring, not a regex. Use this when grepping for text containing regex metacharacters. Default false."),
|
|
24
|
+
beforeContext: z
|
|
25
|
+
.number()
|
|
26
|
+
.int()
|
|
27
|
+
.min(0)
|
|
28
|
+
.max(MAX_CONTEXT)
|
|
29
|
+
.default(0)
|
|
30
|
+
.describe(`Equivalent to grep -B: lines of preceding context to include with each match. Capped at ${MAX_CONTEXT}.`),
|
|
31
|
+
afterContext: z
|
|
32
|
+
.number()
|
|
33
|
+
.int()
|
|
34
|
+
.min(0)
|
|
35
|
+
.max(MAX_CONTEXT)
|
|
36
|
+
.default(0)
|
|
37
|
+
.describe(`Equivalent to grep -A: lines of trailing context to include with each match. Capped at ${MAX_CONTEXT}.`),
|
|
38
|
+
maxCount: z
|
|
39
|
+
.number()
|
|
40
|
+
.int()
|
|
41
|
+
.min(1)
|
|
42
|
+
.max(MAX_COUNT_HARD_CAP)
|
|
43
|
+
.default(100)
|
|
44
|
+
.describe(`Equivalent to grep -m: stop returning matches after this many. totalMatches in the response still reflects the true count across the whole file. Hard cap ${MAX_COUNT_HARD_CAP}.`),
|
|
45
|
+
};
|
|
46
|
+
export function registerGrepLlmsTxtTool(server) {
|
|
47
|
+
server.registerTool("grep_llms_txt", {
|
|
48
|
+
title: "Grep the Octopus API catalog (llms.txt)",
|
|
49
|
+
description: `Search the Octopus API catalog at octopus://api/llms.txt with grep-style semantics. The catalog is large (~300+ KB) — call this rather than reading the resource body directly.
|
|
50
|
+
|
|
51
|
+
llms.txt is structured as:
|
|
52
|
+
- Authentication and Space Selection sections (top of file)
|
|
53
|
+
- Endpoints section: one '### {Category}' heading per resource family (Accounts, ActionTemplates, Channels, Releases, …) and one bullet per endpoint of the form
|
|
54
|
+
\`- \\\`METHOD /path\\\` - description | Prefixes (pick one): /{spaceId}, /spaces/{spaceIdentifier} | ?queryParams → ReturnType\`
|
|
55
|
+
- Steps section: deployment step types (Octopus.* ActionType) and their configurable property keys.
|
|
56
|
+
|
|
57
|
+
Useful patterns:
|
|
58
|
+
- 'POST /releases' — find write endpoints under a resource family
|
|
59
|
+
- 'DELETE ' — enumerate delete endpoints
|
|
60
|
+
- '### Channels' — jump to a section heading
|
|
61
|
+
- 'Body: Create.*Command' — find endpoints that take a Create command body
|
|
62
|
+
|
|
63
|
+
Parameter conventions mirror GNU grep:
|
|
64
|
+
- pattern (regex by default; set fixedString:true for literal text)
|
|
65
|
+
- caseInsensitive (-i)
|
|
66
|
+
- invertMatch (-v)
|
|
67
|
+
- fixedString (-F)
|
|
68
|
+
- beforeContext (-B)
|
|
69
|
+
- afterContext (-A)
|
|
70
|
+
- maxCount (-m)
|
|
71
|
+
|
|
72
|
+
Response: totalMatches (true count across the whole file), totalLines, the matched lines with 1-indexed lineNumber, optional before/after context arrays, and catalogResourceUri for the structured fall-through.`,
|
|
73
|
+
inputSchema,
|
|
74
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
75
|
+
}, async (args) => {
|
|
76
|
+
const params = args;
|
|
77
|
+
const body = await fetchLlmsTxt();
|
|
78
|
+
const { totalLines, totalMatches, matches } = grepLines(body, params);
|
|
79
|
+
const result = {
|
|
80
|
+
pattern: params.pattern,
|
|
81
|
+
totalLines,
|
|
82
|
+
totalMatches,
|
|
83
|
+
returnedMatches: matches.length,
|
|
84
|
+
truncated: totalMatches > matches.length,
|
|
85
|
+
matches,
|
|
86
|
+
catalogResourceUri: "octopus://api/llms.txt",
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
content: [
|
|
90
|
+
{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: JSON.stringify(result),
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
registerToolDefinition({
|
|
99
|
+
toolName: "grep_llms_txt",
|
|
100
|
+
config: { toolset: "core", readOnly: true },
|
|
101
|
+
registerFn: registerGrepLlmsTxtTool,
|
|
102
|
+
// The /api/experimental/llms.txt endpoint shipped in Octopus 2026.2.3916.
|
|
103
|
+
minimumOctopusVersion: "2026.2.3916",
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=grepLlmsTxt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepLlmsTxt.js","sourceRoot":"","sources":["../../src/tools/grepLlmsTxt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type GrepMatch } from "../helpers/grepLines.js";
|
|
3
|
+
export interface GrepTaskLogParams {
|
|
4
|
+
spaceName: string;
|
|
5
|
+
taskId: string;
|
|
6
|
+
pattern: string;
|
|
7
|
+
caseInsensitive?: boolean;
|
|
8
|
+
invertMatch?: boolean;
|
|
9
|
+
fixedString?: boolean;
|
|
10
|
+
beforeContext?: number;
|
|
11
|
+
afterContext?: number;
|
|
12
|
+
maxCount?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface GrepTaskLogResult {
|
|
15
|
+
spaceName: string;
|
|
16
|
+
taskId: string;
|
|
17
|
+
pattern: string;
|
|
18
|
+
totalLines: number;
|
|
19
|
+
totalMatches: number;
|
|
20
|
+
returnedMatches: number;
|
|
21
|
+
truncated: boolean;
|
|
22
|
+
matches: GrepMatch[];
|
|
23
|
+
/**
|
|
24
|
+
* URI for the structured ActivityLogs tree if the agent needs more than
|
|
25
|
+
* grep can express (e.g. step hierarchy, category filtering, timing).
|
|
26
|
+
*/
|
|
27
|
+
taskDetailsResourceUri: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function registerGrepTaskLogTool(server: McpServer): void;
|
|
30
|
+
//# sourceMappingURL=grepTaskLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepTaskLog.d.ts","sourceRoot":"","sources":["../../src/tools/grepTaskLog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB;;;OAGG;IACH,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAkDD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAsExD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { Client, SpaceServerTaskRepository } 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 { READ_ONLY_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
|
|
6
|
+
import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
|
|
7
|
+
import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES, } from "../helpers/errorHandling.js";
|
|
8
|
+
import { grepLines, MAX_CONTEXT, MAX_COUNT_HARD_CAP, } from "../helpers/grepLines.js";
|
|
9
|
+
const inputSchema = {
|
|
10
|
+
spaceName: z
|
|
11
|
+
.string()
|
|
12
|
+
.describe("Octopus space name. Case-sensitive."),
|
|
13
|
+
taskId: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe("ServerTasks-XXXX ID. Use find_releases or list_deployments to discover task IDs from their parent entities."),
|
|
16
|
+
pattern: z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1)
|
|
19
|
+
.describe("Regex (default) or literal substring (when fixedString=true). Anchors and groups behave as in JavaScript RegExp. Tested against each log line independently — the same model as `grep`."),
|
|
20
|
+
caseInsensitive: z
|
|
21
|
+
.boolean()
|
|
22
|
+
.default(false)
|
|
23
|
+
.describe("Equivalent to grep -i. Default false."),
|
|
24
|
+
invertMatch: z
|
|
25
|
+
.boolean()
|
|
26
|
+
.default(false)
|
|
27
|
+
.describe("Equivalent to grep -v: return lines that do NOT match. Default false."),
|
|
28
|
+
fixedString: z
|
|
29
|
+
.boolean()
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe("Equivalent to grep -F: treat pattern as a literal substring, not a regex. Use this when grepping for text containing regex metacharacters. Default false."),
|
|
32
|
+
beforeContext: z
|
|
33
|
+
.number()
|
|
34
|
+
.int()
|
|
35
|
+
.min(0)
|
|
36
|
+
.max(MAX_CONTEXT)
|
|
37
|
+
.default(0)
|
|
38
|
+
.describe(`Equivalent to grep -B: lines of preceding context to include with each match. Capped at ${MAX_CONTEXT}.`),
|
|
39
|
+
afterContext: z
|
|
40
|
+
.number()
|
|
41
|
+
.int()
|
|
42
|
+
.min(0)
|
|
43
|
+
.max(MAX_CONTEXT)
|
|
44
|
+
.default(0)
|
|
45
|
+
.describe(`Equivalent to grep -A: lines of trailing context to include with each match. Capped at ${MAX_CONTEXT}.`),
|
|
46
|
+
maxCount: z
|
|
47
|
+
.number()
|
|
48
|
+
.int()
|
|
49
|
+
.min(1)
|
|
50
|
+
.max(MAX_COUNT_HARD_CAP)
|
|
51
|
+
.default(100)
|
|
52
|
+
.describe(`Equivalent to grep -m: stop returning matches after this many. totalMatches in the response still reflects the true count across the whole log. Hard cap ${MAX_COUNT_HARD_CAP}.`),
|
|
53
|
+
};
|
|
54
|
+
export function registerGrepTaskLogTool(server) {
|
|
55
|
+
server.registerTool("grep_task_log", {
|
|
56
|
+
title: "Grep an Octopus task activity log",
|
|
57
|
+
description: `Search a server task's activity log with grep-style semantics. Returns only matching lines (with optional symmetric context windows). This is the canonical way to inspect task logs — there is no full-log resource URI, because exposing one would tempt callers to inhale multi-megabyte bodies when grep is almost always the better primitive.
|
|
58
|
+
|
|
59
|
+
Use this when you know what to look for (a specific error string, a step name, a pattern). For structured access to the activity tree (step hierarchy, categories, timing) use the octopus://spaces/{spaceName}/tasks/{taskId}/details resource instead.
|
|
60
|
+
|
|
61
|
+
Parameter conventions mirror GNU grep so the schema is self-explanatory:
|
|
62
|
+
- pattern (regex by default; set fixedString:true for literal text)
|
|
63
|
+
- caseInsensitive (-i)
|
|
64
|
+
- invertMatch (-v)
|
|
65
|
+
- fixedString (-F)
|
|
66
|
+
- beforeContext (-B)
|
|
67
|
+
- afterContext (-A)
|
|
68
|
+
- maxCount (-m)
|
|
69
|
+
|
|
70
|
+
Response includes totalMatches (true count across the whole log), totalLines, the matched lines with 1-indexed lineNumber, optional before/after context arrays, and a taskDetailsResourceUri for the structured fall-through.`,
|
|
71
|
+
inputSchema,
|
|
72
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
73
|
+
}, async (args) => {
|
|
74
|
+
const params = args;
|
|
75
|
+
const { spaceName, taskId } = params;
|
|
76
|
+
validateEntityId(taskId, "task", ENTITY_PREFIXES.task);
|
|
77
|
+
try {
|
|
78
|
+
const client = await Client.create(getClientConfigurationFromEnvironment());
|
|
79
|
+
const rawLog = await new SpaceServerTaskRepository(client, spaceName).getRaw(taskId);
|
|
80
|
+
const { totalLines, totalMatches, matches } = grepLines(rawLog, params);
|
|
81
|
+
const result = {
|
|
82
|
+
spaceName,
|
|
83
|
+
taskId,
|
|
84
|
+
pattern: params.pattern,
|
|
85
|
+
totalLines,
|
|
86
|
+
totalMatches,
|
|
87
|
+
returnedMatches: matches.length,
|
|
88
|
+
truncated: totalMatches > matches.length,
|
|
89
|
+
matches,
|
|
90
|
+
taskDetailsResourceUri: `octopus://spaces/${encodeURIComponent(spaceName)}/tasks/${encodeURIComponent(taskId)}/details`,
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: "text",
|
|
96
|
+
text: JSON.stringify(result),
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
handleOctopusApiError(error, {
|
|
103
|
+
entityType: "task",
|
|
104
|
+
entityId: taskId,
|
|
105
|
+
spaceName,
|
|
106
|
+
helpText: "Use find_releases or list_deployments to discover task IDs via their parent entity. Use get_task_from_url to resolve a task ID from an Octopus portal URL.",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
registerToolDefinition({
|
|
112
|
+
toolName: "grep_task_log",
|
|
113
|
+
config: { toolset: "tasks", readOnly: true },
|
|
114
|
+
registerFn: registerGrepTaskLogTool,
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=grepTaskLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepTaskLog.js","sourceRoot":"","sources":["../../src/tools/grepTaskLog.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import { type ToolsetConfig } from "../types/toolConfig.js";
|
|
2
|
+
import { type ToolsetConfig, type ToolRegistration } from "../types/toolConfig.js";
|
|
3
3
|
import "./listSpaces.js";
|
|
4
4
|
import "./listProjects.js";
|
|
5
5
|
import "./listEnvironments.js";
|
|
6
6
|
import "./listDeployments.js";
|
|
7
|
-
import "./listReleasesForProject.js";
|
|
8
|
-
import "./getTaskById.js";
|
|
9
|
-
import "./getTaskDetails.js";
|
|
10
|
-
import "./getTaskRaw.js";
|
|
11
7
|
import "./getTenantVariables.js";
|
|
12
8
|
import "./getMissingTenantVariables.js";
|
|
13
9
|
import "./getKubernetesLiveStatus.js";
|
|
@@ -18,11 +14,21 @@ import "./getVariables.js";
|
|
|
18
14
|
import "./getTaskFromUrl.js";
|
|
19
15
|
import "./getDeploymentFromUrl.js";
|
|
20
16
|
import "./findReleases.js";
|
|
17
|
+
import "./findRunbooks.js";
|
|
21
18
|
import "./findTenants.js";
|
|
22
19
|
import "./findDeploymentTargets.js";
|
|
23
20
|
import "./findCertificates.js";
|
|
24
21
|
import "./findAccounts.js";
|
|
22
|
+
import "./findInterruptions.js";
|
|
23
|
+
import "./findFeatureToggles.js";
|
|
24
|
+
import "./updateFeatureToggle.js";
|
|
25
25
|
import "./createRelease.js";
|
|
26
26
|
import "./deployRelease.js";
|
|
27
|
+
import "./runRunbook.js";
|
|
28
|
+
import "./grepTaskLog.js";
|
|
29
|
+
import "./grepLlmsTxt.js";
|
|
30
|
+
import "./execute.js";
|
|
31
|
+
import "./readResource.js";
|
|
32
|
+
export declare function isToolEnabled(toolRegistration: ToolRegistration, config: ToolsetConfig): boolean;
|
|
27
33
|
export declare function registerTools(server: McpServer, config?: ToolsetConfig): void;
|
|
28
34
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EACL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EACL,KAAK,aAAa,EAGlB,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,iBAAiB,CAAC;AACzB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AACjC,OAAO,gCAAgC,CAAC;AACxC,OAAO,8BAA8B,CAAC;AACtC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,2BAA2B,CAAC;AAGnC,OAAO,mBAAmB,CAAC;AAC3B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,wBAAwB,CAAC;AAGhC,OAAO,yBAAyB,CAAC;AACjC,OAAO,0BAA0B,CAAC;AAGlC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,iBAAiB,CAAC;AAGzB,OAAO,kBAAkB,CAAC;AAG1B,OAAO,kBAAkB,CAAC;AAG1B,OAAO,cAAc,CAAC;AAGtB,OAAO,mBAAmB,CAAC;AAC3B,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,aAAa,GACpB,OAAO,CA8BT;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,aAAkB,QAO1E"}
|
package/dist/tools/index.js
CHANGED
|
@@ -5,10 +5,6 @@ import "./listSpaces.js";
|
|
|
5
5
|
import "./listProjects.js";
|
|
6
6
|
import "./listEnvironments.js";
|
|
7
7
|
import "./listDeployments.js";
|
|
8
|
-
import "./listReleasesForProject.js";
|
|
9
|
-
import "./getTaskById.js";
|
|
10
|
-
import "./getTaskDetails.js";
|
|
11
|
-
import "./getTaskRaw.js";
|
|
12
8
|
import "./getTenantVariables.js";
|
|
13
9
|
import "./getMissingTenantVariables.js";
|
|
14
10
|
import "./getKubernetesLiveStatus.js";
|
|
@@ -20,14 +16,28 @@ import "./getTaskFromUrl.js";
|
|
|
20
16
|
import "./getDeploymentFromUrl.js";
|
|
21
17
|
// Unified Find endpoints (replacing separate list/get pairs)
|
|
22
18
|
import "./findReleases.js";
|
|
19
|
+
import "./findRunbooks.js";
|
|
23
20
|
import "./findTenants.js";
|
|
24
21
|
import "./findDeploymentTargets.js";
|
|
25
22
|
import "./findCertificates.js";
|
|
26
23
|
import "./findAccounts.js";
|
|
24
|
+
import "./findInterruptions.js";
|
|
25
|
+
// Feature toggles
|
|
26
|
+
import "./findFeatureToggles.js";
|
|
27
|
+
import "./updateFeatureToggle.js";
|
|
27
28
|
// Write operations
|
|
28
29
|
import "./createRelease.js";
|
|
29
30
|
import "./deployRelease.js";
|
|
30
|
-
|
|
31
|
+
import "./runRunbook.js";
|
|
32
|
+
// Task log search
|
|
33
|
+
import "./grepTaskLog.js";
|
|
34
|
+
// API catalog search (llms.txt)
|
|
35
|
+
import "./grepLlmsTxt.js";
|
|
36
|
+
// REST backstop with hard read/write/delete gating
|
|
37
|
+
import "./execute.js";
|
|
38
|
+
// Resource backstop for clients without native MCP resource support
|
|
39
|
+
import "./readResource.js";
|
|
40
|
+
export function isToolEnabled(toolRegistration, config) {
|
|
31
41
|
if (!toolRegistration) {
|
|
32
42
|
return false;
|
|
33
43
|
}
|
|
@@ -39,8 +49,12 @@ function isToolEnabled(toolRegistration, config) {
|
|
|
39
49
|
!enabledToolsets.includes(toolRegistration.config.toolset)) {
|
|
40
50
|
return false;
|
|
41
51
|
}
|
|
42
|
-
// Check read-only mode
|
|
43
|
-
|
|
52
|
+
// Check read-only mode. Method-gated tools (e.g. `execute`) bypass this
|
|
53
|
+
// filter because they classify themselves at runtime — they stay registered
|
|
54
|
+
// even in read-only mode, where the handler will refuse non-read calls.
|
|
55
|
+
if (config.readOnlyMode &&
|
|
56
|
+
!toolRegistration.config.readOnly &&
|
|
57
|
+
!toolRegistration.config.methodGated) {
|
|
44
58
|
return false;
|
|
45
59
|
}
|
|
46
60
|
return true;
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAEL,aAAa,EACb,gBAAgB,GAEjB,MAAM,wBAAwB,CAAC;AAEhC,2DAA2D;AAC3D,OAAO,iBAAiB,CAAC;AACzB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAEL,aAAa,EACb,gBAAgB,GAEjB,MAAM,wBAAwB,CAAC;AAEhC,2DAA2D;AAC3D,OAAO,iBAAiB,CAAC;AACzB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AACjC,OAAO,gCAAgC,CAAC;AACxC,OAAO,8BAA8B,CAAC;AACtC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,2BAA2B,CAAC;AAEnC,6DAA6D;AAC7D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,mBAAmB,CAAC;AAC3B,OAAO,wBAAwB,CAAC;AAEhC,kBAAkB;AAClB,OAAO,yBAAyB,CAAC;AACjC,OAAO,0BAA0B,CAAC;AAElC,mBAAmB;AACnB,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,iBAAiB,CAAC;AAEzB,kBAAkB;AAClB,OAAO,kBAAkB,CAAC;AAE1B,gCAAgC;AAChC,OAAO,kBAAkB,CAAC;AAE1B,mDAAmD;AACnD,OAAO,cAAc,CAAC;AAEtB,oEAAoE;AACpE,OAAO,mBAAmB,CAAC;AAC3B,MAAM,UAAU,aAAa,CAC3B,gBAAkC,EAClC,MAAqB;IAErB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8BAA8B;IAC9B,MAAM,eAAe,GACnB,MAAM,CAAC,eAAe,KAAK,KAAK;QAC9B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,MAAM,CAAC,eAAe,IAAI,gBAAgB,CAAC;IAEjD,IACE,gBAAgB,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM;QAC1C,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAC1D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wEAAwE;IACxE,4EAA4E;IAC5E,wEAAwE;IACxE,IACE,MAAM,CAAC,YAAY;QACnB,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ;QACjC,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,EACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,SAAwB,EAAE;IACzE,2EAA2E;IAC3E,KAAK,MAAM,CAAC,EAAE,gBAAgB,CAAC,IAAI,aAAa,EAAE,CAAC;QACjD,IAAI,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC;YAC5C,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listDeployments.d.ts","sourceRoot":"","sources":["../../src/tools/listDeployments.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"listDeployments.d.ts","sourceRoot":"","sources":["../../src/tools/listDeployments.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,QAyH5D"}
|
|
@@ -3,22 +3,25 @@ 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";
|
|
6
7
|
import { getPublicUrl } from "../helpers/getPublicUrl.js";
|
|
7
8
|
export function registerListDeploymentsTool(server) {
|
|
8
|
-
server.
|
|
9
|
-
|
|
10
|
-
This tool lists deployments in a given space. The space name is required. When requesting latest deployment consider which deployment state the user is interested in (successful or all). Optional filters include: projects (array of project IDs), environments (array of environment IDs), tenants (array of tenant IDs), channels (array of channel IDs), taskState (one of: Canceled, Cancelling, Executing, Failed, Queued, Success, TimedOut), and take (number of results to return).`, {
|
|
11
|
-
spaceName: z.string(),
|
|
12
|
-
projects: z.array(z.string()).optional(),
|
|
13
|
-
environments: z.array(z.string()).optional(),
|
|
14
|
-
tenants: z.array(z.string()).optional(),
|
|
15
|
-
channels: z.array(z.string()).optional(),
|
|
16
|
-
taskState: z.enum(["Canceled", "Cancelling", "Executing", "Failed", "Queued", "Success", "TimedOut"]).optional(),
|
|
17
|
-
skip: z.number().optional(),
|
|
18
|
-
take: z.number().optional()
|
|
19
|
-
}, {
|
|
9
|
+
server.registerTool("list_deployments", {
|
|
20
10
|
title: "List deployments in an Octopus Deploy space",
|
|
21
|
-
|
|
11
|
+
description: `List deployments in a space
|
|
12
|
+
|
|
13
|
+
This tool lists deployments in a given space. The space name is required. When requesting latest deployment consider which deployment state the user is interested in (successful or all). Optional filters include: projects (array of project IDs), environments (array of environment IDs), tenants (array of tenant IDs), channels (array of channel IDs), taskState (one of: Canceled, Cancelling, Executing, Failed, Queued, Success, TimedOut), and take (number of results to return).`,
|
|
14
|
+
inputSchema: {
|
|
15
|
+
spaceName: z.string(),
|
|
16
|
+
projects: z.array(z.string()).optional(),
|
|
17
|
+
environments: z.array(z.string()).optional(),
|
|
18
|
+
tenants: z.array(z.string()).optional(),
|
|
19
|
+
channels: z.array(z.string()).optional(),
|
|
20
|
+
taskState: z.enum(["Canceled", "Cancelling", "Executing", "Failed", "Queued", "Success", "TimedOut"]).optional(),
|
|
21
|
+
skip: z.number().optional(),
|
|
22
|
+
take: z.number().optional()
|
|
23
|
+
},
|
|
24
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
22
25
|
}, async ({ spaceName, projects, environments, tenants, channels, taskState, skip, take }) => {
|
|
23
26
|
const configuration = getClientConfigurationFromEnvironment();
|
|
24
27
|
const client = await Client.create(configuration);
|
|
@@ -37,12 +40,16 @@ export function registerListDeploymentsTool(server) {
|
|
|
37
40
|
.map((deployment) => deployment.ReleaseId)
|
|
38
41
|
.filter((releaseId) => Boolean(releaseId))));
|
|
39
42
|
const releaseVersions = new Map();
|
|
43
|
+
const releaseVersionControlReferences = new Map();
|
|
40
44
|
if (releaseIds.length > 0) {
|
|
41
45
|
const releaseRepository = new ReleaseRepository(client, spaceName);
|
|
42
46
|
const releaseResults = await Promise.allSettled(releaseIds.map((id) => releaseRepository.get(id)));
|
|
43
47
|
releaseResults.forEach((result, index) => {
|
|
44
48
|
if (result.status === "fulfilled") {
|
|
45
49
|
releaseVersions.set(releaseIds[index], result.value.Version);
|
|
50
|
+
if (result.value.VersionControlReference) {
|
|
51
|
+
releaseVersionControlReferences.set(releaseIds[index], result.value.VersionControlReference);
|
|
52
|
+
}
|
|
46
53
|
}
|
|
47
54
|
});
|
|
48
55
|
}
|
|
@@ -57,6 +64,7 @@ export function registerListDeploymentsTool(server) {
|
|
|
57
64
|
lastPageNumber: deploymentsResponse.LastPageNumber,
|
|
58
65
|
items: deployments.map((deployment) => {
|
|
59
66
|
const releaseVersion = deployment.ReleaseId ? releaseVersions.get(deployment.ReleaseId) : undefined;
|
|
67
|
+
const versionControlReference = deployment.ReleaseId ? releaseVersionControlReferences.get(deployment.ReleaseId) : undefined;
|
|
60
68
|
const publicUrl = releaseVersion
|
|
61
69
|
? getPublicUrl(`${configuration.instanceURL}/app#/{spaceId}/projects/{projectId}/deployments/releases/{releaseVersion}/deployments/{deploymentId}`, {
|
|
62
70
|
spaceId: deployment.SpaceId,
|
|
@@ -71,6 +79,7 @@ export function registerListDeploymentsTool(server) {
|
|
|
71
79
|
name: deployment.Name,
|
|
72
80
|
releaseId: deployment.ReleaseId,
|
|
73
81
|
releaseVersion,
|
|
82
|
+
versionControlReference,
|
|
74
83
|
environmentId: deployment.EnvironmentId,
|
|
75
84
|
tenantId: deployment.TenantId,
|
|
76
85
|
projectId: deployment.ProjectId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listDeployments.js","sourceRoot":"","sources":["../../src/tools/listDeployments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,SAAS,EAAmB,MAAM,2BAA2B,CAAC;AACxH,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;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"listDeployments.js","sourceRoot":"","sources":["../../src/tools/listDeployments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listEnvironments.d.ts","sourceRoot":"","sources":["../../src/tools/listEnvironments.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"listEnvironments.d.ts","sourceRoot":"","sources":["../../src/tools/listEnvironments.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,QA6E7D"}
|
|
@@ -3,18 +3,21 @@ 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";
|
|
6
7
|
import { handleOctopusApiError } from "../helpers/errorHandling.js";
|
|
7
8
|
export function registerListEnvironmentsTool(server) {
|
|
8
|
-
server.
|
|
9
|
-
|
|
10
|
-
This tool lists all environments in a given space. The space name is required. Use this tool as early as possible to understand which environments are configured. Optionally filter by partial name match using partialName parameter.`, {
|
|
11
|
-
spaceName: z.string(),
|
|
12
|
-
partialName: z.string().optional(),
|
|
13
|
-
skip: z.number().optional(),
|
|
14
|
-
take: z.number().optional(),
|
|
15
|
-
}, {
|
|
9
|
+
server.registerTool("list_environments", {
|
|
16
10
|
title: "List all environments in an Octopus Deploy space",
|
|
17
|
-
|
|
11
|
+
description: `List environments in a space
|
|
12
|
+
|
|
13
|
+
This tool lists all environments in a given space. The space name is required. Use this tool as early as possible to understand which environments are configured. Optionally filter by partial name match using partialName parameter.`,
|
|
14
|
+
inputSchema: {
|
|
15
|
+
spaceName: z.string(),
|
|
16
|
+
partialName: z.string().optional(),
|
|
17
|
+
skip: z.number().optional(),
|
|
18
|
+
take: z.number().optional(),
|
|
19
|
+
},
|
|
20
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
18
21
|
}, async ({ spaceName, partialName, skip, take }) => {
|
|
19
22
|
try {
|
|
20
23
|
const configuration = getClientConfigurationFromEnvironment();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listEnvironments.js","sourceRoot":"","sources":["../../src/tools/listEnvironments.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,qBAAqB,GAEtB,MAAM,2BAA2B,CAAC;AACnC,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;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"listEnvironments.js","sourceRoot":"","sources":["../../src/tools/listEnvironments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listProjects.d.ts","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"listProjects.d.ts","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAyEzD"}
|
|
@@ -2,18 +2,21 @@ import { Client, 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 { projectsDescription } from "../types/projectTypes.js";
|
|
7
8
|
import { handleOctopusApiError } from "../helpers/errorHandling.js";
|
|
8
9
|
export function registerListProjectsTool(server) {
|
|
9
|
-
server.
|
|
10
|
-
spaceName: z.string(),
|
|
11
|
-
partialName: z.string().optional(),
|
|
12
|
-
skip: z.number().optional(),
|
|
13
|
-
take: z.number().optional(),
|
|
14
|
-
}, {
|
|
10
|
+
server.registerTool("list_projects", {
|
|
15
11
|
title: "List all projects in an Octopus Deploy space",
|
|
16
|
-
|
|
12
|
+
description: `This tool lists all projects in a given space. ${projectsDescription} The space name is required, if you can't find the space name, ask the user directly for the name of the space. Optionally filter by partial name match using partialName parameter.`,
|
|
13
|
+
inputSchema: {
|
|
14
|
+
spaceName: z.string(),
|
|
15
|
+
partialName: z.string().optional(),
|
|
16
|
+
skip: z.number().optional(),
|
|
17
|
+
take: z.number().optional(),
|
|
18
|
+
},
|
|
19
|
+
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
17
20
|
}, async ({ spaceName, partialName, skip, take }) => {
|
|
18
21
|
try {
|
|
19
22
|
const configuration = getClientConfigurationFromEnvironment();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listProjects.js","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AACnC,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,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"listProjects.js","sourceRoot":"","sources":["../../src/tools/listProjects.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listSpaces.d.ts","sourceRoot":"","sources":["../../src/tools/listSpaces.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"listSpaces.d.ts","sourceRoot":"","sources":["../../src/tools/listSpaces.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QAiEvD"}
|