@k-system/tickr-mcp 0.2.0 → 0.4.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 (50) hide show
  1. package/dist/cli/setup.d.ts +8 -0
  2. package/dist/cli/setup.d.ts.map +1 -0
  3. package/dist/cli/setup.js +524 -0
  4. package/dist/cli/setup.js.map +1 -0
  5. package/dist/index.js +8 -118
  6. package/dist/server.d.ts +2 -0
  7. package/dist/server.js +174 -0
  8. package/dist/tools/add-project-member.d.ts +4 -0
  9. package/dist/tools/add-project-member.js +32 -0
  10. package/dist/tools/create-label.d.ts +4 -0
  11. package/dist/tools/create-label.js +30 -0
  12. package/dist/tools/create-ticket.js +2 -0
  13. package/dist/tools/delete-comment.d.ts +4 -0
  14. package/dist/tools/delete-comment.js +22 -0
  15. package/dist/tools/delete-cycle.d.ts +4 -0
  16. package/dist/tools/delete-cycle.js +26 -0
  17. package/dist/tools/delete-epic.d.ts +4 -0
  18. package/dist/tools/delete-epic.js +26 -0
  19. package/dist/tools/delete-label.d.ts +4 -0
  20. package/dist/tools/delete-label.js +26 -0
  21. package/dist/tools/fail-dev-task.d.ts +4 -0
  22. package/dist/tools/fail-dev-task.js +29 -0
  23. package/dist/tools/get-next-statuses.d.ts +4 -0
  24. package/dist/tools/get-next-statuses.js +30 -0
  25. package/dist/tools/list-dev-assignments.d.ts +4 -0
  26. package/dist/tools/list-dev-assignments.js +27 -0
  27. package/dist/tools/list-project-members.d.ts +4 -0
  28. package/dist/tools/list-project-members.js +29 -0
  29. package/dist/tools/list-relations.d.ts +4 -0
  30. package/dist/tools/list-relations.js +30 -0
  31. package/dist/tools/list-workflow-presets.d.ts +4 -0
  32. package/dist/tools/list-workflow-presets.js +22 -0
  33. package/dist/tools/remove-project-member.d.ts +4 -0
  34. package/dist/tools/remove-project-member.js +26 -0
  35. package/dist/tools/update-comment.d.ts +4 -0
  36. package/dist/tools/update-comment.js +24 -0
  37. package/dist/tools/update-cycle.d.ts +4 -0
  38. package/dist/tools/update-cycle.js +39 -0
  39. package/dist/tools/update-epic.d.ts +4 -0
  40. package/dist/tools/update-epic.js +42 -0
  41. package/dist/tools/update-label.d.ts +4 -0
  42. package/dist/tools/update-label.js +33 -0
  43. package/dist/tools/update-project-member-role.d.ts +4 -0
  44. package/dist/tools/update-project-member-role.js +29 -0
  45. package/dist/tools/update-status.d.ts +4 -0
  46. package/dist/tools/update-status.js +39 -0
  47. package/dist/tools/update-ticket.js +12 -4
  48. package/dist/tools/update-transitions.d.ts +4 -0
  49. package/dist/tools/update-transitions.js +37 -0
  50. package/package.json +6 -3
package/dist/index.js CHANGED
@@ -1,121 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { loadConfig } from "./config.js";
5
- import { ApiClient } from "./api-client.js";
6
- // Tools
7
- import { registerCreateTicket } from "./tools/create-ticket.js";
8
- import { registerListTickets } from "./tools/list-tickets.js";
9
- import { registerGetTicket } from "./tools/get-ticket.js";
10
- import { registerUpdateTicket } from "./tools/update-ticket.js";
11
- import { registerAddComment } from "./tools/add-comment.js";
12
- import { registerUpdateImplementationItem } from "./tools/update-implementation-item.js";
13
- import { registerSearchTickets } from "./tools/search-tickets.js";
14
- import { registerTriageList } from "./tools/triage-list.js";
15
- import { registerTriageAccept } from "./tools/triage-accept.js";
16
- import { registerTriageReject } from "./tools/triage-reject.js";
17
- import { registerListLabels } from "./tools/list-labels.js";
18
- import { registerAddLabel } from "./tools/add-label.js";
19
- import { registerRemoveLabel } from "./tools/remove-label.js";
20
- import { registerListCycles } from "./tools/list-cycles.js";
21
- import { registerAssignCycle } from "./tools/assign-cycle.js";
22
- import { registerListEpics } from "./tools/list-epics.js";
23
- import { registerAssignEpic } from "./tools/assign-epic.js";
24
- import { registerPollDevQueue } from "./tools/poll-dev-queue.js";
25
- import { registerCompleteDevTask } from "./tools/complete-dev-task.js";
26
- import { registerWhoami } from "./tools/whoami.js";
27
- import { registerAddRelation } from "./tools/add-relation.js";
28
- import { registerRemoveRelation } from "./tools/remove-relation.js";
29
- // Phase 2 — Skupina A: Workflow & Status Management
30
- import { registerListStatuses } from "./tools/list-statuses.js";
31
- import { registerListTransitions } from "./tools/list-transitions.js";
32
- import { registerCreateStatus } from "./tools/create-status.js";
33
- import { registerDeleteStatus } from "./tools/delete-status.js";
34
- import { registerApplyPreset } from "./tools/apply-preset.js";
35
- // Phase 2 — Skupina B: Project Management
36
- import { registerListProjects } from "./tools/list-projects.js";
37
- import { registerGetProject } from "./tools/get-project.js";
38
- import { registerCreateProject } from "./tools/create-project.js";
39
- // Phase 2 — Skupina C: Ticket Operations
40
- import { registerDeleteTicket } from "./tools/delete-ticket.js";
41
- import { registerGetBoard } from "./tools/get-board.js";
42
- import { registerGetMyTasks } from "./tools/get-my-tasks.js";
43
- import { registerListComments } from "./tools/list-comments.js";
44
- // Phase 2 — Skupina D: Attachments
45
- import { registerListAttachments } from "./tools/list-attachments.js";
46
- import { registerDeleteAttachment } from "./tools/delete-attachment.js";
47
- // Phase 2 — Skupina E: Cycles & Epics CRUD
48
- import { registerCreateCycle } from "./tools/create-cycle.js";
49
- import { registerCreateEpic } from "./tools/create-epic.js";
50
- // Phase 2 — Skupina F: Implementation Items
51
- import { registerCreateImplementationItem } from "./tools/create-implementation-item.js";
52
- import { registerDeleteImplementationItem } from "./tools/delete-implementation-item.js";
53
- // Resources
54
- import { registerTicketResource } from "./resources/ticket-resource.js";
55
- import { registerProjectResource } from "./resources/project-resource.js";
56
- async function main() {
57
- const config = loadConfig();
58
- const api = new ApiClient(config);
59
- const server = new McpServer({
60
- name: "tickr",
61
- version: "0.1.4",
62
- });
63
- // Registrace tools
64
- registerCreateTicket(server, api);
65
- registerListTickets(server, api);
66
- registerGetTicket(server, api);
67
- registerUpdateTicket(server, api);
68
- registerAddComment(server, api);
69
- registerUpdateImplementationItem(server, api);
70
- registerSearchTickets(server, api);
71
- registerTriageList(server, api);
72
- registerTriageAccept(server, api);
73
- registerTriageReject(server, api);
74
- registerListLabels(server, api);
75
- registerAddLabel(server, api);
76
- registerRemoveLabel(server, api);
77
- registerListCycles(server, api);
78
- registerAssignCycle(server, api);
79
- registerListEpics(server, api);
80
- registerAssignEpic(server, api);
81
- registerPollDevQueue(server, api);
82
- registerCompleteDevTask(server, api);
83
- registerWhoami(server, api);
84
- registerAddRelation(server, api);
85
- registerRemoveRelation(server, api);
86
- // Phase 2 — Skupina A: Workflow & Status Management
87
- registerListStatuses(server, api);
88
- registerListTransitions(server, api);
89
- registerCreateStatus(server, api);
90
- registerDeleteStatus(server, api);
91
- registerApplyPreset(server, api);
92
- // Phase 2 — Skupina B: Project Management
93
- registerListProjects(server, api);
94
- registerGetProject(server, api);
95
- registerCreateProject(server, api);
96
- // Phase 2 — Skupina C: Ticket Operations
97
- registerDeleteTicket(server, api);
98
- registerGetBoard(server, api);
99
- registerGetMyTasks(server, api);
100
- registerListComments(server, api);
101
- // Phase 2 — Skupina D: Attachments
102
- registerListAttachments(server, api);
103
- registerDeleteAttachment(server, api);
104
- // Phase 2 — Skupina E: Cycles & Epics CRUD
105
- registerCreateCycle(server, api);
106
- registerCreateEpic(server, api);
107
- // Phase 2 — Skupina F: Implementation Items
108
- registerCreateImplementationItem(server, api);
109
- registerDeleteImplementationItem(server, api);
110
- // Registrace resources
111
- registerTicketResource(server, api);
112
- registerProjectResource(server, api);
113
- // Spuštění na stdio transportu
114
- const transport = new StdioServerTransport();
115
- await server.connect(transport);
2
+ // CLI setup wizard spustit místo MCP serveru pokud je argument "setup"
3
+ if (process.argv.includes("setup")) {
4
+ import("./cli/setup.js").then((m) => m.default());
116
5
  }
117
- main().catch((err) => {
118
- console.error("MCP server failed to start:", err);
119
- process.exit(1);
120
- });
6
+ else {
7
+ // MCP server standardní mód
8
+ import("./server.js").then((m) => m.startServer());
9
+ }
10
+ export {};
121
11
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ export declare function startServer(): Promise<void>;
2
+ //# sourceMappingURL=server.d.ts.map
package/dist/server.js ADDED
@@ -0,0 +1,174 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { loadConfig } from "./config.js";
4
+ import { ApiClient } from "./api-client.js";
5
+ // Tools
6
+ import { registerCreateTicket } from "./tools/create-ticket.js";
7
+ import { registerListTickets } from "./tools/list-tickets.js";
8
+ import { registerGetTicket } from "./tools/get-ticket.js";
9
+ import { registerUpdateTicket } from "./tools/update-ticket.js";
10
+ import { registerAddComment } from "./tools/add-comment.js";
11
+ import { registerUpdateImplementationItem } from "./tools/update-implementation-item.js";
12
+ import { registerSearchTickets } from "./tools/search-tickets.js";
13
+ import { registerTriageList } from "./tools/triage-list.js";
14
+ import { registerTriageAccept } from "./tools/triage-accept.js";
15
+ import { registerTriageReject } from "./tools/triage-reject.js";
16
+ import { registerListLabels } from "./tools/list-labels.js";
17
+ import { registerAddLabel } from "./tools/add-label.js";
18
+ import { registerRemoveLabel } from "./tools/remove-label.js";
19
+ import { registerListCycles } from "./tools/list-cycles.js";
20
+ import { registerAssignCycle } from "./tools/assign-cycle.js";
21
+ import { registerListEpics } from "./tools/list-epics.js";
22
+ import { registerAssignEpic } from "./tools/assign-epic.js";
23
+ import { registerPollDevQueue } from "./tools/poll-dev-queue.js";
24
+ import { registerCompleteDevTask } from "./tools/complete-dev-task.js";
25
+ import { registerWhoami } from "./tools/whoami.js";
26
+ import { registerAddRelation } from "./tools/add-relation.js";
27
+ import { registerRemoveRelation } from "./tools/remove-relation.js";
28
+ // Phase 2 — Skupina A: Workflow & Status Management
29
+ import { registerListStatuses } from "./tools/list-statuses.js";
30
+ import { registerListTransitions } from "./tools/list-transitions.js";
31
+ import { registerCreateStatus } from "./tools/create-status.js";
32
+ import { registerDeleteStatus } from "./tools/delete-status.js";
33
+ import { registerApplyPreset } from "./tools/apply-preset.js";
34
+ // Phase 2 — Skupina B: Project Management
35
+ import { registerListProjects } from "./tools/list-projects.js";
36
+ import { registerGetProject } from "./tools/get-project.js";
37
+ import { registerCreateProject } from "./tools/create-project.js";
38
+ // Phase 2 — Skupina C: Ticket Operations
39
+ import { registerDeleteTicket } from "./tools/delete-ticket.js";
40
+ import { registerGetBoard } from "./tools/get-board.js";
41
+ import { registerGetMyTasks } from "./tools/get-my-tasks.js";
42
+ import { registerListComments } from "./tools/list-comments.js";
43
+ // Phase 2 — Skupina D: Attachments
44
+ import { registerListAttachments } from "./tools/list-attachments.js";
45
+ import { registerDeleteAttachment } from "./tools/delete-attachment.js";
46
+ // Phase 2 — Skupina E: Cycles & Epics CRUD
47
+ import { registerCreateCycle } from "./tools/create-cycle.js";
48
+ import { registerCreateEpic } from "./tools/create-epic.js";
49
+ // Phase 2 — Skupina F: Implementation Items
50
+ import { registerCreateImplementationItem } from "./tools/create-implementation-item.js";
51
+ import { registerDeleteImplementationItem } from "./tools/delete-implementation-item.js";
52
+ // Phase 3 — Skupina A: Workflow & Status
53
+ import { registerUpdateTransitions } from "./tools/update-transitions.js";
54
+ import { registerUpdateStatus } from "./tools/update-status.js";
55
+ import { registerListWorkflowPresets } from "./tools/list-workflow-presets.js";
56
+ import { registerGetNextStatuses } from "./tools/get-next-statuses.js";
57
+ // Phase 3 — Skupina B: Comments & Activity
58
+ import { registerUpdateComment } from "./tools/update-comment.js";
59
+ import { registerDeleteComment } from "./tools/delete-comment.js";
60
+ // Phase 3 — Skupina C: Relations
61
+ import { registerListRelations } from "./tools/list-relations.js";
62
+ // Phase 3 — Skupina D: Dev Queue
63
+ import { registerFailDevTask } from "./tools/fail-dev-task.js";
64
+ import { registerListDevAssignments } from "./tools/list-dev-assignments.js";
65
+ // Phase 3 — Skupina E: Labels CRUD
66
+ import { registerCreateLabel } from "./tools/create-label.js";
67
+ import { registerUpdateLabel } from "./tools/update-label.js";
68
+ import { registerDeleteLabel } from "./tools/delete-label.js";
69
+ // Phase 3 — Skupina F: Cycles/Epics extras
70
+ import { registerUpdateCycle } from "./tools/update-cycle.js";
71
+ import { registerDeleteCycle } from "./tools/delete-cycle.js";
72
+ import { registerUpdateEpic } from "./tools/update-epic.js";
73
+ import { registerDeleteEpic } from "./tools/delete-epic.js";
74
+ // ADR-0026 Phase 2f: Project Members
75
+ import { registerListProjectMembers } from "./tools/list-project-members.js";
76
+ import { registerAddProjectMember } from "./tools/add-project-member.js";
77
+ import { registerUpdateProjectMemberRole } from "./tools/update-project-member-role.js";
78
+ import { registerRemoveProjectMember } from "./tools/remove-project-member.js";
79
+ // Resources
80
+ import { registerTicketResource } from "./resources/ticket-resource.js";
81
+ import { registerProjectResource } from "./resources/project-resource.js";
82
+ export async function startServer() {
83
+ const config = loadConfig();
84
+ const api = new ApiClient(config);
85
+ const server = new McpServer({
86
+ name: "tickr",
87
+ version: "0.1.5",
88
+ });
89
+ // Registrace tools
90
+ registerCreateTicket(server, api);
91
+ registerListTickets(server, api);
92
+ registerGetTicket(server, api);
93
+ registerUpdateTicket(server, api);
94
+ registerAddComment(server, api);
95
+ registerUpdateImplementationItem(server, api);
96
+ registerSearchTickets(server, api);
97
+ registerTriageList(server, api);
98
+ registerTriageAccept(server, api);
99
+ registerTriageReject(server, api);
100
+ registerListLabels(server, api);
101
+ registerAddLabel(server, api);
102
+ registerRemoveLabel(server, api);
103
+ registerListCycles(server, api);
104
+ registerAssignCycle(server, api);
105
+ registerListEpics(server, api);
106
+ registerAssignEpic(server, api);
107
+ registerPollDevQueue(server, api);
108
+ registerCompleteDevTask(server, api);
109
+ registerWhoami(server, api);
110
+ registerAddRelation(server, api);
111
+ registerRemoveRelation(server, api);
112
+ // Phase 2 — Skupina A: Workflow & Status Management
113
+ registerListStatuses(server, api);
114
+ registerListTransitions(server, api);
115
+ registerCreateStatus(server, api);
116
+ registerDeleteStatus(server, api);
117
+ registerApplyPreset(server, api);
118
+ // Phase 2 — Skupina B: Project Management
119
+ registerListProjects(server, api);
120
+ registerGetProject(server, api);
121
+ registerCreateProject(server, api);
122
+ // Phase 2 — Skupina C: Ticket Operations
123
+ registerDeleteTicket(server, api);
124
+ registerGetBoard(server, api);
125
+ registerGetMyTasks(server, api);
126
+ registerListComments(server, api);
127
+ // Phase 2 — Skupina D: Attachments
128
+ registerListAttachments(server, api);
129
+ registerDeleteAttachment(server, api);
130
+ // Phase 2 — Skupina E: Cycles & Epics CRUD
131
+ registerCreateCycle(server, api);
132
+ registerCreateEpic(server, api);
133
+ // Phase 2 — Skupina F: Implementation Items
134
+ registerCreateImplementationItem(server, api);
135
+ registerDeleteImplementationItem(server, api);
136
+ // Phase 3 — Skupina A: Workflow & Status
137
+ registerUpdateTransitions(server, api);
138
+ registerUpdateStatus(server, api);
139
+ registerListWorkflowPresets(server, api);
140
+ registerGetNextStatuses(server, api);
141
+ // Phase 3 — Skupina B: Comments & Activity
142
+ registerUpdateComment(server, api);
143
+ registerDeleteComment(server, api);
144
+ // Phase 3 — Skupina C: Relations
145
+ registerListRelations(server, api);
146
+ // Phase 3 — Skupina D: Dev Queue
147
+ registerFailDevTask(server, api);
148
+ registerListDevAssignments(server, api);
149
+ // Phase 3 — Skupina E: Labels CRUD
150
+ registerCreateLabel(server, api);
151
+ registerUpdateLabel(server, api);
152
+ registerDeleteLabel(server, api);
153
+ // Phase 3 — Skupina F: Cycles/Epics extras
154
+ registerUpdateCycle(server, api);
155
+ registerDeleteCycle(server, api);
156
+ registerUpdateEpic(server, api);
157
+ registerDeleteEpic(server, api);
158
+ // ADR-0026 Phase 2f: Project Members
159
+ registerListProjectMembers(server, api);
160
+ registerAddProjectMember(server, api);
161
+ registerUpdateProjectMemberRole(server, api);
162
+ registerRemoveProjectMember(server, api);
163
+ // Registrace resources
164
+ registerTicketResource(server, api);
165
+ registerProjectResource(server, api);
166
+ // Spuštění na stdio transportu
167
+ const transport = new StdioServerTransport();
168
+ await server.connect(transport);
169
+ }
170
+ startServer().catch((err) => {
171
+ console.error("MCP server failed to start:", err);
172
+ process.exit(1);
173
+ });
174
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerAddProjectMember(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=add-project-member.d.ts.map
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ export function registerAddProjectMember(server, api) {
3
+ server.tool("add_project_member", "Add a member to a project with a specific role", {
4
+ project: z.string().describe("Project slug"),
5
+ user_id: z.string().describe("UUID of the user to add"),
6
+ role: z
7
+ .enum(["Viewer", "Developer", "Analytic", "Editor", "ProjectAdmin"])
8
+ .describe("Project role for the user"),
9
+ }, async (params) => {
10
+ try {
11
+ await api.post(`/api/projects/${params.project}/members`, {
12
+ userId: params.user_id,
13
+ role: params.role,
14
+ });
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: `Member added to project "${params.project}" with role ${params.role}`,
20
+ },
21
+ ],
22
+ };
23
+ }
24
+ catch (err) {
25
+ return {
26
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
27
+ isError: true,
28
+ };
29
+ }
30
+ });
31
+ }
32
+ //# sourceMappingURL=add-project-member.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerCreateLabel(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=create-label.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ export function registerCreateLabel(server, api) {
3
+ server.tool("create_label", "Create a new label in a project", {
4
+ project: z.string().describe("Project slug"),
5
+ name: z.string().describe("Label name"),
6
+ color: z.string().describe("Hex color code, e.g. '#ef4444'"),
7
+ }, async (params) => {
8
+ try {
9
+ const result = await api.post(`/api/projects/${params.project}/labels`, {
10
+ name: params.name,
11
+ color: params.color,
12
+ });
13
+ return {
14
+ content: [
15
+ {
16
+ type: "text",
17
+ text: `Created label "${result.name}" (${result.id}) with color ${result.color}`,
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (err) {
23
+ return {
24
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
25
+ isError: true,
26
+ };
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=create-label.js.map
@@ -8,6 +8,7 @@ export function registerCreateTicket(server, api) {
8
8
  priority: z.enum(["P0", "P1", "P2", "P3"]).default("P2"),
9
9
  content: z.string().optional().describe("Markdown content (analysis, solution)"),
10
10
  affected_parts: z.array(z.string()).optional(),
11
+ due_date: z.string().optional().describe("Due date in YYYY-MM-DD format"),
11
12
  }, async (params) => {
12
13
  try {
13
14
  // Unescapovat double-escaped newlines z MCP tool parametrů
@@ -19,6 +20,7 @@ export function registerCreateTicket(server, api) {
19
20
  priority: params.priority,
20
21
  content,
21
22
  affectedParts: params.affected_parts,
23
+ dueDate: params.due_date,
22
24
  });
23
25
  return {
24
26
  content: [
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerDeleteComment(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=delete-comment.d.ts.map
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ export function registerDeleteComment(server, api) {
3
+ server.tool("delete_comment", "Delete a comment", {
4
+ comment_id: z.string().describe("UUID of the comment to delete"),
5
+ }, async (params) => {
6
+ try {
7
+ await api.delete(`/api/comments/${params.comment_id}`);
8
+ return {
9
+ content: [
10
+ { type: "text", text: `Comment ${params.comment_id} deleted` },
11
+ ],
12
+ };
13
+ }
14
+ catch (err) {
15
+ return {
16
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
17
+ isError: true,
18
+ };
19
+ }
20
+ });
21
+ }
22
+ //# sourceMappingURL=delete-comment.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerDeleteCycle(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=delete-cycle.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ export function registerDeleteCycle(server, api) {
3
+ server.tool("delete_cycle", "Delete a cycle (sprint) from a project", {
4
+ project: z.string().describe("Project slug"),
5
+ cycle_id: z.string().describe("UUID of the cycle to delete"),
6
+ }, async (params) => {
7
+ try {
8
+ await api.delete(`/api/projects/${params.project}/cycles/${params.cycle_id}`);
9
+ return {
10
+ content: [
11
+ {
12
+ type: "text",
13
+ text: `Cycle ${params.cycle_id} deleted from project ${params.project}`,
14
+ },
15
+ ],
16
+ };
17
+ }
18
+ catch (err) {
19
+ return {
20
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
21
+ isError: true,
22
+ };
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=delete-cycle.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerDeleteEpic(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=delete-epic.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ export function registerDeleteEpic(server, api) {
3
+ server.tool("delete_epic", "Delete an epic from a project", {
4
+ project: z.string().describe("Project slug"),
5
+ epic_id: z.string().describe("UUID of the epic to delete"),
6
+ }, async (params) => {
7
+ try {
8
+ await api.delete(`/api/projects/${params.project}/epics/${params.epic_id}`);
9
+ return {
10
+ content: [
11
+ {
12
+ type: "text",
13
+ text: `Epic ${params.epic_id} deleted from project ${params.project}`,
14
+ },
15
+ ],
16
+ };
17
+ }
18
+ catch (err) {
19
+ return {
20
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
21
+ isError: true,
22
+ };
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=delete-epic.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerDeleteLabel(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=delete-label.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ export function registerDeleteLabel(server, api) {
3
+ server.tool("delete_label", "Delete a label from a project", {
4
+ project: z.string().describe("Project slug"),
5
+ label_id: z.string().describe("UUID of the label to delete"),
6
+ }, async (params) => {
7
+ try {
8
+ await api.delete(`/api/projects/${params.project}/labels/${params.label_id}`);
9
+ return {
10
+ content: [
11
+ {
12
+ type: "text",
13
+ text: `Label ${params.label_id} deleted from project ${params.project}`,
14
+ },
15
+ ],
16
+ };
17
+ }
18
+ catch (err) {
19
+ return {
20
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
21
+ isError: true,
22
+ };
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=delete-label.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerFailDevTask(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=fail-dev-task.d.ts.map
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ export function registerFailDevTask(server, api) {
3
+ server.tool("fail_dev_task", "Mark a dev agent task as failed with a reason", {
4
+ assignment_id: z.string().describe("UUID of the dev agent assignment"),
5
+ reason: z.string().describe("Reason why the task failed"),
6
+ }, async (params) => {
7
+ try {
8
+ const reason = params.reason.replace(/\\n/g, "\n");
9
+ await api.post(`/api/dev-queue/fail/${params.assignment_id}`, {
10
+ reason,
11
+ });
12
+ return {
13
+ content: [
14
+ {
15
+ type: "text",
16
+ text: `Task ${params.assignment_id} marked as failed.`,
17
+ },
18
+ ],
19
+ };
20
+ }
21
+ catch (err) {
22
+ return {
23
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
24
+ isError: true,
25
+ };
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=fail-dev-task.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerGetNextStatuses(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=get-next-statuses.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ export function registerGetNextStatuses(server, api) {
3
+ server.tool("get_next_statuses", "Get available next statuses for a ticket (based on current status and user role)", {
4
+ number: z.string().describe("Ticket display number, e.g. 'TKR-42' or 'TKR-BUG-0042'"),
5
+ }, async (params) => {
6
+ try {
7
+ const statuses = await api.get(`/api/tickets/${params.number}/next-statuses`);
8
+ if (statuses.length === 0) {
9
+ return {
10
+ content: [{ type: "text", text: `No available transitions for ${params.number}` }],
11
+ };
12
+ }
13
+ const lines = [
14
+ "| # | Status | Emoji | Color | Category |",
15
+ "|---|--------|-------|-------|----------|",
16
+ ...statuses.map((s, i) => `| ${i + 1} | ${s.name} | ${s.emoji || "-"} | ${s.color} | ${s.category} |`),
17
+ ];
18
+ return {
19
+ content: [{ type: "text", text: lines.join("\n") }],
20
+ };
21
+ }
22
+ catch (err) {
23
+ return {
24
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
25
+ isError: true,
26
+ };
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=get-next-statuses.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerListDevAssignments(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=list-dev-assignments.d.ts.map
@@ -0,0 +1,27 @@
1
+ export function registerListDevAssignments(server, api) {
2
+ server.tool("list_dev_assignments", "List all dev queue assignments (pending, in-progress, completed, failed)", {}, async () => {
3
+ try {
4
+ const assignments = await api.get("/api/dev-queue/assignments");
5
+ if (assignments.length === 0) {
6
+ return {
7
+ content: [{ type: "text", text: "No dev assignments found." }],
8
+ };
9
+ }
10
+ const lines = [
11
+ "| # | Ticket | Title | Status | Agent | Assigned | Completed |",
12
+ "|---|--------|-------|--------|-------|----------|-----------|",
13
+ ...assignments.map((a, i) => `| ${i + 1} | ${a.ticketDisplayNumber} | ${a.ticketTitle} | ${a.status} | ${a.agentName || "-"} | ${a.assignedAt} | ${a.completedAt || "-"} |`),
14
+ ];
15
+ return {
16
+ content: [{ type: "text", text: lines.join("\n") }],
17
+ };
18
+ }
19
+ catch (err) {
20
+ return {
21
+ content: [{ type: "text", text: `Error: ${err instanceof Error ? err.message : String(err)}` }],
22
+ isError: true,
23
+ };
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=list-dev-assignments.js.map
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ApiClient } from "../api-client.js";
3
+ export declare function registerListProjectMembers(server: McpServer, api: ApiClient): void;
4
+ //# sourceMappingURL=list-project-members.d.ts.map