snboard-mcp 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +185 -331
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -102,12 +102,22 @@ var kanbanApi = {
102
102
  createCard: (data) => api("/api/cards", { method: "POST", body: JSON.stringify(data) }),
103
103
  updateCard: (id, data) => api(`/api/cards/${id}`, { method: "PUT", body: JSON.stringify(data) }),
104
104
  deleteCard: (id) => api(`/api/cards/${id}`, { method: "DELETE" }),
105
- archiveCard: (id) => api(`/api/cards/${id}`, { method: "PUT", body: JSON.stringify({ isArchived: true }) }),
106
- unarchiveCard: (id) => api(`/api/cards/${id}`, { method: "PUT", body: JSON.stringify({ isArchived: false }) }),
105
+ archiveCard: (id) => api(`/api/cards/${id}`, {
106
+ method: "PUT",
107
+ body: JSON.stringify({ isArchived: true })
108
+ }),
109
+ unarchiveCard: (id) => api(`/api/cards/${id}`, {
110
+ method: "PUT",
111
+ body: JSON.stringify({ isArchived: false })
112
+ }),
107
113
  listArchivedCards: (boardId) => api(`/api/archived?boardId=${boardId}`),
108
114
  moveCard: (id, targetColumnId, newOrder) => api("/api/cards/move", {
109
115
  method: "POST",
110
- body: JSON.stringify({ cardId: id, targetColumnId, ...newOrder !== void 0 && { newOrder } })
116
+ body: JSON.stringify({
117
+ cardId: id,
118
+ targetColumnId,
119
+ ...newOrder !== void 0 && { newOrder }
120
+ })
111
121
  }),
112
122
  getBranchName: (id, type) => api(`/api/cards/${id}/branch?type=${type}`),
113
123
  searchCards: (params) => {
@@ -179,12 +189,20 @@ var kanbanApi = {
179
189
  return { epic, cards: cardResults, created: cardResults.length };
180
190
  },
181
191
  bulkCreateEpicWithFeatures: async (data) => {
182
- const epic = await api("/api/epics", { method: "POST", body: JSON.stringify(data.epic) });
192
+ const epic = await api("/api/epics", {
193
+ method: "POST",
194
+ body: JSON.stringify(data.epic)
195
+ });
183
196
  const features = await Promise.all(
184
197
  data.features.map(
185
198
  (f) => api("/api/features", {
186
199
  method: "POST",
187
- body: JSON.stringify({ epicId: epic.id, title: f.title, slug: f.slug, description: f.description })
200
+ body: JSON.stringify({
201
+ epicId: epic.id,
202
+ title: f.title,
203
+ slug: f.slug,
204
+ description: f.description
205
+ })
188
206
  })
189
207
  )
190
208
  );
@@ -205,10 +223,18 @@ var kanbanApi = {
205
223
  body: JSON.stringify({ cardId: card.id })
206
224
  });
207
225
  }
208
- return { id: feature.id, slug: feature.slug, title: feature.title, cardIds: cards.map((c) => c.id) };
226
+ return {
227
+ id: feature.id,
228
+ slug: feature.slug,
229
+ title: feature.title,
230
+ cardIds: cards.map((c) => c.id)
231
+ };
209
232
  })
210
233
  );
211
- const totalCards = featureResults.reduce((sum, f) => sum + f.cardIds.length, 0);
234
+ const totalCards = featureResults.reduce(
235
+ (sum, f) => sum + f.cardIds.length,
236
+ 0
237
+ );
212
238
  return {
213
239
  epic: { id: epic.id, slug: epic.slug, name: epic.name },
214
240
  features: featureResults,
@@ -388,7 +414,10 @@ var kanbanApi = {
388
414
  createFeature: (data) => api("/api/features", { method: "POST", body: JSON.stringify(data) }),
389
415
  updateFeature: (id, data) => api(`/api/features/${id}`, { method: "PATCH", body: JSON.stringify(data) }),
390
416
  deleteFeature: (id) => api(`/api/features/${id}`, { method: "DELETE" }),
391
- addCardToFeature: (featureId, cardId) => api(`/api/features/${featureId}/cards`, { method: "POST", body: JSON.stringify({ cardId }) }),
417
+ addCardToFeature: (featureId, cardId) => api(`/api/features/${featureId}/cards`, {
418
+ method: "POST",
419
+ body: JSON.stringify({ cardId })
420
+ }),
392
421
  removeCardFromFeature: (featureId, cardId) => api(`/api/features/${featureId}/cards/${cardId}`, { method: "DELETE" }),
393
422
  getFeatureCards: (featureId) => api(`/api/features/${featureId}/cards`),
394
423
  // Card Links
@@ -416,45 +445,7 @@ var kanbanApi = {
416
445
  linkCardToPr: (cardId, prUrl) => api(`/api/cards/${cardId}`, {
417
446
  method: "PUT",
418
447
  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}`)
448
+ })
458
449
  };
459
450
  var server = new Server(
460
451
  { name: "kanban-mcp", version: "1.1.0" },
@@ -535,7 +526,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
535
526
  inputSchema: {
536
527
  type: "object",
537
528
  properties: {
538
- folderId: { type: "string", description: 'Filter by folder. Use "none" for orphan projects' },
529
+ folderId: {
530
+ type: "string",
531
+ description: 'Filter by folder. Use "none" for orphan projects'
532
+ },
539
533
  limit: { type: "number" },
540
534
  compact: { type: "boolean" }
541
535
  }
@@ -580,7 +574,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
580
574
  description: { type: "string" },
581
575
  emoji: { type: "string" },
582
576
  color: { type: "string" },
583
- folderId: { type: "string", description: "Move to folder (null to remove)" }
577
+ folderId: {
578
+ type: "string",
579
+ description: "Move to folder (null to remove)"
580
+ }
584
581
  },
585
582
  required: ["projectId"]
586
583
  }
@@ -602,7 +599,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
602
599
  properties: {
603
600
  projectId: { type: "string" },
604
601
  targetProjectId: { type: "string" },
605
- folderId: { type: "string", description: "Folder context (null for orphans)" }
602
+ folderId: {
603
+ type: "string",
604
+ description: "Folder context (null for orphans)"
605
+ }
606
606
  },
607
607
  required: ["projectId", "targetProjectId"]
608
608
  }
@@ -758,8 +758,14 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
758
758
  dueDate: { type: "string" },
759
759
  epicId: { type: "string" },
760
760
  tagIds: { type: "array", items: { type: "string" } },
761
- estimatedMinutes: { type: "number", description: "Estimated time in minutes" },
762
- cognitiveLoad: { type: "string", description: "Cognitive load level" }
761
+ estimatedMinutes: {
762
+ type: "number",
763
+ description: "Estimated time in minutes"
764
+ },
765
+ cognitiveLoad: {
766
+ type: "string",
767
+ description: "Cognitive load level"
768
+ }
763
769
  },
764
770
  required: ["columnId", "title"]
765
771
  }
@@ -775,7 +781,11 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
775
781
  description: { type: "string" },
776
782
  priority: { type: "string", enum: ["P1", "P2", "P3"] },
777
783
  dueDate: { type: "string" },
778
- tagIds: { type: "array", items: { type: "string" }, description: "Replace all tags with these IDs" },
784
+ tagIds: {
785
+ type: "array",
786
+ items: { type: "string" },
787
+ description: "Replace all tags with these IDs"
788
+ },
779
789
  cognitiveLoad: { type: "string" },
780
790
  estimatedMinutes: { type: "number" },
781
791
  githubBranch: { type: "string" },
@@ -829,7 +839,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
829
839
  properties: {
830
840
  cardId: { type: "string" },
831
841
  targetColumnId: { type: "string" },
832
- newOrder: { type: "number", description: "Position in target column (0-indexed, default: end)" }
842
+ newOrder: {
843
+ type: "number",
844
+ description: "Position in target column (0-indexed, default: end)"
845
+ }
833
846
  },
834
847
  required: ["cardId", "targetColumnId"]
835
848
  }
@@ -1035,7 +1048,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1035
1048
  type: "object",
1036
1049
  properties: {
1037
1050
  title: { type: "string" },
1038
- slug: { type: "string", description: "UPPERCASE slug (auto-generated from title if omitted)" },
1051
+ slug: {
1052
+ type: "string",
1053
+ description: "UPPERCASE slug (auto-generated from title if omitted)"
1054
+ },
1039
1055
  description: { type: "string" },
1040
1056
  cards: {
1041
1057
  type: "array",
@@ -1224,7 +1240,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1224
1240
  status: { type: "string" },
1225
1241
  startDate: { type: "string" },
1226
1242
  targetDate: { type: "string" },
1227
- syncDates: { type: "boolean", description: "Sync targetDate to all card due dates" }
1243
+ syncDates: {
1244
+ type: "boolean",
1245
+ description: "Sync targetDate to all card due dates"
1246
+ }
1228
1247
  },
1229
1248
  required: ["epicId"]
1230
1249
  }
@@ -1264,7 +1283,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1264
1283
  type: "object",
1265
1284
  properties: {
1266
1285
  epicId: { type: "string" },
1267
- slug: { type: "string", description: "Filter by feature slug (UPPERCASE)" }
1286
+ slug: {
1287
+ type: "string",
1288
+ description: "Filter by feature slug (UPPERCASE)"
1289
+ }
1268
1290
  }
1269
1291
  }
1270
1292
  },
@@ -1275,7 +1297,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1275
1297
  type: "object",
1276
1298
  properties: {
1277
1299
  featureId: { type: "string", description: "Feature ID or slug" },
1278
- featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
1300
+ featureSlug: {
1301
+ type: "string",
1302
+ description: "Feature slug (UPPERCASE), alternative to featureId"
1303
+ }
1279
1304
  }
1280
1305
  }
1281
1306
  },
@@ -1294,7 +1319,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1294
1319
  title: { type: "string" },
1295
1320
  slug: { type: "string" },
1296
1321
  description: { type: "string" },
1297
- status: { type: "string", enum: ["planning", "in_progress", "completed", "on_hold"] }
1322
+ status: {
1323
+ type: "string",
1324
+ enum: ["planning", "in_progress", "completed", "on_hold"]
1325
+ }
1298
1326
  },
1299
1327
  required: ["title"]
1300
1328
  }
@@ -1309,7 +1337,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1309
1337
  title: { type: "string" },
1310
1338
  slug: { type: "string" },
1311
1339
  description: { type: "string" },
1312
- status: { type: "string", enum: ["planning", "in_progress", "completed", "on_hold"] },
1340
+ status: {
1341
+ type: "string",
1342
+ enum: ["planning", "in_progress", "completed", "on_hold"]
1343
+ },
1313
1344
  order: { type: "number" },
1314
1345
  epicId: { type: "string", description: "Move to another epic" }
1315
1346
  },
@@ -1333,7 +1364,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1333
1364
  properties: {
1334
1365
  cardId: { type: "string" },
1335
1366
  featureId: { type: "string", description: "Feature ID or slug" },
1336
- featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
1367
+ featureSlug: {
1368
+ type: "string",
1369
+ description: "Feature slug (UPPERCASE), alternative to featureId"
1370
+ }
1337
1371
  },
1338
1372
  required: ["cardId"]
1339
1373
  }
@@ -1346,7 +1380,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1346
1380
  properties: {
1347
1381
  cardId: { type: "string" },
1348
1382
  featureId: { type: "string", description: "Feature ID or slug" },
1349
- featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
1383
+ featureSlug: {
1384
+ type: "string",
1385
+ description: "Feature slug (UPPERCASE), alternative to featureId"
1386
+ }
1350
1387
  },
1351
1388
  required: ["cardId"]
1352
1389
  }
@@ -1358,7 +1395,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1358
1395
  type: "object",
1359
1396
  properties: {
1360
1397
  featureId: { type: "string", description: "Feature ID or slug" },
1361
- featureSlug: { type: "string", description: "Feature slug (UPPERCASE), alternative to featureId" }
1398
+ featureSlug: {
1399
+ type: "string",
1400
+ description: "Feature slug (UPPERCASE), alternative to featureId"
1401
+ }
1362
1402
  }
1363
1403
  }
1364
1404
  },
@@ -1468,194 +1508,6 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
1468
1508
  properties: { cardId: { type: "string" }, prUrl: { type: "string" } },
1469
1509
  required: ["cardId", "prUrl"]
1470
1510
  }
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"]
1658
- }
1659
1511
  }
1660
1512
  ]
1661
1513
  }));
@@ -1672,7 +1524,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1672
1524
  result = await kanbanApi.createFolder(args);
1673
1525
  break;
1674
1526
  case "update_folder":
1675
- result = await kanbanApi.updateFolder(args.folderId, args);
1527
+ result = await kanbanApi.updateFolder(
1528
+ args.folderId,
1529
+ args
1530
+ );
1676
1531
  break;
1677
1532
  case "delete_folder":
1678
1533
  result = await kanbanApi.deleteFolder(args.folderId);
@@ -1697,10 +1552,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1697
1552
  result = await kanbanApi.createProject(args);
1698
1553
  break;
1699
1554
  case "get_project":
1700
- result = await kanbanApi.getProject(args.projectId, args);
1555
+ result = await kanbanApi.getProject(
1556
+ args.projectId,
1557
+ args
1558
+ );
1701
1559
  break;
1702
1560
  case "update_project":
1703
- result = await kanbanApi.updateProject(args.projectId, args);
1561
+ result = await kanbanApi.updateProject(
1562
+ args.projectId,
1563
+ args
1564
+ );
1704
1565
  break;
1705
1566
  case "delete_project":
1706
1567
  result = await kanbanApi.deleteProject(args.projectId);
@@ -1723,7 +1584,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1723
1584
  result = await kanbanApi.getBoard(args.boardId, args);
1724
1585
  break;
1725
1586
  case "update_board":
1726
- result = await kanbanApi.updateBoard(args.boardId, { name: args.name });
1587
+ result = await kanbanApi.updateBoard(args.boardId, {
1588
+ name: args.name
1589
+ });
1727
1590
  break;
1728
1591
  case "delete_board":
1729
1592
  result = await kanbanApi.deleteBoard(args.boardId);
@@ -1733,7 +1596,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1733
1596
  result = await kanbanApi.createColumn(args);
1734
1597
  break;
1735
1598
  case "update_column":
1736
- result = await kanbanApi.updateColumn(args.columnId, args);
1599
+ result = await kanbanApi.updateColumn(
1600
+ args.columnId,
1601
+ args
1602
+ );
1737
1603
  break;
1738
1604
  case "delete_column":
1739
1605
  result = await kanbanApi.deleteColumn(args.columnId);
@@ -1755,7 +1621,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1755
1621
  result = await kanbanApi.deleteCard(args.cardId);
1756
1622
  break;
1757
1623
  case "move_card":
1758
- result = await kanbanApi.moveCard(args.cardId, args.targetColumnId, args.newOrder);
1624
+ result = await kanbanApi.moveCard(
1625
+ args.cardId,
1626
+ args.targetColumnId,
1627
+ args.newOrder
1628
+ );
1759
1629
  break;
1760
1630
  case "archive_card":
1761
1631
  result = await kanbanApi.archiveCard(args.cardId);
@@ -1767,7 +1637,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1767
1637
  result = await kanbanApi.listArchivedCards(args.boardId);
1768
1638
  break;
1769
1639
  case "add_comment":
1770
- result = await kanbanApi.addComment(args.cardId, args.content);
1640
+ result = await kanbanApi.addComment(
1641
+ args.cardId,
1642
+ args.content
1643
+ );
1771
1644
  break;
1772
1645
  case "delete_comment":
1773
1646
  result = await kanbanApi.deleteComment(args.commentId);
@@ -1851,10 +1724,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1851
1724
  result = await kanbanApi.deleteTag(args.tagId);
1852
1725
  break;
1853
1726
  case "add_tag_to_card":
1854
- result = await kanbanApi.addTagToCard(args.cardId, args.tagId);
1727
+ result = await kanbanApi.addTagToCard(
1728
+ args.cardId,
1729
+ args.tagId
1730
+ );
1855
1731
  break;
1856
1732
  case "remove_tag_from_card":
1857
- result = await kanbanApi.removeTagFromCard(args.cardId, args.tagId);
1733
+ result = await kanbanApi.removeTagFromCard(
1734
+ args.cardId,
1735
+ args.tagId
1736
+ );
1858
1737
  break;
1859
1738
  // EPICS
1860
1739
  case "list_epics":
@@ -1873,21 +1752,30 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1873
1752
  result = await kanbanApi.deleteEpic(args.epicId);
1874
1753
  break;
1875
1754
  case "add_card_to_epic":
1876
- result = await kanbanApi.addCardToEpic(args.epicId, args.cardId);
1755
+ result = await kanbanApi.addCardToEpic(
1756
+ args.epicId,
1757
+ args.cardId
1758
+ );
1877
1759
  break;
1878
1760
  case "remove_card_from_epic":
1879
- result = await kanbanApi.removeCardFromEpic(args.epicId, args.cardId);
1761
+ result = await kanbanApi.removeCardFromEpic(
1762
+ args.epicId,
1763
+ args.cardId
1764
+ );
1880
1765
  break;
1881
1766
  // FEATURES
1882
1767
  case "list_features": {
1883
1768
  const features = await kanbanApi.listFeatures(args.epicId);
1884
1769
  const slugFilter = args.slug;
1885
- result = slugFilter ? (Array.isArray(features) ? features : []).filter((f) => f.slug === slugFilter.toUpperCase()) : features;
1770
+ result = slugFilter ? (Array.isArray(features) ? features : []).filter(
1771
+ (f) => f.slug === slugFilter.toUpperCase()
1772
+ ) : features;
1886
1773
  break;
1887
1774
  }
1888
1775
  case "get_feature": {
1889
1776
  const fId = args.featureId || args.featureSlug;
1890
- if (!fId) throw new Error("Either featureId or featureSlug is required");
1777
+ if (!fId)
1778
+ throw new Error("Either featureId or featureSlug is required");
1891
1779
  result = await kanbanApi.getFeature(fId);
1892
1780
  break;
1893
1781
  }
@@ -1898,34 +1786,46 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1898
1786
  result = await kanbanApi.createFeature(args);
1899
1787
  break;
1900
1788
  case "update_feature":
1901
- result = await kanbanApi.updateFeature(args.featureId, args);
1789
+ result = await kanbanApi.updateFeature(
1790
+ args.featureId,
1791
+ args
1792
+ );
1902
1793
  break;
1903
1794
  case "delete_feature":
1904
1795
  result = await kanbanApi.deleteFeature(args.featureId);
1905
1796
  break;
1906
1797
  case "add_card_to_feature": {
1907
1798
  let addFeatureId = args.featureId || args.featureSlug;
1908
- if (!addFeatureId) throw new Error("Either featureId or featureSlug is required");
1799
+ if (!addFeatureId)
1800
+ throw new Error("Either featureId or featureSlug is required");
1909
1801
  if (args.featureSlug && !args.featureId) {
1910
1802
  const resolved = await kanbanApi.getFeature(addFeatureId);
1911
1803
  addFeatureId = resolved.id;
1912
1804
  }
1913
- result = await kanbanApi.addCardToFeature(addFeatureId, args.cardId);
1805
+ result = await kanbanApi.addCardToFeature(
1806
+ addFeatureId,
1807
+ args.cardId
1808
+ );
1914
1809
  break;
1915
1810
  }
1916
1811
  case "remove_card_from_feature": {
1917
1812
  let removeFeatureId = args.featureId || args.featureSlug;
1918
- if (!removeFeatureId) throw new Error("Either featureId or featureSlug is required");
1813
+ if (!removeFeatureId)
1814
+ throw new Error("Either featureId or featureSlug is required");
1919
1815
  if (args.featureSlug && !args.featureId) {
1920
1816
  const resolved = await kanbanApi.getFeature(removeFeatureId);
1921
1817
  removeFeatureId = resolved.id;
1922
1818
  }
1923
- result = await kanbanApi.removeCardFromFeature(removeFeatureId, args.cardId);
1819
+ result = await kanbanApi.removeCardFromFeature(
1820
+ removeFeatureId,
1821
+ args.cardId
1822
+ );
1924
1823
  break;
1925
1824
  }
1926
1825
  case "get_feature_cards": {
1927
1826
  let cardsFeatureId = args.featureId || args.featureSlug;
1928
- if (!cardsFeatureId) throw new Error("Either featureId or featureSlug is required");
1827
+ if (!cardsFeatureId)
1828
+ throw new Error("Either featureId or featureSlug is required");
1929
1829
  if (args.featureSlug && !args.featureId) {
1930
1830
  const resolved = await kanbanApi.getFeature(cardsFeatureId);
1931
1831
  cardsFeatureId = resolved.id;
@@ -1955,73 +1855,27 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1955
1855
  result = await kanbanApi.getGithubIntegration(args.projectId);
1956
1856
  break;
1957
1857
  case "update_github_integration":
1958
- result = await kanbanApi.updateGithubIntegration(args.projectId, args);
1858
+ result = await kanbanApi.updateGithubIntegration(
1859
+ args.projectId,
1860
+ args
1861
+ );
1959
1862
  break;
1960
1863
  case "remove_github_integration":
1961
- result = await kanbanApi.removeGithubIntegration(args.projectId);
1864
+ result = await kanbanApi.removeGithubIntegration(
1865
+ args.projectId
1866
+ );
1962
1867
  break;
1963
1868
  case "link_card_to_branch":
1964
- result = await kanbanApi.linkCardToBranch(args.cardId, args.branch);
1869
+ result = await kanbanApi.linkCardToBranch(
1870
+ args.cardId,
1871
+ args.branch
1872
+ );
1965
1873
  break;
1966
1874
  case "link_card_to_pr":
1967
- result = await kanbanApi.linkCardToPr(args.cardId, args.prUrl);
1968
- break;
1969
- // GITHUB API
1970
- case "github_list_repos":
1971
- result = await kanbanApi.githubListRepos(args.userId, args.type);
1972
- break;
1973
- case "github_create_branch":
1974
- result = await kanbanApi.githubCreateBranch(args);
1975
- break;
1976
- case "github_create_pr":
1977
- result = await kanbanApi.githubCreatePr(args);
1978
- break;
1979
- // IDEAS
1980
- case "list_ideas":
1981
- result = await kanbanApi.listIdeas(args);
1982
- break;
1983
- case "get_idea":
1984
- result = await kanbanApi.getIdea(args.ideaId);
1985
- break;
1986
- case "create_idea":
1987
- result = await kanbanApi.createIdea(args);
1988
- break;
1989
- case "update_idea":
1990
- result = await kanbanApi.updateIdea(args.ideaId, args);
1991
- break;
1992
- case "delete_idea":
1993
- result = await kanbanApi.deleteIdea(args.ideaId);
1994
- break;
1995
- case "convert_idea_to_card":
1996
- result = await kanbanApi.convertIdeaToCard(args.ideaId, {
1997
- boardId: args.boardId,
1998
- columnId: args.columnId
1999
- });
2000
- break;
2001
- // TIME TRACKING
2002
- case "get_time_tracking":
2003
- result = await kanbanApi.getTimeTracking(args);
2004
- break;
2005
- case "log_activity":
2006
- result = await kanbanApi.logActivity(args);
2007
- break;
2008
- case "end_time_session":
2009
- result = await kanbanApi.endTimeSession();
2010
- break;
2011
- // DAILY SUMMARY
2012
- case "get_daily_summary":
2013
- result = await kanbanApi.getDailySummary();
2014
- break;
2015
- // RETROSPECTIVE
2016
- case "get_retrospective":
2017
- result = await kanbanApi.getRetrospective(args.days);
2018
- break;
2019
- // EXPORT
2020
- case "export_board":
2021
- result = await kanbanApi.exportBoard(args.boardId);
2022
- break;
2023
- case "export_project":
2024
- result = await kanbanApi.exportProject(args.projectId);
1875
+ result = await kanbanApi.linkCardToPr(
1876
+ args.cardId,
1877
+ args.prUrl
1878
+ );
2025
1879
  break;
2026
1880
  default:
2027
1881
  throw new Error(`Unknown tool: ${name}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snboard-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "MCP server for SnBoard Kanban board management via REST API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",