@telora/mcp-products 0.21.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.
Files changed (63) hide show
  1. package/README.md +276 -0
  2. package/dist/cli/init.d.ts +2 -0
  3. package/dist/cli/init.js +94 -0
  4. package/dist/cli/init.js.map +1 -0
  5. package/dist/handlers/agentHandlers.d.ts +3 -0
  6. package/dist/handlers/agentHandlers.js +97 -0
  7. package/dist/handlers/agentHandlers.js.map +1 -0
  8. package/dist/handlers/connectorHandlers.d.ts +3 -0
  9. package/dist/handlers/connectorHandlers.js +401 -0
  10. package/dist/handlers/connectorHandlers.js.map +1 -0
  11. package/dist/handlers/contextHandlers.d.ts +8 -0
  12. package/dist/handlers/contextHandlers.js +169 -0
  13. package/dist/handlers/contextHandlers.js.map +1 -0
  14. package/dist/handlers/deliveryHandlers.d.ts +3 -0
  15. package/dist/handlers/deliveryHandlers.js +122 -0
  16. package/dist/handlers/deliveryHandlers.js.map +1 -0
  17. package/dist/handlers/deploymentProfileHandlers.d.ts +3 -0
  18. package/dist/handlers/deploymentProfileHandlers.js +104 -0
  19. package/dist/handlers/deploymentProfileHandlers.js.map +1 -0
  20. package/dist/handlers/discoverHandler.d.ts +23 -0
  21. package/dist/handlers/discoverHandler.js +83 -0
  22. package/dist/handlers/discoverHandler.js.map +1 -0
  23. package/dist/handlers/factoryHandlers.d.ts +3 -0
  24. package/dist/handlers/factoryHandlers.js +484 -0
  25. package/dist/handlers/factoryHandlers.js.map +1 -0
  26. package/dist/handlers/ideaHandlers.d.ts +3 -0
  27. package/dist/handlers/ideaHandlers.js +245 -0
  28. package/dist/handlers/ideaHandlers.js.map +1 -0
  29. package/dist/handlers/index.d.ts +15 -0
  30. package/dist/handlers/index.js +19 -0
  31. package/dist/handlers/index.js.map +1 -0
  32. package/dist/handlers/infrastructureHandlers.d.ts +3 -0
  33. package/dist/handlers/infrastructureHandlers.js +335 -0
  34. package/dist/handlers/infrastructureHandlers.js.map +1 -0
  35. package/dist/handlers/issueHandlers.d.ts +3 -0
  36. package/dist/handlers/issueHandlers.js +94 -0
  37. package/dist/handlers/issueHandlers.js.map +1 -0
  38. package/dist/handlers/okrHandlers.d.ts +3 -0
  39. package/dist/handlers/okrHandlers.js +194 -0
  40. package/dist/handlers/okrHandlers.js.map +1 -0
  41. package/dist/handlers/playbookHandlers.d.ts +3 -0
  42. package/dist/handlers/playbookHandlers.js +93 -0
  43. package/dist/handlers/playbookHandlers.js.map +1 -0
  44. package/dist/handlers/productHandlers.d.ts +3 -0
  45. package/dist/handlers/productHandlers.js +129 -0
  46. package/dist/handlers/productHandlers.js.map +1 -0
  47. package/dist/handlers/reportHandlers.d.ts +3 -0
  48. package/dist/handlers/reportHandlers.js +59 -0
  49. package/dist/handlers/reportHandlers.js.map +1 -0
  50. package/dist/handlers/strategyHandlers.d.ts +3 -0
  51. package/dist/handlers/strategyHandlers.js +116 -0
  52. package/dist/handlers/strategyHandlers.js.map +1 -0
  53. package/dist/handlers/workflowHandlers.d.ts +3 -0
  54. package/dist/handlers/workflowHandlers.js +93 -0
  55. package/dist/handlers/workflowHandlers.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +284 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/shared.d.ts +77 -0
  60. package/dist/shared.js +147 -0
  61. package/dist/shared.js.map +1 -0
  62. package/package.json +47 -0
  63. package/scripts/postinstall.js +96 -0
@@ -0,0 +1,335 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Infrastructure asset management MCP tool handlers (consolidated):
3
+ // telora_infra_environment (list | create | update | delete)
4
+ // telora_infra_asset (list | create | update | delete)
5
+ // telora_infra_relationship (list | create | delete)
6
+ // telora_infra_secret (list | create | get | delete)
7
+ // ---------------------------------------------------------------------------
8
+ import { z } from "zod";
9
+ import { callProductApi, successResult, validationError, wrapHandler, } from "../shared.js";
10
+ export function registerInfrastructureTools(server, getCreds) {
11
+ // ── Environments ─────────────────────────────────────────────────
12
+ server.tool("telora_infra_environment", "Infrastructure environments: named deployment targets (production, staging, dev) within a product. " +
13
+ "Each environment groups infrastructure assets and has a status (active, provisioning, decommissioned). " +
14
+ "Actions: list (by product), create (name required, unique per product), update, delete.", {
15
+ action: z.enum(["list", "create", "update", "delete"]).describe("Action to perform"),
16
+ productId: z.string().uuid().optional().describe("Product UUID (required for list, create)"),
17
+ environmentId: z.string().uuid().optional().describe("Environment UUID (required for update, delete)"),
18
+ name: z.string().max(200).optional().describe("Environment name (required for create, unique per product)"),
19
+ description: z.string().max(2000).nullable().optional().describe("Description of this environment"),
20
+ status: z.enum(["active", "provisioning", "decommissioned"]).optional().describe("Environment status"),
21
+ metadata: z.record(z.string(), z.unknown()).optional().describe("Arbitrary metadata JSON"),
22
+ limit: z.number().int().min(1).max(500).optional().describe("Max results (default 50)"),
23
+ offset: z.number().int().min(0).optional().describe("Skip N results (default 0)"),
24
+ }, wrapHandler(async (params) => {
25
+ switch (params.action) {
26
+ case "list": {
27
+ if (!params.productId)
28
+ return validationError("productId required for list");
29
+ const body = {
30
+ action: "environment_list",
31
+ productId: params.productId,
32
+ };
33
+ if (params.limit !== undefined)
34
+ body.limit = params.limit;
35
+ if (params.offset !== undefined)
36
+ body.offset = params.offset;
37
+ const result = await callProductApi(getCreds(), body);
38
+ return successResult({ items: result.environments, totalCount: result.totalCount });
39
+ }
40
+ case "create": {
41
+ if (!params.productId)
42
+ return validationError("productId required for create");
43
+ if (!params.name)
44
+ return validationError("name required for create");
45
+ const fields = { name: params.name };
46
+ if (params.description !== undefined)
47
+ fields.description = params.description;
48
+ if (params.status !== undefined)
49
+ fields.status = params.status;
50
+ if (params.metadata !== undefined)
51
+ fields.metadata = params.metadata;
52
+ const result = await callProductApi(getCreds(), {
53
+ action: "environment_create",
54
+ productId: params.productId,
55
+ fields,
56
+ });
57
+ return successResult(result.environment);
58
+ }
59
+ case "update": {
60
+ if (!params.environmentId)
61
+ return validationError("environmentId required for update");
62
+ const fields = {};
63
+ if (params.name !== undefined)
64
+ fields.name = params.name;
65
+ if (params.description !== undefined)
66
+ fields.description = params.description;
67
+ if (params.status !== undefined)
68
+ fields.status = params.status;
69
+ if (params.metadata !== undefined)
70
+ fields.metadata = params.metadata;
71
+ if (Object.keys(fields).length === 0)
72
+ return validationError("Provide at least one field to update");
73
+ const result = await callProductApi(getCreds(), {
74
+ action: "environment_update",
75
+ environmentId: params.environmentId,
76
+ fields,
77
+ });
78
+ return successResult(result.environment);
79
+ }
80
+ case "delete": {
81
+ if (!params.environmentId)
82
+ return validationError("environmentId required for delete");
83
+ await callProductApi(getCreds(), {
84
+ action: "environment_delete",
85
+ environmentId: params.environmentId,
86
+ });
87
+ return successResult({ deleted: true });
88
+ }
89
+ default:
90
+ return validationError(`Unknown action: ${params.action}`);
91
+ }
92
+ }));
93
+ // ── Assets ───────────────────────────────────────────────────────
94
+ server.tool("telora_infra_asset", "Infrastructure assets: typed resources (database, container, service, dashboard, storage, proxy, dns, monitoring, ci_cd) " +
95
+ "within a product. Assets can optionally belong to an environment and store connection details (url, ip, port). " +
96
+ "Actions: list (by product, optional environment/type filter), create, update, delete.", {
97
+ action: z.enum(["list", "create", "update", "delete"]).describe("Action to perform"),
98
+ productId: z.string().uuid().optional().describe("Product UUID (required for list, create)"),
99
+ assetId: z.string().uuid().optional().describe("Asset UUID (required for update, delete)"),
100
+ environmentId: z.string().uuid().nullable().optional().describe("Environment UUID (filter for list, assignment for create/update)"),
101
+ name: z.string().max(200).optional().describe("Asset name (required for create)"),
102
+ assetType: z.enum([
103
+ "database", "container", "service", "dashboard",
104
+ "storage", "proxy", "dns", "monitoring", "ci_cd",
105
+ ]).optional().describe("Asset type (required for create, filter for list)"),
106
+ description: z.string().max(2000).nullable().optional().describe("Asset description"),
107
+ url: z.string().max(2000).nullable().optional().describe("URL or endpoint"),
108
+ ip: z.string().max(200).nullable().optional().describe("IP address"),
109
+ port: z.number().int().min(1).max(65535).nullable().optional().describe("Port number"),
110
+ metadata: z.record(z.string(), z.unknown()).optional().describe("Arbitrary metadata JSON"),
111
+ limit: z.number().int().min(1).max(500).optional().describe("Max results (default 50)"),
112
+ offset: z.number().int().min(0).optional().describe("Skip N results (default 0)"),
113
+ }, wrapHandler(async (params) => {
114
+ switch (params.action) {
115
+ case "list": {
116
+ if (!params.productId)
117
+ return validationError("productId required for list");
118
+ const body = {
119
+ action: "asset_list",
120
+ productId: params.productId,
121
+ };
122
+ if (params.environmentId !== undefined)
123
+ body.environmentId = params.environmentId;
124
+ if (params.assetType !== undefined)
125
+ body.fields = { assetType: params.assetType };
126
+ if (params.limit !== undefined)
127
+ body.limit = params.limit;
128
+ if (params.offset !== undefined)
129
+ body.offset = params.offset;
130
+ const result = await callProductApi(getCreds(), body);
131
+ return successResult({ items: result.assets, totalCount: result.totalCount });
132
+ }
133
+ case "create": {
134
+ if (!params.productId)
135
+ return validationError("productId required for create");
136
+ if (!params.name)
137
+ return validationError("name required for create");
138
+ if (!params.assetType)
139
+ return validationError("assetType required for create");
140
+ const fields = {
141
+ name: params.name,
142
+ assetType: params.assetType,
143
+ };
144
+ if (params.description !== undefined)
145
+ fields.description = params.description;
146
+ if (params.url !== undefined)
147
+ fields.url = params.url;
148
+ if (params.ip !== undefined)
149
+ fields.ip = params.ip;
150
+ if (params.port !== undefined)
151
+ fields.port = params.port;
152
+ if (params.metadata !== undefined)
153
+ fields.metadata = params.metadata;
154
+ const body = {
155
+ action: "asset_create",
156
+ productId: params.productId,
157
+ fields,
158
+ };
159
+ if (params.environmentId !== undefined)
160
+ body.environmentId = params.environmentId;
161
+ const result = await callProductApi(getCreds(), body);
162
+ return successResult(result.asset);
163
+ }
164
+ case "update": {
165
+ if (!params.assetId)
166
+ return validationError("assetId required for update");
167
+ const fields = {};
168
+ if (params.name !== undefined)
169
+ fields.name = params.name;
170
+ if (params.assetType !== undefined)
171
+ fields.assetType = params.assetType;
172
+ if (params.description !== undefined)
173
+ fields.description = params.description;
174
+ if (params.url !== undefined)
175
+ fields.url = params.url;
176
+ if (params.ip !== undefined)
177
+ fields.ip = params.ip;
178
+ if (params.port !== undefined)
179
+ fields.port = params.port;
180
+ if (params.metadata !== undefined)
181
+ fields.metadata = params.metadata;
182
+ if (Object.keys(fields).length === 0 && params.environmentId === undefined) {
183
+ return validationError("Provide at least one field to update");
184
+ }
185
+ const body = {
186
+ action: "asset_update",
187
+ assetId: params.assetId,
188
+ fields,
189
+ };
190
+ if (params.environmentId !== undefined)
191
+ body.environmentId = params.environmentId;
192
+ const result = await callProductApi(getCreds(), body);
193
+ return successResult(result.asset);
194
+ }
195
+ case "delete": {
196
+ if (!params.assetId)
197
+ return validationError("assetId required for delete");
198
+ await callProductApi(getCreds(), {
199
+ action: "asset_delete",
200
+ assetId: params.assetId,
201
+ });
202
+ return successResult({ deleted: true });
203
+ }
204
+ default:
205
+ return validationError(`Unknown action: ${params.action}`);
206
+ }
207
+ }));
208
+ // ── Relationships ────────────────────────────────────────────────
209
+ server.tool("telora_infra_relationship", "Asset relationships: directed links between infrastructure assets within the same product. " +
210
+ "Types: connects_to, deploys_to, proxies, depends_on, hosts. " +
211
+ "Actions: list (by product), create (source + target + type), delete.", {
212
+ action: z.enum(["list", "create", "delete"]).describe("Action to perform"),
213
+ productId: z.string().uuid().optional().describe("Product UUID (required for list)"),
214
+ relationshipId: z.string().uuid().optional().describe("Relationship UUID (required for delete)"),
215
+ sourceAssetId: z.string().uuid().optional().describe("Source asset UUID (required for create)"),
216
+ targetAssetId: z.string().uuid().optional().describe("Target asset UUID (required for create)"),
217
+ relationshipType: z.enum([
218
+ "connects_to", "deploys_to", "proxies", "depends_on", "hosts",
219
+ ]).optional().describe("Relationship type (required for create)"),
220
+ description: z.string().max(2000).nullable().optional().describe("Relationship description"),
221
+ metadata: z.record(z.string(), z.unknown()).optional().describe("Arbitrary metadata JSON"),
222
+ limit: z.number().int().min(1).max(500).optional().describe("Max results (default 50)"),
223
+ offset: z.number().int().min(0).optional().describe("Skip N results (default 0)"),
224
+ }, wrapHandler(async (params) => {
225
+ switch (params.action) {
226
+ case "list": {
227
+ if (!params.productId)
228
+ return validationError("productId required for list");
229
+ const body = {
230
+ action: "asset_relationship_list",
231
+ productId: params.productId,
232
+ };
233
+ if (params.limit !== undefined)
234
+ body.limit = params.limit;
235
+ if (params.offset !== undefined)
236
+ body.offset = params.offset;
237
+ const result = await callProductApi(getCreds(), body);
238
+ return successResult({ items: result.relationships, totalCount: result.totalCount });
239
+ }
240
+ case "create": {
241
+ if (!params.sourceAssetId)
242
+ return validationError("sourceAssetId required for create");
243
+ if (!params.targetAssetId)
244
+ return validationError("targetAssetId required for create");
245
+ if (!params.relationshipType)
246
+ return validationError("relationshipType required for create");
247
+ const fields = {
248
+ sourceAssetId: params.sourceAssetId,
249
+ targetAssetId: params.targetAssetId,
250
+ relationshipType: params.relationshipType,
251
+ };
252
+ if (params.description !== undefined)
253
+ fields.description = params.description;
254
+ if (params.metadata !== undefined)
255
+ fields.metadata = params.metadata;
256
+ const result = await callProductApi(getCreds(), {
257
+ action: "asset_relationship_create",
258
+ fields,
259
+ });
260
+ return successResult(result.relationship);
261
+ }
262
+ case "delete": {
263
+ if (!params.relationshipId)
264
+ return validationError("relationshipId required for delete");
265
+ await callProductApi(getCreds(), {
266
+ action: "asset_relationship_delete",
267
+ relationshipId: params.relationshipId,
268
+ });
269
+ return successResult({ deleted: true });
270
+ }
271
+ default:
272
+ return validationError(`Unknown action: ${params.action}`);
273
+ }
274
+ }));
275
+ // ── Secrets ──────────────────────────────────────────────────────
276
+ server.tool("telora_infra_secret", "Infrastructure secrets: encrypted key-value pairs stored per asset using Vault. " +
277
+ "List and create show names only (no values). Use get to decrypt and reveal a secret value on demand. " +
278
+ "Actions: list (by asset), create (name + value), get (decrypts), delete.", {
279
+ action: z.enum(["list", "create", "get", "delete"]).describe("Action to perform"),
280
+ assetId: z.string().uuid().optional().describe("Asset UUID (required for list, create)"),
281
+ secretId: z.string().uuid().optional().describe("Secret UUID (required for get, delete)"),
282
+ name: z.string().max(200).optional().describe("Secret name (required for create, unique per asset)"),
283
+ secretValue: z.string().optional().describe("Secret value to encrypt and store (required for create)"),
284
+ }, wrapHandler(async (params) => {
285
+ switch (params.action) {
286
+ case "list": {
287
+ if (!params.assetId)
288
+ return validationError("assetId required for list");
289
+ const result = await callProductApi(getCreds(), {
290
+ action: "secret_list",
291
+ assetId: params.assetId,
292
+ });
293
+ return successResult({ items: result.secrets });
294
+ }
295
+ case "create": {
296
+ if (!params.assetId)
297
+ return validationError("assetId required for create");
298
+ if (!params.name)
299
+ return validationError("name required for create");
300
+ if (!params.secretValue)
301
+ return validationError("secretValue required for create");
302
+ const result = await callProductApi(getCreds(), {
303
+ action: "secret_create",
304
+ assetId: params.assetId,
305
+ fields: {
306
+ name: params.name,
307
+ secretValue: params.secretValue,
308
+ },
309
+ });
310
+ return successResult(result.secret);
311
+ }
312
+ case "get": {
313
+ if (!params.secretId)
314
+ return validationError("secretId required for get");
315
+ const result = await callProductApi(getCreds(), {
316
+ action: "secret_get",
317
+ secretId: params.secretId,
318
+ });
319
+ return successResult(result.secret);
320
+ }
321
+ case "delete": {
322
+ if (!params.secretId)
323
+ return validationError("secretId required for delete");
324
+ await callProductApi(getCreds(), {
325
+ action: "secret_delete",
326
+ secretId: params.secretId,
327
+ });
328
+ return successResult({ deleted: true });
329
+ }
330
+ default:
331
+ return validationError(`Unknown action: ${params.action}`);
332
+ }
333
+ }));
334
+ }
335
+ //# sourceMappingURL=infrastructureHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infrastructureHandlers.js","sourceRoot":"","sources":["../../src/handlers/infrastructureHandlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type GetCreds } from "../shared.js";
3
+ export declare function registerIssueTools(server: McpServer, getCreds: GetCreds): void;
@@ -0,0 +1,94 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Issue tool handler (consolidated):
3
+ // telora_product_issue (list | create | update | delete)
4
+ // ---------------------------------------------------------------------------
5
+ import { z } from "zod";
6
+ import { callProductApi, successResult, validationError, buildFields, wrapHandler, compactEntity, } from "../shared.js";
7
+ export function registerIssueTools(server, getCreds) {
8
+ server.tool("telora_product_issue", "Task tracking: manage issues (tasks, bugs, context groups) within deliveries. " +
9
+ "Issues flow through To Do -> In Progress -> Done. Context groups organize related tasks with shared files and AI context. " +
10
+ "Actions: list issues (by delivery or product-wide), create an issue (title + deliveryId), " +
11
+ "update issue fields (status, priority, description), delete an issue.", {
12
+ action: z.enum(["list", "create", "update", "delete"]).describe("Action to perform"),
13
+ issueId: z.string().uuid().optional().describe("Issue UUID (required for update, delete)"),
14
+ deliveryId: z.string().uuid().optional().describe("Delivery UUID (required for create; optional filter for list)"),
15
+ productId: z.string().uuid().optional().describe("Product UUID (list: fetch issues across all deliveries)"),
16
+ title: z.string().max(500).optional().describe("Issue title (required for create)"),
17
+ issueType: z.enum(["Context Group", "Task", "Bug"]).optional().describe("Issue type (default: Task)"),
18
+ description: z.string().max(5000).optional().describe("Issue description"),
19
+ status: z.enum(["To Do", "In Progress", "In Review", "Blocked", "Done"]).optional().describe("Issue status (create default: 'To Do'; list: filter)"),
20
+ parentIssueId: z.string().uuid().optional().describe("Parent issue UUID (for nesting under context groups)"),
21
+ priority: z.enum(["P0", "P1", "P2", "P3"]).optional().describe("Priority label"),
22
+ context: z.string().max(10000).optional().describe("Rich text/markdown context for AI agents (Context Group only)"),
23
+ relevantFiles: z.string().max(5000).optional().describe("File paths/glob patterns, one per line (Context Group only)"),
24
+ dependsOn: z.array(z.string().uuid()).optional().describe("Issue UUIDs this context group depends on (CG-level DAG)"),
25
+ limit: z.number().int().min(1).max(500).optional().describe("Max results (1-500, default 50)"),
26
+ offset: z.number().int().min(0).optional().describe("Number of results to skip (default 0)"),
27
+ detail: z.enum(["titles", "summary", "full"]).optional().describe("Response detail level"),
28
+ returnFull: z.boolean().optional().describe("Return full entity (default: compact)"),
29
+ }, wrapHandler(async (params) => {
30
+ switch (params.action) {
31
+ case "list": {
32
+ if (!params.deliveryId && !params.productId) {
33
+ return validationError("Either deliveryId or productId is required for list");
34
+ }
35
+ const fields = buildFields({ issueType: params.issueType, status: params.status, priority: params.priority });
36
+ const body = {
37
+ action: "issue_list",
38
+ fields: Object.keys(fields).length > 0 ? fields : undefined,
39
+ };
40
+ if (params.deliveryId !== undefined)
41
+ body.deliveryId = params.deliveryId;
42
+ if (params.productId !== undefined)
43
+ body.productId = params.productId;
44
+ if (params.limit !== undefined)
45
+ body.limit = params.limit;
46
+ if (params.offset !== undefined)
47
+ body.offset = params.offset;
48
+ if (params.detail !== undefined)
49
+ body.detail = params.detail;
50
+ const result = await callProductApi(getCreds(), body);
51
+ return successResult({ items: result.issues, totalCount: result.totalCount });
52
+ }
53
+ case "create": {
54
+ if (!params.deliveryId)
55
+ return validationError("deliveryId required for create");
56
+ if (!params.title)
57
+ return validationError("title required for create");
58
+ const fields = buildFields(params, ['title', 'issueType', 'description', 'status', 'parentIssueId', 'priority', 'context', 'relevantFiles', 'dependsOn']);
59
+ const result = await callProductApi(getCreds(), {
60
+ action: "issue_create",
61
+ deliveryId: params.deliveryId,
62
+ fields,
63
+ });
64
+ return successResult(compactEntity(result.issue, Object.keys(fields), params.returnFull));
65
+ }
66
+ case "update": {
67
+ if (!params.issueId)
68
+ return validationError("issueId required for update");
69
+ const fields = buildFields(params, ['title', 'description', 'status', 'issueType', 'parentIssueId', 'priority', 'context', 'relevantFiles', 'dependsOn', 'deliveryId']);
70
+ if (Object.keys(fields).length === 0) {
71
+ return validationError("Provide at least one field to update");
72
+ }
73
+ const result = await callProductApi(getCreds(), {
74
+ action: "issue_update",
75
+ issueId: params.issueId,
76
+ fields,
77
+ });
78
+ return successResult(compactEntity(result.issue, Object.keys(fields), params.returnFull));
79
+ }
80
+ case "delete": {
81
+ if (!params.issueId)
82
+ return validationError("issueId required for delete");
83
+ const result = await callProductApi(getCreds(), {
84
+ action: "issue_delete",
85
+ issueId: params.issueId,
86
+ });
87
+ return successResult(`Deleted issue ${result.deleted}`);
88
+ }
89
+ default:
90
+ return validationError(`Unknown action: ${params.action}`);
91
+ }
92
+ }));
93
+ }
94
+ //# sourceMappingURL=issueHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issueHandlers.js","sourceRoot":"","sources":["../../src/handlers/issueHandlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type GetCreds } from "../shared.js";
3
+ export declare function registerOkrTools(server: McpServer, getCreds: GetCreds): void;