@ourroadmaps/mcp 0.7.1 → 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 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
#!/usr/bin/env node
|
|
3
2
|
|
|
4
3
|
// src/index.ts
|
|
5
4
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -488,6 +487,13 @@ class ApiClient {
|
|
|
488
487
|
method: "DELETE"
|
|
489
488
|
});
|
|
490
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
|
+
}
|
|
491
497
|
async savePrd(roadmapId, data) {
|
|
492
498
|
const response = await this.request(`/v1/roadmaps/${roadmapId}/prd`, {
|
|
493
499
|
method: "POST",
|
|
@@ -709,6 +715,7 @@ function registerAllTools(server) {
|
|
|
709
715
|
registerCreateRoadmapItem(server);
|
|
710
716
|
registerUpdateRoadmapItem(server);
|
|
711
717
|
registerDeleteRoadmapItem(server);
|
|
718
|
+
registerReorderRoadmaps(server);
|
|
712
719
|
registerAddFeature(server);
|
|
713
720
|
registerUpdateFeature(server);
|
|
714
721
|
registerDeleteFeature(server);
|
|
@@ -769,7 +776,10 @@ function registerSearchRoadmaps(server) {
|
|
|
769
776
|
id: r.id,
|
|
770
777
|
title: r.title,
|
|
771
778
|
status: r.status,
|
|
772
|
-
horizon: r.horizon
|
|
779
|
+
horizon: r.horizon,
|
|
780
|
+
value: r.value,
|
|
781
|
+
effort: r.effort,
|
|
782
|
+
order: r.order
|
|
773
783
|
})), null, 2)
|
|
774
784
|
}
|
|
775
785
|
]
|
|
@@ -794,6 +804,9 @@ function registerGetRoadmap(server) {
|
|
|
794
804
|
title: roadmap2.title,
|
|
795
805
|
status: roadmap2.status,
|
|
796
806
|
horizon: roadmap2.horizon,
|
|
807
|
+
value: roadmap2.value,
|
|
808
|
+
effort: roadmap2.effort,
|
|
809
|
+
order: roadmap2.order,
|
|
797
810
|
prd: roadmap2.prd,
|
|
798
811
|
brainstormNotes: roadmap2.brainstormNotes,
|
|
799
812
|
wireframes: roadmap2.wireframes?.map((w) => ({
|
|
@@ -933,17 +946,19 @@ function registerGetContext(server) {
|
|
|
933
946
|
- Products: What the organization builds (brands, products, apps, services) with hierarchy
|
|
934
947
|
- Audiences: Who the product serves (stakeholders and user personas) with their preferences
|
|
935
948
|
- Scenarios: User workflows and how they accomplish goals
|
|
949
|
+
- Features: Capabilities and functionality areas organized hierarchically
|
|
936
950
|
- Roadmap Summary: Count of items by status and horizon for planning overview
|
|
937
951
|
|
|
938
952
|
Use this as your FIRST call when starting work on a roadmap to understand the full context.`,
|
|
939
953
|
inputSchema: {}
|
|
940
954
|
}, async () => {
|
|
941
955
|
const client2 = getApiClient();
|
|
942
|
-
const [strategy, products, audiences, scenarios, roadmaps] = await Promise.all([
|
|
956
|
+
const [strategy, products, audiences, scenarios, features, roadmaps] = await Promise.all([
|
|
943
957
|
client2.getStrategy(),
|
|
944
958
|
client2.listProducts(),
|
|
945
959
|
client2.listAudiences(),
|
|
946
960
|
client2.listScenarios(),
|
|
961
|
+
client2.listFeatures(),
|
|
947
962
|
client2.listRoadmaps()
|
|
948
963
|
]);
|
|
949
964
|
const statusCounts = {};
|
|
@@ -984,6 +999,12 @@ Use this as your FIRST call when starting work on a roadmap to understand the fu
|
|
|
984
999
|
when: s.when,
|
|
985
1000
|
then: s.then
|
|
986
1001
|
})),
|
|
1002
|
+
features: features.map((f) => ({
|
|
1003
|
+
id: f.id,
|
|
1004
|
+
name: f.name,
|
|
1005
|
+
type: f.type,
|
|
1006
|
+
parentId: f.parentId
|
|
1007
|
+
})),
|
|
987
1008
|
roadmapSummary: {
|
|
988
1009
|
total: roadmaps.length,
|
|
989
1010
|
byStatus: statusCounts,
|
|
@@ -1071,20 +1092,27 @@ function registerCreateRoadmapItem(server) {
|
|
|
1071
1092
|
};
|
|
1072
1093
|
});
|
|
1073
1094
|
}
|
|
1095
|
+
var effortSizeSchema = z10.enum(["xs", "s", "m", "l", "xl"]);
|
|
1074
1096
|
function registerUpdateRoadmapItem(server) {
|
|
1075
1097
|
server.registerTool("update_roadmap_item", {
|
|
1076
|
-
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.",
|
|
1077
1099
|
inputSchema: {
|
|
1078
1100
|
id: z10.string().describe("The UUID of the roadmap item to update"),
|
|
1079
1101
|
title: z10.string().optional().describe("New title"),
|
|
1080
1102
|
status: roadmapStatusSchema.optional().describe("New status"),
|
|
1081
|
-
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)")
|
|
1082
1107
|
}
|
|
1083
1108
|
}, async ({
|
|
1084
1109
|
id,
|
|
1085
1110
|
title,
|
|
1086
1111
|
status,
|
|
1087
|
-
horizon
|
|
1112
|
+
horizon,
|
|
1113
|
+
value,
|
|
1114
|
+
effort,
|
|
1115
|
+
order
|
|
1088
1116
|
}) => {
|
|
1089
1117
|
const client2 = getApiClient();
|
|
1090
1118
|
const updates = {};
|
|
@@ -1094,6 +1122,12 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1094
1122
|
updates.status = status;
|
|
1095
1123
|
if (horizon !== undefined)
|
|
1096
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;
|
|
1097
1131
|
const roadmap2 = await client2.updateRoadmap(id, updates);
|
|
1098
1132
|
return {
|
|
1099
1133
|
content: [
|
|
@@ -1105,7 +1139,10 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1105
1139
|
id: roadmap2.id,
|
|
1106
1140
|
title: roadmap2.title,
|
|
1107
1141
|
status: roadmap2.status,
|
|
1108
|
-
horizon: roadmap2.horizon
|
|
1142
|
+
horizon: roadmap2.horizon,
|
|
1143
|
+
value: roadmap2.value,
|
|
1144
|
+
effort: roadmap2.effort,
|
|
1145
|
+
order: roadmap2.order
|
|
1109
1146
|
}
|
|
1110
1147
|
}, null, 2)
|
|
1111
1148
|
}
|
|
@@ -1260,6 +1297,32 @@ function registerDeleteRoadmapItem(server) {
|
|
|
1260
1297
|
};
|
|
1261
1298
|
});
|
|
1262
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
|
+
}
|
|
1263
1326
|
function registerUpdateFeature(server) {
|
|
1264
1327
|
server.registerTool("update_feature", {
|
|
1265
1328
|
description: "Update an existing feature. Can update name, type, or parent.",
|