@ourroadmaps/mcp 0.7.2 → 0.7.4
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 +70 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -487,6 +487,13 @@ class ApiClient {
|
|
|
487
487
|
method: "DELETE"
|
|
488
488
|
});
|
|
489
489
|
}
|
|
490
|
+
async reorderRoadmaps(items) {
|
|
491
|
+
const response = await this.request("/v1/roadmaps/reorder", {
|
|
492
|
+
method: "POST",
|
|
493
|
+
body: JSON.stringify({ items })
|
|
494
|
+
});
|
|
495
|
+
return response;
|
|
496
|
+
}
|
|
490
497
|
async savePrd(roadmapId, data) {
|
|
491
498
|
const response = await this.request(`/v1/roadmaps/${roadmapId}/prd`, {
|
|
492
499
|
method: "POST",
|
|
@@ -708,6 +715,7 @@ function registerAllTools(server) {
|
|
|
708
715
|
registerCreateRoadmapItem(server);
|
|
709
716
|
registerUpdateRoadmapItem(server);
|
|
710
717
|
registerDeleteRoadmapItem(server);
|
|
718
|
+
registerReorderRoadmaps(server);
|
|
711
719
|
registerAddFeature(server);
|
|
712
720
|
registerUpdateFeature(server);
|
|
713
721
|
registerDeleteFeature(server);
|
|
@@ -768,7 +776,10 @@ function registerSearchRoadmaps(server) {
|
|
|
768
776
|
id: r.id,
|
|
769
777
|
title: r.title,
|
|
770
778
|
status: r.status,
|
|
771
|
-
horizon: r.horizon
|
|
779
|
+
horizon: r.horizon,
|
|
780
|
+
value: r.value,
|
|
781
|
+
effort: r.effort,
|
|
782
|
+
order: r.order
|
|
772
783
|
})), null, 2)
|
|
773
784
|
}
|
|
774
785
|
]
|
|
@@ -793,6 +804,9 @@ function registerGetRoadmap(server) {
|
|
|
793
804
|
title: roadmap2.title,
|
|
794
805
|
status: roadmap2.status,
|
|
795
806
|
horizon: roadmap2.horizon,
|
|
807
|
+
value: roadmap2.value,
|
|
808
|
+
effort: roadmap2.effort,
|
|
809
|
+
order: roadmap2.order,
|
|
796
810
|
prd: roadmap2.prd,
|
|
797
811
|
brainstormNotes: roadmap2.brainstormNotes,
|
|
798
812
|
wireframes: roadmap2.wireframes?.map((w) => ({
|
|
@@ -932,17 +946,19 @@ function registerGetContext(server) {
|
|
|
932
946
|
- Products: What the organization builds (brands, products, apps, services) with hierarchy
|
|
933
947
|
- Audiences: Who the product serves (stakeholders and user personas) with their preferences
|
|
934
948
|
- Scenarios: User workflows and how they accomplish goals
|
|
949
|
+
- Features: Capabilities and functionality areas organized hierarchically
|
|
935
950
|
- Roadmap Summary: Count of items by status and horizon for planning overview
|
|
936
951
|
|
|
937
952
|
Use this as your FIRST call when starting work on a roadmap to understand the full context.`,
|
|
938
953
|
inputSchema: {}
|
|
939
954
|
}, async () => {
|
|
940
955
|
const client2 = getApiClient();
|
|
941
|
-
const [strategy, products, audiences, scenarios, roadmaps] = await Promise.all([
|
|
956
|
+
const [strategy, products, audiences, scenarios, features, roadmaps] = await Promise.all([
|
|
942
957
|
client2.getStrategy(),
|
|
943
958
|
client2.listProducts(),
|
|
944
959
|
client2.listAudiences(),
|
|
945
960
|
client2.listScenarios(),
|
|
961
|
+
client2.listFeatures(),
|
|
946
962
|
client2.listRoadmaps()
|
|
947
963
|
]);
|
|
948
964
|
const statusCounts = {};
|
|
@@ -983,6 +999,12 @@ Use this as your FIRST call when starting work on a roadmap to understand the fu
|
|
|
983
999
|
when: s.when,
|
|
984
1000
|
then: s.then
|
|
985
1001
|
})),
|
|
1002
|
+
features: features.map((f) => ({
|
|
1003
|
+
id: f.id,
|
|
1004
|
+
name: f.name,
|
|
1005
|
+
type: f.type,
|
|
1006
|
+
parentId: f.parentId
|
|
1007
|
+
})),
|
|
986
1008
|
roadmapSummary: {
|
|
987
1009
|
total: roadmaps.length,
|
|
988
1010
|
byStatus: statusCounts,
|
|
@@ -1070,20 +1092,27 @@ function registerCreateRoadmapItem(server) {
|
|
|
1070
1092
|
};
|
|
1071
1093
|
});
|
|
1072
1094
|
}
|
|
1095
|
+
var effortSizeSchema = z10.enum(["xs", "s", "m", "l", "xl"]);
|
|
1073
1096
|
function registerUpdateRoadmapItem(server) {
|
|
1074
1097
|
server.registerTool("update_roadmap_item", {
|
|
1075
|
-
description: "Update an existing roadmap item. Can update title, status, horizon, prompt, or brainstorm notes.",
|
|
1098
|
+
description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, or brainstorm notes.",
|
|
1076
1099
|
inputSchema: {
|
|
1077
1100
|
id: z10.string().describe("The UUID of the roadmap item to update"),
|
|
1078
1101
|
title: z10.string().optional().describe("New title"),
|
|
1079
1102
|
status: roadmapStatusSchema.optional().describe("New status"),
|
|
1080
|
-
horizon: horizonSchema.optional().describe("New planning horizon")
|
|
1103
|
+
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
1104
|
+
value: z10.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
|
|
1105
|
+
effort: effortSizeSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
|
|
1106
|
+
order: z10.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
|
|
1081
1107
|
}
|
|
1082
1108
|
}, async ({
|
|
1083
1109
|
id,
|
|
1084
1110
|
title,
|
|
1085
1111
|
status,
|
|
1086
|
-
horizon
|
|
1112
|
+
horizon,
|
|
1113
|
+
value,
|
|
1114
|
+
effort,
|
|
1115
|
+
order
|
|
1087
1116
|
}) => {
|
|
1088
1117
|
const client2 = getApiClient();
|
|
1089
1118
|
const updates = {};
|
|
@@ -1093,6 +1122,12 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1093
1122
|
updates.status = status;
|
|
1094
1123
|
if (horizon !== undefined)
|
|
1095
1124
|
updates.horizon = horizon;
|
|
1125
|
+
if (value !== undefined)
|
|
1126
|
+
updates.value = value;
|
|
1127
|
+
if (effort !== undefined)
|
|
1128
|
+
updates.effort = effort;
|
|
1129
|
+
if (order !== undefined)
|
|
1130
|
+
updates.order = order;
|
|
1096
1131
|
const roadmap2 = await client2.updateRoadmap(id, updates);
|
|
1097
1132
|
return {
|
|
1098
1133
|
content: [
|
|
@@ -1104,7 +1139,10 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1104
1139
|
id: roadmap2.id,
|
|
1105
1140
|
title: roadmap2.title,
|
|
1106
1141
|
status: roadmap2.status,
|
|
1107
|
-
horizon: roadmap2.horizon
|
|
1142
|
+
horizon: roadmap2.horizon,
|
|
1143
|
+
value: roadmap2.value,
|
|
1144
|
+
effort: roadmap2.effort,
|
|
1145
|
+
order: roadmap2.order
|
|
1108
1146
|
}
|
|
1109
1147
|
}, null, 2)
|
|
1110
1148
|
}
|
|
@@ -1259,6 +1297,32 @@ function registerDeleteRoadmapItem(server) {
|
|
|
1259
1297
|
};
|
|
1260
1298
|
});
|
|
1261
1299
|
}
|
|
1300
|
+
function registerReorderRoadmaps(server) {
|
|
1301
|
+
server.registerTool("reorder_roadmaps", {
|
|
1302
|
+
description: "Bulk reorder roadmap items by setting their order values. Use this to prioritize and organize the roadmap. Lower order values appear first.",
|
|
1303
|
+
inputSchema: {
|
|
1304
|
+
items: z10.array(z10.object({
|
|
1305
|
+
id: z10.string().describe("The UUID of the roadmap item"),
|
|
1306
|
+
order: z10.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
|
|
1307
|
+
})).describe("Array of roadmap items with their new order values")
|
|
1308
|
+
}
|
|
1309
|
+
}, async ({ items }) => {
|
|
1310
|
+
const client2 = getApiClient();
|
|
1311
|
+
const result = await client2.reorderRoadmaps(items);
|
|
1312
|
+
return {
|
|
1313
|
+
content: [
|
|
1314
|
+
{
|
|
1315
|
+
type: "text",
|
|
1316
|
+
text: JSON.stringify({
|
|
1317
|
+
success: result.success,
|
|
1318
|
+
message: `Successfully reordered ${items.length} roadmap items`,
|
|
1319
|
+
itemsReordered: items.length
|
|
1320
|
+
}, null, 2)
|
|
1321
|
+
}
|
|
1322
|
+
]
|
|
1323
|
+
};
|
|
1324
|
+
});
|
|
1325
|
+
}
|
|
1262
1326
|
function registerUpdateFeature(server) {
|
|
1263
1327
|
server.registerTool("update_feature", {
|
|
1264
1328
|
description: "Update an existing feature. Can update name, type, or parent.",
|