@octopusdeploy/mcp-server 1.1.0 → 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 (231) hide show
  1. package/README.md +202 -47
  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 +3 -0
  7. package/dist/helpers/errorHandling.d.ts.map +1 -1
  8. package/dist/helpers/errorHandling.js +4 -1
  9. package/dist/helpers/errorHandling.js.map +1 -1
  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 +20 -4
  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/stripLinks.d.ts +15 -0
  39. package/dist/helpers/stripLinks.d.ts.map +1 -0
  40. package/dist/helpers/stripLinks.js +19 -0
  41. package/dist/helpers/stripLinks.js.map +1 -0
  42. package/dist/helpers/userCache.d.ts +14 -0
  43. package/dist/helpers/userCache.d.ts.map +1 -0
  44. package/dist/helpers/userCache.js +16 -0
  45. package/dist/helpers/userCache.js.map +1 -0
  46. package/dist/helpers/validateExecutePath.d.ts +29 -0
  47. package/dist/helpers/validateExecutePath.d.ts.map +1 -0
  48. package/dist/helpers/validateExecutePath.js +62 -0
  49. package/dist/helpers/validateExecutePath.js.map +1 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +58 -9
  52. package/dist/index.js.map +1 -1
  53. package/dist/resources/catalog/capabilities.d.ts +36 -0
  54. package/dist/resources/catalog/capabilities.d.ts.map +1 -0
  55. package/dist/resources/catalog/capabilities.js +90 -0
  56. package/dist/resources/catalog/capabilities.js.map +1 -0
  57. package/dist/resources/catalog/llmsTxt.d.ts +8 -0
  58. package/dist/resources/catalog/llmsTxt.d.ts.map +1 -0
  59. package/dist/resources/catalog/llmsTxt.js +44 -0
  60. package/dist/resources/catalog/llmsTxt.js.map +1 -0
  61. package/dist/resources/dispatch.d.ts +30 -0
  62. package/dist/resources/dispatch.d.ts.map +1 -0
  63. package/dist/resources/dispatch.js +81 -0
  64. package/dist/resources/dispatch.js.map +1 -0
  65. package/dist/resources/featureToggle.d.ts +2 -0
  66. package/dist/resources/featureToggle.d.ts.map +1 -0
  67. package/dist/resources/featureToggle.js +34 -0
  68. package/dist/resources/featureToggle.js.map +1 -0
  69. package/dist/resources/index.d.ts +12 -0
  70. package/dist/resources/index.d.ts.map +1 -0
  71. package/dist/resources/index.js +44 -0
  72. package/dist/resources/index.js.map +1 -0
  73. package/dist/resources/interruption.d.ts +2 -0
  74. package/dist/resources/interruption.d.ts.map +1 -0
  75. package/dist/resources/interruption.js +34 -0
  76. package/dist/resources/interruption.js.map +1 -0
  77. package/dist/resources/release.d.ts +2 -0
  78. package/dist/resources/release.d.ts.map +1 -0
  79. package/dist/resources/release.js +33 -0
  80. package/dist/resources/release.js.map +1 -0
  81. package/dist/resources/rolloutGroup.d.ts +2 -0
  82. package/dist/resources/rolloutGroup.d.ts.map +1 -0
  83. package/dist/resources/rolloutGroup.js +35 -0
  84. package/dist/resources/rolloutGroup.js.map +1 -0
  85. package/dist/resources/runbook.d.ts +2 -0
  86. package/dist/resources/runbook.d.ts.map +1 -0
  87. package/dist/resources/runbook.js +34 -0
  88. package/dist/resources/runbook.js.map +1 -0
  89. package/dist/resources/task.d.ts +2 -0
  90. package/dist/resources/task.d.ts.map +1 -0
  91. package/dist/resources/task.js +68 -0
  92. package/dist/resources/task.js.map +1 -0
  93. package/dist/tools/createRelease.d.ts.map +1 -1
  94. package/dist/tools/createRelease.js +93 -50
  95. package/dist/tools/createRelease.js.map +1 -1
  96. package/dist/tools/deployRelease.d.ts.map +1 -1
  97. package/dist/tools/deployRelease.js +117 -97
  98. package/dist/tools/deployRelease.js.map +1 -1
  99. package/dist/tools/execute.d.ts +3 -0
  100. package/dist/tools/execute.d.ts.map +1 -0
  101. package/dist/tools/execute.js +261 -0
  102. package/dist/tools/execute.js.map +1 -0
  103. package/dist/tools/findAccounts.d.ts.map +1 -1
  104. package/dist/tools/findAccounts.js +15 -12
  105. package/dist/tools/findAccounts.js.map +1 -1
  106. package/dist/tools/findCertificates.d.ts.map +1 -1
  107. package/dist/tools/findCertificates.js +19 -16
  108. package/dist/tools/findCertificates.js.map +1 -1
  109. package/dist/tools/findDeploymentTargets.d.ts.map +1 -1
  110. package/dist/tools/findDeploymentTargets.js +26 -23
  111. package/dist/tools/findDeploymentTargets.js.map +1 -1
  112. package/dist/tools/findFeatureToggles.d.ts +37 -0
  113. package/dist/tools/findFeatureToggles.d.ts.map +1 -0
  114. package/dist/tools/findFeatureToggles.js +139 -0
  115. package/dist/tools/findFeatureToggles.js.map +1 -0
  116. package/dist/tools/findInterruptions.d.ts +79 -0
  117. package/dist/tools/findInterruptions.d.ts.map +1 -0
  118. package/dist/tools/findInterruptions.js +273 -0
  119. package/dist/tools/findInterruptions.js.map +1 -0
  120. package/dist/tools/findReleases.d.ts.map +1 -1
  121. package/dist/tools/findReleases.js +90 -48
  122. package/dist/tools/findReleases.js.map +1 -1
  123. package/dist/tools/findRunbooks.d.ts +3 -0
  124. package/dist/tools/findRunbooks.d.ts.map +1 -0
  125. package/dist/tools/findRunbooks.js +139 -0
  126. package/dist/tools/findRunbooks.js.map +1 -0
  127. package/dist/tools/findTenants.d.ts.map +1 -1
  128. package/dist/tools/findTenants.js +28 -25
  129. package/dist/tools/findTenants.js.map +1 -1
  130. package/dist/tools/getBranches.d.ts.map +1 -1
  131. package/dist/tools/getBranches.js +13 -10
  132. package/dist/tools/getBranches.js.map +1 -1
  133. package/dist/tools/getCurrentUser.d.ts.map +1 -1
  134. package/dist/tools/getCurrentUser.js +7 -4
  135. package/dist/tools/getCurrentUser.js.map +1 -1
  136. package/dist/tools/getDeploymentFromUrl.d.ts +8 -3
  137. package/dist/tools/getDeploymentFromUrl.d.ts.map +1 -1
  138. package/dist/tools/getDeploymentFromUrl.js +46 -18
  139. package/dist/tools/getDeploymentFromUrl.js.map +1 -1
  140. package/dist/tools/getDeploymentProcess.d.ts.map +1 -1
  141. package/dist/tools/getDeploymentProcess.js +26 -23
  142. package/dist/tools/getDeploymentProcess.js.map +1 -1
  143. package/dist/tools/getKubernetesLiveStatus.d.ts.map +1 -1
  144. package/dist/tools/getKubernetesLiveStatus.js +13 -10
  145. package/dist/tools/getKubernetesLiveStatus.js.map +1 -1
  146. package/dist/tools/getMissingTenantVariables.d.ts.map +1 -1
  147. package/dist/tools/getMissingTenantVariables.js +13 -10
  148. package/dist/tools/getMissingTenantVariables.js.map +1 -1
  149. package/dist/tools/getTaskFromUrl.d.ts +2 -3
  150. package/dist/tools/getTaskFromUrl.d.ts.map +1 -1
  151. package/dist/tools/getTaskFromUrl.js +33 -33
  152. package/dist/tools/getTaskFromUrl.js.map +1 -1
  153. package/dist/tools/getTenantVariables.d.ts.map +1 -1
  154. package/dist/tools/getTenantVariables.js +13 -10
  155. package/dist/tools/getTenantVariables.js.map +1 -1
  156. package/dist/tools/getVariables.d.ts.map +1 -1
  157. package/dist/tools/getVariables.js +12 -9
  158. package/dist/tools/getVariables.js.map +1 -1
  159. package/dist/tools/grepLlmsTxt.d.ts +13 -0
  160. package/dist/tools/grepLlmsTxt.d.ts.map +1 -0
  161. package/dist/tools/grepLlmsTxt.js +105 -0
  162. package/dist/tools/grepLlmsTxt.js.map +1 -0
  163. package/dist/tools/grepTaskLog.d.ts +30 -0
  164. package/dist/tools/grepTaskLog.d.ts.map +1 -0
  165. package/dist/tools/grepTaskLog.js +116 -0
  166. package/dist/tools/grepTaskLog.js.map +1 -0
  167. package/dist/tools/index.d.ts +9 -4
  168. package/dist/tools/index.d.ts.map +1 -1
  169. package/dist/tools/index.js +14 -4
  170. package/dist/tools/index.js.map +1 -1
  171. package/dist/tools/listDeployments.d.ts.map +1 -1
  172. package/dist/tools/listDeployments.js +22 -13
  173. package/dist/tools/listDeployments.js.map +1 -1
  174. package/dist/tools/listEnvironments.d.ts.map +1 -1
  175. package/dist/tools/listEnvironments.js +12 -9
  176. package/dist/tools/listEnvironments.js.map +1 -1
  177. package/dist/tools/listProjects.d.ts.map +1 -1
  178. package/dist/tools/listProjects.js +10 -7
  179. package/dist/tools/listProjects.js.map +1 -1
  180. package/dist/tools/listSpaces.d.ts.map +1 -1
  181. package/dist/tools/listSpaces.js +9 -6
  182. package/dist/tools/listSpaces.js.map +1 -1
  183. package/dist/tools/readResource.d.ts +3 -0
  184. package/dist/tools/readResource.d.ts.map +1 -0
  185. package/dist/tools/readResource.js +50 -0
  186. package/dist/tools/readResource.js.map +1 -0
  187. package/dist/tools/runRunbook.d.ts +3 -0
  188. package/dist/tools/runRunbook.d.ts.map +1 -0
  189. package/dist/tools/runRunbook.js +174 -0
  190. package/dist/tools/runRunbook.js.map +1 -0
  191. package/dist/tools/updateFeatureToggle.d.ts +94 -0
  192. package/dist/tools/updateFeatureToggle.d.ts.map +1 -0
  193. package/dist/tools/updateFeatureToggle.js +308 -0
  194. package/dist/tools/updateFeatureToggle.js.map +1 -0
  195. package/dist/types/featureToggleTypes.d.ts +47 -0
  196. package/dist/types/featureToggleTypes.d.ts.map +1 -0
  197. package/dist/types/featureToggleTypes.js +10 -0
  198. package/dist/types/featureToggleTypes.js.map +1 -0
  199. package/dist/types/resourceConfig.d.ts +17 -0
  200. package/dist/types/resourceConfig.d.ts.map +1 -0
  201. package/dist/types/resourceConfig.js +6 -0
  202. package/dist/types/resourceConfig.js.map +1 -0
  203. package/dist/types/toolAnnotations.d.ts +8 -0
  204. package/dist/types/toolAnnotations.d.ts.map +1 -0
  205. package/dist/types/toolAnnotations.js +28 -0
  206. package/dist/types/toolAnnotations.js.map +1 -0
  207. package/dist/types/toolConfig.d.ts +7 -1
  208. package/dist/types/toolConfig.d.ts.map +1 -1
  209. package/dist/types/toolConfig.js +4 -1
  210. package/dist/types/toolConfig.js.map +1 -1
  211. package/dist/utils/parseConfig.d.ts +1 -1
  212. package/dist/utils/parseConfig.d.ts.map +1 -1
  213. package/dist/utils/parseConfig.js +3 -2
  214. package/dist/utils/parseConfig.js.map +1 -1
  215. package/package.json +4 -4
  216. package/dist/tools/getTaskById.d.ts +0 -9
  217. package/dist/tools/getTaskById.d.ts.map +0 -1
  218. package/dist/tools/getTaskById.js +0 -51
  219. package/dist/tools/getTaskById.js.map +0 -1
  220. package/dist/tools/getTaskDetails.d.ts +0 -9
  221. package/dist/tools/getTaskDetails.d.ts.map +0 -1
  222. package/dist/tools/getTaskDetails.js +0 -65
  223. package/dist/tools/getTaskDetails.js.map +0 -1
  224. package/dist/tools/getTaskRaw.d.ts +0 -9
  225. package/dist/tools/getTaskRaw.d.ts.map +0 -1
  226. package/dist/tools/getTaskRaw.js +0 -50
  227. package/dist/tools/getTaskRaw.js.map +0 -1
  228. package/dist/tools/listReleasesForProject.d.ts +0 -3
  229. package/dist/tools/listReleasesForProject.d.ts.map +0 -1
  230. package/dist/tools/listReleasesForProject.js +0 -60
  231. package/dist/tools/listReleasesForProject.js.map +0 -1
@@ -0,0 +1,261 @@
1
+ import { Client } 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 { DESTRUCTIVE_WRITE_TOOL_ANNOTATIONS } from "../types/toolAnnotations.js";
6
+ import { getClientConfigurationFromEnvironment } from "../helpers/getClientConfigurationFromEnvironment.js";
7
+ import { HTTP_METHODS, classifyMethod, } from "../helpers/methodTier.js";
8
+ import { isSensitive } from "../helpers/sensitivePathDenylist.js";
9
+ import { matchPath, findOwningToolset } from "../helpers/pathAllowlist.js";
10
+ import { validateExecutePath } from "../helpers/validateExecutePath.js";
11
+ import { requireConfirmation, unconfirmedResponse, } from "../helpers/requireConfirmation.js";
12
+ import { getActiveToolsetConfig } from "../helpers/activeToolsetConfig.js";
13
+ import { DEFAULT_TOOLSETS, } from "../types/toolConfig.js";
14
+ function errorResponse(payload) {
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: JSON.stringify(payload, null, 2),
20
+ },
21
+ ],
22
+ isError: true,
23
+ };
24
+ }
25
+ function summariseBody(body) {
26
+ if (body == null)
27
+ return "(no body)";
28
+ if (typeof body === "string") {
29
+ return body.length > 200 ? `${body.slice(0, 200)}…` : body;
30
+ }
31
+ try {
32
+ const json = JSON.stringify(body);
33
+ if (json.length <= 400)
34
+ return json;
35
+ return `${json.slice(0, 400)}… (${json.length} bytes total)`;
36
+ }
37
+ catch {
38
+ return "(unserialisable body)";
39
+ }
40
+ }
41
+ /**
42
+ * Build a one-shot audit emitter scoped to a single execute call. Captures
43
+ * the start time so callers only state outcome + reason — no need to repeat
44
+ * method/tier/path/durationMs at every gate. Stub on stderr; replace with the
45
+ * structured emitter from AIF-357 once it lands.
46
+ */
47
+ function startAudit(call) {
48
+ const startedAt = Date.now();
49
+ return (outcome, reason) => {
50
+ process.stderr.write(JSON.stringify({
51
+ ts: new Date().toISOString(),
52
+ tool: "execute",
53
+ ...call,
54
+ outcome,
55
+ ...(reason !== undefined ? { reason } : {}),
56
+ durationMs: Date.now() - startedAt,
57
+ }) + "\n");
58
+ };
59
+ }
60
+ function resolveEnabledToolsets() {
61
+ const config = getActiveToolsetConfig();
62
+ if (config.enabledToolsets === "all" || config.enabledToolsets == null) {
63
+ return DEFAULT_TOOLSETS;
64
+ }
65
+ return config.enabledToolsets;
66
+ }
67
+ async function dispatchExecute(client, method, path, query, body) {
68
+ const dispatchable = client;
69
+ const url = dispatchable.resolveUrl(path, query);
70
+ return dispatchable.dispatchRequest(method, url, body ?? null);
71
+ }
72
+ const inputSchema = {
73
+ method: z
74
+ .enum(HTTP_METHODS)
75
+ .describe("HTTP method. The method itself is the read/write/delete classifier — GET is read-only, POST/PUT/PATCH are blocked when --read-only is set, DELETE additionally requires --allow-deletes. The agent cannot bypass this by lying about intent."),
76
+ path: z
77
+ .string()
78
+ .min(1)
79
+ .describe("Path under the configured Octopus server, e.g. '/api/spaces/Spaces-1/feeds' or '/api/Spaces-1/projects'. Discover paths via grep_llms_txt."),
80
+ query: z
81
+ .record(z.string())
82
+ .optional()
83
+ .describe("Optional query-string parameters as a flat object."),
84
+ body: z
85
+ .unknown()
86
+ .optional()
87
+ .describe("Optional request body for POST/PUT/PATCH calls."),
88
+ asCsv: z
89
+ .boolean()
90
+ .optional()
91
+ .describe("If true, request 'text/csv' for tabular GET responses. The Octopus API honours this for endpoints that support CSV output."),
92
+ confirm: z
93
+ .boolean()
94
+ .optional()
95
+ .describe("Required only when the MCP client does not support elicitation. Set to true to confirm a non-GET call; otherwise the tool aborts."),
96
+ };
97
+ export function registerExecuteTool(server) {
98
+ server.registerTool("execute", {
99
+ title: "Execute an Octopus REST request (backstop)",
100
+ description: `Reach Octopus REST endpoints not covered by the curated tools. Use this only after grep_llms_txt has shown you the right method and path.
101
+
102
+ **Method gating is hard-coded server-side, three tiers:**
103
+
104
+ - GET → read tier: always allowed (subject to toolset allowlist + sensitive denylist).
105
+ - POST/PUT/PATCH → write tier: blocked when --read-only is set; requires user confirmation via elicitation otherwise.
106
+ - DELETE → delete tier: requires --allow-deletes (and is blocked when --read-only is set) AND a stronger user confirmation.
107
+
108
+ The HTTP method enum is the gate. The tool will not honour any 'isRead' flag the agent invents — the runtime classifies based on the actual method.
109
+
110
+ **Other gates** (in order):
111
+ 1. Sensitive denylist: API key endpoints and catastrophic deletes (DELETE /api/users/{id}, DELETE /api/spaces/{id}) are always blocked.
112
+ 2. Path allowlist by enabled toolset: paths only resolve if their owning toolset is enabled. Disabling a toolset (e.g. 'certificates') makes its endpoints unreachable even on GET.
113
+ 3. Elicitation on every non-GET, with a stronger message for DELETE.
114
+
115
+ Discover endpoints with grep_llms_txt. Use octopus://api/capabilities to see which toolsets are enabled and whether write/delete modes are on.`,
116
+ inputSchema,
117
+ annotations: DESTRUCTIVE_WRITE_TOOL_ANNOTATIONS,
118
+ }, async (args) => {
119
+ const params = args;
120
+ const { method, path: rawPath, query, body, asCsv } = params;
121
+ const tier = classifyMethod(method);
122
+ const audit = startAudit({ method, tier, path: rawPath });
123
+ const config = getActiveToolsetConfig();
124
+ const readOnlyMode = config.readOnlyMode ?? false;
125
+ const allowDeletes = config.allowDeletes ?? false;
126
+ // Gate 0: path canonicalization. Reject paths that can mean different
127
+ // things to the allowlist matcher and the HTTP client (`..` traversal,
128
+ // encoded slashes, query strings, fragments, backslashes). Runs FIRST
129
+ // so a traversal attempt cannot pass any later gate.
130
+ const validation = validateExecutePath(rawPath);
131
+ if (!validation.ok) {
132
+ audit("blocked", "invalidPath");
133
+ return errorResponse({
134
+ success: false,
135
+ reason: "invalidPath",
136
+ message: `Invalid path: ${validation.reason}`,
137
+ });
138
+ }
139
+ const path = validation.path;
140
+ // Gate 1: sensitive denylist (always-on, applies regardless of mode).
141
+ const sensitive = isSensitive(method, path);
142
+ if (sensitive.blocked) {
143
+ audit("blocked", "sensitivePath");
144
+ return errorResponse({
145
+ success: false,
146
+ reason: "sensitivePath",
147
+ message: `Path '${path}' is on the sensitive denylist and cannot be reached via execute. ${sensitive.reason ?? ""}`.trim(),
148
+ });
149
+ }
150
+ // Gate 2: tier-based mode gate.
151
+ if (tier === "write" && readOnlyMode) {
152
+ audit("blocked", "readOnlyMode");
153
+ return errorResponse({
154
+ success: false,
155
+ reason: "readOnlyMode",
156
+ message: "This server is in read-only mode. Restart without --read-only to enable write requests through the execute tool.",
157
+ });
158
+ }
159
+ if (tier === "delete") {
160
+ if (readOnlyMode) {
161
+ audit("blocked", "readOnlyMode");
162
+ return errorResponse({
163
+ success: false,
164
+ reason: "readOnlyMode",
165
+ message: "This server is in read-only mode. Restart without --read-only AND with --allow-deletes to permit DELETE requests through the execute tool.",
166
+ });
167
+ }
168
+ if (!allowDeletes) {
169
+ audit("blocked", "deletesNotAllowed");
170
+ return errorResponse({
171
+ success: false,
172
+ reason: "deletesNotAllowed",
173
+ message: "DELETE requests are not permitted. Restart with --allow-deletes to enable them. This is a deliberate opt-in for irreversible operations.",
174
+ });
175
+ }
176
+ }
177
+ // Gate 3: path allowlist by enabled toolset.
178
+ const enabledToolsets = resolveEnabledToolsets();
179
+ const allowed = matchPath(path, enabledToolsets);
180
+ if (!allowed.matched) {
181
+ const owner = findOwningToolset(path);
182
+ audit("blocked", "pathNotAllowed");
183
+ return errorResponse({
184
+ success: false,
185
+ reason: "pathNotAllowed",
186
+ message: owner
187
+ ? `Path '${path}' belongs to the '${owner}' toolset which is not enabled in this session. Enable it via --toolsets to reach this endpoint.`
188
+ : `Path '${path}' is not on the execute allowlist for any toolset. If this is a legitimate Octopus endpoint not yet covered, file an issue against the MCP server.`,
189
+ });
190
+ }
191
+ // Gate 4: elicitation on every non-GET.
192
+ if (tier !== "read") {
193
+ const isDelete = tier === "delete";
194
+ const message = isDelete
195
+ ? `IRREVERSIBLE delete operation. Confirm carefully.\n\n${method} ${path}\nQuery: ${JSON.stringify(query ?? {})}\nBody: ${summariseBody(body)}`
196
+ : `${method} ${path}\nQuery: ${JSON.stringify(query ?? {})}\nBody: ${summariseBody(body)}`;
197
+ const confirmation = await requireConfirmation(server, {
198
+ message,
199
+ fallbackConfirm: params.confirm,
200
+ });
201
+ if (!confirmation.confirmed) {
202
+ audit("cancelled", confirmation.reason);
203
+ return unconfirmedResponse(confirmation, {
204
+ action: isDelete ? "deletion" : "API call",
205
+ });
206
+ }
207
+ }
208
+ // All gates passed. Dispatch.
209
+ try {
210
+ const client = await Client.create(getClientConfigurationFromEnvironment());
211
+ const requestQuery = asCsv
212
+ ? { ...(query ?? {}), format: "csv" }
213
+ : query;
214
+ const result = await dispatchExecute(client, method, path, requestQuery, body);
215
+ audit("ok");
216
+ return {
217
+ content: [
218
+ {
219
+ type: "text",
220
+ text: JSON.stringify({
221
+ success: true,
222
+ method,
223
+ path,
224
+ tier,
225
+ response: result,
226
+ }),
227
+ },
228
+ ],
229
+ };
230
+ }
231
+ catch (error) {
232
+ const message = error instanceof Error ? error.message : String(error);
233
+ audit("error", message);
234
+ return {
235
+ content: [
236
+ {
237
+ type: "text",
238
+ text: JSON.stringify({
239
+ success: false,
240
+ reason: "octopusError",
241
+ method,
242
+ path,
243
+ tier,
244
+ message,
245
+ }, null, 2),
246
+ },
247
+ ],
248
+ isError: true,
249
+ };
250
+ }
251
+ });
252
+ }
253
+ registerToolDefinition({
254
+ toolName: "execute",
255
+ // readOnly: true so the tool is registered even in --read-only mode (where
256
+ // only its GET branch is reachable). Method-tier gating inside the handler
257
+ // enforces the actual write/delete policy at runtime.
258
+ config: { toolset: "core", readOnly: true },
259
+ registerFn: registerExecuteTool,
260
+ });
261
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/tools/execute.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findAccounts.d.ts","sourceRoot":"","sources":["../../src/tools/findAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAmGzD"}
1
+ {"version":3,"file":"findAccounts.d.ts","sourceRoot":"","sources":["../../src/tools/findAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAmGzD"}
@@ -2,27 +2,30 @@ import { Client, resolveSpaceId } 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 { mapAccountResource, AccountType } from "../types/accountTypes.js";
7
8
  import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES } from "../helpers/errorHandling.js";
8
9
  export function registerFindAccountsTool(server) {
9
- server.tool("find_accounts", `Find accounts in a space - can retrieve a single account by ID or list all accounts
10
+ server.registerTool("find_accounts", {
11
+ title: "Find accounts in an Octopus Deploy space",
12
+ description: `Find accounts in a space - can retrieve a single account by ID or list all accounts
10
13
 
11
14
  This unified tool can either:
12
15
  - Get detailed information about a specific account when accountId is provided
13
16
  - List all accounts in a space when accountId is omitted
14
17
 
15
- You can optionally filter by various parameters like name, account type, etc. when listing.`, {
16
- spaceName: z.string(),
17
- accountId: z.string().optional().describe("The ID of a specific account to retrieve. If omitted, lists all accounts."),
18
- skip: z.number().optional().describe("Number of accounts to skip for pagination (only used when listing)"),
19
- take: z.number().optional().describe("Number of accounts to take for pagination (only used when listing)"),
20
- ids: z.array(z.string()).optional().describe("Filter by specific account IDs (only used when listing)"),
21
- partialName: z.string().optional().describe("Filter by partial name match (only used when listing)"),
22
- accountType: z.nativeEnum(AccountType).optional().describe("Filter by account type (only used when listing)"),
23
- }, {
24
- title: "Find accounts in an Octopus Deploy space",
25
- readOnlyHint: true,
18
+ You can optionally filter by various parameters like name, account type, etc. when listing.`,
19
+ inputSchema: {
20
+ spaceName: z.string(),
21
+ accountId: z.string().optional().describe("The ID of a specific account to retrieve. If omitted, lists all accounts."),
22
+ skip: z.number().optional().describe("Number of accounts to skip for pagination (only used when listing)"),
23
+ take: z.number().optional().describe("Number of accounts to take for pagination (only used when listing)"),
24
+ ids: z.array(z.string()).optional().describe("Filter by specific account IDs (only used when listing)"),
25
+ partialName: z.string().optional().describe("Filter by partial name match (only used when listing)"),
26
+ accountType: z.nativeEnum(AccountType).optional().describe("Filter by account type (only used when listing)"),
27
+ },
28
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
26
29
  }, async ({ spaceName, accountId, skip, take, ids, partialName, accountType, }) => {
27
30
  const configuration = getClientConfigurationFromEnvironment();
28
31
  const client = await Client.create(configuration);
@@ -1 +1 @@
1
- {"version":3,"file":"findAccounts.js","sourceRoot":"","sources":["../../src/tools/findAccounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findAccounts.js","sourceRoot":"","sources":["../../src/tools/findAccounts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findCertificates.d.ts","sourceRoot":"","sources":["../../src/tools/findCertificates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,QA+G7D"}
1
+ {"version":3,"file":"findCertificates.d.ts","sourceRoot":"","sources":["../../src/tools/findCertificates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,QA+G7D"}
@@ -2,31 +2,34 @@ import { Client, resolveSpaceId } 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 { mapCertificateResource } from "../types/certificateTypes.js";
7
8
  import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES } from "../helpers/errorHandling.js";
8
9
  export function registerFindCertificatesTool(server) {
9
- server.tool("find_certificates", `Find certificates in a space - can retrieve a single certificate by ID or list all certificates
10
+ server.registerTool("find_certificates", {
11
+ title: "Find certificates in an Octopus Deploy space",
12
+ description: `Find certificates in a space - can retrieve a single certificate by ID or list all certificates
10
13
 
11
14
  This unified tool can either:
12
15
  - Get detailed information about a specific certificate when certificateId is provided
13
16
  - List all certificates in a space when certificateId is omitted
14
17
 
15
- You can optionally filter by various parameters like name, archived status, tenant, etc. when listing.`, {
16
- spaceName: z.string(),
17
- certificateId: z.string().optional().describe("The ID of a specific certificate to retrieve. If omitted, lists all certificates."),
18
- skip: z.number().optional().describe("Number of certificates to skip for pagination (only used when listing)"),
19
- take: z.number().optional().describe("Number of certificates to take for pagination (only used when listing)"),
20
- search: z.string().optional().describe("Search term to filter certificates (only used when listing)"),
21
- archived: z.boolean().optional().describe("Filter by archived status (only used when listing)"),
22
- tenant: z.string().optional().describe("Filter by tenant (only used when listing)"),
23
- firstResult: z.number().optional().describe("Index of first result to return (only used when listing)"),
24
- orderBy: z.string().optional().describe("Field to order results by (only used when listing)"),
25
- ids: z.array(z.string()).optional().describe("Filter by specific certificate IDs (only used when listing)"),
26
- partialName: z.string().optional().describe("Filter by partial name match (only used when listing)"),
27
- }, {
28
- title: "Find certificates in an Octopus Deploy space",
29
- readOnlyHint: true,
18
+ You can optionally filter by various parameters like name, archived status, tenant, etc. when listing.`,
19
+ inputSchema: {
20
+ spaceName: z.string(),
21
+ certificateId: z.string().optional().describe("The ID of a specific certificate to retrieve. If omitted, lists all certificates."),
22
+ skip: z.number().optional().describe("Number of certificates to skip for pagination (only used when listing)"),
23
+ take: z.number().optional().describe("Number of certificates to take for pagination (only used when listing)"),
24
+ search: z.string().optional().describe("Search term to filter certificates (only used when listing)"),
25
+ archived: z.boolean().optional().describe("Filter by archived status (only used when listing)"),
26
+ tenant: z.string().optional().describe("Filter by tenant (only used when listing)"),
27
+ firstResult: z.number().optional().describe("Index of first result to return (only used when listing)"),
28
+ orderBy: z.string().optional().describe("Field to order results by (only used when listing)"),
29
+ ids: z.array(z.string()).optional().describe("Filter by specific certificate IDs (only used when listing)"),
30
+ partialName: z.string().optional().describe("Filter by partial name match (only used when listing)"),
31
+ },
32
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
30
33
  }, async ({ spaceName, certificateId, skip, take, search, archived, tenant, firstResult, orderBy, ids, partialName, }) => {
31
34
  const configuration = getClientConfigurationFromEnvironment();
32
35
  const client = await Client.create(configuration);
@@ -1 +1 @@
1
- {"version":3,"file":"findCertificates.js","sourceRoot":"","sources":["../../src/tools/findCertificates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findCertificates.js","sourceRoot":"","sources":["../../src/tools/findCertificates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findDeploymentTargets.d.ts","sourceRoot":"","sources":["../../src/tools/findDeploymentTargets.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,QAqLlE"}
1
+ {"version":3,"file":"findDeploymentTargets.d.ts","sourceRoot":"","sources":["../../src/tools/findDeploymentTargets.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,SAAS,QAqLlE"}
@@ -2,38 +2,41 @@ import { Client, resolveSpaceId } 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/deploymentTargetTypes.js";
7
8
  import { validateEntityId, handleOctopusApiError, ENTITY_PREFIXES } from "../helpers/errorHandling.js";
8
9
  export function registerFindDeploymentTargetsTool(server) {
9
- server.tool("find_deployment_targets", `Find deployment targets (machines) in a space - can retrieve a single target by ID or list all targets
10
+ server.registerTool("find_deployment_targets", {
11
+ title: "Find deployment targets in an Octopus Deploy space",
12
+ description: `Find deployment targets (machines) in a space - can retrieve a single target by ID or list all targets
10
13
 
11
14
  This unified tool can either:
12
15
  - Get detailed information about a specific deployment target when targetId is provided
13
16
  - List all deployment targets in a space when targetId is omitted
14
17
 
15
- You can optionally filter by various parameters like name, roles, health status, etc. when listing.`, {
16
- spaceName: z.string(),
17
- targetId: z.string().optional().describe("The ID of a specific deployment target to retrieve. If omitted, lists all deployment targets."),
18
- skip: z.number().optional().describe("Number of targets to skip for pagination (only used when listing)"),
19
- take: z.number().optional().describe("Number of targets to take for pagination (only used when listing)"),
20
- name: z.string().optional().describe("Filter by exact name (only used when listing)"),
21
- ids: z.array(z.string()).optional().describe("Filter by specific target IDs (only used when listing)"),
22
- partialName: z.string().optional().describe("Filter by partial name match (only used when listing)"),
23
- roles: z.array(z.string()).optional().describe("A list of roles / target tags to filter by (only used when listing)"),
24
- isDisabled: z.boolean().optional().describe("Filter by disabled status (only used when listing)"),
25
- healthStatuses: z.array(z.string()).optional().describe("Possible values: Healthy, Unhealthy, Unavailable, Unknown, HasWarnings (only used when listing)"),
26
- commStyles: z.array(z.string()).optional().describe("Filter by communication styles (only used when listing)"),
27
- tenantIds: z.array(z.string()).optional().describe("Filter by tenant IDs (only used when listing)"),
28
- tenantTags: z.array(z.string()).optional().describe("Filter by tenant tags (only used when listing)"),
29
- environmentIds: z.array(z.string()).optional().describe("Filter by environment IDs (only used when listing)"),
30
- thumbprint: z.string().optional().describe("Filter by thumbprint (only used when listing)"),
31
- deploymentId: z.string().optional().describe("Filter by deployment ID (only used when listing)"),
32
- shellNames: z.array(z.string()).optional().describe("Filter by shell names (only used when listing)"),
33
- deploymentTargetTypes: z.array(z.string()).optional().describe("Filter by deployment target types (only used when listing)"),
34
- }, {
35
- title: "Find deployment targets in an Octopus Deploy space",
36
- readOnlyHint: true,
18
+ You can optionally filter by various parameters like name, roles, health status, etc. when listing.`,
19
+ inputSchema: {
20
+ spaceName: z.string(),
21
+ targetId: z.string().optional().describe("The ID of a specific deployment target to retrieve. If omitted, lists all deployment targets."),
22
+ skip: z.number().optional().describe("Number of targets to skip for pagination (only used when listing)"),
23
+ take: z.number().optional().describe("Number of targets to take for pagination (only used when listing)"),
24
+ name: z.string().optional().describe("Filter by exact name (only used when listing)"),
25
+ ids: z.array(z.string()).optional().describe("Filter by specific target IDs (only used when listing)"),
26
+ partialName: z.string().optional().describe("Filter by partial name match (only used when listing)"),
27
+ roles: z.array(z.string()).optional().describe("A list of roles / target tags to filter by (only used when listing)"),
28
+ isDisabled: z.boolean().optional().describe("Filter by disabled status (only used when listing)"),
29
+ healthStatuses: z.array(z.string()).optional().describe("Possible values: Healthy, Unhealthy, Unavailable, Unknown, HasWarnings (only used when listing)"),
30
+ commStyles: z.array(z.string()).optional().describe("Filter by communication styles (only used when listing)"),
31
+ tenantIds: z.array(z.string()).optional().describe("Filter by tenant IDs (only used when listing)"),
32
+ tenantTags: z.array(z.string()).optional().describe("Filter by tenant tags (only used when listing)"),
33
+ environmentIds: z.array(z.string()).optional().describe("Filter by environment IDs (only used when listing)"),
34
+ thumbprint: z.string().optional().describe("Filter by thumbprint (only used when listing)"),
35
+ deploymentId: z.string().optional().describe("Filter by deployment ID (only used when listing)"),
36
+ shellNames: z.array(z.string()).optional().describe("Filter by shell names (only used when listing)"),
37
+ deploymentTargetTypes: z.array(z.string()).optional().describe("Filter by deployment target types (only used when listing)"),
38
+ },
39
+ annotations: READ_ONLY_TOOL_ANNOTATIONS,
37
40
  }, async ({ spaceName, targetId, skip, take, name, ids, partialName, roles, isDisabled, healthStatuses, commStyles, tenantIds, tenantTags, environmentIds, thumbprint, deploymentId, shellNames, deploymentTargetTypes, }) => {
38
41
  const configuration = getClientConfigurationFromEnvironment();
39
42
  const client = await Client.create(configuration);
@@ -1 +1 @@
1
- {"version":3,"file":"findDeploymentTargets.js","sourceRoot":"","sources":["../../src/tools/findDeploymentTargets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findDeploymentTargets.js","sourceRoot":"","sources":["../../src/tools/findDeploymentTargets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAA2B,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,qCAAqC,EAAE,MAAM,qDAAqD,CAAC;AAC5G,OAAO,EAAiC,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEvG,MAAM,UAAU,iCAAiC,CAAC,MAAiB;IACjE,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,oDAAoD;QAC3D,WAAW,EAAE;;;;;;oGAMiF;QAC9F,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+FAA+F,CAAC;YACzI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;YACzG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;YACzG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YACrF,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;YACtG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACpG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;YACrH,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YACjG,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iGAAiG,CAAC;YAC1J,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YAC9G,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YACnG,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YACrG,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAC7G,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YAC3F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YAChG,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YACrG,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;SAC7H;QACD,WAAW,EAAE,0BAA0B;KACxC,EACD,KAAK,EAAE,EACL,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,WAAW,EACX,KAAK,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,UAAU,EACV,qBAAqB,GACtB,EAAE,EAAE;QACH,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,0DAA0D;QAC1D,IAAI,QAAQ,EAAE,CAAC;YACb,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;YAE/D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC7B,+BAA+B,EAC/B;oBACE,OAAO;oBACP,EAAE,EAAE,QAAQ;iBACb,CACF,CAAC;gBAEF,MAAM,gBAAgB,GAAG;oBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;oBACvE,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,QAAQ,EAAE;wBACR,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;wBACtB,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB;wBACtD,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;wBACxB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;wBACxC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;wBAChC,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB;qBAC/D;oBACD,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;oBAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC;gBAEF,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;yBACvC;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qBAAqB,CAAC,KAAK,EAAE;oBAC3B,UAAU,EAAE,mBAAmB;oBAC/B,QAAQ,EAAE,QAAQ;oBAClB,SAAS;oBACT,QAAQ,EAAE,wEAAwE;iBACnF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,mMAAmM,EACnM;YACE,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,WAAW;YACX,KAAK;YACL,UAAU;YACV,cAAc;YACd,UAAU;YACV,SAAS;YACT,UAAU;YACV,cAAc;YACd,UAAU;YACV,YAAY;YACZ,UAAU;YACV,qBAAqB;SACtB,CACF,CAAC;QAEF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAgC,EAAE,EAAE,CAAC,CAAC;YAClF,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,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC,kBAAkB;gBACtD,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;gBACxB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW;aACzC;YACD,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;wBACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;wBACvC,KAAK,EAAE,iBAAiB;qBACzB,CAAC;iBACH;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,sBAAsB,CAAC;IACrB,QAAQ,EAAE,yBAAyB;IACnC,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC/C,UAAU,EAAE,iCAAiC;CAC9C,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ import { type McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ declare const findFeatureTogglesSchema: z.ZodObject<{
4
+ spaceName: z.ZodString;
5
+ projectId: z.ZodString;
6
+ partialName: z.ZodOptional<z.ZodString>;
7
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
+ environmentIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ skip: z.ZodOptional<z.ZodNumber>;
10
+ take: z.ZodOptional<z.ZodNumber>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ spaceName: string;
13
+ projectId: string;
14
+ partialName?: string | undefined;
15
+ skip?: number | undefined;
16
+ take?: number | undefined;
17
+ tags?: string[] | undefined;
18
+ environmentIds?: string[] | undefined;
19
+ }, {
20
+ spaceName: string;
21
+ projectId: string;
22
+ partialName?: string | undefined;
23
+ skip?: number | undefined;
24
+ take?: number | undefined;
25
+ tags?: string[] | undefined;
26
+ environmentIds?: string[] | undefined;
27
+ }>;
28
+ export type FindFeatureTogglesParams = z.infer<typeof findFeatureTogglesSchema>;
29
+ export declare function findFeatureTogglesHandler(params: FindFeatureTogglesParams): Promise<{
30
+ content: {
31
+ type: "text";
32
+ text: string;
33
+ }[];
34
+ }>;
35
+ export declare function registerFindFeatureTogglesTool(server: McpServer): void;
36
+ export {};
37
+ //# sourceMappingURL=findFeatureToggles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findFeatureToggles.d.ts","sourceRoot":"","sources":["../../src/tools/findFeatureToggles.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CzE,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;EAoC5B,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,wBAAwB;;;;;GA2DjC;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,QAiB/D"}