@mtaap/mcp 0.2.2 → 0.2.3

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/cli.js CHANGED
@@ -28,7 +28,7 @@ var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
28
28
  var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
29
29
 
30
30
  // src/version.ts
31
- var VERSION = "0.2.2";
31
+ var VERSION = "0.2.3";
32
32
 
33
33
  // src/index.ts
34
34
  var import_zod3 = require("zod");
@@ -443,12 +443,33 @@ var AbandonTaskInputSchema = import_zod2.z.object({
443
443
  taskId: cuidOrPrefixedId,
444
444
  deleteBranch: import_zod2.z.boolean().optional()
445
445
  });
446
+ var RequestChangesInputSchema = import_zod2.z.object({
447
+ projectId: cuidOrPrefixedId,
448
+ taskId: cuidOrPrefixedId,
449
+ reviewComments: import_zod2.z.string().min(1).max(5e3),
450
+ requestedChanges: import_zod2.z.array(import_zod2.z.string().min(1).max(500)).optional()
451
+ });
452
+ var ApproveTaskInputSchema = import_zod2.z.object({
453
+ projectId: cuidOrPrefixedId,
454
+ taskId: cuidOrPrefixedId,
455
+ reviewComments: import_zod2.z.string().max(2e3).optional()
456
+ });
446
457
  var CreatePersonalProjectInputSchema = import_zod2.z.object({
447
458
  name: import_zod2.z.string().min(1).max(100),
448
459
  description: import_zod2.z.string().max(500).optional(),
449
460
  repositoryUrl: import_zod2.z.string().url()
450
461
  });
451
462
  var CheckActiveTaskInputSchema = import_zod2.z.object({});
463
+ var CreateTaskMCPInputSchema = import_zod2.z.object({
464
+ projectId: cuidOrPrefixedId,
465
+ epicId: cuidOrPrefixedId.nullable().optional(),
466
+ title: import_zod2.z.string().min(1).max(200),
467
+ description: import_zod2.z.string().max(5e3),
468
+ priority: import_zod2.z.nativeEnum(TaskPriority).default(TaskPriority.MEDIUM),
469
+ acceptanceCriteria: import_zod2.z.array(import_zod2.z.object({
470
+ description: import_zod2.z.string().min(1).max(500)
471
+ })).min(1)
472
+ });
452
473
  var CreateOrganizationInputSchema = import_zod2.z.object({
453
474
  name: import_zod2.z.string().min(1).max(255),
454
475
  slug: import_zod2.z.string().min(1).max(100).regex(/^[a-z0-9-]+$/).optional()
@@ -986,6 +1007,12 @@ var MCPApiClient = class {
986
1007
  { name, description, repositoryUrl }
987
1008
  );
988
1009
  }
1010
+ /**
1011
+ * Create a task in a project
1012
+ */
1013
+ async createTask(input) {
1014
+ return this.request("POST", "/api/mcp/tasks", input);
1015
+ }
989
1016
  /**
990
1017
  * List tasks with optional filters
991
1018
  */
@@ -1054,6 +1081,25 @@ var MCPApiClient = class {
1054
1081
  async addNote(taskId, content) {
1055
1082
  return this.request("POST", `/api/mcp/tasks/${taskId}/notes`, { content });
1056
1083
  }
1084
+ /**
1085
+ * Request changes on a task in review
1086
+ */
1087
+ async requestChanges(taskId, projectId, reviewComments, requestedChanges) {
1088
+ return this.request("POST", `/api/mcp/tasks/${taskId}/request-changes`, {
1089
+ projectId,
1090
+ reviewComments,
1091
+ requestedChanges
1092
+ });
1093
+ }
1094
+ /**
1095
+ * Approve a task in review and mark as DONE
1096
+ */
1097
+ async approveTask(taskId, projectId, reviewComments) {
1098
+ return this.request("POST", `/api/mcp/tasks/${taskId}/approve`, {
1099
+ projectId,
1100
+ reviewComments
1101
+ });
1102
+ }
1057
1103
  /**
1058
1104
  * Get GitHub token
1059
1105
  */
@@ -1513,6 +1559,126 @@ async function createMCPServer() {
1513
1559
  }
1514
1560
  }
1515
1561
  );
1562
+ server.registerTool(
1563
+ "create_task",
1564
+ {
1565
+ description: "Create a new task in a project. Requires WRITE permission and project access.",
1566
+ inputSchema: {
1567
+ projectId: import_zod3.z.string().describe("The project ID to create the task in"),
1568
+ epicId: import_zod3.z.string().nullable().optional().describe("Optional epic ID to associate the task with"),
1569
+ title: import_zod3.z.string().describe("Task title (max 200 chars)"),
1570
+ description: import_zod3.z.string().describe("Task description (max 5000 chars)"),
1571
+ priority: import_zod3.z.nativeEnum(TaskPriority).optional().describe("Task priority: LOW, MEDIUM, HIGH, CRITICAL (default: MEDIUM)"),
1572
+ acceptanceCriteria: import_zod3.z.array(
1573
+ import_zod3.z.object({
1574
+ description: import_zod3.z.string().describe("Acceptance criterion description (max 500 chars)")
1575
+ })
1576
+ ).describe("Array of acceptance criteria (at least 1 required)")
1577
+ }
1578
+ },
1579
+ async (args) => {
1580
+ assertApiKeyPermission(
1581
+ mockApiKey,
1582
+ ApiKeyPermission.WRITE,
1583
+ "create_task"
1584
+ );
1585
+ const validated = CreateTaskMCPInputSchema.parse(args);
1586
+ try {
1587
+ const result = await apiClient.createTask({
1588
+ projectId: validated.projectId,
1589
+ epicId: validated.epicId,
1590
+ title: validated.title,
1591
+ description: validated.description,
1592
+ priority: validated.priority,
1593
+ acceptanceCriteria: validated.acceptanceCriteria
1594
+ });
1595
+ return {
1596
+ content: [
1597
+ {
1598
+ type: "text",
1599
+ text: JSON.stringify(result, null, 2)
1600
+ }
1601
+ ]
1602
+ };
1603
+ } catch (error) {
1604
+ return handleApiError(error);
1605
+ }
1606
+ }
1607
+ );
1608
+ server.registerTool(
1609
+ "request_changes",
1610
+ {
1611
+ description: "Submit review comments requesting changes on a task in REVIEW state",
1612
+ inputSchema: {
1613
+ projectId: import_zod3.z.string().describe("The project ID"),
1614
+ taskId: import_zod3.z.string().describe("The task ID to review"),
1615
+ reviewComments: import_zod3.z.string().describe("Review comments explaining requested changes (max 5000 chars)"),
1616
+ requestedChanges: import_zod3.z.array(import_zod3.z.string()).optional().describe("List of specific changes requested")
1617
+ }
1618
+ },
1619
+ async (args) => {
1620
+ assertApiKeyPermission(
1621
+ mockApiKey,
1622
+ ApiKeyPermission.WRITE,
1623
+ "request_changes"
1624
+ );
1625
+ const validated = RequestChangesInputSchema.parse(args);
1626
+ try {
1627
+ const result = await apiClient.requestChanges(
1628
+ validated.taskId,
1629
+ validated.projectId,
1630
+ validated.reviewComments,
1631
+ validated.requestedChanges
1632
+ );
1633
+ return {
1634
+ content: [
1635
+ {
1636
+ type: "text",
1637
+ text: JSON.stringify(result, null, 2)
1638
+ }
1639
+ ]
1640
+ };
1641
+ } catch (error) {
1642
+ return handleApiError(error);
1643
+ }
1644
+ }
1645
+ );
1646
+ server.registerTool(
1647
+ "approve_task",
1648
+ {
1649
+ description: "Approve a task in REVIEW state and mark it as DONE",
1650
+ inputSchema: {
1651
+ projectId: import_zod3.z.string().describe("The project ID"),
1652
+ taskId: import_zod3.z.string().describe("The task ID to approve"),
1653
+ reviewComments: import_zod3.z.string().optional().describe("Optional approval comments (max 2000 chars)")
1654
+ }
1655
+ },
1656
+ async (args) => {
1657
+ assertApiKeyPermission(
1658
+ mockApiKey,
1659
+ ApiKeyPermission.WRITE,
1660
+ "approve_task"
1661
+ );
1662
+ const validated = ApproveTaskInputSchema.parse(args);
1663
+ try {
1664
+ const result = await apiClient.approveTask(
1665
+ validated.taskId,
1666
+ validated.projectId,
1667
+ validated.reviewComments
1668
+ );
1669
+ return {
1670
+ content: [
1671
+ {
1672
+ type: "text",
1673
+ text: JSON.stringify(result, null, 2)
1674
+ }
1675
+ ]
1676
+ };
1677
+ } catch (error) {
1678
+ return handleApiError(error);
1679
+ }
1680
+ }
1681
+ );
1516
1682
  server.registerTool(
1517
1683
  "get_version",
1518
1684
  {