@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/index.js CHANGED
@@ -37,7 +37,7 @@ var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
37
37
  var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
38
38
 
39
39
  // src/version.ts
40
- var VERSION = "0.2.2";
40
+ var VERSION = "0.2.3";
41
41
 
42
42
  // src/index.ts
43
43
  var import_zod3 = require("zod");
@@ -452,12 +452,33 @@ var AbandonTaskInputSchema = import_zod2.z.object({
452
452
  taskId: cuidOrPrefixedId,
453
453
  deleteBranch: import_zod2.z.boolean().optional()
454
454
  });
455
+ var RequestChangesInputSchema = import_zod2.z.object({
456
+ projectId: cuidOrPrefixedId,
457
+ taskId: cuidOrPrefixedId,
458
+ reviewComments: import_zod2.z.string().min(1).max(5e3),
459
+ requestedChanges: import_zod2.z.array(import_zod2.z.string().min(1).max(500)).optional()
460
+ });
461
+ var ApproveTaskInputSchema = import_zod2.z.object({
462
+ projectId: cuidOrPrefixedId,
463
+ taskId: cuidOrPrefixedId,
464
+ reviewComments: import_zod2.z.string().max(2e3).optional()
465
+ });
455
466
  var CreatePersonalProjectInputSchema = import_zod2.z.object({
456
467
  name: import_zod2.z.string().min(1).max(100),
457
468
  description: import_zod2.z.string().max(500).optional(),
458
469
  repositoryUrl: import_zod2.z.string().url()
459
470
  });
460
471
  var CheckActiveTaskInputSchema = import_zod2.z.object({});
472
+ var CreateTaskMCPInputSchema = import_zod2.z.object({
473
+ projectId: cuidOrPrefixedId,
474
+ epicId: cuidOrPrefixedId.nullable().optional(),
475
+ title: import_zod2.z.string().min(1).max(200),
476
+ description: import_zod2.z.string().max(5e3),
477
+ priority: import_zod2.z.nativeEnum(TaskPriority).default(TaskPriority.MEDIUM),
478
+ acceptanceCriteria: import_zod2.z.array(import_zod2.z.object({
479
+ description: import_zod2.z.string().min(1).max(500)
480
+ })).min(1)
481
+ });
461
482
  var CreateOrganizationInputSchema = import_zod2.z.object({
462
483
  name: import_zod2.z.string().min(1).max(255),
463
484
  slug: import_zod2.z.string().min(1).max(100).regex(/^[a-z0-9-]+$/).optional()
@@ -995,6 +1016,12 @@ var MCPApiClient = class {
995
1016
  { name, description, repositoryUrl }
996
1017
  );
997
1018
  }
1019
+ /**
1020
+ * Create a task in a project
1021
+ */
1022
+ async createTask(input) {
1023
+ return this.request("POST", "/api/mcp/tasks", input);
1024
+ }
998
1025
  /**
999
1026
  * List tasks with optional filters
1000
1027
  */
@@ -1063,6 +1090,25 @@ var MCPApiClient = class {
1063
1090
  async addNote(taskId, content) {
1064
1091
  return this.request("POST", `/api/mcp/tasks/${taskId}/notes`, { content });
1065
1092
  }
1093
+ /**
1094
+ * Request changes on a task in review
1095
+ */
1096
+ async requestChanges(taskId, projectId, reviewComments, requestedChanges) {
1097
+ return this.request("POST", `/api/mcp/tasks/${taskId}/request-changes`, {
1098
+ projectId,
1099
+ reviewComments,
1100
+ requestedChanges
1101
+ });
1102
+ }
1103
+ /**
1104
+ * Approve a task in review and mark as DONE
1105
+ */
1106
+ async approveTask(taskId, projectId, reviewComments) {
1107
+ return this.request("POST", `/api/mcp/tasks/${taskId}/approve`, {
1108
+ projectId,
1109
+ reviewComments
1110
+ });
1111
+ }
1066
1112
  /**
1067
1113
  * Get GitHub token
1068
1114
  */
@@ -1522,6 +1568,126 @@ async function createMCPServer() {
1522
1568
  }
1523
1569
  }
1524
1570
  );
1571
+ server.registerTool(
1572
+ "create_task",
1573
+ {
1574
+ description: "Create a new task in a project. Requires WRITE permission and project access.",
1575
+ inputSchema: {
1576
+ projectId: import_zod3.z.string().describe("The project ID to create the task in"),
1577
+ epicId: import_zod3.z.string().nullable().optional().describe("Optional epic ID to associate the task with"),
1578
+ title: import_zod3.z.string().describe("Task title (max 200 chars)"),
1579
+ description: import_zod3.z.string().describe("Task description (max 5000 chars)"),
1580
+ priority: import_zod3.z.nativeEnum(TaskPriority).optional().describe("Task priority: LOW, MEDIUM, HIGH, CRITICAL (default: MEDIUM)"),
1581
+ acceptanceCriteria: import_zod3.z.array(
1582
+ import_zod3.z.object({
1583
+ description: import_zod3.z.string().describe("Acceptance criterion description (max 500 chars)")
1584
+ })
1585
+ ).describe("Array of acceptance criteria (at least 1 required)")
1586
+ }
1587
+ },
1588
+ async (args) => {
1589
+ assertApiKeyPermission(
1590
+ mockApiKey,
1591
+ ApiKeyPermission.WRITE,
1592
+ "create_task"
1593
+ );
1594
+ const validated = CreateTaskMCPInputSchema.parse(args);
1595
+ try {
1596
+ const result = await apiClient.createTask({
1597
+ projectId: validated.projectId,
1598
+ epicId: validated.epicId,
1599
+ title: validated.title,
1600
+ description: validated.description,
1601
+ priority: validated.priority,
1602
+ acceptanceCriteria: validated.acceptanceCriteria
1603
+ });
1604
+ return {
1605
+ content: [
1606
+ {
1607
+ type: "text",
1608
+ text: JSON.stringify(result, null, 2)
1609
+ }
1610
+ ]
1611
+ };
1612
+ } catch (error) {
1613
+ return handleApiError(error);
1614
+ }
1615
+ }
1616
+ );
1617
+ server.registerTool(
1618
+ "request_changes",
1619
+ {
1620
+ description: "Submit review comments requesting changes on a task in REVIEW state",
1621
+ inputSchema: {
1622
+ projectId: import_zod3.z.string().describe("The project ID"),
1623
+ taskId: import_zod3.z.string().describe("The task ID to review"),
1624
+ reviewComments: import_zod3.z.string().describe("Review comments explaining requested changes (max 5000 chars)"),
1625
+ requestedChanges: import_zod3.z.array(import_zod3.z.string()).optional().describe("List of specific changes requested")
1626
+ }
1627
+ },
1628
+ async (args) => {
1629
+ assertApiKeyPermission(
1630
+ mockApiKey,
1631
+ ApiKeyPermission.WRITE,
1632
+ "request_changes"
1633
+ );
1634
+ const validated = RequestChangesInputSchema.parse(args);
1635
+ try {
1636
+ const result = await apiClient.requestChanges(
1637
+ validated.taskId,
1638
+ validated.projectId,
1639
+ validated.reviewComments,
1640
+ validated.requestedChanges
1641
+ );
1642
+ return {
1643
+ content: [
1644
+ {
1645
+ type: "text",
1646
+ text: JSON.stringify(result, null, 2)
1647
+ }
1648
+ ]
1649
+ };
1650
+ } catch (error) {
1651
+ return handleApiError(error);
1652
+ }
1653
+ }
1654
+ );
1655
+ server.registerTool(
1656
+ "approve_task",
1657
+ {
1658
+ description: "Approve a task in REVIEW state and mark it as DONE",
1659
+ inputSchema: {
1660
+ projectId: import_zod3.z.string().describe("The project ID"),
1661
+ taskId: import_zod3.z.string().describe("The task ID to approve"),
1662
+ reviewComments: import_zod3.z.string().optional().describe("Optional approval comments (max 2000 chars)")
1663
+ }
1664
+ },
1665
+ async (args) => {
1666
+ assertApiKeyPermission(
1667
+ mockApiKey,
1668
+ ApiKeyPermission.WRITE,
1669
+ "approve_task"
1670
+ );
1671
+ const validated = ApproveTaskInputSchema.parse(args);
1672
+ try {
1673
+ const result = await apiClient.approveTask(
1674
+ validated.taskId,
1675
+ validated.projectId,
1676
+ validated.reviewComments
1677
+ );
1678
+ return {
1679
+ content: [
1680
+ {
1681
+ type: "text",
1682
+ text: JSON.stringify(result, null, 2)
1683
+ }
1684
+ ]
1685
+ };
1686
+ } catch (error) {
1687
+ return handleApiError(error);
1688
+ }
1689
+ }
1690
+ );
1525
1691
  server.registerTool(
1526
1692
  "get_version",
1527
1693
  {