@ourroadmaps/mcp 0.13.0 → 0.15.0
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 +153 -127
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -438,8 +438,28 @@ var updateScenarioSchema = z9.object({
|
|
|
438
438
|
order: z9.number().int().optional()
|
|
439
439
|
});
|
|
440
440
|
var scenarioListSchema = z9.array(scenarioSchema);
|
|
441
|
-
// src/
|
|
441
|
+
// ../../packages/shared/src/schemas/status-update.ts
|
|
442
442
|
import { z as z10 } from "zod";
|
|
443
|
+
var statusUpdateItemSchema = z10.object({
|
|
444
|
+
id: z10.string().uuid(),
|
|
445
|
+
roadmapItemId: z10.string().uuid(),
|
|
446
|
+
titleAtSnapshot: z10.string(),
|
|
447
|
+
statusAtSnapshot: z10.string(),
|
|
448
|
+
designWalkthroughUrl: z10.string().nullable(),
|
|
449
|
+
releaseWalkthroughUrl: z10.string().nullable()
|
|
450
|
+
});
|
|
451
|
+
var statusUpdateSchema = z10.object({
|
|
452
|
+
id: z10.string().uuid(),
|
|
453
|
+
title: z10.string().nullable(),
|
|
454
|
+
startDate: z10.string(),
|
|
455
|
+
endDate: z10.string(),
|
|
456
|
+
content: z10.string(),
|
|
457
|
+
createdAt: z10.string(),
|
|
458
|
+
items: z10.array(statusUpdateItemSchema).optional()
|
|
459
|
+
});
|
|
460
|
+
var statusUpdateListSchema = z10.array(statusUpdateSchema);
|
|
461
|
+
// src/tools/index.ts
|
|
462
|
+
import { z as z11 } from "zod";
|
|
443
463
|
|
|
444
464
|
// src/auth.ts
|
|
445
465
|
function getCredentials() {
|
|
@@ -957,11 +977,11 @@ function registerSearchRoadmaps(server) {
|
|
|
957
977
|
server.registerTool("search_roadmaps", {
|
|
958
978
|
description: "Search for roadmap items by title, status, or horizon. Returns a list of matching roadmap items with basic info.",
|
|
959
979
|
inputSchema: {
|
|
960
|
-
query:
|
|
980
|
+
query: z11.string().optional().describe("Search query to match against title or description"),
|
|
961
981
|
status: roadmapStatusSchema.optional().describe("Filter by status"),
|
|
962
982
|
horizon: horizonSchema.optional().describe("Filter by planning horizon"),
|
|
963
|
-
limit:
|
|
964
|
-
offset:
|
|
983
|
+
limit: z11.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
|
|
984
|
+
offset: z11.number().int().min(0).optional().describe("Number of items to skip (default 0)")
|
|
965
985
|
}
|
|
966
986
|
}, async ({
|
|
967
987
|
query,
|
|
@@ -1008,7 +1028,7 @@ function registerGetRoadmap(server) {
|
|
|
1008
1028
|
server.registerTool("get_roadmap", {
|
|
1009
1029
|
description: "Get full details of a roadmap item including PRD, wireframes, brainstorm media, linked features, epics, and stories.",
|
|
1010
1030
|
inputSchema: {
|
|
1011
|
-
id:
|
|
1031
|
+
id: z11.string().describe("The UUID of the roadmap item")
|
|
1012
1032
|
}
|
|
1013
1033
|
}, async ({ id }) => {
|
|
1014
1034
|
const client2 = getApiClient();
|
|
@@ -1062,7 +1082,7 @@ function registerSearchFeatures(server) {
|
|
|
1062
1082
|
server.registerTool("search_features", {
|
|
1063
1083
|
description: "Search for features and feature areas by name. Returns a list of matching features with basic info.",
|
|
1064
1084
|
inputSchema: {
|
|
1065
|
-
query:
|
|
1085
|
+
query: z11.string().optional().describe("Search query to match against name"),
|
|
1066
1086
|
type: featureTypeSchema.optional().describe("Filter by type (feature or area)")
|
|
1067
1087
|
}
|
|
1068
1088
|
}, async ({ query, type }) => {
|
|
@@ -1094,7 +1114,7 @@ function registerGetFeature(server) {
|
|
|
1094
1114
|
server.registerTool("get_feature", {
|
|
1095
1115
|
description: "Get full details of a feature including outcomes, child features, and linked roadmap items.",
|
|
1096
1116
|
inputSchema: {
|
|
1097
|
-
id:
|
|
1117
|
+
id: z11.string().describe("The UUID of the feature")
|
|
1098
1118
|
}
|
|
1099
1119
|
}, async ({ id }) => {
|
|
1100
1120
|
const client2 = getApiClient();
|
|
@@ -1133,7 +1153,7 @@ function registerSearchIdeas(server) {
|
|
|
1133
1153
|
server.registerTool("search_ideas", {
|
|
1134
1154
|
description: "Search for ideas by title or status. Returns a list of matching ideas with basic info.",
|
|
1135
1155
|
inputSchema: {
|
|
1136
|
-
query:
|
|
1156
|
+
query: z11.string().optional().describe("Search query to match against title or description"),
|
|
1137
1157
|
status: ideaStatusSchema.optional().describe("Filter by status")
|
|
1138
1158
|
}
|
|
1139
1159
|
}, async ({ query, status }) => {
|
|
@@ -1233,9 +1253,9 @@ function registerCaptureIdea(server) {
|
|
|
1233
1253
|
server.registerTool("capture_idea", {
|
|
1234
1254
|
description: "Quickly capture a new idea. Ideas are suggestions that can later be reviewed and potentially converted to roadmap items.",
|
|
1235
1255
|
inputSchema: {
|
|
1236
|
-
title:
|
|
1237
|
-
description:
|
|
1238
|
-
source:
|
|
1256
|
+
title: z11.string().describe("Title of the idea"),
|
|
1257
|
+
description: z11.string().optional().describe("Detailed description of the idea"),
|
|
1258
|
+
source: z11.string().optional().describe('Source of the idea (defaults to "claude-code")')
|
|
1239
1259
|
}
|
|
1240
1260
|
}, async ({
|
|
1241
1261
|
title,
|
|
@@ -1272,7 +1292,7 @@ function registerCreateRoadmapItem(server) {
|
|
|
1272
1292
|
server.registerTool("create_roadmap_item", {
|
|
1273
1293
|
description: "Create a new roadmap item. Use this to add planned work to the roadmap.",
|
|
1274
1294
|
inputSchema: {
|
|
1275
|
-
title:
|
|
1295
|
+
title: z11.string().describe("Title of the roadmap item"),
|
|
1276
1296
|
status: roadmapStatusSchema.optional().describe('Status (defaults to "not_started")'),
|
|
1277
1297
|
horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")')
|
|
1278
1298
|
}
|
|
@@ -1305,23 +1325,23 @@ function registerCreateRoadmapItem(server) {
|
|
|
1305
1325
|
};
|
|
1306
1326
|
});
|
|
1307
1327
|
}
|
|
1308
|
-
var effortSizeSchema =
|
|
1328
|
+
var effortSizeSchema = z11.enum(["xs", "s", "m", "l", "xl"]);
|
|
1309
1329
|
function registerUpdateRoadmapItem(server) {
|
|
1310
1330
|
server.registerTool("update_roadmap_item", {
|
|
1311
1331
|
description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, or brainstorm notes.",
|
|
1312
1332
|
inputSchema: {
|
|
1313
|
-
id:
|
|
1314
|
-
title:
|
|
1333
|
+
id: z11.string().describe("The UUID of the roadmap item to update"),
|
|
1334
|
+
title: z11.string().optional().describe("New title"),
|
|
1315
1335
|
status: roadmapStatusSchema.optional().describe("New status"),
|
|
1316
1336
|
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
1317
|
-
value:
|
|
1337
|
+
value: z11.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
|
|
1318
1338
|
effort: effortSizeSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
|
|
1319
|
-
order:
|
|
1320
|
-
designDescription:
|
|
1321
|
-
planDescription:
|
|
1322
|
-
buildDescription:
|
|
1323
|
-
releaseDescription:
|
|
1324
|
-
prompt:
|
|
1339
|
+
order: z11.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
|
|
1340
|
+
designDescription: z11.string().nullable().optional().describe("Description for the Design phase"),
|
|
1341
|
+
planDescription: z11.string().nullable().optional().describe("Description for the Planning phase"),
|
|
1342
|
+
buildDescription: z11.string().nullable().optional().describe("Description for the Build phase"),
|
|
1343
|
+
releaseDescription: z11.string().nullable().optional().describe("Description for the Release phase"),
|
|
1344
|
+
prompt: z11.string().nullable().optional().describe("Build prompt for the roadmap item")
|
|
1325
1345
|
}
|
|
1326
1346
|
}, async ({
|
|
1327
1347
|
id,
|
|
@@ -1403,12 +1423,12 @@ function registerAddFeature(server) {
|
|
|
1403
1423
|
server.registerTool("add_feature", {
|
|
1404
1424
|
description: "Create a new feature with optional outcomes. Features represent capabilities or functionality areas.",
|
|
1405
1425
|
inputSchema: {
|
|
1406
|
-
name:
|
|
1407
|
-
description:
|
|
1426
|
+
name: z11.string().describe("Name of the feature"),
|
|
1427
|
+
description: z11.string().optional().describe("Description of the feature"),
|
|
1408
1428
|
type: featureTypeSchema.optional().describe('Type - "feature" for specific functionality, "area" for grouping (defaults to "feature")'),
|
|
1409
|
-
parentId:
|
|
1410
|
-
outcomes:
|
|
1411
|
-
linkToRoadmapId:
|
|
1429
|
+
parentId: z11.string().optional().describe("UUID of parent feature/area to nest under"),
|
|
1430
|
+
outcomes: z11.array(z11.string()).optional().describe("List of expected outcomes for this feature"),
|
|
1431
|
+
linkToRoadmapId: z11.string().optional().describe("UUID of roadmap item to link this feature to")
|
|
1412
1432
|
}
|
|
1413
1433
|
}, async ({
|
|
1414
1434
|
name,
|
|
@@ -1455,10 +1475,10 @@ function registerSavePrd(server) {
|
|
|
1455
1475
|
server.registerTool("save_prd", {
|
|
1456
1476
|
description: "Save or update the PRD (Product Requirements Document) content for a roadmap item. Content should be markdown.",
|
|
1457
1477
|
inputSchema: {
|
|
1458
|
-
roadmapId:
|
|
1459
|
-
what:
|
|
1460
|
-
why:
|
|
1461
|
-
outcomes:
|
|
1478
|
+
roadmapId: z11.string().describe("The UUID of the roadmap item"),
|
|
1479
|
+
what: z11.string().nullable().describe("What is being built - the feature description"),
|
|
1480
|
+
why: z11.string().nullable().describe("Why this is being built - the business justification"),
|
|
1481
|
+
outcomes: z11.array(z11.string()).optional().describe("List of expected outcomes/success criteria")
|
|
1462
1482
|
}
|
|
1463
1483
|
}, async ({
|
|
1464
1484
|
roadmapId,
|
|
@@ -1496,8 +1516,8 @@ function registerUpdateBrainstormNotes(server) {
|
|
|
1496
1516
|
server.registerTool("update_brainstorm_notes", {
|
|
1497
1517
|
description: "Update the brainstorm notes for a roadmap item. Use this to capture ideas, questions, and research notes.",
|
|
1498
1518
|
inputSchema: {
|
|
1499
|
-
roadmapId:
|
|
1500
|
-
notes:
|
|
1519
|
+
roadmapId: z11.string().describe("The UUID of the roadmap item"),
|
|
1520
|
+
notes: z11.string().describe("The brainstorm notes content")
|
|
1501
1521
|
}
|
|
1502
1522
|
}, async ({ roadmapId, notes }) => {
|
|
1503
1523
|
const client2 = getApiClient();
|
|
@@ -1526,7 +1546,7 @@ function registerDeleteRoadmapItem(server) {
|
|
|
1526
1546
|
server.registerTool("delete_roadmap_item", {
|
|
1527
1547
|
description: "Delete a roadmap item. This is a soft delete - the item can potentially be recovered.",
|
|
1528
1548
|
inputSchema: {
|
|
1529
|
-
id:
|
|
1549
|
+
id: z11.string().describe("The UUID of the roadmap item to delete")
|
|
1530
1550
|
}
|
|
1531
1551
|
}, async ({ id }) => {
|
|
1532
1552
|
const client2 = getApiClient();
|
|
@@ -1548,9 +1568,9 @@ function registerReorderRoadmaps(server) {
|
|
|
1548
1568
|
server.registerTool("reorder_roadmaps", {
|
|
1549
1569
|
description: "Bulk reorder roadmap items by setting their order values. Use this to prioritize and organize the roadmap. Lower order values appear first.",
|
|
1550
1570
|
inputSchema: {
|
|
1551
|
-
items:
|
|
1552
|
-
id:
|
|
1553
|
-
order:
|
|
1571
|
+
items: z11.array(z11.object({
|
|
1572
|
+
id: z11.string().describe("The UUID of the roadmap item"),
|
|
1573
|
+
order: z11.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
|
|
1554
1574
|
})).describe("Array of roadmap items with their new order values")
|
|
1555
1575
|
}
|
|
1556
1576
|
}, async ({ items }) => {
|
|
@@ -1574,10 +1594,10 @@ function registerUpdateFeature(server) {
|
|
|
1574
1594
|
server.registerTool("update_feature", {
|
|
1575
1595
|
description: "Update an existing feature. Can update name, type, or parent.",
|
|
1576
1596
|
inputSchema: {
|
|
1577
|
-
id:
|
|
1578
|
-
name:
|
|
1597
|
+
id: z11.string().describe("The UUID of the feature to update"),
|
|
1598
|
+
name: z11.string().optional().describe("New name for the feature"),
|
|
1579
1599
|
type: featureTypeSchema.optional().describe('New type - "feature" or "area"'),
|
|
1580
|
-
parentId:
|
|
1600
|
+
parentId: z11.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
|
|
1581
1601
|
}
|
|
1582
1602
|
}, async ({
|
|
1583
1603
|
id,
|
|
@@ -1616,7 +1636,7 @@ function registerDeleteFeature(server) {
|
|
|
1616
1636
|
server.registerTool("delete_feature", {
|
|
1617
1637
|
description: "Delete a feature. This is a soft delete that also deletes all child features.",
|
|
1618
1638
|
inputSchema: {
|
|
1619
|
-
id:
|
|
1639
|
+
id: z11.string().describe("The UUID of the feature to delete")
|
|
1620
1640
|
}
|
|
1621
1641
|
}, async ({ id }) => {
|
|
1622
1642
|
const client2 = getApiClient();
|
|
@@ -1638,7 +1658,7 @@ function registerGetIdea(server) {
|
|
|
1638
1658
|
server.registerTool("get_idea", {
|
|
1639
1659
|
description: "Get full details of a single idea by ID.",
|
|
1640
1660
|
inputSchema: {
|
|
1641
|
-
id:
|
|
1661
|
+
id: z11.string().describe("The UUID of the idea")
|
|
1642
1662
|
}
|
|
1643
1663
|
}, async ({ id }) => {
|
|
1644
1664
|
const client2 = getApiClient();
|
|
@@ -1667,12 +1687,12 @@ function registerUpdateIdea(server) {
|
|
|
1667
1687
|
server.registerTool("update_idea", {
|
|
1668
1688
|
description: "Update an existing idea. Can update title, description, status, value, or effort.",
|
|
1669
1689
|
inputSchema: {
|
|
1670
|
-
id:
|
|
1671
|
-
title:
|
|
1672
|
-
description:
|
|
1690
|
+
id: z11.string().describe("The UUID of the idea to update"),
|
|
1691
|
+
title: z11.string().optional().describe("New title"),
|
|
1692
|
+
description: z11.string().nullable().optional().describe("New description"),
|
|
1673
1693
|
status: ideaStatusSchema.optional().describe("New status"),
|
|
1674
|
-
value:
|
|
1675
|
-
effort:
|
|
1694
|
+
value: z11.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
|
|
1695
|
+
effort: z11.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated effort")
|
|
1676
1696
|
}
|
|
1677
1697
|
}, async ({
|
|
1678
1698
|
id,
|
|
@@ -1719,7 +1739,7 @@ function registerDeleteIdea(server) {
|
|
|
1719
1739
|
server.registerTool("delete_idea", {
|
|
1720
1740
|
description: "Delete an idea. This is a soft delete.",
|
|
1721
1741
|
inputSchema: {
|
|
1722
|
-
id:
|
|
1742
|
+
id: z11.string().describe("The UUID of the idea to delete")
|
|
1723
1743
|
}
|
|
1724
1744
|
}, async ({ id }) => {
|
|
1725
1745
|
const client2 = getApiClient();
|
|
@@ -1758,8 +1778,8 @@ function registerUpdateStrategy(server) {
|
|
|
1758
1778
|
server.registerTool("update_strategy", {
|
|
1759
1779
|
description: "Update the organization strategy. Can update vision, mission, or both. Use this to set or refine the high-level direction.",
|
|
1760
1780
|
inputSchema: {
|
|
1761
|
-
vision:
|
|
1762
|
-
mission:
|
|
1781
|
+
vision: z11.string().nullable().optional().describe("The vision statement - where the product is headed"),
|
|
1782
|
+
mission: z11.string().nullable().optional().describe("The mission statement - why the product exists")
|
|
1763
1783
|
}
|
|
1764
1784
|
}, async ({ vision, mission }) => {
|
|
1765
1785
|
const client2 = getApiClient();
|
|
@@ -1807,8 +1827,8 @@ function registerCreateScenario(server) {
|
|
|
1807
1827
|
server.registerTool("create_scenario", {
|
|
1808
1828
|
description: "Create a new user scenario. Scenarios describe user workflows and how they accomplish goals.",
|
|
1809
1829
|
inputSchema: {
|
|
1810
|
-
title:
|
|
1811
|
-
description:
|
|
1830
|
+
title: z11.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
|
|
1831
|
+
description: z11.string().nullable().optional().describe("Detailed description of the scenario workflow")
|
|
1812
1832
|
}
|
|
1813
1833
|
}, async ({ title, description }) => {
|
|
1814
1834
|
const client2 = getApiClient();
|
|
@@ -1837,9 +1857,9 @@ function registerUpdateScenario(server) {
|
|
|
1837
1857
|
server.registerTool("update_scenario", {
|
|
1838
1858
|
description: "Update an existing scenario.",
|
|
1839
1859
|
inputSchema: {
|
|
1840
|
-
id:
|
|
1841
|
-
title:
|
|
1842
|
-
description:
|
|
1860
|
+
id: z11.string().describe("The UUID of the scenario to update"),
|
|
1861
|
+
title: z11.string().optional().describe("New title"),
|
|
1862
|
+
description: z11.string().nullable().optional().describe("New description")
|
|
1843
1863
|
}
|
|
1844
1864
|
}, async ({
|
|
1845
1865
|
id,
|
|
@@ -1874,7 +1894,7 @@ function registerDeleteScenario(server) {
|
|
|
1874
1894
|
server.registerTool("delete_scenario", {
|
|
1875
1895
|
description: "Delete a scenario. This is a soft delete.",
|
|
1876
1896
|
inputSchema: {
|
|
1877
|
-
id:
|
|
1897
|
+
id: z11.string().describe("The UUID of the scenario to delete")
|
|
1878
1898
|
}
|
|
1879
1899
|
}, async ({ id }) => {
|
|
1880
1900
|
const client2 = getApiClient();
|
|
@@ -1889,7 +1909,7 @@ function registerDeleteScenario(server) {
|
|
|
1889
1909
|
};
|
|
1890
1910
|
});
|
|
1891
1911
|
}
|
|
1892
|
-
var productTypeSchema2 =
|
|
1912
|
+
var productTypeSchema2 = z11.enum([
|
|
1893
1913
|
"brand",
|
|
1894
1914
|
"product",
|
|
1895
1915
|
"app",
|
|
@@ -1902,8 +1922,8 @@ function registerCreateProduct(server) {
|
|
|
1902
1922
|
description: "Create a new product, app, brand, or service. Products represent what the organization builds and offers.",
|
|
1903
1923
|
inputSchema: {
|
|
1904
1924
|
type: productTypeSchema2.describe("Type of product"),
|
|
1905
|
-
name:
|
|
1906
|
-
parentId:
|
|
1925
|
+
name: z11.string().describe("Name of the product"),
|
|
1926
|
+
parentId: z11.string().nullable().optional().describe("UUID of parent product to nest under")
|
|
1907
1927
|
}
|
|
1908
1928
|
}, async ({
|
|
1909
1929
|
type,
|
|
@@ -1938,9 +1958,9 @@ function registerUpdateProduct(server) {
|
|
|
1938
1958
|
server.registerTool("update_product", {
|
|
1939
1959
|
description: "Update an existing product.",
|
|
1940
1960
|
inputSchema: {
|
|
1941
|
-
id:
|
|
1942
|
-
name:
|
|
1943
|
-
parentId:
|
|
1961
|
+
id: z11.string().describe("The UUID of the product to update"),
|
|
1962
|
+
name: z11.string().optional().describe("New name"),
|
|
1963
|
+
parentId: z11.string().nullable().optional().describe("New parent product UUID, or null to move to root")
|
|
1944
1964
|
}
|
|
1945
1965
|
}, async ({ id, name, parentId }) => {
|
|
1946
1966
|
const client2 = getApiClient();
|
|
@@ -1972,7 +1992,7 @@ function registerDeleteProduct(server) {
|
|
|
1972
1992
|
server.registerTool("delete_product", {
|
|
1973
1993
|
description: "Delete a product. This is a soft delete that also deletes all child products.",
|
|
1974
1994
|
inputSchema: {
|
|
1975
|
-
id:
|
|
1995
|
+
id: z11.string().describe("The UUID of the product to delete")
|
|
1976
1996
|
}
|
|
1977
1997
|
}, async ({ id }) => {
|
|
1978
1998
|
const client2 = getApiClient();
|
|
@@ -1995,7 +2015,7 @@ function registerGetProduct(server) {
|
|
|
1995
2015
|
server.registerTool("get_product", {
|
|
1996
2016
|
description: "Get full details of a product by ID, including its documentation (design system and ADRs).",
|
|
1997
2017
|
inputSchema: {
|
|
1998
|
-
id:
|
|
2018
|
+
id: z11.string().describe("The UUID of the product")
|
|
1999
2019
|
}
|
|
2000
2020
|
}, async ({ id }) => {
|
|
2001
2021
|
const client2 = getApiClient();
|
|
@@ -2032,7 +2052,7 @@ function registerSearchProducts(server) {
|
|
|
2032
2052
|
server.registerTool("search_products", {
|
|
2033
2053
|
description: "Search for products by name. Returns a list of matching products with basic info.",
|
|
2034
2054
|
inputSchema: {
|
|
2035
|
-
query:
|
|
2055
|
+
query: z11.string().optional().describe("Search query to match against product name"),
|
|
2036
2056
|
type: productTypeSchema2.optional().describe("Filter by product type")
|
|
2037
2057
|
}
|
|
2038
2058
|
}, async ({ query, type }) => {
|
|
@@ -2067,7 +2087,7 @@ function registerGetProductDocumentation(server) {
|
|
|
2067
2087
|
server.registerTool("get_product_documentation", {
|
|
2068
2088
|
description: "Get the documentation (design system and ADRs) for a product. Use this to read existing documentation before updating.",
|
|
2069
2089
|
inputSchema: {
|
|
2070
|
-
productId:
|
|
2090
|
+
productId: z11.string().describe("The UUID of the product")
|
|
2071
2091
|
}
|
|
2072
2092
|
}, async ({ productId }) => {
|
|
2073
2093
|
const client2 = getApiClient();
|
|
@@ -2095,9 +2115,9 @@ function registerUpdateProductDocumentation(server) {
|
|
|
2095
2115
|
server.registerTool("update_product_documentation", {
|
|
2096
2116
|
description: "Update the documentation for a product. Use this to keep design system and ADRs up to date. Creates documentation if it does not exist.",
|
|
2097
2117
|
inputSchema: {
|
|
2098
|
-
productId:
|
|
2099
|
-
designSystem:
|
|
2100
|
-
adrs:
|
|
2118
|
+
productId: z11.string().describe("The UUID of the product"),
|
|
2119
|
+
designSystem: z11.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
|
|
2120
|
+
adrs: z11.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
|
|
2101
2121
|
}
|
|
2102
2122
|
}, async ({
|
|
2103
2123
|
productId,
|
|
@@ -2130,16 +2150,16 @@ function registerUpdateProductDocumentation(server) {
|
|
|
2130
2150
|
};
|
|
2131
2151
|
});
|
|
2132
2152
|
}
|
|
2133
|
-
var audienceTypeSchema2 =
|
|
2153
|
+
var audienceTypeSchema2 = z11.enum(["stakeholder", "user_persona"]);
|
|
2134
2154
|
function registerCreateAudience(server) {
|
|
2135
2155
|
server.registerTool("create_audience", {
|
|
2136
2156
|
description: "Create a new audience member - either a stakeholder or user persona. Audiences represent who the product serves.",
|
|
2137
2157
|
inputSchema: {
|
|
2138
2158
|
type: audienceTypeSchema2.describe("Type of audience - stakeholder or user_persona"),
|
|
2139
|
-
role:
|
|
2140
|
-
likes:
|
|
2141
|
-
dislikes:
|
|
2142
|
-
priorities:
|
|
2159
|
+
role: z11.string().describe('Role or title of the audience (e.g., "Product Manager", "End User")'),
|
|
2160
|
+
likes: z11.string().nullable().optional().describe("What this audience likes or values"),
|
|
2161
|
+
dislikes: z11.string().nullable().optional().describe("What this audience dislikes or avoids"),
|
|
2162
|
+
priorities: z11.string().nullable().optional().describe("Key priorities for this audience")
|
|
2143
2163
|
}
|
|
2144
2164
|
}, async ({
|
|
2145
2165
|
type,
|
|
@@ -2180,12 +2200,12 @@ function registerUpdateAudience(server) {
|
|
|
2180
2200
|
server.registerTool("update_audience", {
|
|
2181
2201
|
description: "Update an existing audience member.",
|
|
2182
2202
|
inputSchema: {
|
|
2183
|
-
id:
|
|
2203
|
+
id: z11.string().describe("The UUID of the audience to update"),
|
|
2184
2204
|
type: audienceTypeSchema2.optional().describe("New type"),
|
|
2185
|
-
role:
|
|
2186
|
-
likes:
|
|
2187
|
-
dislikes:
|
|
2188
|
-
priorities:
|
|
2205
|
+
role: z11.string().optional().describe("New role"),
|
|
2206
|
+
likes: z11.string().nullable().optional().describe("New likes"),
|
|
2207
|
+
dislikes: z11.string().nullable().optional().describe("New dislikes"),
|
|
2208
|
+
priorities: z11.string().nullable().optional().describe("New priorities")
|
|
2189
2209
|
}
|
|
2190
2210
|
}, async ({
|
|
2191
2211
|
id,
|
|
@@ -2232,7 +2252,7 @@ function registerDeleteAudience(server) {
|
|
|
2232
2252
|
server.registerTool("delete_audience", {
|
|
2233
2253
|
description: "Delete an audience member. This is a soft delete.",
|
|
2234
2254
|
inputSchema: {
|
|
2235
|
-
id:
|
|
2255
|
+
id: z11.string().describe("The UUID of the audience to delete")
|
|
2236
2256
|
}
|
|
2237
2257
|
}, async ({ id }) => {
|
|
2238
2258
|
const client2 = getApiClient();
|
|
@@ -2274,9 +2294,9 @@ function registerGetHistory(server) {
|
|
|
2274
2294
|
server.registerTool("get_history", {
|
|
2275
2295
|
description: "Get raw history events for a date range. Returns full event details including payloads. " + "Use entityType or entityId filters to narrow results. For status reports, prefer " + "get_history_summary to avoid context overflow.",
|
|
2276
2296
|
inputSchema: {
|
|
2277
|
-
startDate:
|
|
2278
|
-
endDate:
|
|
2279
|
-
entityType:
|
|
2297
|
+
startDate: z11.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
2298
|
+
endDate: z11.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
|
|
2299
|
+
entityType: z11.enum([
|
|
2280
2300
|
"roadmap",
|
|
2281
2301
|
"feature",
|
|
2282
2302
|
"idea",
|
|
@@ -2308,8 +2328,8 @@ function registerGetHistorySummary(server) {
|
|
|
2308
2328
|
server.registerTool("get_history_summary", {
|
|
2309
2329
|
description: "Get a summary of history events for a date range. Returns counts by entity type, " + "list of changed entities with titles, and total event count. Use this for status " + "report generation instead of get_history to avoid context overflow.",
|
|
2310
2330
|
inputSchema: {
|
|
2311
|
-
startDate:
|
|
2312
|
-
endDate:
|
|
2331
|
+
startDate: z11.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
2332
|
+
endDate: z11.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
|
|
2313
2333
|
}
|
|
2314
2334
|
}, async ({ startDate, endDate }) => {
|
|
2315
2335
|
const client2 = getApiClient();
|
|
@@ -2328,23 +2348,29 @@ function registerCreateStatusUpdate(server) {
|
|
|
2328
2348
|
server.registerTool("create_status_update", {
|
|
2329
2349
|
description: "Create a new status report. Use this after generating the report content from history events.",
|
|
2330
2350
|
inputSchema: {
|
|
2331
|
-
startDate:
|
|
2332
|
-
endDate:
|
|
2333
|
-
content:
|
|
2334
|
-
title:
|
|
2351
|
+
startDate: z11.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
|
|
2352
|
+
endDate: z11.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
|
|
2353
|
+
content: z11.string().describe("The markdown content of the status report"),
|
|
2354
|
+
title: z11.string().optional().describe("Optional title for the report"),
|
|
2355
|
+
items: z11.array(z11.object({
|
|
2356
|
+
roadmapItemId: z11.string().describe("UUID of the roadmap item"),
|
|
2357
|
+
status: z11.string().describe("Status of the item at report creation time")
|
|
2358
|
+
})).optional().describe("Roadmap items to include in the report snapshot")
|
|
2335
2359
|
}
|
|
2336
2360
|
}, async ({
|
|
2337
2361
|
startDate,
|
|
2338
2362
|
endDate,
|
|
2339
2363
|
content,
|
|
2340
|
-
title
|
|
2364
|
+
title,
|
|
2365
|
+
items
|
|
2341
2366
|
}) => {
|
|
2342
2367
|
const client2 = getApiClient();
|
|
2343
2368
|
const update = await client2.createStatusUpdate({
|
|
2344
2369
|
startDate,
|
|
2345
2370
|
endDate,
|
|
2346
2371
|
content,
|
|
2347
|
-
title
|
|
2372
|
+
title,
|
|
2373
|
+
items
|
|
2348
2374
|
});
|
|
2349
2375
|
return {
|
|
2350
2376
|
content: [
|
|
@@ -2369,18 +2395,18 @@ function registerSaveStories(server) {
|
|
|
2369
2395
|
server.registerTool("save_stories", {
|
|
2370
2396
|
description: "Save epics and stories for a roadmap item. Replaces all existing epics/stories. Use this to set the complete list of epics and stories for a roadmap.",
|
|
2371
2397
|
inputSchema: {
|
|
2372
|
-
roadmapId:
|
|
2373
|
-
epics:
|
|
2374
|
-
title:
|
|
2375
|
-
description:
|
|
2376
|
-
stories:
|
|
2377
|
-
title:
|
|
2378
|
-
description:
|
|
2398
|
+
roadmapId: z11.string().uuid().describe("The UUID of the roadmap item"),
|
|
2399
|
+
epics: z11.array(z11.object({
|
|
2400
|
+
title: z11.string().min(1).describe("Title of the epic"),
|
|
2401
|
+
description: z11.string().nullable().optional().describe("Description of the epic"),
|
|
2402
|
+
stories: z11.array(z11.object({
|
|
2403
|
+
title: z11.string().min(1).describe("Title of the story"),
|
|
2404
|
+
description: z11.string().nullable().optional().describe("Description of the story")
|
|
2379
2405
|
})).optional().describe("Stories within this epic")
|
|
2380
2406
|
})).optional().describe("List of epics with their nested stories"),
|
|
2381
|
-
stories:
|
|
2382
|
-
title:
|
|
2383
|
-
description:
|
|
2407
|
+
stories: z11.array(z11.object({
|
|
2408
|
+
title: z11.string().min(1).describe("Title of the story"),
|
|
2409
|
+
description: z11.string().nullable().optional().describe("Description of the story")
|
|
2384
2410
|
})).optional().describe("List of standalone stories (not part of any epic)")
|
|
2385
2411
|
}
|
|
2386
2412
|
}, async ({
|
|
@@ -2412,10 +2438,10 @@ function registerUploadWireframe(server) {
|
|
|
2412
2438
|
server.registerTool("upload_wireframe", {
|
|
2413
2439
|
description: "Upload an image to a roadmap item's wireframes. Returns a curl command to execute for the upload, then creates the wireframe record. After running the curl command, the wireframe will be visible in the web app.",
|
|
2414
2440
|
inputSchema: {
|
|
2415
|
-
roadmapId:
|
|
2416
|
-
filePath:
|
|
2417
|
-
description:
|
|
2418
|
-
outcomeIds:
|
|
2441
|
+
roadmapId: z11.string().describe("The UUID of the roadmap item"),
|
|
2442
|
+
filePath: z11.string().describe("Absolute path to the image file on disk"),
|
|
2443
|
+
description: z11.string().optional().describe("Optional description of the wireframe"),
|
|
2444
|
+
outcomeIds: z11.array(z11.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
|
|
2419
2445
|
}
|
|
2420
2446
|
}, async ({
|
|
2421
2447
|
roadmapId,
|
|
@@ -2469,9 +2495,9 @@ function registerUpdateWireframe(server) {
|
|
|
2469
2495
|
server.registerTool("update_wireframe", {
|
|
2470
2496
|
description: "Update a wireframe's description or outcome tags.",
|
|
2471
2497
|
inputSchema: {
|
|
2472
|
-
id:
|
|
2473
|
-
description:
|
|
2474
|
-
outcomeIds:
|
|
2498
|
+
id: z11.string().describe("The UUID of the wireframe"),
|
|
2499
|
+
description: z11.string().nullable().optional().describe("New description for the wireframe"),
|
|
2500
|
+
outcomeIds: z11.array(z11.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
|
|
2475
2501
|
}
|
|
2476
2502
|
}, async ({
|
|
2477
2503
|
id,
|
|
@@ -2507,7 +2533,7 @@ function registerDeleteWireframe(server) {
|
|
|
2507
2533
|
server.registerTool("delete_wireframe", {
|
|
2508
2534
|
description: "Delete a wireframe (soft delete).",
|
|
2509
2535
|
inputSchema: {
|
|
2510
|
-
id:
|
|
2536
|
+
id: z11.string().describe("The UUID of the wireframe to delete")
|
|
2511
2537
|
}
|
|
2512
2538
|
}, async ({ id }) => {
|
|
2513
2539
|
const client2 = getApiClient();
|
|
@@ -2526,9 +2552,9 @@ function registerUploadBrainstormMedia(server) {
|
|
|
2526
2552
|
server.registerTool("upload_brainstorm_media", {
|
|
2527
2553
|
description: "Upload an image or video to a roadmap item's brainstorming section. Returns a curl command to execute for the upload.",
|
|
2528
2554
|
inputSchema: {
|
|
2529
|
-
roadmapId:
|
|
2530
|
-
filePath:
|
|
2531
|
-
description:
|
|
2555
|
+
roadmapId: z11.string().describe("The UUID of the roadmap item"),
|
|
2556
|
+
filePath: z11.string().describe("Absolute path to the image or video file on disk"),
|
|
2557
|
+
description: z11.string().optional().describe("Optional description of the media")
|
|
2532
2558
|
}
|
|
2533
2559
|
}, async ({
|
|
2534
2560
|
roadmapId,
|
|
@@ -2580,8 +2606,8 @@ function registerUpdateBrainstormMedia(server) {
|
|
|
2580
2606
|
server.registerTool("update_brainstorm_media", {
|
|
2581
2607
|
description: "Update a brainstorm media item's description.",
|
|
2582
2608
|
inputSchema: {
|
|
2583
|
-
id:
|
|
2584
|
-
description:
|
|
2609
|
+
id: z11.string().describe("The UUID of the brainstorm media"),
|
|
2610
|
+
description: z11.string().nullable().describe("New description for the media")
|
|
2585
2611
|
}
|
|
2586
2612
|
}, async ({ id, description }) => {
|
|
2587
2613
|
const client2 = getApiClient();
|
|
@@ -2605,7 +2631,7 @@ function registerDeleteBrainstormMedia(server) {
|
|
|
2605
2631
|
server.registerTool("delete_brainstorm_media", {
|
|
2606
2632
|
description: "Delete a brainstorm media item (soft delete).",
|
|
2607
2633
|
inputSchema: {
|
|
2608
|
-
id:
|
|
2634
|
+
id: z11.string().describe("The UUID of the brainstorm media to delete")
|
|
2609
2635
|
}
|
|
2610
2636
|
}, async ({ id }) => {
|
|
2611
2637
|
const client2 = getApiClient();
|
|
@@ -2624,9 +2650,9 @@ function registerUploadProductDesignMedia(server) {
|
|
|
2624
2650
|
server.registerTool("upload_product_design_media", {
|
|
2625
2651
|
description: "Upload an image or video to a product's design media section. Returns a curl command to execute for the upload.",
|
|
2626
2652
|
inputSchema: {
|
|
2627
|
-
productId:
|
|
2628
|
-
filePath:
|
|
2629
|
-
description:
|
|
2653
|
+
productId: z11.string().describe("The UUID of the product"),
|
|
2654
|
+
filePath: z11.string().describe("Absolute path to the image or video file on disk"),
|
|
2655
|
+
description: z11.string().optional().describe("Optional description of the media")
|
|
2630
2656
|
}
|
|
2631
2657
|
}, async ({
|
|
2632
2658
|
productId,
|
|
@@ -2679,9 +2705,9 @@ function registerUpdateProductDesignMedia(server) {
|
|
|
2679
2705
|
server.registerTool("update_product_design_media", {
|
|
2680
2706
|
description: "Update a product design media item's description.",
|
|
2681
2707
|
inputSchema: {
|
|
2682
|
-
productId:
|
|
2683
|
-
mediaId:
|
|
2684
|
-
description:
|
|
2708
|
+
productId: z11.string().describe("The UUID of the product"),
|
|
2709
|
+
mediaId: z11.string().describe("The UUID of the design media"),
|
|
2710
|
+
description: z11.string().nullable().describe("New description for the media")
|
|
2685
2711
|
}
|
|
2686
2712
|
}, async ({
|
|
2687
2713
|
productId,
|
|
@@ -2709,8 +2735,8 @@ function registerDeleteProductDesignMedia(server) {
|
|
|
2709
2735
|
server.registerTool("delete_product_design_media", {
|
|
2710
2736
|
description: "Delete a product design media item (soft delete).",
|
|
2711
2737
|
inputSchema: {
|
|
2712
|
-
productId:
|
|
2713
|
-
mediaId:
|
|
2738
|
+
productId: z11.string().describe("The UUID of the product"),
|
|
2739
|
+
mediaId: z11.string().describe("The UUID of the design media to delete")
|
|
2714
2740
|
}
|
|
2715
2741
|
}, async ({ productId, mediaId }) => {
|
|
2716
2742
|
const client2 = getApiClient();
|
|
@@ -2732,8 +2758,8 @@ function registerUploadDesignWalkthrough(server) {
|
|
|
2732
2758
|
server.registerTool("upload_design_walkthrough", {
|
|
2733
2759
|
description: "Upload a walkthrough video to a roadmap item's design phase. Returns a curl command to execute for the upload.",
|
|
2734
2760
|
inputSchema: {
|
|
2735
|
-
roadmapId:
|
|
2736
|
-
filePath:
|
|
2761
|
+
roadmapId: z11.string().describe("The UUID of the roadmap item"),
|
|
2762
|
+
filePath: z11.string().describe("Absolute path to the video file on disk")
|
|
2737
2763
|
}
|
|
2738
2764
|
}, async ({ roadmapId, filePath }) => {
|
|
2739
2765
|
const client2 = getApiClient();
|
|
@@ -2775,8 +2801,8 @@ function registerUploadReleaseWalkthrough(server) {
|
|
|
2775
2801
|
server.registerTool("upload_release_walkthrough", {
|
|
2776
2802
|
description: "Upload a walkthrough video to a roadmap item's release phase. Returns a curl command to execute for the upload.",
|
|
2777
2803
|
inputSchema: {
|
|
2778
|
-
roadmapId:
|
|
2779
|
-
filePath:
|
|
2804
|
+
roadmapId: z11.string().describe("The UUID of the roadmap item"),
|
|
2805
|
+
filePath: z11.string().describe("Absolute path to the video file on disk")
|
|
2780
2806
|
}
|
|
2781
2807
|
}, async ({ roadmapId, filePath }) => {
|
|
2782
2808
|
const client2 = getApiClient();
|