@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.
Files changed (2) hide show
  1. package/dist/index.js +153 -127
  2. 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/tools/index.ts
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: z10.string().optional().describe("Search query to match against title or description"),
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: z10.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
964
- offset: z10.number().int().min(0).optional().describe("Number of items to skip (default 0)")
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: z10.string().describe("The UUID of the roadmap item")
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: z10.string().optional().describe("Search query to match against name"),
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: z10.string().describe("The UUID of the feature")
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: z10.string().optional().describe("Search query to match against title or description"),
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: z10.string().describe("Title of the idea"),
1237
- description: z10.string().optional().describe("Detailed description of the idea"),
1238
- source: z10.string().optional().describe('Source of the idea (defaults to "claude-code")')
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: z10.string().describe("Title of the roadmap item"),
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 = z10.enum(["xs", "s", "m", "l", "xl"]);
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: z10.string().describe("The UUID of the roadmap item to update"),
1314
- title: z10.string().optional().describe("New 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: z10.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest 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: z10.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
1320
- designDescription: z10.string().nullable().optional().describe("Description for the Design phase"),
1321
- planDescription: z10.string().nullable().optional().describe("Description for the Planning phase"),
1322
- buildDescription: z10.string().nullable().optional().describe("Description for the Build phase"),
1323
- releaseDescription: z10.string().nullable().optional().describe("Description for the Release phase"),
1324
- prompt: z10.string().nullable().optional().describe("Build prompt for the roadmap item")
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: z10.string().describe("Name of the feature"),
1407
- description: z10.string().optional().describe("Description of the feature"),
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: z10.string().optional().describe("UUID of parent feature/area to nest under"),
1410
- outcomes: z10.array(z10.string()).optional().describe("List of expected outcomes for this feature"),
1411
- linkToRoadmapId: z10.string().optional().describe("UUID of roadmap item to link this feature to")
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: z10.string().describe("The UUID of the roadmap item"),
1459
- what: z10.string().nullable().describe("What is being built - the feature description"),
1460
- why: z10.string().nullable().describe("Why this is being built - the business justification"),
1461
- outcomes: z10.array(z10.string()).optional().describe("List of expected outcomes/success criteria")
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: z10.string().describe("The UUID of the roadmap item"),
1500
- notes: z10.string().describe("The brainstorm notes content")
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: z10.string().describe("The UUID of the roadmap item to delete")
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: z10.array(z10.object({
1552
- id: z10.string().describe("The UUID of the roadmap item"),
1553
- order: z10.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
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: z10.string().describe("The UUID of the feature to update"),
1578
- name: z10.string().optional().describe("New name for the feature"),
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: z10.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
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: z10.string().describe("The UUID of the feature to delete")
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: z10.string().describe("The UUID of the idea")
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: z10.string().describe("The UUID of the idea to update"),
1671
- title: z10.string().optional().describe("New title"),
1672
- description: z10.string().nullable().optional().describe("New 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: z10.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
1675
- effort: z10.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated 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: z10.string().describe("The UUID of the idea to delete")
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: z10.string().nullable().optional().describe("The vision statement - where the product is headed"),
1762
- mission: z10.string().nullable().optional().describe("The mission statement - why the product exists")
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: z10.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
1811
- description: z10.string().nullable().optional().describe("Detailed description of the scenario workflow")
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: z10.string().describe("The UUID of the scenario to update"),
1841
- title: z10.string().optional().describe("New title"),
1842
- description: z10.string().nullable().optional().describe("New 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: z10.string().describe("The UUID of the scenario to delete")
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 = z10.enum([
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: z10.string().describe("Name of the product"),
1906
- parentId: z10.string().nullable().optional().describe("UUID of parent product to nest under")
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: z10.string().describe("The UUID of the product to update"),
1942
- name: z10.string().optional().describe("New name"),
1943
- parentId: z10.string().nullable().optional().describe("New parent product UUID, or null to move to root")
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: z10.string().describe("The UUID of the product to delete")
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: z10.string().describe("The UUID of the product")
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: z10.string().optional().describe("Search query to match against product name"),
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: z10.string().describe("The UUID of the product")
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: z10.string().describe("The UUID of the product"),
2099
- designSystem: z10.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
2100
- adrs: z10.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
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 = z10.enum(["stakeholder", "user_persona"]);
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: z10.string().describe('Role or title of the audience (e.g., "Product Manager", "End User")'),
2140
- likes: z10.string().nullable().optional().describe("What this audience likes or values"),
2141
- dislikes: z10.string().nullable().optional().describe("What this audience dislikes or avoids"),
2142
- priorities: z10.string().nullable().optional().describe("Key priorities for this audience")
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: z10.string().describe("The UUID of the audience to update"),
2203
+ id: z11.string().describe("The UUID of the audience to update"),
2184
2204
  type: audienceTypeSchema2.optional().describe("New type"),
2185
- role: z10.string().optional().describe("New role"),
2186
- likes: z10.string().nullable().optional().describe("New likes"),
2187
- dislikes: z10.string().nullable().optional().describe("New dislikes"),
2188
- priorities: z10.string().nullable().optional().describe("New 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: z10.string().describe("The UUID of the audience to delete")
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: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2278
- endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
2279
- entityType: z10.enum([
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: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2312
- endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
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: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
2332
- endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
2333
- content: z10.string().describe("The markdown content of the status report"),
2334
- title: z10.string().optional().describe("Optional title for the report")
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: z10.string().uuid().describe("The UUID of the roadmap item"),
2373
- epics: z10.array(z10.object({
2374
- title: z10.string().min(1).describe("Title of the epic"),
2375
- description: z10.string().nullable().optional().describe("Description of the epic"),
2376
- stories: z10.array(z10.object({
2377
- title: z10.string().min(1).describe("Title of the story"),
2378
- description: z10.string().nullable().optional().describe("Description of the story")
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: z10.array(z10.object({
2382
- title: z10.string().min(1).describe("Title of the story"),
2383
- description: z10.string().nullable().optional().describe("Description of the story")
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: z10.string().describe("The UUID of the roadmap item"),
2416
- filePath: z10.string().describe("Absolute path to the image file on disk"),
2417
- description: z10.string().optional().describe("Optional description of the wireframe"),
2418
- outcomeIds: z10.array(z10.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
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: z10.string().describe("The UUID of the wireframe"),
2473
- description: z10.string().nullable().optional().describe("New description for the wireframe"),
2474
- outcomeIds: z10.array(z10.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
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: z10.string().describe("The UUID of the wireframe to delete")
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: z10.string().describe("The UUID of the roadmap item"),
2530
- filePath: z10.string().describe("Absolute path to the image or video file on disk"),
2531
- description: z10.string().optional().describe("Optional description of the media")
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: z10.string().describe("The UUID of the brainstorm media"),
2584
- description: z10.string().nullable().describe("New description for the media")
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: z10.string().describe("The UUID of the brainstorm media to delete")
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: z10.string().describe("The UUID of the product"),
2628
- filePath: z10.string().describe("Absolute path to the image or video file on disk"),
2629
- description: z10.string().optional().describe("Optional description of the media")
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: z10.string().describe("The UUID of the product"),
2683
- mediaId: z10.string().describe("The UUID of the design media"),
2684
- description: z10.string().nullable().describe("New description for the media")
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: z10.string().describe("The UUID of the product"),
2713
- mediaId: z10.string().describe("The UUID of the design media to delete")
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: z10.string().describe("The UUID of the roadmap item"),
2736
- filePath: z10.string().describe("Absolute path to the video file on disk")
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: z10.string().describe("The UUID of the roadmap item"),
2779
- filePath: z10.string().describe("Absolute path to the video file on disk")
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourroadmaps/mcp",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
5
5
  "type": "module",
6
6
  "bin": {