snboard-mcp 1.1.0 → 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 +793 -1553
- 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) }),
|
|
@@ -102,19 +70,28 @@ var kanbanApi = {
|
|
|
102
70
|
createCard: (data) => api("/api/cards", { method: "POST", body: JSON.stringify(data) }),
|
|
103
71
|
updateCard: (id, data) => api(`/api/cards/${id}`, { method: "PUT", body: JSON.stringify(data) }),
|
|
104
72
|
deleteCard: (id) => api(`/api/cards/${id}`, { method: "DELETE" }),
|
|
105
|
-
archiveCard: (id) => api(`/api/cards/${id}`, {
|
|
106
|
-
|
|
107
|
-
|
|
73
|
+
archiveCard: (id) => api(`/api/cards/${id}`, {
|
|
74
|
+
method: "PUT",
|
|
75
|
+
body: JSON.stringify({ isArchived: true })
|
|
76
|
+
}),
|
|
77
|
+
unarchiveCard: (id) => api(`/api/cards/${id}`, {
|
|
78
|
+
method: "PUT",
|
|
79
|
+
body: JSON.stringify({ isArchived: false })
|
|
80
|
+
}),
|
|
81
|
+
listArchivedCards: (projectId) => api(`/api/archived?projectId=${projectId}`),
|
|
108
82
|
moveCard: (id, targetColumnId, newOrder) => api("/api/cards/move", {
|
|
109
83
|
method: "POST",
|
|
110
|
-
body: JSON.stringify({
|
|
84
|
+
body: JSON.stringify({
|
|
85
|
+
cardId: id,
|
|
86
|
+
targetColumnId,
|
|
87
|
+
...newOrder !== void 0 && { newOrder }
|
|
88
|
+
})
|
|
111
89
|
}),
|
|
112
90
|
getBranchName: (id, type) => api(`/api/cards/${id}/branch?type=${type}`),
|
|
113
91
|
searchCards: (params) => {
|
|
114
92
|
const searchParams = new URLSearchParams();
|
|
115
93
|
searchParams.set("query", params.query);
|
|
116
94
|
if (params.projectId) searchParams.set("projectId", params.projectId);
|
|
117
|
-
if (params.boardId) searchParams.set("boardId", params.boardId);
|
|
118
95
|
if (params.columnId) searchParams.set("columnId", params.columnId);
|
|
119
96
|
if (params.epicId) searchParams.set("epicId", params.epicId);
|
|
120
97
|
if (params.featureId) searchParams.set("featureId", params.featureId);
|
|
@@ -179,12 +156,20 @@ var kanbanApi = {
|
|
|
179
156
|
return { epic, cards: cardResults, created: cardResults.length };
|
|
180
157
|
},
|
|
181
158
|
bulkCreateEpicWithFeatures: async (data) => {
|
|
182
|
-
const epic = await api("/api/epics", {
|
|
159
|
+
const epic = await api("/api/epics", {
|
|
160
|
+
method: "POST",
|
|
161
|
+
body: JSON.stringify(data.epic)
|
|
162
|
+
});
|
|
183
163
|
const features = await Promise.all(
|
|
184
164
|
data.features.map(
|
|
185
165
|
(f) => api("/api/features", {
|
|
186
166
|
method: "POST",
|
|
187
|
-
body: JSON.stringify({
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
epicId: epic.id,
|
|
169
|
+
title: f.title,
|
|
170
|
+
slug: f.slug,
|
|
171
|
+
description: f.description
|
|
172
|
+
})
|
|
188
173
|
})
|
|
189
174
|
)
|
|
190
175
|
);
|
|
@@ -205,10 +190,18 @@ var kanbanApi = {
|
|
|
205
190
|
body: JSON.stringify({ cardId: card.id })
|
|
206
191
|
});
|
|
207
192
|
}
|
|
208
|
-
return {
|
|
193
|
+
return {
|
|
194
|
+
id: feature.id,
|
|
195
|
+
slug: feature.slug,
|
|
196
|
+
title: feature.title,
|
|
197
|
+
cardIds: cards.map((c) => c.id)
|
|
198
|
+
};
|
|
209
199
|
})
|
|
210
200
|
);
|
|
211
|
-
const totalCards = featureResults.reduce(
|
|
201
|
+
const totalCards = featureResults.reduce(
|
|
202
|
+
(sum, f) => sum + f.cardIds.length,
|
|
203
|
+
0
|
|
204
|
+
);
|
|
212
205
|
return {
|
|
213
206
|
epic: { id: epic.id, slug: epic.slug, name: epic.name },
|
|
214
207
|
features: featureResults,
|
|
@@ -228,26 +221,18 @@ var kanbanApi = {
|
|
|
228
221
|
},
|
|
229
222
|
// Aggregated views
|
|
230
223
|
getWorkspace: async (projectId) => {
|
|
231
|
-
const project = await api(
|
|
232
|
-
`/api/projects/${projectId}?includeBoards=true&boardsCompact=true`
|
|
233
|
-
);
|
|
234
|
-
if (!project.boards?.length) return { project, boards: [] };
|
|
235
|
-
const boardsWithColumns = await Promise.all(
|
|
236
|
-
project.boards.map((b) => api(`/api/boards/${b.id}`))
|
|
237
|
-
);
|
|
224
|
+
const project = await api(`/api/projects/${projectId}`);
|
|
238
225
|
return {
|
|
239
226
|
project: { id: project.id, name: project.name },
|
|
240
|
-
|
|
227
|
+
columns: project.columns || []
|
|
241
228
|
};
|
|
242
229
|
},
|
|
243
|
-
|
|
244
|
-
const
|
|
245
|
-
`/api/boards/${boardId}?includeCards=true&compact=true`
|
|
246
|
-
);
|
|
230
|
+
getProjectSummary: async (projectId) => {
|
|
231
|
+
const project = await api(`/api/projects/${projectId}`);
|
|
247
232
|
const summary = {
|
|
248
|
-
id:
|
|
249
|
-
name:
|
|
250
|
-
columns:
|
|
233
|
+
id: project.id,
|
|
234
|
+
name: project.name,
|
|
235
|
+
columns: (project.columns || []).map((col) => ({
|
|
251
236
|
id: col.id,
|
|
252
237
|
name: col.name,
|
|
253
238
|
cardCount: col.cards?.length || 0,
|
|
@@ -255,7 +240,7 @@ var kanbanApi = {
|
|
|
255
240
|
p2Count: col.cards?.filter((c) => c.priority === "P2").length || 0,
|
|
256
241
|
p3Count: col.cards?.filter((c) => c.priority === "P3").length || 0
|
|
257
242
|
})),
|
|
258
|
-
totalCards:
|
|
243
|
+
totalCards: (project.columns || []).reduce(
|
|
259
244
|
(sum, col) => sum + (col.cards?.length || 0),
|
|
260
245
|
0
|
|
261
246
|
)
|
|
@@ -388,7 +373,10 @@ var kanbanApi = {
|
|
|
388
373
|
createFeature: (data) => api("/api/features", { method: "POST", body: JSON.stringify(data) }),
|
|
389
374
|
updateFeature: (id, data) => api(`/api/features/${id}`, { method: "PATCH", body: JSON.stringify(data) }),
|
|
390
375
|
deleteFeature: (id) => api(`/api/features/${id}`, { method: "DELETE" }),
|
|
391
|
-
addCardToFeature: (featureId, cardId) => api(`/api/features/${featureId}/cards`, {
|
|
376
|
+
addCardToFeature: (featureId, cardId) => api(`/api/features/${featureId}/cards`, {
|
|
377
|
+
method: "POST",
|
|
378
|
+
body: JSON.stringify({ cardId })
|
|
379
|
+
}),
|
|
392
380
|
removeCardFromFeature: (featureId, cardId) => api(`/api/features/${featureId}/cards/${cardId}`, { method: "DELETE" }),
|
|
393
381
|
getFeatureCards: (featureId) => api(`/api/features/${featureId}/cards`),
|
|
394
382
|
// Card Links
|
|
@@ -416,45 +404,7 @@ var kanbanApi = {
|
|
|
416
404
|
linkCardToPr: (cardId, prUrl) => api(`/api/cards/${cardId}`, {
|
|
417
405
|
method: "PUT",
|
|
418
406
|
body: JSON.stringify({ githubPrUrl: prUrl })
|
|
419
|
-
})
|
|
420
|
-
// GitHub API
|
|
421
|
-
githubListRepos: (userId, type) => api(`/api/github/repos?userId=${userId}${type ? `&type=${type}` : ""}`),
|
|
422
|
-
githubCreateBranch: (data) => api("/api/github/branches", { method: "POST", body: JSON.stringify(data) }),
|
|
423
|
-
githubCreatePr: (data) => api("/api/github/pull-requests", {
|
|
424
|
-
method: "POST",
|
|
425
|
-
body: JSON.stringify(data)
|
|
426
|
-
}),
|
|
427
|
-
// Ideas
|
|
428
|
-
listIdeas: (params) => {
|
|
429
|
-
const searchParams = new URLSearchParams();
|
|
430
|
-
if (params?.status) searchParams.set("status", params.status);
|
|
431
|
-
if (params?.filter) searchParams.set("filter", params.filter);
|
|
432
|
-
const query = searchParams.toString();
|
|
433
|
-
return api(`/api/ideas${query ? `?${query}` : ""}`);
|
|
434
|
-
},
|
|
435
|
-
getIdea: (id) => api(`/api/ideas/${id}`),
|
|
436
|
-
createIdea: (data) => api("/api/ideas", { method: "POST", body: JSON.stringify(data) }),
|
|
437
|
-
updateIdea: (id, data) => api(`/api/ideas/${id}`, { method: "PATCH", body: JSON.stringify(data) }),
|
|
438
|
-
deleteIdea: (id) => api(`/api/ideas/${id}`, { method: "DELETE" }),
|
|
439
|
-
convertIdeaToCard: (ideaId, data) => api(`/api/ideas/${ideaId}/convert`, { method: "POST", body: JSON.stringify(data) }),
|
|
440
|
-
// Time Tracking
|
|
441
|
-
getTimeTracking: (params) => {
|
|
442
|
-
const searchParams = new URLSearchParams();
|
|
443
|
-
if (params?.startDate) searchParams.set("startDate", params.startDate);
|
|
444
|
-
if (params?.endDate) searchParams.set("endDate", params.endDate);
|
|
445
|
-
if (params?.projectId) searchParams.set("projectId", params.projectId);
|
|
446
|
-
const query = searchParams.toString();
|
|
447
|
-
return api(`/api/time-tracking${query ? `?${query}` : ""}`);
|
|
448
|
-
},
|
|
449
|
-
logActivity: (data) => api("/api/time-tracking", { method: "POST", body: JSON.stringify(data) }),
|
|
450
|
-
endTimeSession: () => api("/api/time-tracking", { method: "DELETE" }),
|
|
451
|
-
// Daily Summary
|
|
452
|
-
getDailySummary: () => api("/api/daily-summary"),
|
|
453
|
-
// Retrospective
|
|
454
|
-
getRetrospective: (days) => api(`/api/retrospectives/weekly${days ? `?days=${days}` : ""}`),
|
|
455
|
-
// Export
|
|
456
|
-
exportBoard: (boardId) => api(`/api/export/board/${boardId}`),
|
|
457
|
-
exportProject: (projectId) => api(`/api/export/project/${projectId}`)
|
|
407
|
+
})
|
|
458
408
|
};
|
|
459
409
|
var server = new Server(
|
|
460
410
|
{ name: "kanban-mcp", version: "1.1.0" },
|
|
@@ -462,1566 +412,856 @@ var server = new Server(
|
|
|
462
412
|
);
|
|
463
413
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
464
414
|
tools: [
|
|
465
|
-
// FOLDERS
|
|
466
|
-
{
|
|
467
|
-
name: "list_folders",
|
|
468
|
-
description: "List all folders with their projects",
|
|
469
|
-
inputSchema: { type: "object", properties: {} }
|
|
470
|
-
},
|
|
471
|
-
{
|
|
472
|
-
name: "create_folder",
|
|
473
|
-
description: "Create a new folder to organize projects",
|
|
474
|
-
inputSchema: {
|
|
475
|
-
type: "object",
|
|
476
|
-
properties: {
|
|
477
|
-
name: { type: "string" },
|
|
478
|
-
icon: { type: "string" },
|
|
479
|
-
color: { type: "string" }
|
|
480
|
-
},
|
|
481
|
-
required: ["name"]
|
|
482
|
-
}
|
|
483
|
-
},
|
|
484
|
-
{
|
|
485
|
-
name: "update_folder",
|
|
486
|
-
description: "Update a folder (name, icon, color)",
|
|
487
|
-
inputSchema: {
|
|
488
|
-
type: "object",
|
|
489
|
-
properties: {
|
|
490
|
-
folderId: { type: "string" },
|
|
491
|
-
name: { type: "string" },
|
|
492
|
-
icon: { type: "string" },
|
|
493
|
-
color: { type: "string" }
|
|
494
|
-
},
|
|
495
|
-
required: ["folderId"]
|
|
496
|
-
}
|
|
497
|
-
},
|
|
498
|
-
{
|
|
499
|
-
name: "delete_folder",
|
|
500
|
-
description: "Delete a folder (projects become orphans)",
|
|
501
|
-
inputSchema: {
|
|
502
|
-
type: "object",
|
|
503
|
-
properties: { folderId: { type: "string" } },
|
|
504
|
-
required: ["folderId"]
|
|
505
|
-
}
|
|
506
|
-
},
|
|
415
|
+
// 1. FOLDERS
|
|
507
416
|
{
|
|
508
|
-
name: "
|
|
509
|
-
description: "
|
|
417
|
+
name: "manage_folders",
|
|
418
|
+
description: "Folder operations. Actions: list, create, update, delete, reorder, move_project",
|
|
510
419
|
inputSchema: {
|
|
511
420
|
type: "object",
|
|
512
421
|
properties: {
|
|
513
|
-
|
|
514
|
-
|
|
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" }
|
|
515
439
|
},
|
|
516
|
-
required: ["
|
|
440
|
+
required: ["action"]
|
|
517
441
|
}
|
|
518
442
|
},
|
|
443
|
+
// 2. PROJECTS
|
|
519
444
|
{
|
|
520
|
-
name: "
|
|
521
|
-
description: "
|
|
445
|
+
name: "manage_projects",
|
|
446
|
+
description: "Project operations. Actions: list, create, get, update, delete, reorder, get_summary, get_workspace",
|
|
522
447
|
inputSchema: {
|
|
523
448
|
type: "object",
|
|
524
449
|
properties: {
|
|
525
|
-
|
|
526
|
-
|
|
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" },
|
|
471
|
+
folderId: {
|
|
472
|
+
type: "string",
|
|
473
|
+
description: 'list: filter by folder ("none" for orphans). create/update: assign to folder. reorder: folder context'
|
|
474
|
+
},
|
|
475
|
+
limit: { type: "number", description: "list (default:20)" },
|
|
476
|
+
compact: { type: "boolean", description: "list" },
|
|
477
|
+
targetProjectId: { type: "string", description: "reorder" }
|
|
527
478
|
},
|
|
528
|
-
required: ["
|
|
529
|
-
}
|
|
530
|
-
},
|
|
531
|
-
// PROJECTS
|
|
532
|
-
{
|
|
533
|
-
name: "list_projects",
|
|
534
|
-
description: "List projects (default limit:20). Use compact:true for minimal fields",
|
|
535
|
-
inputSchema: {
|
|
536
|
-
type: "object",
|
|
537
|
-
properties: {
|
|
538
|
-
folderId: { type: "string", description: 'Filter by folder. Use "none" for orphan projects' },
|
|
539
|
-
limit: { type: "number" },
|
|
540
|
-
compact: { type: "boolean" }
|
|
541
|
-
}
|
|
479
|
+
required: ["action"]
|
|
542
480
|
}
|
|
543
481
|
},
|
|
482
|
+
// 3. COLUMNS
|
|
544
483
|
{
|
|
545
|
-
name: "
|
|
546
|
-
description: "
|
|
484
|
+
name: "manage_columns",
|
|
485
|
+
description: "Column operations. Actions: create, update, delete, reorder",
|
|
547
486
|
inputSchema: {
|
|
548
487
|
type: "object",
|
|
549
488
|
properties: {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
489
|
+
action: {
|
|
490
|
+
type: "string",
|
|
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}"
|
|
508
|
+
}
|
|
555
509
|
},
|
|
556
|
-
required: ["
|
|
510
|
+
required: ["action"]
|
|
557
511
|
}
|
|
558
512
|
},
|
|
513
|
+
// 4. CARDS
|
|
559
514
|
{
|
|
560
|
-
name: "
|
|
561
|
-
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",
|
|
562
517
|
inputSchema: {
|
|
563
518
|
type: "object",
|
|
564
519
|
properties: {
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
520
|
+
action: {
|
|
521
|
+
type: "string",
|
|
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" }
|
|
568
619
|
},
|
|
569
|
-
required: ["
|
|
620
|
+
required: ["action"]
|
|
570
621
|
}
|
|
571
622
|
},
|
|
623
|
+
// 5. COMMENTS
|
|
572
624
|
{
|
|
573
|
-
name: "
|
|
574
|
-
description: "
|
|
625
|
+
name: "manage_comments",
|
|
626
|
+
description: "Comment operations. Actions: add, delete",
|
|
575
627
|
inputSchema: {
|
|
576
628
|
type: "object",
|
|
577
629
|
properties: {
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
color: { type: "string" },
|
|
583
|
-
folderId: { type: "string", description: "Move to folder (null to remove)" }
|
|
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" }
|
|
584
634
|
},
|
|
585
|
-
required: ["
|
|
586
|
-
}
|
|
587
|
-
},
|
|
588
|
-
{
|
|
589
|
-
name: "delete_project",
|
|
590
|
-
description: "Delete project and all its content",
|
|
591
|
-
inputSchema: {
|
|
592
|
-
type: "object",
|
|
593
|
-
properties: { projectId: { type: "string" } },
|
|
594
|
-
required: ["projectId"]
|
|
635
|
+
required: ["action"]
|
|
595
636
|
}
|
|
596
637
|
},
|
|
638
|
+
// 6. CHECKLISTS
|
|
597
639
|
{
|
|
598
|
-
name: "
|
|
599
|
-
description: "
|
|
640
|
+
name: "manage_checklists",
|
|
641
|
+
description: "Checklist operations. Actions: create, update, delete, create_item, update_item, delete_item",
|
|
600
642
|
inputSchema: {
|
|
601
643
|
type: "object",
|
|
602
644
|
properties: {
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
645
|
+
action: {
|
|
646
|
+
type: "string",
|
|
647
|
+
enum: [
|
|
648
|
+
"create",
|
|
649
|
+
"update",
|
|
650
|
+
"delete",
|
|
651
|
+
"create_item",
|
|
652
|
+
"update_item",
|
|
653
|
+
"delete_item"
|
|
654
|
+
]
|
|
655
|
+
},
|
|
656
|
+
cardId: { type: "string", description: "create" },
|
|
657
|
+
checklistId: {
|
|
658
|
+
type: "string",
|
|
659
|
+
description: "update/delete/create_item"
|
|
660
|
+
},
|
|
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"
|
|
666
|
+
},
|
|
667
|
+
completed: { type: "boolean", description: "update_item" }
|
|
606
668
|
},
|
|
607
|
-
required: ["
|
|
669
|
+
required: ["action"]
|
|
608
670
|
}
|
|
609
671
|
},
|
|
610
|
-
//
|
|
672
|
+
// 7. TAGS
|
|
611
673
|
{
|
|
612
|
-
name: "
|
|
613
|
-
description: "
|
|
674
|
+
name: "manage_tags",
|
|
675
|
+
description: "Tag operations. Actions: list, create, delete, add_to_card, remove_from_card",
|
|
614
676
|
inputSchema: {
|
|
615
677
|
type: "object",
|
|
616
678
|
properties: {
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
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
|
+
}
|
|
620
699
|
},
|
|
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"]
|
|
700
|
+
required: ["action"]
|
|
631
701
|
}
|
|
632
702
|
},
|
|
703
|
+
// 8. EPICS
|
|
633
704
|
{
|
|
634
|
-
name: "
|
|
635
|
-
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",
|
|
636
707
|
inputSchema: {
|
|
637
708
|
type: "object",
|
|
638
709
|
properties: {
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
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
|
+
]
|
|
644
724
|
},
|
|
645
|
-
|
|
646
|
-
type: "
|
|
647
|
-
description: "
|
|
725
|
+
epicId: {
|
|
726
|
+
type: "string",
|
|
727
|
+
description: "get/update/delete/add_card/remove_card/get_summary"
|
|
648
728
|
},
|
|
649
|
-
|
|
650
|
-
|
|
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: {
|
|
651
738
|
type: "boolean",
|
|
652
|
-
description: "
|
|
739
|
+
description: "update: sync targetDate to all card due dates"
|
|
653
740
|
},
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
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" }
|
|
691
|
-
},
|
|
692
|
-
required: ["boardId", "name"]
|
|
693
|
-
}
|
|
694
|
-
},
|
|
695
|
-
{
|
|
696
|
-
name: "update_column",
|
|
697
|
-
description: "Update column",
|
|
698
|
-
inputSchema: {
|
|
699
|
-
type: "object",
|
|
700
|
-
properties: {
|
|
701
|
-
columnId: { type: "string" },
|
|
702
|
-
name: { type: "string" },
|
|
703
|
-
emoji: { type: "string" }
|
|
704
|
-
},
|
|
705
|
-
required: ["columnId"]
|
|
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"]
|
|
715
|
-
}
|
|
716
|
-
},
|
|
717
|
-
{
|
|
718
|
-
name: "reorder_columns",
|
|
719
|
-
description: "Reorder columns in a board",
|
|
720
|
-
inputSchema: {
|
|
721
|
-
type: "object",
|
|
722
|
-
properties: {
|
|
723
|
-
columns: {
|
|
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: ["
|
|
801
|
+
required: ["action"]
|
|
736
802
|
}
|
|
737
803
|
},
|
|
738
|
-
//
|
|
804
|
+
// 9. FEATURES
|
|
739
805
|
{
|
|
740
|
-
name: "
|
|
741
|
-
description: "
|
|
806
|
+
name: "manage_features",
|
|
807
|
+
description: "Feature operations. Actions: list, get, get_active, create, update, delete, add_card, remove_card, get_cards",
|
|
742
808
|
inputSchema: {
|
|
743
809
|
type: "object",
|
|
744
|
-
properties: {
|
|
745
|
-
|
|
810
|
+
properties: {
|
|
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
|
+
]
|
|
824
|
+
},
|
|
825
|
+
featureId: {
|
|
826
|
+
type: "string",
|
|
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" }
|
|
847
|
+
},
|
|
848
|
+
required: ["action"]
|
|
746
849
|
}
|
|
747
850
|
},
|
|
851
|
+
// 10. CARD LINKS
|
|
748
852
|
{
|
|
749
|
-
name: "
|
|
750
|
-
description: "
|
|
853
|
+
name: "manage_card_links",
|
|
854
|
+
description: "Card link operations. Actions: link, unlink, get",
|
|
751
855
|
inputSchema: {
|
|
752
856
|
type: "object",
|
|
753
857
|
properties: {
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
tagIds: { type: "array", items: { type: "string" } },
|
|
761
|
-
estimatedMinutes: { type: "number", description: "Estimated time in minutes" },
|
|
762
|
-
cognitiveLoad: { type: "string", description: "Cognitive load level" }
|
|
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" }
|
|
763
864
|
},
|
|
764
|
-
required: ["
|
|
865
|
+
required: ["action"]
|
|
765
866
|
}
|
|
766
867
|
},
|
|
868
|
+
// 11. GITHUB
|
|
767
869
|
{
|
|
768
|
-
name: "
|
|
769
|
-
description: "
|
|
870
|
+
name: "manage_github",
|
|
871
|
+
description: "GitHub integration. Actions: setup, get, update, remove, link_branch, link_pr",
|
|
770
872
|
inputSchema: {
|
|
771
873
|
type: "object",
|
|
772
874
|
properties: {
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
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" }
|
|
784
897
|
},
|
|
785
|
-
required: ["
|
|
786
|
-
}
|
|
787
|
-
},
|
|
788
|
-
{
|
|
789
|
-
name: "delete_card",
|
|
790
|
-
description: "Delete a card",
|
|
791
|
-
inputSchema: {
|
|
792
|
-
type: "object",
|
|
793
|
-
properties: { cardId: { type: "string" } },
|
|
794
|
-
required: ["cardId"]
|
|
795
|
-
}
|
|
796
|
-
},
|
|
797
|
-
{
|
|
798
|
-
name: "archive_card",
|
|
799
|
-
description: "Archive a card",
|
|
800
|
-
inputSchema: {
|
|
801
|
-
type: "object",
|
|
802
|
-
properties: { cardId: { type: "string" } },
|
|
803
|
-
required: ["cardId"]
|
|
804
|
-
}
|
|
805
|
-
},
|
|
806
|
-
{
|
|
807
|
-
name: "unarchive_card",
|
|
808
|
-
description: "Unarchive a card (restore from archive)",
|
|
809
|
-
inputSchema: {
|
|
810
|
-
type: "object",
|
|
811
|
-
properties: { cardId: { type: "string" } },
|
|
812
|
-
required: ["cardId"]
|
|
813
|
-
}
|
|
814
|
-
},
|
|
815
|
-
{
|
|
816
|
-
name: "list_archived_cards",
|
|
817
|
-
description: "List archived cards for a board",
|
|
818
|
-
inputSchema: {
|
|
819
|
-
type: "object",
|
|
820
|
-
properties: { boardId: { type: "string" } },
|
|
821
|
-
required: ["boardId"]
|
|
822
|
-
}
|
|
823
|
-
},
|
|
824
|
-
{
|
|
825
|
-
name: "move_card",
|
|
826
|
-
description: "Move card to column. Use newOrder for specific positioning.",
|
|
827
|
-
inputSchema: {
|
|
828
|
-
type: "object",
|
|
829
|
-
properties: {
|
|
830
|
-
cardId: { type: "string" },
|
|
831
|
-
targetColumnId: { type: "string" },
|
|
832
|
-
newOrder: { type: "number", description: "Position in target column (0-indexed, default: end)" }
|
|
833
|
-
},
|
|
834
|
-
required: ["cardId", "targetColumnId"]
|
|
835
|
-
}
|
|
836
|
-
},
|
|
837
|
-
{
|
|
838
|
-
name: "add_comment",
|
|
839
|
-
description: "Add comment to card",
|
|
840
|
-
inputSchema: {
|
|
841
|
-
type: "object",
|
|
842
|
-
properties: { cardId: { type: "string" }, content: { type: "string" } },
|
|
843
|
-
required: ["cardId", "content"]
|
|
844
|
-
}
|
|
845
|
-
},
|
|
846
|
-
{
|
|
847
|
-
name: "delete_comment",
|
|
848
|
-
description: "Delete a comment",
|
|
849
|
-
inputSchema: {
|
|
850
|
-
type: "object",
|
|
851
|
-
properties: { commentId: { type: "string" } },
|
|
852
|
-
required: ["commentId"]
|
|
853
|
-
}
|
|
854
|
-
},
|
|
855
|
-
// CHECKLISTS
|
|
856
|
-
{
|
|
857
|
-
name: "create_checklist",
|
|
858
|
-
description: "Create checklist on card",
|
|
859
|
-
inputSchema: {
|
|
860
|
-
type: "object",
|
|
861
|
-
properties: { cardId: { type: "string" }, title: { type: "string" } },
|
|
862
|
-
required: ["cardId", "title"]
|
|
863
|
-
}
|
|
864
|
-
},
|
|
865
|
-
{
|
|
866
|
-
name: "update_checklist",
|
|
867
|
-
description: "Update checklist title",
|
|
868
|
-
inputSchema: {
|
|
869
|
-
type: "object",
|
|
870
|
-
properties: {
|
|
871
|
-
checklistId: { type: "string" },
|
|
872
|
-
title: { type: "string" }
|
|
873
|
-
},
|
|
874
|
-
required: ["checklistId", "title"]
|
|
875
|
-
}
|
|
876
|
-
},
|
|
877
|
-
{
|
|
878
|
-
name: "delete_checklist",
|
|
879
|
-
description: "Delete checklist",
|
|
880
|
-
inputSchema: {
|
|
881
|
-
type: "object",
|
|
882
|
-
properties: { checklistId: { type: "string" } },
|
|
883
|
-
required: ["checklistId"]
|
|
884
|
-
}
|
|
885
|
-
},
|
|
886
|
-
{
|
|
887
|
-
name: "create_checklist_item",
|
|
888
|
-
description: "Add checklist item",
|
|
889
|
-
inputSchema: {
|
|
890
|
-
type: "object",
|
|
891
|
-
properties: {
|
|
892
|
-
checklistId: { type: "string" },
|
|
893
|
-
content: { type: "string" }
|
|
894
|
-
},
|
|
895
|
-
required: ["checklistId", "content"]
|
|
896
|
-
}
|
|
897
|
-
},
|
|
898
|
-
{
|
|
899
|
-
name: "update_checklist_item",
|
|
900
|
-
description: "Update checklist item",
|
|
901
|
-
inputSchema: {
|
|
902
|
-
type: "object",
|
|
903
|
-
properties: {
|
|
904
|
-
itemId: { type: "string" },
|
|
905
|
-
content: { type: "string" },
|
|
906
|
-
completed: { type: "boolean" }
|
|
907
|
-
},
|
|
908
|
-
required: ["itemId"]
|
|
909
|
-
}
|
|
910
|
-
},
|
|
911
|
-
{
|
|
912
|
-
name: "delete_checklist_item",
|
|
913
|
-
description: "Delete checklist item",
|
|
914
|
-
inputSchema: {
|
|
915
|
-
type: "object",
|
|
916
|
-
properties: { itemId: { type: "string" } },
|
|
917
|
-
required: ["itemId"]
|
|
918
|
-
}
|
|
919
|
-
},
|
|
920
|
-
{
|
|
921
|
-
name: "get_branch_name",
|
|
922
|
-
description: "Generate GitHub branch name",
|
|
923
|
-
inputSchema: {
|
|
924
|
-
type: "object",
|
|
925
|
-
properties: {
|
|
926
|
-
cardId: { type: "string" },
|
|
927
|
-
type: {
|
|
928
|
-
type: "string",
|
|
929
|
-
enum: ["feature", "fix", "chore", "refactor", "docs"]
|
|
930
|
-
}
|
|
931
|
-
},
|
|
932
|
-
required: ["cardId"]
|
|
933
|
-
}
|
|
934
|
-
},
|
|
935
|
-
{
|
|
936
|
-
name: "search_cards",
|
|
937
|
-
description: "Search cards, projects and boards (default limit:20). Use compact:true for minimal fields",
|
|
938
|
-
inputSchema: {
|
|
939
|
-
type: "object",
|
|
940
|
-
properties: {
|
|
941
|
-
query: { type: "string" },
|
|
942
|
-
projectId: { type: "string" },
|
|
943
|
-
boardId: { type: "string" },
|
|
944
|
-
columnId: { type: "string" },
|
|
945
|
-
epicId: { type: "string" },
|
|
946
|
-
featureId: { type: "string" },
|
|
947
|
-
hasEpic: { type: "boolean" },
|
|
948
|
-
status: { type: "string", enum: ["todo", "in_progress", "done"] },
|
|
949
|
-
tagIds: { type: "array", items: { type: "string" } },
|
|
950
|
-
limit: { type: "number" },
|
|
951
|
-
compact: { type: "boolean" }
|
|
952
|
-
},
|
|
953
|
-
required: ["query"]
|
|
954
|
-
}
|
|
955
|
-
},
|
|
956
|
-
// BULK OPERATIONS
|
|
957
|
-
{
|
|
958
|
-
name: "bulk_create_cards",
|
|
959
|
-
description: "Create multiple cards in 1 call",
|
|
960
|
-
inputSchema: {
|
|
961
|
-
type: "object",
|
|
962
|
-
properties: {
|
|
963
|
-
columnId: { type: "string" },
|
|
964
|
-
cards: {
|
|
965
|
-
type: "array",
|
|
966
|
-
items: {
|
|
967
|
-
type: "object",
|
|
968
|
-
properties: {
|
|
969
|
-
title: { type: "string" },
|
|
970
|
-
description: { type: "string" },
|
|
971
|
-
priority: { type: "string", enum: ["P1", "P2", "P3"] },
|
|
972
|
-
epicId: { type: "string" }
|
|
973
|
-
},
|
|
974
|
-
required: ["title"]
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
},
|
|
978
|
-
required: ["columnId", "cards"]
|
|
979
|
-
}
|
|
980
|
-
},
|
|
981
|
-
{
|
|
982
|
-
name: "bulk_create_epic_with_cards",
|
|
983
|
-
description: "Create epic + all its cards in 1 call",
|
|
984
|
-
inputSchema: {
|
|
985
|
-
type: "object",
|
|
986
|
-
properties: {
|
|
987
|
-
epic: {
|
|
988
|
-
type: "object",
|
|
989
|
-
properties: {
|
|
990
|
-
slug: { type: "string" },
|
|
991
|
-
name: { type: "string" },
|
|
992
|
-
description: { type: "string" },
|
|
993
|
-
emoji: { type: "string" },
|
|
994
|
-
color: { type: "string" }
|
|
995
|
-
},
|
|
996
|
-
required: ["slug", "name"]
|
|
997
|
-
},
|
|
998
|
-
columnId: { type: "string" },
|
|
999
|
-
cards: {
|
|
1000
|
-
type: "array",
|
|
1001
|
-
items: {
|
|
1002
|
-
type: "object",
|
|
1003
|
-
properties: {
|
|
1004
|
-
title: { type: "string" },
|
|
1005
|
-
description: { type: "string" },
|
|
1006
|
-
priority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
1007
|
-
},
|
|
1008
|
-
required: ["title"]
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
},
|
|
1012
|
-
required: ["epic", "columnId", "cards"]
|
|
1013
|
-
}
|
|
1014
|
-
},
|
|
1015
|
-
{
|
|
1016
|
-
name: "bulk_create_epic_with_features",
|
|
1017
|
-
description: "Create epic + features + cards across projects in 1 call. Cards auto-prefixed with SLUG{N}-.",
|
|
1018
|
-
inputSchema: {
|
|
1019
|
-
type: "object",
|
|
1020
|
-
properties: {
|
|
1021
|
-
epic: {
|
|
1022
|
-
type: "object",
|
|
1023
|
-
properties: {
|
|
1024
|
-
slug: { type: "string" },
|
|
1025
|
-
name: { type: "string" },
|
|
1026
|
-
description: { type: "string" },
|
|
1027
|
-
emoji: { type: "string" },
|
|
1028
|
-
color: { type: "string" }
|
|
1029
|
-
},
|
|
1030
|
-
required: ["slug", "name"]
|
|
1031
|
-
},
|
|
1032
|
-
features: {
|
|
1033
|
-
type: "array",
|
|
1034
|
-
items: {
|
|
1035
|
-
type: "object",
|
|
1036
|
-
properties: {
|
|
1037
|
-
title: { type: "string" },
|
|
1038
|
-
slug: { type: "string", description: "UPPERCASE slug (auto-generated from title if omitted)" },
|
|
1039
|
-
description: { type: "string" },
|
|
1040
|
-
cards: {
|
|
1041
|
-
type: "array",
|
|
1042
|
-
items: {
|
|
1043
|
-
type: "object",
|
|
1044
|
-
properties: {
|
|
1045
|
-
columnId: { type: "string" },
|
|
1046
|
-
title: { type: "string" },
|
|
1047
|
-
description: { type: "string" },
|
|
1048
|
-
priority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
1049
|
-
},
|
|
1050
|
-
required: ["columnId", "title"]
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
},
|
|
1054
|
-
required: ["title", "cards"]
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
},
|
|
1058
|
-
required: ["epic", "features"]
|
|
1059
|
-
}
|
|
1060
|
-
},
|
|
1061
|
-
{
|
|
1062
|
-
name: "bulk_move_cards",
|
|
1063
|
-
description: "Move multiple cards to column in 1 call",
|
|
1064
|
-
inputSchema: {
|
|
1065
|
-
type: "object",
|
|
1066
|
-
properties: {
|
|
1067
|
-
cardIds: { type: "array", items: { type: "string" } },
|
|
1068
|
-
targetColumnId: { type: "string" }
|
|
1069
|
-
},
|
|
1070
|
-
required: ["cardIds", "targetColumnId"]
|
|
1071
|
-
}
|
|
1072
|
-
},
|
|
1073
|
-
{
|
|
1074
|
-
name: "quick_add_cards",
|
|
1075
|
-
description: 'Create cards from multiline text. Format: "- P1: task title" per line',
|
|
1076
|
-
inputSchema: {
|
|
1077
|
-
type: "object",
|
|
1078
|
-
properties: {
|
|
1079
|
-
columnId: { type: "string" },
|
|
1080
|
-
text: {
|
|
1081
|
-
type: "string",
|
|
1082
|
-
description: "Multiline text, 1 card per line"
|
|
1083
|
-
},
|
|
1084
|
-
defaultPriority: { type: "string", enum: ["P1", "P2", "P3"] }
|
|
1085
|
-
},
|
|
1086
|
-
required: ["columnId", "text"]
|
|
1087
|
-
}
|
|
1088
|
-
},
|
|
1089
|
-
{
|
|
1090
|
-
name: "move_cards_by_column",
|
|
1091
|
-
description: "Move ALL cards from one column to another",
|
|
1092
|
-
inputSchema: {
|
|
1093
|
-
type: "object",
|
|
1094
|
-
properties: {
|
|
1095
|
-
sourceColumnId: { type: "string" },
|
|
1096
|
-
targetColumnId: { type: "string" },
|
|
1097
|
-
limit: { type: "number" }
|
|
1098
|
-
},
|
|
1099
|
-
required: ["sourceColumnId", "targetColumnId"]
|
|
1100
|
-
}
|
|
1101
|
-
},
|
|
1102
|
-
// AGGREGATED VIEWS
|
|
1103
|
-
{
|
|
1104
|
-
name: "get_workspace",
|
|
1105
|
-
description: "Get project + all boards + columns in 1 call (no cards)",
|
|
1106
|
-
inputSchema: {
|
|
1107
|
-
type: "object",
|
|
1108
|
-
properties: { projectId: { type: "string" } },
|
|
1109
|
-
required: ["projectId"]
|
|
1110
|
-
}
|
|
1111
|
-
},
|
|
1112
|
-
{
|
|
1113
|
-
name: "get_board_summary",
|
|
1114
|
-
description: "Get board stats only: card counts per column + priority breakdown",
|
|
1115
|
-
inputSchema: {
|
|
1116
|
-
type: "object",
|
|
1117
|
-
properties: { boardId: { type: "string" } },
|
|
1118
|
-
required: ["boardId"]
|
|
1119
|
-
}
|
|
1120
|
-
},
|
|
1121
|
-
{
|
|
1122
|
-
name: "get_epic_summary",
|
|
1123
|
-
description: "Get epic with minimal card info: {id,title,priority,status} + progress stats",
|
|
1124
|
-
inputSchema: {
|
|
1125
|
-
type: "object",
|
|
1126
|
-
properties: { epicId: { type: "string" } },
|
|
1127
|
-
required: ["epicId"]
|
|
1128
|
-
}
|
|
1129
|
-
},
|
|
1130
|
-
// TAGS
|
|
1131
|
-
{
|
|
1132
|
-
name: "list_tags",
|
|
1133
|
-
description: "List all tags",
|
|
1134
|
-
inputSchema: { type: "object", properties: {} }
|
|
1135
|
-
},
|
|
1136
|
-
{
|
|
1137
|
-
name: "create_tag",
|
|
1138
|
-
description: "Create tag",
|
|
1139
|
-
inputSchema: {
|
|
1140
|
-
type: "object",
|
|
1141
|
-
properties: { name: { type: "string" }, color: { type: "string" } },
|
|
1142
|
-
required: ["name", "color"]
|
|
1143
|
-
}
|
|
1144
|
-
},
|
|
1145
|
-
{
|
|
1146
|
-
name: "delete_tag",
|
|
1147
|
-
description: "Delete tag",
|
|
1148
|
-
inputSchema: {
|
|
1149
|
-
type: "object",
|
|
1150
|
-
properties: { tagId: { type: "string" } },
|
|
1151
|
-
required: ["tagId"]
|
|
1152
|
-
}
|
|
1153
|
-
},
|
|
1154
|
-
{
|
|
1155
|
-
name: "add_tag_to_card",
|
|
1156
|
-
description: "Add tag to card",
|
|
1157
|
-
inputSchema: {
|
|
1158
|
-
type: "object",
|
|
1159
|
-
properties: { cardId: { type: "string" }, tagId: { type: "string" } },
|
|
1160
|
-
required: ["cardId", "tagId"]
|
|
1161
|
-
}
|
|
1162
|
-
},
|
|
1163
|
-
{
|
|
1164
|
-
name: "remove_tag_from_card",
|
|
1165
|
-
description: "Remove tag from card",
|
|
1166
|
-
inputSchema: {
|
|
1167
|
-
type: "object",
|
|
1168
|
-
properties: { cardId: { type: "string" }, tagId: { type: "string" } },
|
|
1169
|
-
required: ["cardId", "tagId"]
|
|
1170
|
-
}
|
|
1171
|
-
},
|
|
1172
|
-
// EPICS
|
|
1173
|
-
{
|
|
1174
|
-
name: "list_epics",
|
|
1175
|
-
description: "List epics (default limit:15)",
|
|
1176
|
-
inputSchema: {
|
|
1177
|
-
type: "object",
|
|
1178
|
-
properties: {
|
|
1179
|
-
status: { type: "string" },
|
|
1180
|
-
includeProgress: { type: "boolean" },
|
|
1181
|
-
limit: { type: "number" },
|
|
1182
|
-
compact: { type: "boolean" }
|
|
1183
|
-
}
|
|
1184
|
-
}
|
|
1185
|
-
},
|
|
1186
|
-
{
|
|
1187
|
-
name: "create_epic",
|
|
1188
|
-
description: "Create epic",
|
|
1189
|
-
inputSchema: {
|
|
1190
|
-
type: "object",
|
|
1191
|
-
properties: {
|
|
1192
|
-
slug: { type: "string" },
|
|
1193
|
-
name: { type: "string" },
|
|
1194
|
-
description: { type: "string" },
|
|
1195
|
-
emoji: { type: "string" },
|
|
1196
|
-
color: { type: "string" },
|
|
1197
|
-
startDate: { type: "string" },
|
|
1198
|
-
targetDate: { type: "string" }
|
|
1199
|
-
},
|
|
1200
|
-
required: ["slug", "name"]
|
|
1201
|
-
}
|
|
1202
|
-
},
|
|
1203
|
-
{
|
|
1204
|
-
name: "get_epic",
|
|
1205
|
-
description: "Get an epic with all its cards, features and progress",
|
|
1206
|
-
inputSchema: {
|
|
1207
|
-
type: "object",
|
|
1208
|
-
properties: { epicId: { type: "string" } },
|
|
1209
|
-
required: ["epicId"]
|
|
1210
|
-
}
|
|
1211
|
-
},
|
|
1212
|
-
{
|
|
1213
|
-
name: "update_epic",
|
|
1214
|
-
description: "Update epic. Use syncDates:true to sync targetDate to all card due dates.",
|
|
1215
|
-
inputSchema: {
|
|
1216
|
-
type: "object",
|
|
1217
|
-
properties: {
|
|
1218
|
-
epicId: { type: "string" },
|
|
1219
|
-
slug: { type: "string" },
|
|
1220
|
-
name: { type: "string" },
|
|
1221
|
-
description: { type: "string" },
|
|
1222
|
-
emoji: { type: "string" },
|
|
1223
|
-
color: { type: "string" },
|
|
1224
|
-
status: { type: "string" },
|
|
1225
|
-
startDate: { type: "string" },
|
|
1226
|
-
targetDate: { type: "string" },
|
|
1227
|
-
syncDates: { type: "boolean", description: "Sync targetDate to all card due dates" }
|
|
1228
|
-
},
|
|
1229
|
-
required: ["epicId"]
|
|
1230
|
-
}
|
|
1231
|
-
},
|
|
1232
|
-
{
|
|
1233
|
-
name: "delete_epic",
|
|
1234
|
-
description: "Delete epic (cards unlinked)",
|
|
1235
|
-
inputSchema: {
|
|
1236
|
-
type: "object",
|
|
1237
|
-
properties: { epicId: { type: "string" } },
|
|
1238
|
-
required: ["epicId"]
|
|
1239
|
-
}
|
|
1240
|
-
},
|
|
1241
|
-
{
|
|
1242
|
-
name: "add_card_to_epic",
|
|
1243
|
-
description: "Add card to epic",
|
|
1244
|
-
inputSchema: {
|
|
1245
|
-
type: "object",
|
|
1246
|
-
properties: { epicId: { type: "string" }, cardId: { type: "string" } },
|
|
1247
|
-
required: ["epicId", "cardId"]
|
|
1248
|
-
}
|
|
1249
|
-
},
|
|
1250
|
-
{
|
|
1251
|
-
name: "remove_card_from_epic",
|
|
1252
|
-
description: "Remove card from epic",
|
|
1253
|
-
inputSchema: {
|
|
1254
|
-
type: "object",
|
|
1255
|
-
properties: { epicId: { type: "string" }, cardId: { type: "string" } },
|
|
1256
|
-
required: ["epicId", "cardId"]
|
|
1257
|
-
}
|
|
1258
|
-
},
|
|
1259
|
-
// FEATURES
|
|
1260
|
-
{
|
|
1261
|
-
name: "list_features",
|
|
1262
|
-
description: "List features. Filter by epicId or slug.",
|
|
1263
|
-
inputSchema: {
|
|
1264
|
-
type: "object",
|
|
1265
|
-
properties: {
|
|
1266
|
-
epicId: { type: "string" },
|
|
1267
|
-
slug: { type: "string", description: "Filter by feature slug (UPPERCASE)" }
|
|
1268
|
-
}
|
|
1269
|
-
}
|
|
1270
|
-
},
|
|
1271
|
-
{
|
|
1272
|
-
name: "get_feature",
|
|
1273
|
-
description: "Get a feature with cards and progress. Accepts featureId or featureSlug (UPPERCASE).",
|
|
1274
|
-
inputSchema: {
|
|
1275
|
-
type: "object",
|
|
1276
|
-
properties: {
|
|
1277
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1278
|
-
featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
|
|
1279
|
-
}
|
|
1280
|
-
}
|
|
1281
|
-
},
|
|
1282
|
-
{
|
|
1283
|
-
name: "get_active_features",
|
|
1284
|
-
description: "Get features with cards in progress, organized by epic",
|
|
1285
|
-
inputSchema: { type: "object", properties: {} }
|
|
1286
|
-
},
|
|
1287
|
-
{
|
|
1288
|
-
name: "create_feature",
|
|
1289
|
-
description: "Create a new feature (optionally in an epic)",
|
|
1290
|
-
inputSchema: {
|
|
1291
|
-
type: "object",
|
|
1292
|
-
properties: {
|
|
1293
|
-
epicId: { type: "string" },
|
|
1294
|
-
title: { type: "string" },
|
|
1295
|
-
slug: { type: "string" },
|
|
1296
|
-
description: { type: "string" },
|
|
1297
|
-
status: { type: "string", enum: ["planning", "in_progress", "completed", "on_hold"] }
|
|
1298
|
-
},
|
|
1299
|
-
required: ["title"]
|
|
1300
|
-
}
|
|
1301
|
-
},
|
|
1302
|
-
{
|
|
1303
|
-
name: "update_feature",
|
|
1304
|
-
description: "Update a feature",
|
|
1305
|
-
inputSchema: {
|
|
1306
|
-
type: "object",
|
|
1307
|
-
properties: {
|
|
1308
|
-
featureId: { type: "string" },
|
|
1309
|
-
title: { type: "string" },
|
|
1310
|
-
slug: { type: "string" },
|
|
1311
|
-
description: { type: "string" },
|
|
1312
|
-
status: { type: "string", enum: ["planning", "in_progress", "completed", "on_hold"] },
|
|
1313
|
-
order: { type: "number" },
|
|
1314
|
-
epicId: { type: "string", description: "Move to another epic" }
|
|
1315
|
-
},
|
|
1316
|
-
required: ["featureId"]
|
|
1317
|
-
}
|
|
1318
|
-
},
|
|
1319
|
-
{
|
|
1320
|
-
name: "delete_feature",
|
|
1321
|
-
description: "Delete a feature (cards unlinked)",
|
|
1322
|
-
inputSchema: {
|
|
1323
|
-
type: "object",
|
|
1324
|
-
properties: { featureId: { type: "string" } },
|
|
1325
|
-
required: ["featureId"]
|
|
1326
|
-
}
|
|
1327
|
-
},
|
|
1328
|
-
{
|
|
1329
|
-
name: "add_card_to_feature",
|
|
1330
|
-
description: "Add a card to a feature. Accepts featureId or featureSlug.",
|
|
1331
|
-
inputSchema: {
|
|
1332
|
-
type: "object",
|
|
1333
|
-
properties: {
|
|
1334
|
-
cardId: { type: "string" },
|
|
1335
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1336
|
-
featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
|
|
1337
|
-
},
|
|
1338
|
-
required: ["cardId"]
|
|
1339
|
-
}
|
|
1340
|
-
},
|
|
1341
|
-
{
|
|
1342
|
-
name: "remove_card_from_feature",
|
|
1343
|
-
description: "Remove a card from a feature. Accepts featureId or featureSlug.",
|
|
1344
|
-
inputSchema: {
|
|
1345
|
-
type: "object",
|
|
1346
|
-
properties: {
|
|
1347
|
-
cardId: { type: "string" },
|
|
1348
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1349
|
-
featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
|
|
1350
|
-
},
|
|
1351
|
-
required: ["cardId"]
|
|
1352
|
-
}
|
|
1353
|
-
},
|
|
1354
|
-
{
|
|
1355
|
-
name: "get_feature_cards",
|
|
1356
|
-
description: "Get all cards in a feature. Accepts featureId or featureSlug.",
|
|
1357
|
-
inputSchema: {
|
|
1358
|
-
type: "object",
|
|
1359
|
-
properties: {
|
|
1360
|
-
featureId: { type: "string", description: "Feature ID or slug" },
|
|
1361
|
-
featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
|
|
1362
|
-
}
|
|
1363
|
-
}
|
|
1364
|
-
},
|
|
1365
|
-
// CARD LINKS
|
|
1366
|
-
{
|
|
1367
|
-
name: "link_cards",
|
|
1368
|
-
description: "Link two cards",
|
|
1369
|
-
inputSchema: {
|
|
1370
|
-
type: "object",
|
|
1371
|
-
properties: {
|
|
1372
|
-
cardId1: { type: "string" },
|
|
1373
|
-
cardId2: { type: "string" },
|
|
1374
|
-
label: { type: "string" }
|
|
1375
|
-
},
|
|
1376
|
-
required: ["cardId1", "cardId2"]
|
|
1377
|
-
}
|
|
1378
|
-
},
|
|
1379
|
-
{
|
|
1380
|
-
name: "unlink_cards",
|
|
1381
|
-
description: "Unlink two cards by link ID",
|
|
1382
|
-
inputSchema: {
|
|
1383
|
-
type: "object",
|
|
1384
|
-
properties: {
|
|
1385
|
-
linkId: { type: "string" }
|
|
1386
|
-
},
|
|
1387
|
-
required: ["linkId"]
|
|
1388
|
-
}
|
|
1389
|
-
},
|
|
1390
|
-
{
|
|
1391
|
-
name: "get_linked_cards",
|
|
1392
|
-
description: "Get linked cards",
|
|
1393
|
-
inputSchema: {
|
|
1394
|
-
type: "object",
|
|
1395
|
-
properties: { cardId: { type: "string" } },
|
|
1396
|
-
required: ["cardId"]
|
|
1397
|
-
}
|
|
1398
|
-
},
|
|
1399
|
-
// GITHUB INTEGRATION
|
|
1400
|
-
{
|
|
1401
|
-
name: "setup_github_integration",
|
|
1402
|
-
description: "Setup GitHub integration for a project (auto-creates webhook)",
|
|
1403
|
-
inputSchema: {
|
|
1404
|
-
type: "object",
|
|
1405
|
-
properties: {
|
|
1406
|
-
projectId: { type: "string" },
|
|
1407
|
-
repoOwner: { type: "string" },
|
|
1408
|
-
repoName: { type: "string" },
|
|
1409
|
-
inProgressColumnName: { type: "string" },
|
|
1410
|
-
doneColumnName: { type: "string" },
|
|
1411
|
-
autoMoveOnPush: { type: "boolean" },
|
|
1412
|
-
autoMoveOnPrMerge: { type: "boolean" },
|
|
1413
|
-
autoLinkPr: { type: "boolean" }
|
|
1414
|
-
},
|
|
1415
|
-
required: ["projectId", "repoOwner", "repoName"]
|
|
1416
|
-
}
|
|
1417
|
-
},
|
|
1418
|
-
{
|
|
1419
|
-
name: "get_github_integration",
|
|
1420
|
-
description: "Get GitHub integration settings",
|
|
1421
|
-
inputSchema: {
|
|
1422
|
-
type: "object",
|
|
1423
|
-
properties: { projectId: { type: "string" } },
|
|
1424
|
-
required: ["projectId"]
|
|
1425
|
-
}
|
|
1426
|
-
},
|
|
1427
|
-
{
|
|
1428
|
-
name: "update_github_integration",
|
|
1429
|
-
description: "Update GitHub integration settings",
|
|
1430
|
-
inputSchema: {
|
|
1431
|
-
type: "object",
|
|
1432
|
-
properties: {
|
|
1433
|
-
projectId: { type: "string" },
|
|
1434
|
-
repoOwner: { type: "string" },
|
|
1435
|
-
repoName: { type: "string" },
|
|
1436
|
-
autoMoveOnPush: { type: "boolean" },
|
|
1437
|
-
autoMoveOnPrMerge: { type: "boolean" },
|
|
1438
|
-
autoLinkPr: { type: "boolean" },
|
|
1439
|
-
inProgressColumnName: { type: "string" },
|
|
1440
|
-
doneColumnName: { type: "string" }
|
|
1441
|
-
},
|
|
1442
|
-
required: ["projectId"]
|
|
1443
|
-
}
|
|
1444
|
-
},
|
|
1445
|
-
{
|
|
1446
|
-
name: "remove_github_integration",
|
|
1447
|
-
description: "Remove GitHub integration",
|
|
1448
|
-
inputSchema: {
|
|
1449
|
-
type: "object",
|
|
1450
|
-
properties: { projectId: { type: "string" } },
|
|
1451
|
-
required: ["projectId"]
|
|
1452
|
-
}
|
|
1453
|
-
},
|
|
1454
|
-
{
|
|
1455
|
-
name: "link_card_to_branch",
|
|
1456
|
-
description: "Link card to branch",
|
|
1457
|
-
inputSchema: {
|
|
1458
|
-
type: "object",
|
|
1459
|
-
properties: { cardId: { type: "string" }, branch: { type: "string" } },
|
|
1460
|
-
required: ["cardId", "branch"]
|
|
1461
|
-
}
|
|
1462
|
-
},
|
|
1463
|
-
{
|
|
1464
|
-
name: "link_card_to_pr",
|
|
1465
|
-
description: "Link card to PR",
|
|
1466
|
-
inputSchema: {
|
|
1467
|
-
type: "object",
|
|
1468
|
-
properties: { cardId: { type: "string" }, prUrl: { type: "string" } },
|
|
1469
|
-
required: ["cardId", "prUrl"]
|
|
1470
|
-
}
|
|
1471
|
-
},
|
|
1472
|
-
// GITHUB API
|
|
1473
|
-
{
|
|
1474
|
-
name: "github_list_repos",
|
|
1475
|
-
description: "List user repos",
|
|
1476
|
-
inputSchema: {
|
|
1477
|
-
type: "object",
|
|
1478
|
-
properties: {
|
|
1479
|
-
userId: { type: "string" },
|
|
1480
|
-
type: { type: "string", enum: ["all", "owner", "member"] }
|
|
1481
|
-
},
|
|
1482
|
-
required: ["userId"]
|
|
1483
|
-
}
|
|
1484
|
-
},
|
|
1485
|
-
{
|
|
1486
|
-
name: "github_create_branch",
|
|
1487
|
-
description: "Create branch",
|
|
1488
|
-
inputSchema: {
|
|
1489
|
-
type: "object",
|
|
1490
|
-
properties: {
|
|
1491
|
-
userId: { type: "string" },
|
|
1492
|
-
owner: { type: "string" },
|
|
1493
|
-
repo: { type: "string" },
|
|
1494
|
-
branchName: { type: "string" },
|
|
1495
|
-
sourceBranch: { type: "string" }
|
|
1496
|
-
},
|
|
1497
|
-
required: ["userId", "owner", "repo", "branchName"]
|
|
1498
|
-
}
|
|
1499
|
-
},
|
|
1500
|
-
{
|
|
1501
|
-
name: "github_create_pr",
|
|
1502
|
-
description: "Create PR",
|
|
1503
|
-
inputSchema: {
|
|
1504
|
-
type: "object",
|
|
1505
|
-
properties: {
|
|
1506
|
-
userId: { type: "string" },
|
|
1507
|
-
owner: { type: "string" },
|
|
1508
|
-
repo: { type: "string" },
|
|
1509
|
-
title: { type: "string" },
|
|
1510
|
-
head: { type: "string" },
|
|
1511
|
-
base: { type: "string" },
|
|
1512
|
-
body: { type: "string" }
|
|
1513
|
-
},
|
|
1514
|
-
required: ["userId", "owner", "repo", "title", "head"]
|
|
1515
|
-
}
|
|
1516
|
-
},
|
|
1517
|
-
// IDEAS
|
|
1518
|
-
{
|
|
1519
|
-
name: "list_ideas",
|
|
1520
|
-
description: "List ideas (canvas notes). Filter by status: active, archived, all",
|
|
1521
|
-
inputSchema: {
|
|
1522
|
-
type: "object",
|
|
1523
|
-
properties: {
|
|
1524
|
-
status: { type: "string", enum: ["active", "archived", "all"] },
|
|
1525
|
-
filter: { type: "string", enum: ["week"], description: "Filter by recent (week)" }
|
|
1526
|
-
}
|
|
1527
|
-
}
|
|
1528
|
-
},
|
|
1529
|
-
{
|
|
1530
|
-
name: "get_idea",
|
|
1531
|
-
description: "Get an idea with its tags",
|
|
1532
|
-
inputSchema: {
|
|
1533
|
-
type: "object",
|
|
1534
|
-
properties: { ideaId: { type: "string" } },
|
|
1535
|
-
required: ["ideaId"]
|
|
1536
|
-
}
|
|
1537
|
-
},
|
|
1538
|
-
{
|
|
1539
|
-
name: "create_idea",
|
|
1540
|
-
description: "Create a new idea (canvas note)",
|
|
1541
|
-
inputSchema: {
|
|
1542
|
-
type: "object",
|
|
1543
|
-
properties: {
|
|
1544
|
-
title: { type: "string" },
|
|
1545
|
-
description: { type: "string" },
|
|
1546
|
-
color: { type: "string" },
|
|
1547
|
-
posX: { type: "number" },
|
|
1548
|
-
posY: { type: "number" },
|
|
1549
|
-
tagIds: { type: "array", items: { type: "string" } }
|
|
1550
|
-
},
|
|
1551
|
-
required: ["title"]
|
|
1552
|
-
}
|
|
1553
|
-
},
|
|
1554
|
-
{
|
|
1555
|
-
name: "update_idea",
|
|
1556
|
-
description: "Update an idea",
|
|
1557
|
-
inputSchema: {
|
|
1558
|
-
type: "object",
|
|
1559
|
-
properties: {
|
|
1560
|
-
ideaId: { type: "string" },
|
|
1561
|
-
title: { type: "string" },
|
|
1562
|
-
description: { type: "string" },
|
|
1563
|
-
status: { type: "string", enum: ["active", "archived"] },
|
|
1564
|
-
color: { type: "string" },
|
|
1565
|
-
posX: { type: "number" },
|
|
1566
|
-
posY: { type: "number" },
|
|
1567
|
-
tagIds: { type: "array", items: { type: "string" } }
|
|
1568
|
-
},
|
|
1569
|
-
required: ["ideaId"]
|
|
1570
|
-
}
|
|
1571
|
-
},
|
|
1572
|
-
{
|
|
1573
|
-
name: "delete_idea",
|
|
1574
|
-
description: "Delete an idea",
|
|
1575
|
-
inputSchema: {
|
|
1576
|
-
type: "object",
|
|
1577
|
-
properties: { ideaId: { type: "string" } },
|
|
1578
|
-
required: ["ideaId"]
|
|
1579
|
-
}
|
|
1580
|
-
},
|
|
1581
|
-
{
|
|
1582
|
-
name: "convert_idea_to_card",
|
|
1583
|
-
description: "Convert an idea to a card in a specific board/column",
|
|
1584
|
-
inputSchema: {
|
|
1585
|
-
type: "object",
|
|
1586
|
-
properties: {
|
|
1587
|
-
ideaId: { type: "string" },
|
|
1588
|
-
boardId: { type: "string" },
|
|
1589
|
-
columnId: { type: "string" }
|
|
1590
|
-
},
|
|
1591
|
-
required: ["ideaId", "boardId", "columnId"]
|
|
1592
|
-
}
|
|
1593
|
-
},
|
|
1594
|
-
// TIME TRACKING
|
|
1595
|
-
{
|
|
1596
|
-
name: "get_time_tracking",
|
|
1597
|
-
description: "Get time tracking sessions with project breakdown",
|
|
1598
|
-
inputSchema: {
|
|
1599
|
-
type: "object",
|
|
1600
|
-
properties: {
|
|
1601
|
-
startDate: { type: "string", description: "ISO date (default: 7 days ago)" },
|
|
1602
|
-
endDate: { type: "string", description: "ISO date (default: now)" },
|
|
1603
|
-
projectId: { type: "string" }
|
|
1604
|
-
}
|
|
1605
|
-
}
|
|
1606
|
-
},
|
|
1607
|
-
{
|
|
1608
|
-
name: "log_activity",
|
|
1609
|
-
description: "Log activity to create/update time session",
|
|
1610
|
-
inputSchema: {
|
|
1611
|
-
type: "object",
|
|
1612
|
-
properties: {
|
|
1613
|
-
projectId: { type: "string" },
|
|
1614
|
-
cardId: { type: "string" },
|
|
1615
|
-
activityType: { type: "string" }
|
|
1616
|
-
}
|
|
1617
|
-
}
|
|
1618
|
-
},
|
|
1619
|
-
{
|
|
1620
|
-
name: "end_time_session",
|
|
1621
|
-
description: "End the current active time tracking session",
|
|
1622
|
-
inputSchema: { type: "object", properties: {} }
|
|
1623
|
-
},
|
|
1624
|
-
// DAILY SUMMARY
|
|
1625
|
-
{
|
|
1626
|
-
name: "get_daily_summary",
|
|
1627
|
-
description: "Get daily report: working on, blocked, completed today, weekly stats",
|
|
1628
|
-
inputSchema: { type: "object", properties: {} }
|
|
1629
|
-
},
|
|
1630
|
-
// RETROSPECTIVE
|
|
1631
|
-
{
|
|
1632
|
-
name: "get_retrospective",
|
|
1633
|
-
description: "Get retrospective data: completed, created, stale, blocked cards + movements",
|
|
1634
|
-
inputSchema: {
|
|
1635
|
-
type: "object",
|
|
1636
|
-
properties: {
|
|
1637
|
-
days: { type: "number", description: "Period in days (default: 7)" }
|
|
1638
|
-
}
|
|
1639
|
-
}
|
|
1640
|
-
},
|
|
1641
|
-
// EXPORT
|
|
1642
|
-
{
|
|
1643
|
-
name: "export_board",
|
|
1644
|
-
description: "Export a board as JSON (columns, cards, tags, comments)",
|
|
1645
|
-
inputSchema: {
|
|
1646
|
-
type: "object",
|
|
1647
|
-
properties: { boardId: { type: "string" } },
|
|
1648
|
-
required: ["boardId"]
|
|
1649
|
-
}
|
|
1650
|
-
},
|
|
1651
|
-
{
|
|
1652
|
-
name: "export_project",
|
|
1653
|
-
description: "Export a project as JSON (boards, columns, cards)",
|
|
1654
|
-
inputSchema: {
|
|
1655
|
-
type: "object",
|
|
1656
|
-
properties: { projectId: { type: "string" } },
|
|
1657
|
-
required: ["projectId"]
|
|
898
|
+
required: ["action"]
|
|
1658
899
|
}
|
|
1659
900
|
}
|
|
1660
901
|
]
|
|
1661
902
|
}));
|
|
1662
903
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
1663
904
|
const { name, arguments: args = {} } = request.params;
|
|
905
|
+
const a = args;
|
|
1664
906
|
try {
|
|
1665
907
|
let result;
|
|
1666
908
|
switch (name) {
|
|
1667
|
-
// FOLDERS
|
|
1668
|
-
case "
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
case "create_project":
|
|
1697
|
-
result = await kanbanApi.createProject(args);
|
|
1698
|
-
break;
|
|
1699
|
-
case "get_project":
|
|
1700
|
-
result = await kanbanApi.getProject(args.projectId, args);
|
|
1701
|
-
break;
|
|
1702
|
-
case "update_project":
|
|
1703
|
-
result = await kanbanApi.updateProject(args.projectId, args);
|
|
1704
|
-
break;
|
|
1705
|
-
case "delete_project":
|
|
1706
|
-
result = await kanbanApi.deleteProject(args.projectId);
|
|
1707
|
-
break;
|
|
1708
|
-
case "reorder_projects":
|
|
1709
|
-
result = await kanbanApi.reorderProjects(
|
|
1710
|
-
args.projectId,
|
|
1711
|
-
args.targetProjectId,
|
|
1712
|
-
args.folderId
|
|
1713
|
-
);
|
|
1714
|
-
break;
|
|
1715
|
-
// BOARDS
|
|
1716
|
-
case "list_boards":
|
|
1717
|
-
result = await kanbanApi.listBoards(args);
|
|
1718
|
-
break;
|
|
1719
|
-
case "create_board":
|
|
1720
|
-
result = await kanbanApi.createBoard(args);
|
|
1721
|
-
break;
|
|
1722
|
-
case "get_board":
|
|
1723
|
-
result = await kanbanApi.getBoard(args.boardId, args);
|
|
1724
|
-
break;
|
|
1725
|
-
case "update_board":
|
|
1726
|
-
result = await kanbanApi.updateBoard(args.boardId, { name: args.name });
|
|
1727
|
-
break;
|
|
1728
|
-
case "delete_board":
|
|
1729
|
-
result = await kanbanApi.deleteBoard(args.boardId);
|
|
1730
|
-
break;
|
|
1731
|
-
// COLUMNS
|
|
1732
|
-
case "create_column":
|
|
1733
|
-
result = await kanbanApi.createColumn(args);
|
|
1734
|
-
break;
|
|
1735
|
-
case "update_column":
|
|
1736
|
-
result = await kanbanApi.updateColumn(args.columnId, args);
|
|
1737
|
-
break;
|
|
1738
|
-
case "delete_column":
|
|
1739
|
-
result = await kanbanApi.deleteColumn(args.columnId);
|
|
1740
|
-
break;
|
|
1741
|
-
case "reorder_columns":
|
|
1742
|
-
result = await kanbanApi.reorderColumns(args.columns);
|
|
1743
|
-
break;
|
|
1744
|
-
// CARDS
|
|
1745
|
-
case "get_card":
|
|
1746
|
-
result = await kanbanApi.getCard(args.cardId);
|
|
1747
|
-
break;
|
|
1748
|
-
case "create_card":
|
|
1749
|
-
result = await kanbanApi.createCard(args);
|
|
1750
|
-
break;
|
|
1751
|
-
case "update_card":
|
|
1752
|
-
result = await kanbanApi.updateCard(args.cardId, args);
|
|
1753
|
-
break;
|
|
1754
|
-
case "delete_card":
|
|
1755
|
-
result = await kanbanApi.deleteCard(args.cardId);
|
|
1756
|
-
break;
|
|
1757
|
-
case "move_card":
|
|
1758
|
-
result = await kanbanApi.moveCard(args.cardId, args.targetColumnId, args.newOrder);
|
|
1759
|
-
break;
|
|
1760
|
-
case "archive_card":
|
|
1761
|
-
result = await kanbanApi.archiveCard(args.cardId);
|
|
1762
|
-
break;
|
|
1763
|
-
case "unarchive_card":
|
|
1764
|
-
result = await kanbanApi.unarchiveCard(args.cardId);
|
|
1765
|
-
break;
|
|
1766
|
-
case "list_archived_cards":
|
|
1767
|
-
result = await kanbanApi.listArchivedCards(args.boardId);
|
|
1768
|
-
break;
|
|
1769
|
-
case "add_comment":
|
|
1770
|
-
result = await kanbanApi.addComment(args.cardId, args.content);
|
|
1771
|
-
break;
|
|
1772
|
-
case "delete_comment":
|
|
1773
|
-
result = await kanbanApi.deleteComment(args.commentId);
|
|
1774
|
-
break;
|
|
1775
|
-
// CHECKLISTS
|
|
1776
|
-
case "create_checklist":
|
|
1777
|
-
result = await kanbanApi.createChecklist({
|
|
1778
|
-
cardId: args.cardId,
|
|
1779
|
-
title: args.title
|
|
1780
|
-
});
|
|
1781
|
-
break;
|
|
1782
|
-
case "update_checklist":
|
|
1783
|
-
result = await kanbanApi.updateChecklist(args.checklistId, {
|
|
1784
|
-
title: args.title
|
|
1785
|
-
});
|
|
1786
|
-
break;
|
|
1787
|
-
case "delete_checklist":
|
|
1788
|
-
result = await kanbanApi.deleteChecklist(args.checklistId);
|
|
1789
|
-
break;
|
|
1790
|
-
case "create_checklist_item":
|
|
1791
|
-
result = await kanbanApi.createChecklistItem({
|
|
1792
|
-
checklistId: args.checklistId,
|
|
1793
|
-
content: args.content
|
|
1794
|
-
});
|
|
1795
|
-
break;
|
|
1796
|
-
case "update_checklist_item":
|
|
1797
|
-
result = await kanbanApi.updateChecklistItem(args.itemId, {
|
|
1798
|
-
content: args.content,
|
|
1799
|
-
completed: args.completed
|
|
1800
|
-
});
|
|
1801
|
-
break;
|
|
1802
|
-
case "delete_checklist_item":
|
|
1803
|
-
result = await kanbanApi.deleteChecklistItem(args.itemId);
|
|
1804
|
-
break;
|
|
1805
|
-
case "get_branch_name":
|
|
1806
|
-
result = await kanbanApi.getBranchName(
|
|
1807
|
-
args.cardId,
|
|
1808
|
-
args.type || "feature"
|
|
1809
|
-
);
|
|
1810
|
-
break;
|
|
1811
|
-
case "search_cards":
|
|
1812
|
-
result = await kanbanApi.searchCards(args);
|
|
1813
|
-
break;
|
|
1814
|
-
// BULK OPERATIONS
|
|
1815
|
-
case "bulk_create_cards":
|
|
1816
|
-
result = await kanbanApi.bulkCreateCards(args);
|
|
1817
|
-
break;
|
|
1818
|
-
case "bulk_create_epic_with_cards":
|
|
1819
|
-
result = await kanbanApi.bulkCreateEpicWithCards(args);
|
|
1820
|
-
break;
|
|
1821
|
-
case "bulk_create_epic_with_features":
|
|
1822
|
-
result = await kanbanApi.bulkCreateEpicWithFeatures(args);
|
|
1823
|
-
break;
|
|
1824
|
-
case "bulk_move_cards":
|
|
1825
|
-
result = await kanbanApi.bulkMoveCards(args);
|
|
1826
|
-
break;
|
|
1827
|
-
case "quick_add_cards":
|
|
1828
|
-
result = await kanbanApi.quickAddCards(args);
|
|
1829
|
-
break;
|
|
1830
|
-
case "move_cards_by_column":
|
|
1831
|
-
result = await kanbanApi.moveCardsByColumn(args);
|
|
1832
|
-
break;
|
|
1833
|
-
// AGGREGATED VIEWS
|
|
1834
|
-
case "get_workspace":
|
|
1835
|
-
result = await kanbanApi.getWorkspace(args.projectId);
|
|
1836
|
-
break;
|
|
1837
|
-
case "get_board_summary":
|
|
1838
|
-
result = await kanbanApi.getBoardSummary(args.boardId);
|
|
1839
|
-
break;
|
|
1840
|
-
case "get_epic_summary":
|
|
1841
|
-
result = await kanbanApi.getEpicSummary(args.epicId);
|
|
1842
|
-
break;
|
|
1843
|
-
// TAGS
|
|
1844
|
-
case "list_tags":
|
|
1845
|
-
result = await kanbanApi.listTags();
|
|
1846
|
-
break;
|
|
1847
|
-
case "create_tag":
|
|
1848
|
-
result = await kanbanApi.createTag(args);
|
|
1849
|
-
break;
|
|
1850
|
-
case "delete_tag":
|
|
1851
|
-
result = await kanbanApi.deleteTag(args.tagId);
|
|
1852
|
-
break;
|
|
1853
|
-
case "add_tag_to_card":
|
|
1854
|
-
result = await kanbanApi.addTagToCard(args.cardId, args.tagId);
|
|
1855
|
-
break;
|
|
1856
|
-
case "remove_tag_from_card":
|
|
1857
|
-
result = await kanbanApi.removeTagFromCard(args.cardId, args.tagId);
|
|
1858
|
-
break;
|
|
1859
|
-
// EPICS
|
|
1860
|
-
case "list_epics":
|
|
1861
|
-
result = await kanbanApi.listEpics(args);
|
|
1862
|
-
break;
|
|
1863
|
-
case "create_epic":
|
|
1864
|
-
result = await kanbanApi.createEpic(args);
|
|
1865
|
-
break;
|
|
1866
|
-
case "get_epic":
|
|
1867
|
-
result = await kanbanApi.getEpic(args.epicId);
|
|
1868
|
-
break;
|
|
1869
|
-
case "update_epic":
|
|
1870
|
-
result = await kanbanApi.updateEpic(args.epicId, args);
|
|
1871
|
-
break;
|
|
1872
|
-
case "delete_epic":
|
|
1873
|
-
result = await kanbanApi.deleteEpic(args.epicId);
|
|
1874
|
-
break;
|
|
1875
|
-
case "add_card_to_epic":
|
|
1876
|
-
result = await kanbanApi.addCardToEpic(args.epicId, args.cardId);
|
|
1877
|
-
break;
|
|
1878
|
-
case "remove_card_from_epic":
|
|
1879
|
-
result = await kanbanApi.removeCardFromEpic(args.epicId, args.cardId);
|
|
1880
|
-
break;
|
|
1881
|
-
// FEATURES
|
|
1882
|
-
case "list_features": {
|
|
1883
|
-
const features = await kanbanApi.listFeatures(args.epicId);
|
|
1884
|
-
const slugFilter = args.slug;
|
|
1885
|
-
result = slugFilter ? (Array.isArray(features) ? features : []).filter((f) => f.slug === slugFilter.toUpperCase()) : features;
|
|
1886
|
-
break;
|
|
1887
|
-
}
|
|
1888
|
-
case "get_feature": {
|
|
1889
|
-
const fId = args.featureId || args.featureSlug;
|
|
1890
|
-
if (!fId) throw new Error("Either featureId or featureSlug is required");
|
|
1891
|
-
result = await kanbanApi.getFeature(fId);
|
|
1892
|
-
break;
|
|
1893
|
-
}
|
|
1894
|
-
case "get_active_features":
|
|
1895
|
-
result = await kanbanApi.getActiveFeatures();
|
|
1896
|
-
break;
|
|
1897
|
-
case "create_feature":
|
|
1898
|
-
result = await kanbanApi.createFeature(args);
|
|
1899
|
-
break;
|
|
1900
|
-
case "update_feature":
|
|
1901
|
-
result = await kanbanApi.updateFeature(args.featureId, args);
|
|
1902
|
-
break;
|
|
1903
|
-
case "delete_feature":
|
|
1904
|
-
result = await kanbanApi.deleteFeature(args.featureId);
|
|
1905
|
-
break;
|
|
1906
|
-
case "add_card_to_feature": {
|
|
1907
|
-
let addFeatureId = args.featureId || args.featureSlug;
|
|
1908
|
-
if (!addFeatureId) throw new Error("Either featureId or featureSlug is required");
|
|
1909
|
-
if (args.featureSlug && !args.featureId) {
|
|
1910
|
-
const resolved = await kanbanApi.getFeature(addFeatureId);
|
|
1911
|
-
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}`);
|
|
1912
938
|
}
|
|
1913
|
-
result = await kanbanApi.addCardToFeature(addFeatureId, args.cardId);
|
|
1914
939
|
break;
|
|
1915
|
-
|
|
1916
|
-
case "
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
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}`);
|
|
1922
973
|
}
|
|
1923
|
-
result = await kanbanApi.removeCardFromFeature(removeFeatureId, args.cardId);
|
|
1924
974
|
break;
|
|
1925
|
-
|
|
1926
|
-
case "
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
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}`);
|
|
1932
992
|
}
|
|
1933
|
-
result = await kanbanApi.getFeatureCards(cardsFeatureId);
|
|
1934
|
-
break;
|
|
1935
|
-
}
|
|
1936
|
-
// CARD LINKS
|
|
1937
|
-
case "link_cards":
|
|
1938
|
-
result = await kanbanApi.linkCards(
|
|
1939
|
-
args.cardId1,
|
|
1940
|
-
args.cardId2,
|
|
1941
|
-
args.label
|
|
1942
|
-
);
|
|
1943
993
|
break;
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
});
|
|
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
|
+
}
|
|
2000
1049
|
break;
|
|
2001
|
-
//
|
|
2002
|
-
case "
|
|
2003
|
-
|
|
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
|
+
}
|
|
2004
1062
|
break;
|
|
2005
|
-
|
|
2006
|
-
|
|
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
|
+
}
|
|
2007
1098
|
break;
|
|
2008
|
-
|
|
2009
|
-
|
|
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
|
+
}
|
|
2010
1120
|
break;
|
|
2011
|
-
//
|
|
2012
|
-
case "
|
|
2013
|
-
|
|
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
|
+
}
|
|
2014
1157
|
break;
|
|
2015
|
-
//
|
|
2016
|
-
case "
|
|
2017
|
-
|
|
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
|
+
}
|
|
2018
1224
|
break;
|
|
2019
|
-
//
|
|
2020
|
-
case "
|
|
2021
|
-
|
|
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
|
+
}
|
|
2022
1240
|
break;
|
|
2023
|
-
|
|
2024
|
-
|
|
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
|
+
}
|
|
2025
1265
|
break;
|
|
2026
1266
|
default:
|
|
2027
1267
|
throw new Error(`Unknown tool: ${name}`);
|