snboard-mcp 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +748 -1362
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -50,45 +50,13 @@ var kanbanApi = {
|
|
|
50
50
|
return api(`/api/projects${query ? `?${query}` : ""}`);
|
|
51
51
|
},
|
|
52
52
|
createProject: (data) => api("/api/projects", { method: "POST", body: JSON.stringify(data) }),
|
|
53
|
-
getProject: (id
|
|
54
|
-
const searchParams = new URLSearchParams();
|
|
55
|
-
if (params?.includeBoards) searchParams.set("includeBoards", "true");
|
|
56
|
-
if (params?.boardsCompact) searchParams.set("boardsCompact", "true");
|
|
57
|
-
const query = searchParams.toString();
|
|
58
|
-
return api(`/api/projects/${id}${query ? `?${query}` : ""}`);
|
|
59
|
-
},
|
|
53
|
+
getProject: (id) => api(`/api/projects/${id}`),
|
|
60
54
|
updateProject: (id, data) => api(`/api/projects/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
61
55
|
deleteProject: (id) => api(`/api/projects/${id}`, { method: "DELETE" }),
|
|
62
56
|
reorderProjects: (projectId, targetProjectId, folderId) => api("/api/projects/reorder", {
|
|
63
57
|
method: "POST",
|
|
64
58
|
body: JSON.stringify({ projectId, targetProjectId, folderId })
|
|
65
59
|
}),
|
|
66
|
-
// Boards
|
|
67
|
-
listBoards: (params) => {
|
|
68
|
-
const searchParams = new URLSearchParams();
|
|
69
|
-
if (params?.projectId) searchParams.set("projectId", params.projectId);
|
|
70
|
-
if (params?.limit) searchParams.set("limit", params.limit.toString());
|
|
71
|
-
if (params?.compact) searchParams.set("compact", "true");
|
|
72
|
-
const query = searchParams.toString();
|
|
73
|
-
return api(`/api/boards${query ? `?${query}` : ""}`);
|
|
74
|
-
},
|
|
75
|
-
createBoard: (data) => api("/api/boards", { method: "POST", body: JSON.stringify(data) }),
|
|
76
|
-
getBoard: (id, params) => {
|
|
77
|
-
const searchParams = new URLSearchParams();
|
|
78
|
-
if (params?.columnId) searchParams.set("columnId", params.columnId);
|
|
79
|
-
if (params?.includeCards) {
|
|
80
|
-
searchParams.set("includeCards", "true");
|
|
81
|
-
searchParams.set("cardLimit", (params?.cardLimit || 10).toString());
|
|
82
|
-
}
|
|
83
|
-
if (params?.includeTags) searchParams.set("includeTags", "true");
|
|
84
|
-
if (params?.includeComments) searchParams.set("includeComments", "true");
|
|
85
|
-
if (params?.compact) searchParams.set("compact", "true");
|
|
86
|
-
if (params?.priority) searchParams.set("priority", params.priority);
|
|
87
|
-
const query = searchParams.toString();
|
|
88
|
-
return api(`/api/boards/${id}${query ? `?${query}` : ""}`);
|
|
89
|
-
},
|
|
90
|
-
updateBoard: (id, data) => api(`/api/boards/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
91
|
-
deleteBoard: (id) => api(`/api/boards/${id}`, { method: "DELETE" }),
|
|
92
60
|
// Columns
|
|
93
61
|
createColumn: (data) => api("/api/columns", { method: "POST", body: JSON.stringify(data) }),
|
|
94
62
|
updateColumn: (id, data) => api(`/api/columns/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
@@ -110,7 +78,7 @@ var kanbanApi = {
|
|
|
110
78
|
method: "PUT",
|
|
111
79
|
body: JSON.stringify({ isArchived: false })
|
|
112
80
|
}),
|
|
113
|
-
listArchivedCards: (
|
|
81
|
+
listArchivedCards: (projectId) => api(`/api/archived?projectId=${projectId}`),
|
|
114
82
|
moveCard: (id, targetColumnId, newOrder) => api("/api/cards/move", {
|
|
115
83
|
method: "POST",
|
|
116
84
|
body: JSON.stringify({
|
|
@@ -124,7 +92,6 @@ var kanbanApi = {
|
|
|
124
92
|
const searchParams = new URLSearchParams();
|
|
125
93
|
searchParams.set("query", params.query);
|
|
126
94
|
if (params.projectId) searchParams.set("projectId", params.projectId);
|
|
127
|
-
if (params.boardId) searchParams.set("boardId", params.boardId);
|
|
128
95
|
if (params.columnId) searchParams.set("columnId", params.columnId);
|
|
129
96
|
if (params.epicId) searchParams.set("epicId", params.epicId);
|
|
130
97
|
if (params.featureId) searchParams.set("featureId", params.featureId);
|
|
@@ -254,26 +221,18 @@ var kanbanApi = {
|
|
|
254
221
|
},
|
|
255
222
|
// Aggregated views
|
|
256
223
|
getWorkspace: async (projectId) => {
|
|
257
|
-
const project = await api(
|
|
258
|
-
`/api/projects/${projectId}?includeBoards=true&boardsCompact=true`
|
|
259
|
-
);
|
|
260
|
-
if (!project.boards?.length) return { project, boards: [] };
|
|
261
|
-
const boardsWithColumns = await Promise.all(
|
|
262
|
-
project.boards.map((b) => api(`/api/boards/${b.id}`))
|
|
263
|
-
);
|
|
224
|
+
const project = await api(`/api/projects/${projectId}`);
|
|
264
225
|
return {
|
|
265
226
|
project: { id: project.id, name: project.name },
|
|
266
|
-
|
|
227
|
+
columns: project.columns || []
|
|
267
228
|
};
|
|
268
229
|
},
|
|
269
|
-
|
|
270
|
-
const
|
|
271
|
-
`/api/boards/${boardId}?includeCards=true&compact=true`
|
|
272
|
-
);
|
|
230
|
+
getProjectSummary: async (projectId) => {
|
|
231
|
+
const project = await api(`/api/projects/${projectId}`);
|
|
273
232
|
const summary = {
|
|
274
|
-
id:
|
|
275
|
-
name:
|
|
276
|
-
columns:
|
|
233
|
+
id: project.id,
|
|
234
|
+
name: project.name,
|
|
235
|
+
columns: (project.columns || []).map((col) => ({
|
|
277
236
|
id: col.id,
|
|
278
237
|
name: col.name,
|
|
279
238
|
cardCount: col.cards?.length || 0,
|
|
@@ -281,7 +240,7 @@ var kanbanApi = {
|
|
|
281
240
|
p2Count: col.cards?.filter((c) => c.priority === "P2").length || 0,
|
|
282
241
|
p3Count: col.cards?.filter((c) => c.priority === "P3").length || 0
|
|
283
242
|
})),
|
|
284
|
-
totalCards:
|
|
243
|
+
totalCards: (project.columns || []).reduce(
|
|
285
244
|
(sum, col) => sum + (col.cards?.length || 0),
|
|
286
245
|
0
|
|
287
246
|
)
|
|
@@ -453,1429 +412,856 @@ var server = new Server(
|
|
|
453
412
|
);
|
|
454
413
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
455
414
|
tools: [
|
|
456
|
-
// FOLDERS
|
|
457
|
-
{
|
|
458
|
-
name: "list_folders",
|
|
459
|
-
description: "List all folders with their projects",
|
|
460
|
-
inputSchema: { type: "object", properties: {} }
|
|
461
|
-
},
|
|
462
|
-
{
|
|
463
|
-
name: "create_folder",
|
|
464
|
-
description: "Create a new folder to organize projects",
|
|
465
|
-
inputSchema: {
|
|
466
|
-
type: "object",
|
|
467
|
-
properties: {
|
|
468
|
-
name: { type: "string" },
|
|
469
|
-
icon: { type: "string" },
|
|
470
|
-
color: { type: "string" }
|
|
471
|
-
},
|
|
472
|
-
required: ["name"]
|
|
473
|
-
}
|
|
474
|
-
},
|
|
475
|
-
{
|
|
476
|
-
name: "update_folder",
|
|
477
|
-
description: "Update a folder (name, icon, color)",
|
|
478
|
-
inputSchema: {
|
|
479
|
-
type: "object",
|
|
480
|
-
properties: {
|
|
481
|
-
folderId: { type: "string" },
|
|
482
|
-
name: { type: "string" },
|
|
483
|
-
icon: { type: "string" },
|
|
484
|
-
color: { type: "string" }
|
|
485
|
-
},
|
|
486
|
-
required: ["folderId"]
|
|
487
|
-
}
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
name: "delete_folder",
|
|
491
|
-
description: "Delete a folder (projects become orphans)",
|
|
492
|
-
inputSchema: {
|
|
493
|
-
type: "object",
|
|
494
|
-
properties: { folderId: { type: "string" } },
|
|
495
|
-
required: ["folderId"]
|
|
496
|
-
}
|
|
497
|
-
},
|
|
498
|
-
{
|
|
499
|
-
name: "move_project_to_folder",
|
|
500
|
-
description: "Move project to folder (null to remove)",
|
|
501
|
-
inputSchema: {
|
|
502
|
-
type: "object",
|
|
503
|
-
properties: {
|
|
504
|
-
projectId: { type: "string" },
|
|
505
|
-
folderId: { type: "string" }
|
|
506
|
-
},
|
|
507
|
-
required: ["projectId"]
|
|
508
|
-
}
|
|
509
|
-
},
|
|
415
|
+
// 1. FOLDERS
|
|
510
416
|
{
|
|
511
|
-
name: "
|
|
512
|
-
description: "
|
|
417
|
+
name: "manage_folders",
|
|
418
|
+
description: "Folder operations. Actions: list, create, update, delete, reorder, move_project",
|
|
513
419
|
inputSchema: {
|
|
514
420
|
type: "object",
|
|
515
421
|
properties: {
|
|
516
|
-
|
|
517
|
-
|
|
422
|
+
action: {
|
|
423
|
+
type: "string",
|
|
424
|
+
enum: [
|
|
425
|
+
"list",
|
|
426
|
+
"create",
|
|
427
|
+
"update",
|
|
428
|
+
"delete",
|
|
429
|
+
"reorder",
|
|
430
|
+
"move_project"
|
|
431
|
+
]
|
|
432
|
+
},
|
|
433
|
+
folderId: { type: "string", description: "update/delete/reorder" },
|
|
434
|
+
name: { type: "string", description: "create/update" },
|
|
435
|
+
icon: { type: "string", description: "create/update" },
|
|
436
|
+
color: { type: "string", description: "create/update" },
|
|
437
|
+
targetFolderId: { type: "string", description: "reorder" },
|
|
438
|
+
projectId: { type: "string", description: "move_project" }
|
|
518
439
|
},
|
|
519
|
-
required: ["
|
|
440
|
+
required: ["action"]
|
|
520
441
|
}
|
|
521
442
|
},
|
|
522
|
-
// PROJECTS
|
|
443
|
+
// 2. PROJECTS
|
|
523
444
|
{
|
|
524
|
-
name: "
|
|
525
|
-
description: "
|
|
445
|
+
name: "manage_projects",
|
|
446
|
+
description: "Project operations. Actions: list, create, get, update, delete, reorder, get_summary, get_workspace",
|
|
526
447
|
inputSchema: {
|
|
527
448
|
type: "object",
|
|
528
449
|
properties: {
|
|
450
|
+
action: {
|
|
451
|
+
type: "string",
|
|
452
|
+
enum: [
|
|
453
|
+
"list",
|
|
454
|
+
"create",
|
|
455
|
+
"get",
|
|
456
|
+
"update",
|
|
457
|
+
"delete",
|
|
458
|
+
"reorder",
|
|
459
|
+
"get_summary",
|
|
460
|
+
"get_workspace"
|
|
461
|
+
]
|
|
462
|
+
},
|
|
463
|
+
projectId: {
|
|
464
|
+
type: "string",
|
|
465
|
+
description: "get/update/delete/reorder/get_summary/get_workspace"
|
|
466
|
+
},
|
|
467
|
+
name: { type: "string", description: "create/update" },
|
|
468
|
+
description: { type: "string", description: "create/update" },
|
|
469
|
+
emoji: { type: "string", description: "create/update" },
|
|
470
|
+
color: { type: "string", description: "create/update" },
|
|
529
471
|
folderId: {
|
|
530
472
|
type: "string",
|
|
531
|
-
description: '
|
|
473
|
+
description: 'list: filter by folder ("none" for orphans). create/update: assign to folder. reorder: folder context'
|
|
532
474
|
},
|
|
533
|
-
limit: { type: "number" },
|
|
534
|
-
compact: { type: "boolean" }
|
|
535
|
-
|
|
536
|
-
}
|
|
537
|
-
},
|
|
538
|
-
{
|
|
539
|
-
name: "create_project",
|
|
540
|
-
description: "Create a new project",
|
|
541
|
-
inputSchema: {
|
|
542
|
-
type: "object",
|
|
543
|
-
properties: {
|
|
544
|
-
name: { type: "string" },
|
|
545
|
-
description: { type: "string" },
|
|
546
|
-
emoji: { type: "string" },
|
|
547
|
-
color: { type: "string" },
|
|
548
|
-
folderId: { type: "string" }
|
|
475
|
+
limit: { type: "number", description: "list (default:20)" },
|
|
476
|
+
compact: { type: "boolean", description: "list" },
|
|
477
|
+
targetProjectId: { type: "string", description: "reorder" }
|
|
549
478
|
},
|
|
550
|
-
required: ["
|
|
479
|
+
required: ["action"]
|
|
551
480
|
}
|
|
552
481
|
},
|
|
482
|
+
// 3. COLUMNS
|
|
553
483
|
{
|
|
554
|
-
name: "
|
|
555
|
-
description: "
|
|
484
|
+
name: "manage_columns",
|
|
485
|
+
description: "Column operations. Actions: create, update, delete, reorder",
|
|
556
486
|
inputSchema: {
|
|
557
487
|
type: "object",
|
|
558
488
|
properties: {
|
|
559
|
-
|
|
560
|
-
includeBoards: { type: "boolean" },
|
|
561
|
-
boardsCompact: { type: "boolean" }
|
|
562
|
-
},
|
|
563
|
-
required: ["projectId"]
|
|
564
|
-
}
|
|
565
|
-
},
|
|
566
|
-
{
|
|
567
|
-
name: "update_project",
|
|
568
|
-
description: "Update project",
|
|
569
|
-
inputSchema: {
|
|
570
|
-
type: "object",
|
|
571
|
-
properties: {
|
|
572
|
-
projectId: { type: "string" },
|
|
573
|
-
name: { type: "string" },
|
|
574
|
-
description: { type: "string" },
|
|
575
|
-
emoji: { type: "string" },
|
|
576
|
-
color: { type: "string" },
|
|
577
|
-
folderId: {
|
|
489
|
+
action: {
|
|
578
490
|
type: "string",
|
|
579
|
-
|
|
491
|
+
enum: ["create", "update", "delete", "reorder"]
|
|
492
|
+
},
|
|
493
|
+
columnId: { type: "string", description: "update/delete" },
|
|
494
|
+
projectId: { type: "string", description: "create" },
|
|
495
|
+
name: { type: "string", description: "create/update" },
|
|
496
|
+
emoji: { type: "string", description: "create/update" },
|
|
497
|
+
columns: {
|
|
498
|
+
type: "array",
|
|
499
|
+
items: {
|
|
500
|
+
type: "object",
|
|
501
|
+
properties: {
|
|
502
|
+
id: { type: "string" },
|
|
503
|
+
order: { type: "number" }
|
|
504
|
+
},
|
|
505
|
+
required: ["id", "order"]
|
|
506
|
+
},
|
|
507
|
+
description: "reorder: array of {id, order}"
|
|
580
508
|
}
|
|
581
509
|
},
|
|
582
|
-
required: ["
|
|
583
|
-
}
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
name: "delete_project",
|
|
587
|
-
description: "Delete project and all its content",
|
|
588
|
-
inputSchema: {
|
|
589
|
-
type: "object",
|
|
590
|
-
properties: { projectId: { type: "string" } },
|
|
591
|
-
required: ["projectId"]
|
|
510
|
+
required: ["action"]
|
|
592
511
|
}
|
|
593
512
|
},
|
|
513
|
+
// 4. CARDS
|
|
594
514
|
{
|
|
595
|
-
name: "
|
|
596
|
-
description: "
|
|
515
|
+
name: "manage_cards",
|
|
516
|
+
description: "Card operations. Actions: get, create, update, delete, move, archive, unarchive, list_archived, search, get_branch_name, bulk_create, quick_add, bulk_move, move_by_column",
|
|
597
517
|
inputSchema: {
|
|
598
518
|
type: "object",
|
|
599
519
|
properties: {
|
|
600
|
-
|
|
601
|
-
targetProjectId: { type: "string" },
|
|
602
|
-
folderId: {
|
|
520
|
+
action: {
|
|
603
521
|
type: "string",
|
|
604
|
-
|
|
605
|
-
|
|
522
|
+
enum: [
|
|
523
|
+
"get",
|
|
524
|
+
"create",
|
|
525
|
+
"update",
|
|
526
|
+
"delete",
|
|
527
|
+
"move",
|
|
528
|
+
"archive",
|
|
529
|
+
"unarchive",
|
|
530
|
+
"list_archived",
|
|
531
|
+
"search",
|
|
532
|
+
"get_branch_name",
|
|
533
|
+
"bulk_create",
|
|
534
|
+
"quick_add",
|
|
535
|
+
"bulk_move",
|
|
536
|
+
"move_by_column"
|
|
537
|
+
]
|
|
538
|
+
},
|
|
539
|
+
cardId: {
|
|
540
|
+
type: "string",
|
|
541
|
+
description: "get/update/delete/move/archive/unarchive/get_branch_name"
|
|
542
|
+
},
|
|
543
|
+
columnId: {
|
|
544
|
+
type: "string",
|
|
545
|
+
description: "create/bulk_create/quick_add"
|
|
546
|
+
},
|
|
547
|
+
title: { type: "string", description: "create" },
|
|
548
|
+
description: { type: "string", description: "create/update" },
|
|
549
|
+
priority: {
|
|
550
|
+
type: "string",
|
|
551
|
+
enum: ["P1", "P2", "P3"],
|
|
552
|
+
description: "create/update"
|
|
553
|
+
},
|
|
554
|
+
dueDate: { type: "string", description: "create/update" },
|
|
555
|
+
epicId: { type: "string", description: "create/search" },
|
|
556
|
+
tagIds: {
|
|
557
|
+
type: "array",
|
|
558
|
+
items: { type: "string" },
|
|
559
|
+
description: "create/update: replace all tags. search: filter"
|
|
560
|
+
},
|
|
561
|
+
estimatedMinutes: { type: "number", description: "create/update" },
|
|
562
|
+
cognitiveLoad: { type: "string", description: "create/update" },
|
|
563
|
+
githubBranch: { type: "string", description: "update" },
|
|
564
|
+
githubPrUrl: { type: "string", description: "update" },
|
|
565
|
+
isArchived: { type: "boolean", description: "update" },
|
|
566
|
+
targetColumnId: {
|
|
567
|
+
type: "string",
|
|
568
|
+
description: "move/bulk_move/move_by_column"
|
|
569
|
+
},
|
|
570
|
+
newOrder: {
|
|
571
|
+
type: "number",
|
|
572
|
+
description: "move: position (0-indexed)"
|
|
573
|
+
},
|
|
574
|
+
query: { type: "string", description: "search" },
|
|
575
|
+
projectId: { type: "string", description: "list_archived/search" },
|
|
576
|
+
featureId: { type: "string", description: "search" },
|
|
577
|
+
hasEpic: { type: "boolean", description: "search" },
|
|
578
|
+
status: {
|
|
579
|
+
type: "string",
|
|
580
|
+
enum: ["todo", "in_progress", "done"],
|
|
581
|
+
description: "search"
|
|
582
|
+
},
|
|
583
|
+
limit: { type: "number", description: "search/move_by_column" },
|
|
584
|
+
compact: { type: "boolean", description: "search" },
|
|
585
|
+
type: {
|
|
586
|
+
type: "string",
|
|
587
|
+
enum: ["feature", "fix", "chore", "refactor", "docs"],
|
|
588
|
+
description: "get_branch_name"
|
|
589
|
+
},
|
|
590
|
+
cards: {
|
|
591
|
+
type: "array",
|
|
592
|
+
items: {
|
|
593
|
+
type: "object",
|
|
594
|
+
properties: {
|
|
595
|
+
title: { type: "string" },
|
|
596
|
+
description: { type: "string" },
|
|
597
|
+
priority: { type: "string", enum: ["P1", "P2", "P3"] },
|
|
598
|
+
epicId: { type: "string" }
|
|
599
|
+
},
|
|
600
|
+
required: ["title"]
|
|
601
|
+
},
|
|
602
|
+
description: "bulk_create"
|
|
603
|
+
},
|
|
604
|
+
text: {
|
|
605
|
+
type: "string",
|
|
606
|
+
description: "quick_add: multiline text, 1 card per line"
|
|
607
|
+
},
|
|
608
|
+
defaultPriority: {
|
|
609
|
+
type: "string",
|
|
610
|
+
enum: ["P1", "P2", "P3"],
|
|
611
|
+
description: "quick_add"
|
|
612
|
+
},
|
|
613
|
+
cardIds: {
|
|
614
|
+
type: "array",
|
|
615
|
+
items: { type: "string" },
|
|
616
|
+
description: "bulk_move"
|
|
617
|
+
},
|
|
618
|
+
sourceColumnId: { type: "string", description: "move_by_column" }
|
|
606
619
|
},
|
|
607
|
-
required: ["
|
|
620
|
+
required: ["action"]
|
|
608
621
|
}
|
|
609
622
|
},
|
|
610
|
-
//
|
|
623
|
+
// 5. COMMENTS
|
|
611
624
|
{
|
|
612
|
-
name: "
|
|
613
|
-
description: "
|
|
625
|
+
name: "manage_comments",
|
|
626
|
+
description: "Comment operations. Actions: add, delete",
|
|
614
627
|
inputSchema: {
|
|
615
628
|
type: "object",
|
|
616
629
|
properties: {
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
630
|
+
action: { type: "string", enum: ["add", "delete"] },
|
|
631
|
+
cardId: { type: "string", description: "add" },
|
|
632
|
+
content: { type: "string", description: "add" },
|
|
633
|
+
commentId: { type: "string", description: "delete" }
|
|
620
634
|
},
|
|
621
|
-
required: ["
|
|
622
|
-
}
|
|
623
|
-
},
|
|
624
|
-
{
|
|
625
|
-
name: "create_board",
|
|
626
|
-
description: "Create board with default columns",
|
|
627
|
-
inputSchema: {
|
|
628
|
-
type: "object",
|
|
629
|
-
properties: { projectId: { type: "string" }, name: { type: "string" } },
|
|
630
|
-
required: ["projectId", "name"]
|
|
635
|
+
required: ["action"]
|
|
631
636
|
}
|
|
632
637
|
},
|
|
638
|
+
// 6. CHECKLISTS
|
|
633
639
|
{
|
|
634
|
-
name: "
|
|
635
|
-
description: "
|
|
640
|
+
name: "manage_checklists",
|
|
641
|
+
description: "Checklist operations. Actions: create, update, delete, create_item, update_item, delete_item",
|
|
636
642
|
inputSchema: {
|
|
637
643
|
type: "object",
|
|
638
644
|
properties: {
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
645
|
+
action: {
|
|
646
|
+
type: "string",
|
|
647
|
+
enum: [
|
|
648
|
+
"create",
|
|
649
|
+
"update",
|
|
650
|
+
"delete",
|
|
651
|
+
"create_item",
|
|
652
|
+
"update_item",
|
|
653
|
+
"delete_item"
|
|
654
|
+
]
|
|
644
655
|
},
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
656
|
+
cardId: { type: "string", description: "create" },
|
|
657
|
+
checklistId: {
|
|
658
|
+
type: "string",
|
|
659
|
+
description: "update/delete/create_item"
|
|
648
660
|
},
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
661
|
+
title: { type: "string", description: "create/update" },
|
|
662
|
+
itemId: { type: "string", description: "update_item/delete_item" },
|
|
663
|
+
content: {
|
|
664
|
+
type: "string",
|
|
665
|
+
description: "create_item/update_item"
|
|
653
666
|
},
|
|
654
|
-
|
|
655
|
-
includeComments: {
|
|
656
|
-
type: "boolean",
|
|
657
|
-
description: "Include comments (max 5)"
|
|
658
|
-
}
|
|
659
|
-
},
|
|
660
|
-
required: ["boardId"]
|
|
661
|
-
}
|
|
662
|
-
},
|
|
663
|
-
{
|
|
664
|
-
name: "update_board",
|
|
665
|
-
description: "Rename a board",
|
|
666
|
-
inputSchema: {
|
|
667
|
-
type: "object",
|
|
668
|
-
properties: { boardId: { type: "string" }, name: { type: "string" } },
|
|
669
|
-
required: ["boardId", "name"]
|
|
670
|
-
}
|
|
671
|
-
},
|
|
672
|
-
{
|
|
673
|
-
name: "delete_board",
|
|
674
|
-
description: "Delete board and all content",
|
|
675
|
-
inputSchema: {
|
|
676
|
-
type: "object",
|
|
677
|
-
properties: { boardId: { type: "string" } },
|
|
678
|
-
required: ["boardId"]
|
|
679
|
-
}
|
|
680
|
-
},
|
|
681
|
-
// COLUMNS
|
|
682
|
-
{
|
|
683
|
-
name: "create_column",
|
|
684
|
-
description: "Create column in board",
|
|
685
|
-
inputSchema: {
|
|
686
|
-
type: "object",
|
|
687
|
-
properties: {
|
|
688
|
-
boardId: { type: "string" },
|
|
689
|
-
name: { type: "string" },
|
|
690
|
-
emoji: { type: "string" }
|
|
667
|
+
completed: { type: "boolean", description: "update_item" }
|
|
691
668
|
},
|
|
692
|
-
required: ["
|
|
669
|
+
required: ["action"]
|
|
693
670
|
}
|
|
694
671
|
},
|
|
672
|
+
// 7. TAGS
|
|
695
673
|
{
|
|
696
|
-
name: "
|
|
697
|
-
description: "
|
|
674
|
+
name: "manage_tags",
|
|
675
|
+
description: "Tag operations. Actions: list, create, delete, add_to_card, remove_from_card",
|
|
698
676
|
inputSchema: {
|
|
699
677
|
type: "object",
|
|
700
678
|
properties: {
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
679
|
+
action: {
|
|
680
|
+
type: "string",
|
|
681
|
+
enum: [
|
|
682
|
+
"list",
|
|
683
|
+
"create",
|
|
684
|
+
"delete",
|
|
685
|
+
"add_to_card",
|
|
686
|
+
"remove_from_card"
|
|
687
|
+
]
|
|
688
|
+
},
|
|
689
|
+
tagId: {
|
|
690
|
+
type: "string",
|
|
691
|
+
description: "delete/add_to_card/remove_from_card"
|
|
692
|
+
},
|
|
693
|
+
name: { type: "string", description: "create" },
|
|
694
|
+
color: { type: "string", description: "create" },
|
|
695
|
+
cardId: {
|
|
696
|
+
type: "string",
|
|
697
|
+
description: "add_to_card/remove_from_card"
|
|
698
|
+
}
|
|
704
699
|
},
|
|
705
|
-
required: ["
|
|
706
|
-
}
|
|
707
|
-
},
|
|
708
|
-
{
|
|
709
|
-
name: "delete_column",
|
|
710
|
-
description: "Delete column and cards",
|
|
711
|
-
inputSchema: {
|
|
712
|
-
type: "object",
|
|
713
|
-
properties: { columnId: { type: "string" } },
|
|
714
|
-
required: ["columnId"]
|
|
700
|
+
required: ["action"]
|
|
715
701
|
}
|
|
716
702
|
},
|
|
703
|
+
// 8. EPICS
|
|
717
704
|
{
|
|
718
|
-
name: "
|
|
719
|
-
description: "
|
|
705
|
+
name: "manage_epics",
|
|
706
|
+
description: "Epic operations. Actions: list, create, get, update, delete, add_card, remove_card, get_summary, bulk_create_with_cards, bulk_create_with_features",
|
|
720
707
|
inputSchema: {
|
|
721
708
|
type: "object",
|
|
722
709
|
properties: {
|
|
723
|
-
|
|
710
|
+
action: {
|
|
711
|
+
type: "string",
|
|
712
|
+
enum: [
|
|
713
|
+
"list",
|
|
714
|
+
"create",
|
|
715
|
+
"get",
|
|
716
|
+
"update",
|
|
717
|
+
"delete",
|
|
718
|
+
"add_card",
|
|
719
|
+
"remove_card",
|
|
720
|
+
"get_summary",
|
|
721
|
+
"bulk_create_with_cards",
|
|
722
|
+
"bulk_create_with_features"
|
|
723
|
+
]
|
|
724
|
+
},
|
|
725
|
+
epicId: {
|
|
726
|
+
type: "string",
|
|
727
|
+
description: "get/update/delete/add_card/remove_card/get_summary"
|
|
728
|
+
},
|
|
729
|
+
slug: { type: "string", description: "create/update" },
|
|
730
|
+
name: { type: "string", description: "create/update" },
|
|
731
|
+
description: { type: "string", description: "create/update" },
|
|
732
|
+
emoji: { type: "string", description: "create/update" },
|
|
733
|
+
color: { type: "string", description: "create/update" },
|
|
734
|
+
status: { type: "string", description: "list/update" },
|
|
735
|
+
startDate: { type: "string", description: "create/update" },
|
|
736
|
+
targetDate: { type: "string", description: "create/update" },
|
|
737
|
+
syncDates: {
|
|
738
|
+
type: "boolean",
|
|
739
|
+
description: "update: sync targetDate to all card due dates"
|
|
740
|
+
},
|
|
741
|
+
includeProgress: { type: "boolean", description: "list" },
|
|
742
|
+
limit: { type: "number", description: "list (default:15)" },
|
|
743
|
+
compact: { type: "boolean", description: "list" },
|
|
744
|
+
cardId: { type: "string", description: "add_card/remove_card" },
|
|
745
|
+
epic: {
|
|
746
|
+
type: "object",
|
|
747
|
+
properties: {
|
|
748
|
+
slug: { type: "string" },
|
|
749
|
+
name: { type: "string" },
|
|
750
|
+
description: { type: "string" },
|
|
751
|
+
emoji: { type: "string" },
|
|
752
|
+
color: { type: "string" }
|
|
753
|
+
},
|
|
754
|
+
required: ["slug", "name"],
|
|
755
|
+
description: "bulk_create_with_cards/bulk_create_with_features"
|
|
756
|
+
},
|
|
757
|
+
columnId: { type: "string", description: "bulk_create_with_cards" },
|
|
758
|
+
cards: {
|
|
724
759
|
type: "array",
|
|
725
760
|
items: {
|
|
726
761
|
type: "object",
|
|
727
762
|
properties: {
|
|
728
|
-
|
|
729
|
-
|
|
763
|
+
title: { type: "string" },
|
|
764
|
+
description: { type: "string" },
|
|
765
|
+
priority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
730
766
|
},
|
|
731
|
-
required: ["
|
|
732
|
-
}
|
|
767
|
+
required: ["title"]
|
|
768
|
+
},
|
|
769
|
+
description: "bulk_create_with_cards"
|
|
770
|
+
},
|
|
771
|
+
features: {
|
|
772
|
+
type: "array",
|
|
773
|
+
items: {
|
|
774
|
+
type: "object",
|
|
775
|
+
properties: {
|
|
776
|
+
title: { type: "string" },
|
|
777
|
+
slug: {
|
|
778
|
+
type: "string",
|
|
779
|
+
description: "UPPERCASE slug (auto-generated if omitted)"
|
|
780
|
+
},
|
|
781
|
+
description: { type: "string" },
|
|
782
|
+
cards: {
|
|
783
|
+
type: "array",
|
|
784
|
+
items: {
|
|
785
|
+
type: "object",
|
|
786
|
+
properties: {
|
|
787
|
+
columnId: { type: "string" },
|
|
788
|
+
title: { type: "string" },
|
|
789
|
+
description: { type: "string" },
|
|
790
|
+
priority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
791
|
+
},
|
|
792
|
+
required: ["columnId", "title"]
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
},
|
|
796
|
+
required: ["title", "cards"]
|
|
797
|
+
},
|
|
798
|
+
description: "bulk_create_with_features"
|
|
733
799
|
}
|
|
734
800
|
},
|
|
735
|
-
required: ["
|
|
736
|
-
}
|
|
737
|
-
},
|
|
738
|
-
// CARDS
|
|
739
|
-
{
|
|
740
|
-
name: "get_card",
|
|
741
|
-
description: "Get a card with all details (tags, comments, checklists, epics, features)",
|
|
742
|
-
inputSchema: {
|
|
743
|
-
type: "object",
|
|
744
|
-
properties: { cardId: { type: "string" } },
|
|
745
|
-
required: ["cardId"]
|
|
801
|
+
required: ["action"]
|
|
746
802
|
}
|
|
747
803
|
},
|
|
804
|
+
// 9. FEATURES
|
|
748
805
|
{
|
|
749
|
-
name: "
|
|
750
|
-
description: "
|
|
806
|
+
name: "manage_features",
|
|
807
|
+
description: "Feature operations. Actions: list, get, get_active, create, update, delete, add_card, remove_card, get_cards",
|
|
751
808
|
inputSchema: {
|
|
752
809
|
type: "object",
|
|
753
810
|
properties: {
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
811
|
+
action: {
|
|
812
|
+
type: "string",
|
|
813
|
+
enum: [
|
|
814
|
+
"list",
|
|
815
|
+
"get",
|
|
816
|
+
"get_active",
|
|
817
|
+
"create",
|
|
818
|
+
"update",
|
|
819
|
+
"delete",
|
|
820
|
+
"add_card",
|
|
821
|
+
"remove_card",
|
|
822
|
+
"get_cards"
|
|
823
|
+
]
|
|
764
824
|
},
|
|
765
|
-
|
|
825
|
+
featureId: {
|
|
766
826
|
type: "string",
|
|
767
|
-
description: "
|
|
768
|
-
}
|
|
827
|
+
description: "get/update/delete/add_card/remove_card/get_cards: ID or slug"
|
|
828
|
+
},
|
|
829
|
+
featureSlug: {
|
|
830
|
+
type: "string",
|
|
831
|
+
description: "get/add_card/remove_card/get_cards: slug (UPPERCASE), alternative to featureId"
|
|
832
|
+
},
|
|
833
|
+
epicId: { type: "string", description: "list/create/update" },
|
|
834
|
+
slug: {
|
|
835
|
+
type: "string",
|
|
836
|
+
description: "list: filter by slug. create/update"
|
|
837
|
+
},
|
|
838
|
+
title: { type: "string", description: "create/update" },
|
|
839
|
+
description: { type: "string", description: "create/update" },
|
|
840
|
+
status: {
|
|
841
|
+
type: "string",
|
|
842
|
+
enum: ["planning", "in_progress", "completed", "on_hold"],
|
|
843
|
+
description: "create/update"
|
|
844
|
+
},
|
|
845
|
+
order: { type: "number", description: "update" },
|
|
846
|
+
cardId: { type: "string", description: "add_card/remove_card" }
|
|
769
847
|
},
|
|
770
|
-
required: ["
|
|
848
|
+
required: ["action"]
|
|
771
849
|
}
|
|
772
850
|
},
|
|
851
|
+
// 10. CARD LINKS
|
|
773
852
|
{
|
|
774
|
-
name: "
|
|
775
|
-
description: "
|
|
853
|
+
name: "manage_card_links",
|
|
854
|
+
description: "Card link operations. Actions: link, unlink, get",
|
|
776
855
|
inputSchema: {
|
|
777
856
|
type: "object",
|
|
778
857
|
properties: {
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
type: "array",
|
|
786
|
-
items: { type: "string" },
|
|
787
|
-
description: "Replace all tags with these IDs"
|
|
788
|
-
},
|
|
789
|
-
cognitiveLoad: { type: "string" },
|
|
790
|
-
estimatedMinutes: { type: "number" },
|
|
791
|
-
githubBranch: { type: "string" },
|
|
792
|
-
githubPrUrl: { type: "string" },
|
|
793
|
-
isArchived: { type: "boolean" }
|
|
858
|
+
action: { type: "string", enum: ["link", "unlink", "get"] },
|
|
859
|
+
cardId: { type: "string", description: "get" },
|
|
860
|
+
cardId1: { type: "string", description: "link" },
|
|
861
|
+
cardId2: { type: "string", description: "link" },
|
|
862
|
+
label: { type: "string", description: "link" },
|
|
863
|
+
linkId: { type: "string", description: "unlink" }
|
|
794
864
|
},
|
|
795
|
-
required: ["
|
|
796
|
-
}
|
|
797
|
-
},
|
|
798
|
-
{
|
|
799
|
-
name: "delete_card",
|
|
800
|
-
description: "Delete a card",
|
|
801
|
-
inputSchema: {
|
|
802
|
-
type: "object",
|
|
803
|
-
properties: { cardId: { type: "string" } },
|
|
804
|
-
required: ["cardId"]
|
|
865
|
+
required: ["action"]
|
|
805
866
|
}
|
|
806
867
|
},
|
|
868
|
+
// 11. GITHUB
|
|
807
869
|
{
|
|
808
|
-
name: "
|
|
809
|
-
description: "
|
|
870
|
+
name: "manage_github",
|
|
871
|
+
description: "GitHub integration. Actions: setup, get, update, remove, link_branch, link_pr",
|
|
810
872
|
inputSchema: {
|
|
811
873
|
type: "object",
|
|
812
|
-
properties: {
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
inputSchema: {
|
|
838
|
-
type: "object",
|
|
839
|
-
properties: {
|
|
840
|
-
cardId: { type: "string" },
|
|
841
|
-
targetColumnId: { type: "string" },
|
|
842
|
-
newOrder: {
|
|
843
|
-
type: "number",
|
|
844
|
-
description: "Position in target column (0-indexed, default: end)"
|
|
845
|
-
}
|
|
846
|
-
},
|
|
847
|
-
required: ["cardId", "targetColumnId"]
|
|
848
|
-
}
|
|
849
|
-
},
|
|
850
|
-
{
|
|
851
|
-
name: "add_comment",
|
|
852
|
-
description: "Add comment to card",
|
|
853
|
-
inputSchema: {
|
|
854
|
-
type: "object",
|
|
855
|
-
properties: { cardId: { type: "string" }, content: { type: "string" } },
|
|
856
|
-
required: ["cardId", "content"]
|
|
857
|
-
}
|
|
858
|
-
},
|
|
859
|
-
{
|
|
860
|
-
name: "delete_comment",
|
|
861
|
-
description: "Delete a comment",
|
|
862
|
-
inputSchema: {
|
|
863
|
-
type: "object",
|
|
864
|
-
properties: { commentId: { type: "string" } },
|
|
865
|
-
required: ["commentId"]
|
|
866
|
-
}
|
|
867
|
-
},
|
|
868
|
-
// CHECKLISTS
|
|
869
|
-
{
|
|
870
|
-
name: "create_checklist",
|
|
871
|
-
description: "Create checklist on card",
|
|
872
|
-
inputSchema: {
|
|
873
|
-
type: "object",
|
|
874
|
-
properties: { cardId: { type: "string" }, title: { type: "string" } },
|
|
875
|
-
required: ["cardId", "title"]
|
|
876
|
-
}
|
|
877
|
-
},
|
|
878
|
-
{
|
|
879
|
-
name: "update_checklist",
|
|
880
|
-
description: "Update checklist title",
|
|
881
|
-
inputSchema: {
|
|
882
|
-
type: "object",
|
|
883
|
-
properties: {
|
|
884
|
-
checklistId: { type: "string" },
|
|
885
|
-
title: { type: "string" }
|
|
886
|
-
},
|
|
887
|
-
required: ["checklistId", "title"]
|
|
888
|
-
}
|
|
889
|
-
},
|
|
890
|
-
{
|
|
891
|
-
name: "delete_checklist",
|
|
892
|
-
description: "Delete checklist",
|
|
893
|
-
inputSchema: {
|
|
894
|
-
type: "object",
|
|
895
|
-
properties: { checklistId: { type: "string" } },
|
|
896
|
-
required: ["checklistId"]
|
|
897
|
-
}
|
|
898
|
-
},
|
|
899
|
-
{
|
|
900
|
-
name: "create_checklist_item",
|
|
901
|
-
description: "Add checklist item",
|
|
902
|
-
inputSchema: {
|
|
903
|
-
type: "object",
|
|
904
|
-
properties: {
|
|
905
|
-
checklistId: { type: "string" },
|
|
906
|
-
content: { type: "string" }
|
|
907
|
-
},
|
|
908
|
-
required: ["checklistId", "content"]
|
|
909
|
-
}
|
|
910
|
-
},
|
|
911
|
-
{
|
|
912
|
-
name: "update_checklist_item",
|
|
913
|
-
description: "Update checklist item",
|
|
914
|
-
inputSchema: {
|
|
915
|
-
type: "object",
|
|
916
|
-
properties: {
|
|
917
|
-
itemId: { type: "string" },
|
|
918
|
-
content: { type: "string" },
|
|
919
|
-
completed: { type: "boolean" }
|
|
920
|
-
},
|
|
921
|
-
required: ["itemId"]
|
|
922
|
-
}
|
|
923
|
-
},
|
|
924
|
-
{
|
|
925
|
-
name: "delete_checklist_item",
|
|
926
|
-
description: "Delete checklist item",
|
|
927
|
-
inputSchema: {
|
|
928
|
-
type: "object",
|
|
929
|
-
properties: { itemId: { type: "string" } },
|
|
930
|
-
required: ["itemId"]
|
|
931
|
-
}
|
|
932
|
-
},
|
|
933
|
-
{
|
|
934
|
-
name: "get_branch_name",
|
|
935
|
-
description: "Generate GitHub branch name",
|
|
936
|
-
inputSchema: {
|
|
937
|
-
type: "object",
|
|
938
|
-
properties: {
|
|
939
|
-
cardId: { type: "string" },
|
|
940
|
-
type: {
|
|
941
|
-
type: "string",
|
|
942
|
-
enum: ["feature", "fix", "chore", "refactor", "docs"]
|
|
943
|
-
}
|
|
944
|
-
},
|
|
945
|
-
required: ["cardId"]
|
|
946
|
-
}
|
|
947
|
-
},
|
|
948
|
-
{
|
|
949
|
-
name: "search_cards",
|
|
950
|
-
description: "Search cards, projects and boards (default limit:20). Use compact:true for minimal fields",
|
|
951
|
-
inputSchema: {
|
|
952
|
-
type: "object",
|
|
953
|
-
properties: {
|
|
954
|
-
query: { type: "string" },
|
|
955
|
-
projectId: { type: "string" },
|
|
956
|
-
boardId: { type: "string" },
|
|
957
|
-
columnId: { type: "string" },
|
|
958
|
-
epicId: { type: "string" },
|
|
959
|
-
featureId: { type: "string" },
|
|
960
|
-
hasEpic: { type: "boolean" },
|
|
961
|
-
status: { type: "string", enum: ["todo", "in_progress", "done"] },
|
|
962
|
-
tagIds: { type: "array", items: { type: "string" } },
|
|
963
|
-
limit: { type: "number" },
|
|
964
|
-
compact: { type: "boolean" }
|
|
965
|
-
},
|
|
966
|
-
required: ["query"]
|
|
967
|
-
}
|
|
968
|
-
},
|
|
969
|
-
// BULK OPERATIONS
|
|
970
|
-
{
|
|
971
|
-
name: "bulk_create_cards",
|
|
972
|
-
description: "Create multiple cards in 1 call",
|
|
973
|
-
inputSchema: {
|
|
974
|
-
type: "object",
|
|
975
|
-
properties: {
|
|
976
|
-
columnId: { type: "string" },
|
|
977
|
-
cards: {
|
|
978
|
-
type: "array",
|
|
979
|
-
items: {
|
|
980
|
-
type: "object",
|
|
981
|
-
properties: {
|
|
982
|
-
title: { type: "string" },
|
|
983
|
-
description: { type: "string" },
|
|
984
|
-
priority: { type: "string", enum: ["P1", "P2", "P3"] },
|
|
985
|
-
epicId: { type: "string" }
|
|
986
|
-
},
|
|
987
|
-
required: ["title"]
|
|
988
|
-
}
|
|
989
|
-
}
|
|
990
|
-
},
|
|
991
|
-
required: ["columnId", "cards"]
|
|
992
|
-
}
|
|
993
|
-
},
|
|
994
|
-
{
|
|
995
|
-
name: "bulk_create_epic_with_cards",
|
|
996
|
-
description: "Create epic + all its cards in 1 call",
|
|
997
|
-
inputSchema: {
|
|
998
|
-
type: "object",
|
|
999
|
-
properties: {
|
|
1000
|
-
epic: {
|
|
1001
|
-
type: "object",
|
|
1002
|
-
properties: {
|
|
1003
|
-
slug: { type: "string" },
|
|
1004
|
-
name: { type: "string" },
|
|
1005
|
-
description: { type: "string" },
|
|
1006
|
-
emoji: { type: "string" },
|
|
1007
|
-
color: { type: "string" }
|
|
1008
|
-
},
|
|
1009
|
-
required: ["slug", "name"]
|
|
1010
|
-
},
|
|
1011
|
-
columnId: { type: "string" },
|
|
1012
|
-
cards: {
|
|
1013
|
-
type: "array",
|
|
1014
|
-
items: {
|
|
1015
|
-
type: "object",
|
|
1016
|
-
properties: {
|
|
1017
|
-
title: { type: "string" },
|
|
1018
|
-
description: { type: "string" },
|
|
1019
|
-
priority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
1020
|
-
},
|
|
1021
|
-
required: ["title"]
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
},
|
|
1025
|
-
required: ["epic", "columnId", "cards"]
|
|
1026
|
-
}
|
|
1027
|
-
},
|
|
1028
|
-
{
|
|
1029
|
-
name: "bulk_create_epic_with_features",
|
|
1030
|
-
description: "Create epic + features + cards across projects in 1 call. Cards auto-prefixed with SLUG{N}-.",
|
|
1031
|
-
inputSchema: {
|
|
1032
|
-
type: "object",
|
|
1033
|
-
properties: {
|
|
1034
|
-
epic: {
|
|
1035
|
-
type: "object",
|
|
1036
|
-
properties: {
|
|
1037
|
-
slug: { type: "string" },
|
|
1038
|
-
name: { type: "string" },
|
|
1039
|
-
description: { type: "string" },
|
|
1040
|
-
emoji: { type: "string" },
|
|
1041
|
-
color: { type: "string" }
|
|
1042
|
-
},
|
|
1043
|
-
required: ["slug", "name"]
|
|
1044
|
-
},
|
|
1045
|
-
features: {
|
|
1046
|
-
type: "array",
|
|
1047
|
-
items: {
|
|
1048
|
-
type: "object",
|
|
1049
|
-
properties: {
|
|
1050
|
-
title: { type: "string" },
|
|
1051
|
-
slug: {
|
|
1052
|
-
type: "string",
|
|
1053
|
-
description: "UPPERCASE slug (auto-generated from title if omitted)"
|
|
1054
|
-
},
|
|
1055
|
-
description: { type: "string" },
|
|
1056
|
-
cards: {
|
|
1057
|
-
type: "array",
|
|
1058
|
-
items: {
|
|
1059
|
-
type: "object",
|
|
1060
|
-
properties: {
|
|
1061
|
-
columnId: { type: "string" },
|
|
1062
|
-
title: { type: "string" },
|
|
1063
|
-
description: { type: "string" },
|
|
1064
|
-
priority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
1065
|
-
},
|
|
1066
|
-
required: ["columnId", "title"]
|
|
1067
|
-
}
|
|
1068
|
-
}
|
|
1069
|
-
},
|
|
1070
|
-
required: ["title", "cards"]
|
|
1071
|
-
}
|
|
1072
|
-
}
|
|
1073
|
-
},
|
|
1074
|
-
required: ["epic", "features"]
|
|
1075
|
-
}
|
|
1076
|
-
},
|
|
1077
|
-
{
|
|
1078
|
-
name: "bulk_move_cards",
|
|
1079
|
-
description: "Move multiple cards to column in 1 call",
|
|
1080
|
-
inputSchema: {
|
|
1081
|
-
type: "object",
|
|
1082
|
-
properties: {
|
|
1083
|
-
cardIds: { type: "array", items: { type: "string" } },
|
|
1084
|
-
targetColumnId: { type: "string" }
|
|
1085
|
-
},
|
|
1086
|
-
required: ["cardIds", "targetColumnId"]
|
|
1087
|
-
}
|
|
1088
|
-
},
|
|
1089
|
-
{
|
|
1090
|
-
name: "quick_add_cards",
|
|
1091
|
-
description: 'Create cards from multiline text. Format: "- P1: task title" per line',
|
|
1092
|
-
inputSchema: {
|
|
1093
|
-
type: "object",
|
|
1094
|
-
properties: {
|
|
1095
|
-
columnId: { type: "string" },
|
|
1096
|
-
text: {
|
|
1097
|
-
type: "string",
|
|
1098
|
-
description: "Multiline text, 1 card per line"
|
|
1099
|
-
},
|
|
1100
|
-
defaultPriority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
1101
|
-
},
|
|
1102
|
-
required: ["columnId", "text"]
|
|
1103
|
-
}
|
|
1104
|
-
},
|
|
1105
|
-
{
|
|
1106
|
-
name: "move_cards_by_column",
|
|
1107
|
-
description: "Move ALL cards from one column to another",
|
|
1108
|
-
inputSchema: {
|
|
1109
|
-
type: "object",
|
|
1110
|
-
properties: {
|
|
1111
|
-
sourceColumnId: { type: "string" },
|
|
1112
|
-
targetColumnId: { type: "string" },
|
|
1113
|
-
limit: { type: "number" }
|
|
1114
|
-
},
|
|
1115
|
-
required: ["sourceColumnId", "targetColumnId"]
|
|
1116
|
-
}
|
|
1117
|
-
},
|
|
1118
|
-
// AGGREGATED VIEWS
|
|
1119
|
-
{
|
|
1120
|
-
name: "get_workspace",
|
|
1121
|
-
description: "Get project + all boards + columns in 1 call (no cards)",
|
|
1122
|
-
inputSchema: {
|
|
1123
|
-
type: "object",
|
|
1124
|
-
properties: { projectId: { type: "string" } },
|
|
1125
|
-
required: ["projectId"]
|
|
1126
|
-
}
|
|
1127
|
-
},
|
|
1128
|
-
{
|
|
1129
|
-
name: "get_board_summary",
|
|
1130
|
-
description: "Get board stats only: card counts per column + priority breakdown",
|
|
1131
|
-
inputSchema: {
|
|
1132
|
-
type: "object",
|
|
1133
|
-
properties: { boardId: { type: "string" } },
|
|
1134
|
-
required: ["boardId"]
|
|
1135
|
-
}
|
|
1136
|
-
},
|
|
1137
|
-
{
|
|
1138
|
-
name: "get_epic_summary",
|
|
1139
|
-
description: "Get epic with minimal card info: {id,title,priority,status} + progress stats",
|
|
1140
|
-
inputSchema: {
|
|
1141
|
-
type: "object",
|
|
1142
|
-
properties: { epicId: { type: "string" } },
|
|
1143
|
-
required: ["epicId"]
|
|
1144
|
-
}
|
|
1145
|
-
},
|
|
1146
|
-
// TAGS
|
|
1147
|
-
{
|
|
1148
|
-
name: "list_tags",
|
|
1149
|
-
description: "List all tags",
|
|
1150
|
-
inputSchema: { type: "object", properties: {} }
|
|
1151
|
-
},
|
|
1152
|
-
{
|
|
1153
|
-
name: "create_tag",
|
|
1154
|
-
description: "Create tag",
|
|
1155
|
-
inputSchema: {
|
|
1156
|
-
type: "object",
|
|
1157
|
-
properties: { name: { type: "string" }, color: { type: "string" } },
|
|
1158
|
-
required: ["name", "color"]
|
|
1159
|
-
}
|
|
1160
|
-
},
|
|
1161
|
-
{
|
|
1162
|
-
name: "delete_tag",
|
|
1163
|
-
description: "Delete tag",
|
|
1164
|
-
inputSchema: {
|
|
1165
|
-
type: "object",
|
|
1166
|
-
properties: { tagId: { type: "string" } },
|
|
1167
|
-
required: ["tagId"]
|
|
1168
|
-
}
|
|
1169
|
-
},
|
|
1170
|
-
{
|
|
1171
|
-
name: "add_tag_to_card",
|
|
1172
|
-
description: "Add tag to card",
|
|
1173
|
-
inputSchema: {
|
|
1174
|
-
type: "object",
|
|
1175
|
-
properties: { cardId: { type: "string" }, tagId: { type: "string" } },
|
|
1176
|
-
required: ["cardId", "tagId"]
|
|
1177
|
-
}
|
|
1178
|
-
},
|
|
1179
|
-
{
|
|
1180
|
-
name: "remove_tag_from_card",
|
|
1181
|
-
description: "Remove tag from card",
|
|
1182
|
-
inputSchema: {
|
|
1183
|
-
type: "object",
|
|
1184
|
-
properties: { cardId: { type: "string" }, tagId: { type: "string" } },
|
|
1185
|
-
required: ["cardId", "tagId"]
|
|
1186
|
-
}
|
|
1187
|
-
},
|
|
1188
|
-
// EPICS
|
|
1189
|
-
{
|
|
1190
|
-
name: "list_epics",
|
|
1191
|
-
description: "List epics (default limit:15)",
|
|
1192
|
-
inputSchema: {
|
|
1193
|
-
type: "object",
|
|
1194
|
-
properties: {
|
|
1195
|
-
status: { type: "string" },
|
|
1196
|
-
includeProgress: { type: "boolean" },
|
|
1197
|
-
limit: { type: "number" },
|
|
1198
|
-
compact: { type: "boolean" }
|
|
1199
|
-
}
|
|
1200
|
-
}
|
|
1201
|
-
},
|
|
1202
|
-
{
|
|
1203
|
-
name: "create_epic",
|
|
1204
|
-
description: "Create epic",
|
|
1205
|
-
inputSchema: {
|
|
1206
|
-
type: "object",
|
|
1207
|
-
properties: {
|
|
1208
|
-
slug: { type: "string" },
|
|
1209
|
-
name: { type: "string" },
|
|
1210
|
-
description: { type: "string" },
|
|
1211
|
-
emoji: { type: "string" },
|
|
1212
|
-
color: { type: "string" },
|
|
1213
|
-
startDate: { type: "string" },
|
|
1214
|
-
targetDate: { type: "string" }
|
|
1215
|
-
},
|
|
1216
|
-
required: ["slug", "name"]
|
|
1217
|
-
}
|
|
1218
|
-
},
|
|
1219
|
-
{
|
|
1220
|
-
name: "get_epic",
|
|
1221
|
-
description: "Get an epic with all its cards, features and progress",
|
|
1222
|
-
inputSchema: {
|
|
1223
|
-
type: "object",
|
|
1224
|
-
properties: { epicId: { type: "string" } },
|
|
1225
|
-
required: ["epicId"]
|
|
1226
|
-
}
|
|
1227
|
-
},
|
|
1228
|
-
{
|
|
1229
|
-
name: "update_epic",
|
|
1230
|
-
description: "Update epic. Use syncDates:true to sync targetDate to all card due dates.",
|
|
1231
|
-
inputSchema: {
|
|
1232
|
-
type: "object",
|
|
1233
|
-
properties: {
|
|
1234
|
-
epicId: { type: "string" },
|
|
1235
|
-
slug: { type: "string" },
|
|
1236
|
-
name: { type: "string" },
|
|
1237
|
-
description: { type: "string" },
|
|
1238
|
-
emoji: { type: "string" },
|
|
1239
|
-
color: { type: "string" },
|
|
1240
|
-
status: { type: "string" },
|
|
1241
|
-
startDate: { type: "string" },
|
|
1242
|
-
targetDate: { type: "string" },
|
|
1243
|
-
syncDates: {
|
|
1244
|
-
type: "boolean",
|
|
1245
|
-
description: "Sync targetDate to all card due dates"
|
|
1246
|
-
}
|
|
1247
|
-
},
|
|
1248
|
-
required: ["epicId"]
|
|
1249
|
-
}
|
|
1250
|
-
},
|
|
1251
|
-
{
|
|
1252
|
-
name: "delete_epic",
|
|
1253
|
-
description: "Delete epic (cards unlinked)",
|
|
1254
|
-
inputSchema: {
|
|
1255
|
-
type: "object",
|
|
1256
|
-
properties: { epicId: { type: "string" } },
|
|
1257
|
-
required: ["epicId"]
|
|
1258
|
-
}
|
|
1259
|
-
},
|
|
1260
|
-
{
|
|
1261
|
-
name: "add_card_to_epic",
|
|
1262
|
-
description: "Add card to epic",
|
|
1263
|
-
inputSchema: {
|
|
1264
|
-
type: "object",
|
|
1265
|
-
properties: { epicId: { type: "string" }, cardId: { type: "string" } },
|
|
1266
|
-
required: ["epicId", "cardId"]
|
|
1267
|
-
}
|
|
1268
|
-
},
|
|
1269
|
-
{
|
|
1270
|
-
name: "remove_card_from_epic",
|
|
1271
|
-
description: "Remove card from epic",
|
|
1272
|
-
inputSchema: {
|
|
1273
|
-
type: "object",
|
|
1274
|
-
properties: { epicId: { type: "string" }, cardId: { type: "string" } },
|
|
1275
|
-
required: ["epicId", "cardId"]
|
|
1276
|
-
}
|
|
1277
|
-
},
|
|
1278
|
-
// FEATURES
|
|
1279
|
-
{
|
|
1280
|
-
name: "list_features",
|
|
1281
|
-
description: "List features. Filter by epicId or slug.",
|
|
1282
|
-
inputSchema: {
|
|
1283
|
-
type: "object",
|
|
1284
|
-
properties: {
|
|
1285
|
-
epicId: { type: "string" },
|
|
1286
|
-
slug: {
|
|
1287
|
-
type: "string",
|
|
1288
|
-
description: "Filter by feature slug (UPPERCASE)"
|
|
1289
|
-
}
|
|
1290
|
-
}
|
|
1291
|
-
}
|
|
1292
|
-
},
|
|
1293
|
-
{
|
|
1294
|
-
name: "get_feature",
|
|
1295
|
-
description: "Get a feature with cards and progress. Accepts featureId or featureSlug (UPPERCASE).",
|
|
1296
|
-
inputSchema: {
|
|
1297
|
-
type: "object",
|
|
1298
|
-
properties: {
|
|
1299
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1300
|
-
featureSlug: {
|
|
1301
|
-
type: "string",
|
|
1302
|
-
description: "Feature slug (UPPERCASE), alternative to featureId"
|
|
1303
|
-
}
|
|
1304
|
-
}
|
|
1305
|
-
}
|
|
1306
|
-
},
|
|
1307
|
-
{
|
|
1308
|
-
name: "get_active_features",
|
|
1309
|
-
description: "Get features with cards in progress, organized by epic",
|
|
1310
|
-
inputSchema: { type: "object", properties: {} }
|
|
1311
|
-
},
|
|
1312
|
-
{
|
|
1313
|
-
name: "create_feature",
|
|
1314
|
-
description: "Create a new feature (optionally in an epic)",
|
|
1315
|
-
inputSchema: {
|
|
1316
|
-
type: "object",
|
|
1317
|
-
properties: {
|
|
1318
|
-
epicId: { type: "string" },
|
|
1319
|
-
title: { type: "string" },
|
|
1320
|
-
slug: { type: "string" },
|
|
1321
|
-
description: { type: "string" },
|
|
1322
|
-
status: {
|
|
1323
|
-
type: "string",
|
|
1324
|
-
enum: ["planning", "in_progress", "completed", "on_hold"]
|
|
1325
|
-
}
|
|
1326
|
-
},
|
|
1327
|
-
required: ["title"]
|
|
1328
|
-
}
|
|
1329
|
-
},
|
|
1330
|
-
{
|
|
1331
|
-
name: "update_feature",
|
|
1332
|
-
description: "Update a feature",
|
|
1333
|
-
inputSchema: {
|
|
1334
|
-
type: "object",
|
|
1335
|
-
properties: {
|
|
1336
|
-
featureId: { type: "string" },
|
|
1337
|
-
title: { type: "string" },
|
|
1338
|
-
slug: { type: "string" },
|
|
1339
|
-
description: { type: "string" },
|
|
1340
|
-
status: {
|
|
1341
|
-
type: "string",
|
|
1342
|
-
enum: ["planning", "in_progress", "completed", "on_hold"]
|
|
1343
|
-
},
|
|
1344
|
-
order: { type: "number" },
|
|
1345
|
-
epicId: { type: "string", description: "Move to another epic" }
|
|
1346
|
-
},
|
|
1347
|
-
required: ["featureId"]
|
|
1348
|
-
}
|
|
1349
|
-
},
|
|
1350
|
-
{
|
|
1351
|
-
name: "delete_feature",
|
|
1352
|
-
description: "Delete a feature (cards unlinked)",
|
|
1353
|
-
inputSchema: {
|
|
1354
|
-
type: "object",
|
|
1355
|
-
properties: { featureId: { type: "string" } },
|
|
1356
|
-
required: ["featureId"]
|
|
1357
|
-
}
|
|
1358
|
-
},
|
|
1359
|
-
{
|
|
1360
|
-
name: "add_card_to_feature",
|
|
1361
|
-
description: "Add a card to a feature. Accepts featureId or featureSlug.",
|
|
1362
|
-
inputSchema: {
|
|
1363
|
-
type: "object",
|
|
1364
|
-
properties: {
|
|
1365
|
-
cardId: { type: "string" },
|
|
1366
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1367
|
-
featureSlug: {
|
|
1368
|
-
type: "string",
|
|
1369
|
-
description: "Feature slug (UPPERCASE), alternative to featureId"
|
|
1370
|
-
}
|
|
1371
|
-
},
|
|
1372
|
-
required: ["cardId"]
|
|
1373
|
-
}
|
|
1374
|
-
},
|
|
1375
|
-
{
|
|
1376
|
-
name: "remove_card_from_feature",
|
|
1377
|
-
description: "Remove a card from a feature. Accepts featureId or featureSlug.",
|
|
1378
|
-
inputSchema: {
|
|
1379
|
-
type: "object",
|
|
1380
|
-
properties: {
|
|
1381
|
-
cardId: { type: "string" },
|
|
1382
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1383
|
-
featureSlug: {
|
|
1384
|
-
type: "string",
|
|
1385
|
-
description: "Feature slug (UPPERCASE), alternative to featureId"
|
|
1386
|
-
}
|
|
1387
|
-
},
|
|
1388
|
-
required: ["cardId"]
|
|
1389
|
-
}
|
|
1390
|
-
},
|
|
1391
|
-
{
|
|
1392
|
-
name: "get_feature_cards",
|
|
1393
|
-
description: "Get all cards in a feature. Accepts featureId or featureSlug.",
|
|
1394
|
-
inputSchema: {
|
|
1395
|
-
type: "object",
|
|
1396
|
-
properties: {
|
|
1397
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1398
|
-
featureSlug: {
|
|
1399
|
-
type: "string",
|
|
1400
|
-
description: "Feature slug (UPPERCASE), alternative to featureId"
|
|
1401
|
-
}
|
|
1402
|
-
}
|
|
1403
|
-
}
|
|
1404
|
-
},
|
|
1405
|
-
// CARD LINKS
|
|
1406
|
-
{
|
|
1407
|
-
name: "link_cards",
|
|
1408
|
-
description: "Link two cards",
|
|
1409
|
-
inputSchema: {
|
|
1410
|
-
type: "object",
|
|
1411
|
-
properties: {
|
|
1412
|
-
cardId1: { type: "string" },
|
|
1413
|
-
cardId2: { type: "string" },
|
|
1414
|
-
label: { type: "string" }
|
|
1415
|
-
},
|
|
1416
|
-
required: ["cardId1", "cardId2"]
|
|
1417
|
-
}
|
|
1418
|
-
},
|
|
1419
|
-
{
|
|
1420
|
-
name: "unlink_cards",
|
|
1421
|
-
description: "Unlink two cards by link ID",
|
|
1422
|
-
inputSchema: {
|
|
1423
|
-
type: "object",
|
|
1424
|
-
properties: {
|
|
1425
|
-
linkId: { type: "string" }
|
|
1426
|
-
},
|
|
1427
|
-
required: ["linkId"]
|
|
1428
|
-
}
|
|
1429
|
-
},
|
|
1430
|
-
{
|
|
1431
|
-
name: "get_linked_cards",
|
|
1432
|
-
description: "Get linked cards",
|
|
1433
|
-
inputSchema: {
|
|
1434
|
-
type: "object",
|
|
1435
|
-
properties: { cardId: { type: "string" } },
|
|
1436
|
-
required: ["cardId"]
|
|
1437
|
-
}
|
|
1438
|
-
},
|
|
1439
|
-
// GITHUB INTEGRATION
|
|
1440
|
-
{
|
|
1441
|
-
name: "setup_github_integration",
|
|
1442
|
-
description: "Setup GitHub integration for a project (auto-creates webhook)",
|
|
1443
|
-
inputSchema: {
|
|
1444
|
-
type: "object",
|
|
1445
|
-
properties: {
|
|
1446
|
-
projectId: { type: "string" },
|
|
1447
|
-
repoOwner: { type: "string" },
|
|
1448
|
-
repoName: { type: "string" },
|
|
1449
|
-
inProgressColumnName: { type: "string" },
|
|
1450
|
-
doneColumnName: { type: "string" },
|
|
1451
|
-
autoMoveOnPush: { type: "boolean" },
|
|
1452
|
-
autoMoveOnPrMerge: { type: "boolean" },
|
|
1453
|
-
autoLinkPr: { type: "boolean" }
|
|
1454
|
-
},
|
|
1455
|
-
required: ["projectId", "repoOwner", "repoName"]
|
|
1456
|
-
}
|
|
1457
|
-
},
|
|
1458
|
-
{
|
|
1459
|
-
name: "get_github_integration",
|
|
1460
|
-
description: "Get GitHub integration settings",
|
|
1461
|
-
inputSchema: {
|
|
1462
|
-
type: "object",
|
|
1463
|
-
properties: { projectId: { type: "string" } },
|
|
1464
|
-
required: ["projectId"]
|
|
1465
|
-
}
|
|
1466
|
-
},
|
|
1467
|
-
{
|
|
1468
|
-
name: "update_github_integration",
|
|
1469
|
-
description: "Update GitHub integration settings",
|
|
1470
|
-
inputSchema: {
|
|
1471
|
-
type: "object",
|
|
1472
|
-
properties: {
|
|
1473
|
-
projectId: { type: "string" },
|
|
1474
|
-
repoOwner: { type: "string" },
|
|
1475
|
-
repoName: { type: "string" },
|
|
1476
|
-
autoMoveOnPush: { type: "boolean" },
|
|
1477
|
-
autoMoveOnPrMerge: { type: "boolean" },
|
|
1478
|
-
autoLinkPr: { type: "boolean" },
|
|
1479
|
-
inProgressColumnName: { type: "string" },
|
|
1480
|
-
doneColumnName: { type: "string" }
|
|
1481
|
-
},
|
|
1482
|
-
required: ["projectId"]
|
|
1483
|
-
}
|
|
1484
|
-
},
|
|
1485
|
-
{
|
|
1486
|
-
name: "remove_github_integration",
|
|
1487
|
-
description: "Remove GitHub integration",
|
|
1488
|
-
inputSchema: {
|
|
1489
|
-
type: "object",
|
|
1490
|
-
properties: { projectId: { type: "string" } },
|
|
1491
|
-
required: ["projectId"]
|
|
1492
|
-
}
|
|
1493
|
-
},
|
|
1494
|
-
{
|
|
1495
|
-
name: "link_card_to_branch",
|
|
1496
|
-
description: "Link card to branch",
|
|
1497
|
-
inputSchema: {
|
|
1498
|
-
type: "object",
|
|
1499
|
-
properties: { cardId: { type: "string" }, branch: { type: "string" } },
|
|
1500
|
-
required: ["cardId", "branch"]
|
|
1501
|
-
}
|
|
1502
|
-
},
|
|
1503
|
-
{
|
|
1504
|
-
name: "link_card_to_pr",
|
|
1505
|
-
description: "Link card to PR",
|
|
1506
|
-
inputSchema: {
|
|
1507
|
-
type: "object",
|
|
1508
|
-
properties: { cardId: { type: "string" }, prUrl: { type: "string" } },
|
|
1509
|
-
required: ["cardId", "prUrl"]
|
|
874
|
+
properties: {
|
|
875
|
+
action: {
|
|
876
|
+
type: "string",
|
|
877
|
+
enum: [
|
|
878
|
+
"setup",
|
|
879
|
+
"get",
|
|
880
|
+
"update",
|
|
881
|
+
"remove",
|
|
882
|
+
"link_branch",
|
|
883
|
+
"link_pr"
|
|
884
|
+
]
|
|
885
|
+
},
|
|
886
|
+
projectId: { type: "string", description: "setup/get/update/remove" },
|
|
887
|
+
repoOwner: { type: "string", description: "setup/update" },
|
|
888
|
+
repoName: { type: "string", description: "setup/update" },
|
|
889
|
+
inProgressColumnName: { type: "string", description: "setup/update" },
|
|
890
|
+
doneColumnName: { type: "string", description: "setup/update" },
|
|
891
|
+
autoMoveOnPush: { type: "boolean", description: "setup/update" },
|
|
892
|
+
autoMoveOnPrMerge: { type: "boolean", description: "setup/update" },
|
|
893
|
+
autoLinkPr: { type: "boolean", description: "setup/update" },
|
|
894
|
+
cardId: { type: "string", description: "link_branch/link_pr" },
|
|
895
|
+
branch: { type: "string", description: "link_branch" },
|
|
896
|
+
prUrl: { type: "string", description: "link_pr" }
|
|
897
|
+
},
|
|
898
|
+
required: ["action"]
|
|
1510
899
|
}
|
|
1511
900
|
}
|
|
1512
901
|
]
|
|
1513
902
|
}));
|
|
1514
903
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
1515
904
|
const { name, arguments: args = {} } = request.params;
|
|
905
|
+
const a = args;
|
|
1516
906
|
try {
|
|
1517
907
|
let result;
|
|
1518
908
|
switch (name) {
|
|
1519
|
-
// FOLDERS
|
|
1520
|
-
case "
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
case "list_projects":
|
|
1549
|
-
result = await kanbanApi.listProjects(args);
|
|
1550
|
-
break;
|
|
1551
|
-
case "create_project":
|
|
1552
|
-
result = await kanbanApi.createProject(args);
|
|
1553
|
-
break;
|
|
1554
|
-
case "get_project":
|
|
1555
|
-
result = await kanbanApi.getProject(
|
|
1556
|
-
args.projectId,
|
|
1557
|
-
args
|
|
1558
|
-
);
|
|
1559
|
-
break;
|
|
1560
|
-
case "update_project":
|
|
1561
|
-
result = await kanbanApi.updateProject(
|
|
1562
|
-
args.projectId,
|
|
1563
|
-
args
|
|
1564
|
-
);
|
|
1565
|
-
break;
|
|
1566
|
-
case "delete_project":
|
|
1567
|
-
result = await kanbanApi.deleteProject(args.projectId);
|
|
1568
|
-
break;
|
|
1569
|
-
case "reorder_projects":
|
|
1570
|
-
result = await kanbanApi.reorderProjects(
|
|
1571
|
-
args.projectId,
|
|
1572
|
-
args.targetProjectId,
|
|
1573
|
-
args.folderId
|
|
1574
|
-
);
|
|
1575
|
-
break;
|
|
1576
|
-
// BOARDS
|
|
1577
|
-
case "list_boards":
|
|
1578
|
-
result = await kanbanApi.listBoards(args);
|
|
1579
|
-
break;
|
|
1580
|
-
case "create_board":
|
|
1581
|
-
result = await kanbanApi.createBoard(args);
|
|
1582
|
-
break;
|
|
1583
|
-
case "get_board":
|
|
1584
|
-
result = await kanbanApi.getBoard(args.boardId, args);
|
|
1585
|
-
break;
|
|
1586
|
-
case "update_board":
|
|
1587
|
-
result = await kanbanApi.updateBoard(args.boardId, {
|
|
1588
|
-
name: args.name
|
|
1589
|
-
});
|
|
1590
|
-
break;
|
|
1591
|
-
case "delete_board":
|
|
1592
|
-
result = await kanbanApi.deleteBoard(args.boardId);
|
|
1593
|
-
break;
|
|
1594
|
-
// COLUMNS
|
|
1595
|
-
case "create_column":
|
|
1596
|
-
result = await kanbanApi.createColumn(args);
|
|
1597
|
-
break;
|
|
1598
|
-
case "update_column":
|
|
1599
|
-
result = await kanbanApi.updateColumn(
|
|
1600
|
-
args.columnId,
|
|
1601
|
-
args
|
|
1602
|
-
);
|
|
1603
|
-
break;
|
|
1604
|
-
case "delete_column":
|
|
1605
|
-
result = await kanbanApi.deleteColumn(args.columnId);
|
|
1606
|
-
break;
|
|
1607
|
-
case "reorder_columns":
|
|
1608
|
-
result = await kanbanApi.reorderColumns(args.columns);
|
|
1609
|
-
break;
|
|
1610
|
-
// CARDS
|
|
1611
|
-
case "get_card":
|
|
1612
|
-
result = await kanbanApi.getCard(args.cardId);
|
|
1613
|
-
break;
|
|
1614
|
-
case "create_card":
|
|
1615
|
-
result = await kanbanApi.createCard(args);
|
|
1616
|
-
break;
|
|
1617
|
-
case "update_card":
|
|
1618
|
-
result = await kanbanApi.updateCard(args.cardId, args);
|
|
1619
|
-
break;
|
|
1620
|
-
case "delete_card":
|
|
1621
|
-
result = await kanbanApi.deleteCard(args.cardId);
|
|
1622
|
-
break;
|
|
1623
|
-
case "move_card":
|
|
1624
|
-
result = await kanbanApi.moveCard(
|
|
1625
|
-
args.cardId,
|
|
1626
|
-
args.targetColumnId,
|
|
1627
|
-
args.newOrder
|
|
1628
|
-
);
|
|
1629
|
-
break;
|
|
1630
|
-
case "archive_card":
|
|
1631
|
-
result = await kanbanApi.archiveCard(args.cardId);
|
|
1632
|
-
break;
|
|
1633
|
-
case "unarchive_card":
|
|
1634
|
-
result = await kanbanApi.unarchiveCard(args.cardId);
|
|
1635
|
-
break;
|
|
1636
|
-
case "list_archived_cards":
|
|
1637
|
-
result = await kanbanApi.listArchivedCards(args.boardId);
|
|
1638
|
-
break;
|
|
1639
|
-
case "add_comment":
|
|
1640
|
-
result = await kanbanApi.addComment(
|
|
1641
|
-
args.cardId,
|
|
1642
|
-
args.content
|
|
1643
|
-
);
|
|
1644
|
-
break;
|
|
1645
|
-
case "delete_comment":
|
|
1646
|
-
result = await kanbanApi.deleteComment(args.commentId);
|
|
1647
|
-
break;
|
|
1648
|
-
// CHECKLISTS
|
|
1649
|
-
case "create_checklist":
|
|
1650
|
-
result = await kanbanApi.createChecklist({
|
|
1651
|
-
cardId: args.cardId,
|
|
1652
|
-
title: args.title
|
|
1653
|
-
});
|
|
1654
|
-
break;
|
|
1655
|
-
case "update_checklist":
|
|
1656
|
-
result = await kanbanApi.updateChecklist(args.checklistId, {
|
|
1657
|
-
title: args.title
|
|
1658
|
-
});
|
|
1659
|
-
break;
|
|
1660
|
-
case "delete_checklist":
|
|
1661
|
-
result = await kanbanApi.deleteChecklist(args.checklistId);
|
|
1662
|
-
break;
|
|
1663
|
-
case "create_checklist_item":
|
|
1664
|
-
result = await kanbanApi.createChecklistItem({
|
|
1665
|
-
checklistId: args.checklistId,
|
|
1666
|
-
content: args.content
|
|
1667
|
-
});
|
|
1668
|
-
break;
|
|
1669
|
-
case "update_checklist_item":
|
|
1670
|
-
result = await kanbanApi.updateChecklistItem(args.itemId, {
|
|
1671
|
-
content: args.content,
|
|
1672
|
-
completed: args.completed
|
|
1673
|
-
});
|
|
1674
|
-
break;
|
|
1675
|
-
case "delete_checklist_item":
|
|
1676
|
-
result = await kanbanApi.deleteChecklistItem(args.itemId);
|
|
1677
|
-
break;
|
|
1678
|
-
case "get_branch_name":
|
|
1679
|
-
result = await kanbanApi.getBranchName(
|
|
1680
|
-
args.cardId,
|
|
1681
|
-
args.type || "feature"
|
|
1682
|
-
);
|
|
1683
|
-
break;
|
|
1684
|
-
case "search_cards":
|
|
1685
|
-
result = await kanbanApi.searchCards(args);
|
|
1686
|
-
break;
|
|
1687
|
-
// BULK OPERATIONS
|
|
1688
|
-
case "bulk_create_cards":
|
|
1689
|
-
result = await kanbanApi.bulkCreateCards(args);
|
|
1690
|
-
break;
|
|
1691
|
-
case "bulk_create_epic_with_cards":
|
|
1692
|
-
result = await kanbanApi.bulkCreateEpicWithCards(args);
|
|
1693
|
-
break;
|
|
1694
|
-
case "bulk_create_epic_with_features":
|
|
1695
|
-
result = await kanbanApi.bulkCreateEpicWithFeatures(args);
|
|
1696
|
-
break;
|
|
1697
|
-
case "bulk_move_cards":
|
|
1698
|
-
result = await kanbanApi.bulkMoveCards(args);
|
|
1699
|
-
break;
|
|
1700
|
-
case "quick_add_cards":
|
|
1701
|
-
result = await kanbanApi.quickAddCards(args);
|
|
1702
|
-
break;
|
|
1703
|
-
case "move_cards_by_column":
|
|
1704
|
-
result = await kanbanApi.moveCardsByColumn(args);
|
|
1705
|
-
break;
|
|
1706
|
-
// AGGREGATED VIEWS
|
|
1707
|
-
case "get_workspace":
|
|
1708
|
-
result = await kanbanApi.getWorkspace(args.projectId);
|
|
1709
|
-
break;
|
|
1710
|
-
case "get_board_summary":
|
|
1711
|
-
result = await kanbanApi.getBoardSummary(args.boardId);
|
|
1712
|
-
break;
|
|
1713
|
-
case "get_epic_summary":
|
|
1714
|
-
result = await kanbanApi.getEpicSummary(args.epicId);
|
|
1715
|
-
break;
|
|
1716
|
-
// TAGS
|
|
1717
|
-
case "list_tags":
|
|
1718
|
-
result = await kanbanApi.listTags();
|
|
1719
|
-
break;
|
|
1720
|
-
case "create_tag":
|
|
1721
|
-
result = await kanbanApi.createTag(args);
|
|
1722
|
-
break;
|
|
1723
|
-
case "delete_tag":
|
|
1724
|
-
result = await kanbanApi.deleteTag(args.tagId);
|
|
1725
|
-
break;
|
|
1726
|
-
case "add_tag_to_card":
|
|
1727
|
-
result = await kanbanApi.addTagToCard(
|
|
1728
|
-
args.cardId,
|
|
1729
|
-
args.tagId
|
|
1730
|
-
);
|
|
1731
|
-
break;
|
|
1732
|
-
case "remove_tag_from_card":
|
|
1733
|
-
result = await kanbanApi.removeTagFromCard(
|
|
1734
|
-
args.cardId,
|
|
1735
|
-
args.tagId
|
|
1736
|
-
);
|
|
1737
|
-
break;
|
|
1738
|
-
// EPICS
|
|
1739
|
-
case "list_epics":
|
|
1740
|
-
result = await kanbanApi.listEpics(args);
|
|
1741
|
-
break;
|
|
1742
|
-
case "create_epic":
|
|
1743
|
-
result = await kanbanApi.createEpic(args);
|
|
1744
|
-
break;
|
|
1745
|
-
case "get_epic":
|
|
1746
|
-
result = await kanbanApi.getEpic(args.epicId);
|
|
1747
|
-
break;
|
|
1748
|
-
case "update_epic":
|
|
1749
|
-
result = await kanbanApi.updateEpic(args.epicId, args);
|
|
1750
|
-
break;
|
|
1751
|
-
case "delete_epic":
|
|
1752
|
-
result = await kanbanApi.deleteEpic(args.epicId);
|
|
1753
|
-
break;
|
|
1754
|
-
case "add_card_to_epic":
|
|
1755
|
-
result = await kanbanApi.addCardToEpic(
|
|
1756
|
-
args.epicId,
|
|
1757
|
-
args.cardId
|
|
1758
|
-
);
|
|
1759
|
-
break;
|
|
1760
|
-
case "remove_card_from_epic":
|
|
1761
|
-
result = await kanbanApi.removeCardFromEpic(
|
|
1762
|
-
args.epicId,
|
|
1763
|
-
args.cardId
|
|
1764
|
-
);
|
|
1765
|
-
break;
|
|
1766
|
-
// FEATURES
|
|
1767
|
-
case "list_features": {
|
|
1768
|
-
const features = await kanbanApi.listFeatures(args.epicId);
|
|
1769
|
-
const slugFilter = args.slug;
|
|
1770
|
-
result = slugFilter ? (Array.isArray(features) ? features : []).filter(
|
|
1771
|
-
(f) => f.slug === slugFilter.toUpperCase()
|
|
1772
|
-
) : features;
|
|
1773
|
-
break;
|
|
1774
|
-
}
|
|
1775
|
-
case "get_feature": {
|
|
1776
|
-
const fId = args.featureId || args.featureSlug;
|
|
1777
|
-
if (!fId)
|
|
1778
|
-
throw new Error("Either featureId or featureSlug is required");
|
|
1779
|
-
result = await kanbanApi.getFeature(fId);
|
|
1780
|
-
break;
|
|
1781
|
-
}
|
|
1782
|
-
case "get_active_features":
|
|
1783
|
-
result = await kanbanApi.getActiveFeatures();
|
|
1784
|
-
break;
|
|
1785
|
-
case "create_feature":
|
|
1786
|
-
result = await kanbanApi.createFeature(args);
|
|
1787
|
-
break;
|
|
1788
|
-
case "update_feature":
|
|
1789
|
-
result = await kanbanApi.updateFeature(
|
|
1790
|
-
args.featureId,
|
|
1791
|
-
args
|
|
1792
|
-
);
|
|
1793
|
-
break;
|
|
1794
|
-
case "delete_feature":
|
|
1795
|
-
result = await kanbanApi.deleteFeature(args.featureId);
|
|
1796
|
-
break;
|
|
1797
|
-
case "add_card_to_feature": {
|
|
1798
|
-
let addFeatureId = args.featureId || args.featureSlug;
|
|
1799
|
-
if (!addFeatureId)
|
|
1800
|
-
throw new Error("Either featureId or featureSlug is required");
|
|
1801
|
-
if (args.featureSlug && !args.featureId) {
|
|
1802
|
-
const resolved = await kanbanApi.getFeature(addFeatureId);
|
|
1803
|
-
addFeatureId = resolved.id;
|
|
909
|
+
// 1. FOLDERS
|
|
910
|
+
case "manage_folders":
|
|
911
|
+
switch (a.action) {
|
|
912
|
+
case "list":
|
|
913
|
+
result = await kanbanApi.listFolders();
|
|
914
|
+
break;
|
|
915
|
+
case "create":
|
|
916
|
+
result = await kanbanApi.createFolder(a);
|
|
917
|
+
break;
|
|
918
|
+
case "update":
|
|
919
|
+
result = await kanbanApi.updateFolder(a.folderId, a);
|
|
920
|
+
break;
|
|
921
|
+
case "delete":
|
|
922
|
+
result = await kanbanApi.deleteFolder(a.folderId);
|
|
923
|
+
break;
|
|
924
|
+
case "reorder":
|
|
925
|
+
result = await kanbanApi.reorderFolders(
|
|
926
|
+
a.folderId,
|
|
927
|
+
a.targetFolderId
|
|
928
|
+
);
|
|
929
|
+
break;
|
|
930
|
+
case "move_project":
|
|
931
|
+
result = await kanbanApi.moveProjectToFolder(
|
|
932
|
+
a.projectId,
|
|
933
|
+
a.folderId
|
|
934
|
+
);
|
|
935
|
+
break;
|
|
936
|
+
default:
|
|
937
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1804
938
|
}
|
|
1805
|
-
result = await kanbanApi.addCardToFeature(
|
|
1806
|
-
addFeatureId,
|
|
1807
|
-
args.cardId
|
|
1808
|
-
);
|
|
1809
939
|
break;
|
|
1810
|
-
|
|
1811
|
-
case "
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
940
|
+
// 2. PROJECTS
|
|
941
|
+
case "manage_projects":
|
|
942
|
+
switch (a.action) {
|
|
943
|
+
case "list":
|
|
944
|
+
result = await kanbanApi.listProjects(a);
|
|
945
|
+
break;
|
|
946
|
+
case "create":
|
|
947
|
+
result = await kanbanApi.createProject(a);
|
|
948
|
+
break;
|
|
949
|
+
case "get":
|
|
950
|
+
result = await kanbanApi.getProject(a.projectId);
|
|
951
|
+
break;
|
|
952
|
+
case "update":
|
|
953
|
+
result = await kanbanApi.updateProject(a.projectId, a);
|
|
954
|
+
break;
|
|
955
|
+
case "delete":
|
|
956
|
+
result = await kanbanApi.deleteProject(a.projectId);
|
|
957
|
+
break;
|
|
958
|
+
case "reorder":
|
|
959
|
+
result = await kanbanApi.reorderProjects(
|
|
960
|
+
a.projectId,
|
|
961
|
+
a.targetProjectId,
|
|
962
|
+
a.folderId
|
|
963
|
+
);
|
|
964
|
+
break;
|
|
965
|
+
case "get_summary":
|
|
966
|
+
result = await kanbanApi.getProjectSummary(a.projectId);
|
|
967
|
+
break;
|
|
968
|
+
case "get_workspace":
|
|
969
|
+
result = await kanbanApi.getWorkspace(a.projectId);
|
|
970
|
+
break;
|
|
971
|
+
default:
|
|
972
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1818
973
|
}
|
|
1819
|
-
result = await kanbanApi.removeCardFromFeature(
|
|
1820
|
-
removeFeatureId,
|
|
1821
|
-
args.cardId
|
|
1822
|
-
);
|
|
1823
974
|
break;
|
|
1824
|
-
|
|
1825
|
-
case "
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
975
|
+
// 3. COLUMNS
|
|
976
|
+
case "manage_columns":
|
|
977
|
+
switch (a.action) {
|
|
978
|
+
case "create":
|
|
979
|
+
result = await kanbanApi.createColumn(a);
|
|
980
|
+
break;
|
|
981
|
+
case "update":
|
|
982
|
+
result = await kanbanApi.updateColumn(a.columnId, a);
|
|
983
|
+
break;
|
|
984
|
+
case "delete":
|
|
985
|
+
result = await kanbanApi.deleteColumn(a.columnId);
|
|
986
|
+
break;
|
|
987
|
+
case "reorder":
|
|
988
|
+
result = await kanbanApi.reorderColumns(a.columns);
|
|
989
|
+
break;
|
|
990
|
+
default:
|
|
991
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1832
992
|
}
|
|
1833
|
-
result = await kanbanApi.getFeatureCards(cardsFeatureId);
|
|
1834
|
-
break;
|
|
1835
|
-
}
|
|
1836
|
-
// CARD LINKS
|
|
1837
|
-
case "link_cards":
|
|
1838
|
-
result = await kanbanApi.linkCards(
|
|
1839
|
-
args.cardId1,
|
|
1840
|
-
args.cardId2,
|
|
1841
|
-
args.label
|
|
1842
|
-
);
|
|
1843
993
|
break;
|
|
1844
|
-
|
|
1845
|
-
|
|
994
|
+
// 4. CARDS
|
|
995
|
+
case "manage_cards":
|
|
996
|
+
switch (a.action) {
|
|
997
|
+
case "get":
|
|
998
|
+
result = await kanbanApi.getCard(a.cardId);
|
|
999
|
+
break;
|
|
1000
|
+
case "create":
|
|
1001
|
+
result = await kanbanApi.createCard(a);
|
|
1002
|
+
break;
|
|
1003
|
+
case "update":
|
|
1004
|
+
result = await kanbanApi.updateCard(a.cardId, a);
|
|
1005
|
+
break;
|
|
1006
|
+
case "delete":
|
|
1007
|
+
result = await kanbanApi.deleteCard(a.cardId);
|
|
1008
|
+
break;
|
|
1009
|
+
case "move":
|
|
1010
|
+
result = await kanbanApi.moveCard(
|
|
1011
|
+
a.cardId,
|
|
1012
|
+
a.targetColumnId,
|
|
1013
|
+
a.newOrder
|
|
1014
|
+
);
|
|
1015
|
+
break;
|
|
1016
|
+
case "archive":
|
|
1017
|
+
result = await kanbanApi.archiveCard(a.cardId);
|
|
1018
|
+
break;
|
|
1019
|
+
case "unarchive":
|
|
1020
|
+
result = await kanbanApi.unarchiveCard(a.cardId);
|
|
1021
|
+
break;
|
|
1022
|
+
case "list_archived":
|
|
1023
|
+
result = await kanbanApi.listArchivedCards(a.projectId);
|
|
1024
|
+
break;
|
|
1025
|
+
case "search":
|
|
1026
|
+
result = await kanbanApi.searchCards(a);
|
|
1027
|
+
break;
|
|
1028
|
+
case "get_branch_name":
|
|
1029
|
+
result = await kanbanApi.getBranchName(
|
|
1030
|
+
a.cardId,
|
|
1031
|
+
a.type || "feature"
|
|
1032
|
+
);
|
|
1033
|
+
break;
|
|
1034
|
+
case "bulk_create":
|
|
1035
|
+
result = await kanbanApi.bulkCreateCards(a);
|
|
1036
|
+
break;
|
|
1037
|
+
case "quick_add":
|
|
1038
|
+
result = await kanbanApi.quickAddCards(a);
|
|
1039
|
+
break;
|
|
1040
|
+
case "bulk_move":
|
|
1041
|
+
result = await kanbanApi.bulkMoveCards(a);
|
|
1042
|
+
break;
|
|
1043
|
+
case "move_by_column":
|
|
1044
|
+
result = await kanbanApi.moveCardsByColumn(a);
|
|
1045
|
+
break;
|
|
1046
|
+
default:
|
|
1047
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1048
|
+
}
|
|
1846
1049
|
break;
|
|
1847
|
-
|
|
1848
|
-
|
|
1050
|
+
// 5. COMMENTS
|
|
1051
|
+
case "manage_comments":
|
|
1052
|
+
switch (a.action) {
|
|
1053
|
+
case "add":
|
|
1054
|
+
result = await kanbanApi.addComment(a.cardId, a.content);
|
|
1055
|
+
break;
|
|
1056
|
+
case "delete":
|
|
1057
|
+
result = await kanbanApi.deleteComment(a.commentId);
|
|
1058
|
+
break;
|
|
1059
|
+
default:
|
|
1060
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1061
|
+
}
|
|
1849
1062
|
break;
|
|
1850
|
-
//
|
|
1851
|
-
case "
|
|
1852
|
-
|
|
1063
|
+
// 6. CHECKLISTS
|
|
1064
|
+
case "manage_checklists":
|
|
1065
|
+
switch (a.action) {
|
|
1066
|
+
case "create":
|
|
1067
|
+
result = await kanbanApi.createChecklist({
|
|
1068
|
+
cardId: a.cardId,
|
|
1069
|
+
title: a.title
|
|
1070
|
+
});
|
|
1071
|
+
break;
|
|
1072
|
+
case "update":
|
|
1073
|
+
result = await kanbanApi.updateChecklist(a.checklistId, {
|
|
1074
|
+
title: a.title
|
|
1075
|
+
});
|
|
1076
|
+
break;
|
|
1077
|
+
case "delete":
|
|
1078
|
+
result = await kanbanApi.deleteChecklist(a.checklistId);
|
|
1079
|
+
break;
|
|
1080
|
+
case "create_item":
|
|
1081
|
+
result = await kanbanApi.createChecklistItem({
|
|
1082
|
+
checklistId: a.checklistId,
|
|
1083
|
+
content: a.content
|
|
1084
|
+
});
|
|
1085
|
+
break;
|
|
1086
|
+
case "update_item":
|
|
1087
|
+
result = await kanbanApi.updateChecklistItem(a.itemId, {
|
|
1088
|
+
content: a.content,
|
|
1089
|
+
completed: a.completed
|
|
1090
|
+
});
|
|
1091
|
+
break;
|
|
1092
|
+
case "delete_item":
|
|
1093
|
+
result = await kanbanApi.deleteChecklistItem(a.itemId);
|
|
1094
|
+
break;
|
|
1095
|
+
default:
|
|
1096
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1097
|
+
}
|
|
1853
1098
|
break;
|
|
1854
|
-
|
|
1855
|
-
|
|
1099
|
+
// 7. TAGS
|
|
1100
|
+
case "manage_tags":
|
|
1101
|
+
switch (a.action) {
|
|
1102
|
+
case "list":
|
|
1103
|
+
result = await kanbanApi.listTags();
|
|
1104
|
+
break;
|
|
1105
|
+
case "create":
|
|
1106
|
+
result = await kanbanApi.createTag(a);
|
|
1107
|
+
break;
|
|
1108
|
+
case "delete":
|
|
1109
|
+
result = await kanbanApi.deleteTag(a.tagId);
|
|
1110
|
+
break;
|
|
1111
|
+
case "add_to_card":
|
|
1112
|
+
result = await kanbanApi.addTagToCard(a.cardId, a.tagId);
|
|
1113
|
+
break;
|
|
1114
|
+
case "remove_from_card":
|
|
1115
|
+
result = await kanbanApi.removeTagFromCard(a.cardId, a.tagId);
|
|
1116
|
+
break;
|
|
1117
|
+
default:
|
|
1118
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1119
|
+
}
|
|
1856
1120
|
break;
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1121
|
+
// 8. EPICS
|
|
1122
|
+
case "manage_epics":
|
|
1123
|
+
switch (a.action) {
|
|
1124
|
+
case "list":
|
|
1125
|
+
result = await kanbanApi.listEpics(a);
|
|
1126
|
+
break;
|
|
1127
|
+
case "create":
|
|
1128
|
+
result = await kanbanApi.createEpic(a);
|
|
1129
|
+
break;
|
|
1130
|
+
case "get":
|
|
1131
|
+
result = await kanbanApi.getEpic(a.epicId);
|
|
1132
|
+
break;
|
|
1133
|
+
case "update":
|
|
1134
|
+
result = await kanbanApi.updateEpic(a.epicId, a);
|
|
1135
|
+
break;
|
|
1136
|
+
case "delete":
|
|
1137
|
+
result = await kanbanApi.deleteEpic(a.epicId);
|
|
1138
|
+
break;
|
|
1139
|
+
case "add_card":
|
|
1140
|
+
result = await kanbanApi.addCardToEpic(a.epicId, a.cardId);
|
|
1141
|
+
break;
|
|
1142
|
+
case "remove_card":
|
|
1143
|
+
result = await kanbanApi.removeCardFromEpic(a.epicId, a.cardId);
|
|
1144
|
+
break;
|
|
1145
|
+
case "get_summary":
|
|
1146
|
+
result = await kanbanApi.getEpicSummary(a.epicId);
|
|
1147
|
+
break;
|
|
1148
|
+
case "bulk_create_with_cards":
|
|
1149
|
+
result = await kanbanApi.bulkCreateEpicWithCards(a);
|
|
1150
|
+
break;
|
|
1151
|
+
case "bulk_create_with_features":
|
|
1152
|
+
result = await kanbanApi.bulkCreateEpicWithFeatures(a);
|
|
1153
|
+
break;
|
|
1154
|
+
default:
|
|
1155
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1156
|
+
}
|
|
1862
1157
|
break;
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1158
|
+
// 9. FEATURES
|
|
1159
|
+
case "manage_features":
|
|
1160
|
+
switch (a.action) {
|
|
1161
|
+
case "list": {
|
|
1162
|
+
const features = await kanbanApi.listFeatures(a.epicId);
|
|
1163
|
+
const slugFilter = a.slug;
|
|
1164
|
+
result = slugFilter ? (Array.isArray(features) ? features : []).filter(
|
|
1165
|
+
(f) => f.slug === slugFilter.toUpperCase()
|
|
1166
|
+
) : features;
|
|
1167
|
+
break;
|
|
1168
|
+
}
|
|
1169
|
+
case "get": {
|
|
1170
|
+
const fId = a.featureId || a.featureSlug;
|
|
1171
|
+
if (!fId)
|
|
1172
|
+
throw new Error("Either featureId or featureSlug is required");
|
|
1173
|
+
result = await kanbanApi.getFeature(fId);
|
|
1174
|
+
break;
|
|
1175
|
+
}
|
|
1176
|
+
case "get_active":
|
|
1177
|
+
result = await kanbanApi.getActiveFeatures();
|
|
1178
|
+
break;
|
|
1179
|
+
case "create":
|
|
1180
|
+
result = await kanbanApi.createFeature(a);
|
|
1181
|
+
break;
|
|
1182
|
+
case "update":
|
|
1183
|
+
result = await kanbanApi.updateFeature(a.featureId, a);
|
|
1184
|
+
break;
|
|
1185
|
+
case "delete":
|
|
1186
|
+
result = await kanbanApi.deleteFeature(a.featureId);
|
|
1187
|
+
break;
|
|
1188
|
+
case "add_card": {
|
|
1189
|
+
let addFId = a.featureId || a.featureSlug;
|
|
1190
|
+
if (!addFId)
|
|
1191
|
+
throw new Error("Either featureId or featureSlug is required");
|
|
1192
|
+
if (a.featureSlug && !a.featureId) {
|
|
1193
|
+
const resolved = await kanbanApi.getFeature(addFId);
|
|
1194
|
+
addFId = resolved.id;
|
|
1195
|
+
}
|
|
1196
|
+
result = await kanbanApi.addCardToFeature(addFId, a.cardId);
|
|
1197
|
+
break;
|
|
1198
|
+
}
|
|
1199
|
+
case "remove_card": {
|
|
1200
|
+
let rmFId = a.featureId || a.featureSlug;
|
|
1201
|
+
if (!rmFId)
|
|
1202
|
+
throw new Error("Either featureId or featureSlug is required");
|
|
1203
|
+
if (a.featureSlug && !a.featureId) {
|
|
1204
|
+
const resolved = await kanbanApi.getFeature(rmFId);
|
|
1205
|
+
rmFId = resolved.id;
|
|
1206
|
+
}
|
|
1207
|
+
result = await kanbanApi.removeCardFromFeature(rmFId, a.cardId);
|
|
1208
|
+
break;
|
|
1209
|
+
}
|
|
1210
|
+
case "get_cards": {
|
|
1211
|
+
let cardsFId = a.featureId || a.featureSlug;
|
|
1212
|
+
if (!cardsFId)
|
|
1213
|
+
throw new Error("Either featureId or featureSlug is required");
|
|
1214
|
+
if (a.featureSlug && !a.featureId) {
|
|
1215
|
+
const resolved = await kanbanApi.getFeature(cardsFId);
|
|
1216
|
+
cardsFId = resolved.id;
|
|
1217
|
+
}
|
|
1218
|
+
result = await kanbanApi.getFeatureCards(cardsFId);
|
|
1219
|
+
break;
|
|
1220
|
+
}
|
|
1221
|
+
default:
|
|
1222
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1223
|
+
}
|
|
1867
1224
|
break;
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1225
|
+
// 10. CARD LINKS
|
|
1226
|
+
case "manage_card_links":
|
|
1227
|
+
switch (a.action) {
|
|
1228
|
+
case "link":
|
|
1229
|
+
result = await kanbanApi.linkCards(a.cardId1, a.cardId2, a.label);
|
|
1230
|
+
break;
|
|
1231
|
+
case "unlink":
|
|
1232
|
+
result = await kanbanApi.unlinkCards(a.linkId);
|
|
1233
|
+
break;
|
|
1234
|
+
case "get":
|
|
1235
|
+
result = await kanbanApi.getLinkedCards(a.cardId);
|
|
1236
|
+
break;
|
|
1237
|
+
default:
|
|
1238
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1239
|
+
}
|
|
1873
1240
|
break;
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1241
|
+
// 11. GITHUB
|
|
1242
|
+
case "manage_github":
|
|
1243
|
+
switch (a.action) {
|
|
1244
|
+
case "setup":
|
|
1245
|
+
result = await kanbanApi.setupGithubIntegration(a);
|
|
1246
|
+
break;
|
|
1247
|
+
case "get":
|
|
1248
|
+
result = await kanbanApi.getGithubIntegration(a.projectId);
|
|
1249
|
+
break;
|
|
1250
|
+
case "update":
|
|
1251
|
+
result = await kanbanApi.updateGithubIntegration(a.projectId, a);
|
|
1252
|
+
break;
|
|
1253
|
+
case "remove":
|
|
1254
|
+
result = await kanbanApi.removeGithubIntegration(a.projectId);
|
|
1255
|
+
break;
|
|
1256
|
+
case "link_branch":
|
|
1257
|
+
result = await kanbanApi.linkCardToBranch(a.cardId, a.branch);
|
|
1258
|
+
break;
|
|
1259
|
+
case "link_pr":
|
|
1260
|
+
result = await kanbanApi.linkCardToPr(a.cardId, a.prUrl);
|
|
1261
|
+
break;
|
|
1262
|
+
default:
|
|
1263
|
+
throw new Error(`Unknown action: ${a.action}`);
|
|
1264
|
+
}
|
|
1879
1265
|
break;
|
|
1880
1266
|
default:
|
|
1881
1267
|
throw new Error(`Unknown tool: ${name}`);
|