@ourroadmaps/mcp 0.8.0 → 0.10.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 +118 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -380,6 +380,23 @@ var featureLinkSchema = z8.object({
|
|
|
380
380
|
}),
|
|
381
381
|
createdAt: z8.string()
|
|
382
382
|
});
|
|
383
|
+
var phaseDesignSchema = z8.object({
|
|
384
|
+
id: z8.string().uuid(),
|
|
385
|
+
description: z8.string().nullable()
|
|
386
|
+
});
|
|
387
|
+
var phasePlanSchema = z8.object({
|
|
388
|
+
id: z8.string().uuid(),
|
|
389
|
+
description: z8.string().nullable()
|
|
390
|
+
});
|
|
391
|
+
var phaseBuildSchema = z8.object({
|
|
392
|
+
id: z8.string().uuid(),
|
|
393
|
+
description: z8.string().nullable(),
|
|
394
|
+
prompt: z8.string().nullable()
|
|
395
|
+
});
|
|
396
|
+
var phaseReleaseSchema = z8.object({
|
|
397
|
+
id: z8.string().uuid(),
|
|
398
|
+
description: z8.string().nullable()
|
|
399
|
+
});
|
|
383
400
|
var roadmapDetailSchema = roadmapSchema.extend({
|
|
384
401
|
prd: prdSchema.nullable(),
|
|
385
402
|
wireframes: z8.array(wireframeSchema),
|
|
@@ -387,7 +404,11 @@ var roadmapDetailSchema = roadmapSchema.extend({
|
|
|
387
404
|
brainstormNotes: z8.string().nullable(),
|
|
388
405
|
featureLinks: z8.array(featureLinkSchema),
|
|
389
406
|
epics: z8.array(epicWithStoriesSchema),
|
|
390
|
-
stories: z8.array(storySchema)
|
|
407
|
+
stories: z8.array(storySchema),
|
|
408
|
+
design: phaseDesignSchema.nullable(),
|
|
409
|
+
plan: phasePlanSchema.nullable(),
|
|
410
|
+
build: phaseBuildSchema.nullable(),
|
|
411
|
+
release: phaseReleaseSchema.nullable()
|
|
391
412
|
});
|
|
392
413
|
var roadmapListSchema = z8.array(roadmapSchema);
|
|
393
414
|
// ../../packages/shared/src/schemas/scenario.ts
|
|
@@ -454,7 +475,8 @@ class ApiClient {
|
|
|
454
475
|
});
|
|
455
476
|
if (!response.ok) {
|
|
456
477
|
const error = await response.json().catch(() => ({ message: response.statusText }));
|
|
457
|
-
|
|
478
|
+
const errorMessage = error.error?.message || error.message || "Unknown error";
|
|
479
|
+
throw new Error(`API Error (${response.status}): ${errorMessage} - Path: ${path}`);
|
|
458
480
|
}
|
|
459
481
|
if (response.status === 204) {
|
|
460
482
|
return;
|
|
@@ -548,9 +570,9 @@ class ApiClient {
|
|
|
548
570
|
return response.data;
|
|
549
571
|
}
|
|
550
572
|
async linkFeatureToRoadmap(featureId, roadmapId) {
|
|
551
|
-
await this.request(`/v1/features/${featureId}/roadmap-
|
|
573
|
+
await this.request(`/v1/features/${featureId}/roadmap-links`, {
|
|
552
574
|
method: "POST",
|
|
553
|
-
body: JSON.stringify({
|
|
575
|
+
body: JSON.stringify({ roadmapId })
|
|
554
576
|
});
|
|
555
577
|
}
|
|
556
578
|
async listIdeas() {
|
|
@@ -698,6 +720,14 @@ class ApiClient {
|
|
|
698
720
|
const response = await this.request(`/v1/history?${searchParams.toString()}`);
|
|
699
721
|
return response.data;
|
|
700
722
|
}
|
|
723
|
+
async getHistorySummary(params) {
|
|
724
|
+
const searchParams = new URLSearchParams({
|
|
725
|
+
startDate: params.startDate,
|
|
726
|
+
endDate: params.endDate
|
|
727
|
+
});
|
|
728
|
+
const response = await this.request(`/v1/history/summary?${searchParams}`);
|
|
729
|
+
return response.data;
|
|
730
|
+
}
|
|
701
731
|
async saveStories(roadmapId, data) {
|
|
702
732
|
const response = await this.request(`/v1/roadmaps/${roadmapId}/stories`, {
|
|
703
733
|
method: "POST",
|
|
@@ -705,6 +735,34 @@ class ApiClient {
|
|
|
705
735
|
});
|
|
706
736
|
return response.data;
|
|
707
737
|
}
|
|
738
|
+
async updateDesignDescription(roadmapId, description) {
|
|
739
|
+
const response = await this.request(`/v1/designs/roadmaps/${roadmapId}/design`, {
|
|
740
|
+
method: "PATCH",
|
|
741
|
+
body: JSON.stringify({ description })
|
|
742
|
+
});
|
|
743
|
+
return response.data;
|
|
744
|
+
}
|
|
745
|
+
async updatePlanDescription(roadmapId, description) {
|
|
746
|
+
const response = await this.request(`/v1/plans/roadmaps/${roadmapId}/plan`, {
|
|
747
|
+
method: "PATCH",
|
|
748
|
+
body: JSON.stringify({ description })
|
|
749
|
+
});
|
|
750
|
+
return response.data;
|
|
751
|
+
}
|
|
752
|
+
async updateBuildDescription(roadmapId, data) {
|
|
753
|
+
const response = await this.request(`/v1/builds/roadmaps/${roadmapId}/build`, {
|
|
754
|
+
method: "PATCH",
|
|
755
|
+
body: JSON.stringify(data)
|
|
756
|
+
});
|
|
757
|
+
return response.data;
|
|
758
|
+
}
|
|
759
|
+
async updateReleaseDescription(roadmapId, description) {
|
|
760
|
+
const response = await this.request(`/v1/releases/roadmaps/${roadmapId}/release`, {
|
|
761
|
+
method: "PATCH",
|
|
762
|
+
body: JSON.stringify({ description })
|
|
763
|
+
});
|
|
764
|
+
return response.data;
|
|
765
|
+
}
|
|
708
766
|
}
|
|
709
767
|
var client = null;
|
|
710
768
|
function getApiClient() {
|
|
@@ -753,6 +811,7 @@ function registerAllTools(server) {
|
|
|
753
811
|
registerDeleteAudience(server);
|
|
754
812
|
registerListStatusUpdates(server);
|
|
755
813
|
registerGetHistory(server);
|
|
814
|
+
registerGetHistorySummary(server);
|
|
756
815
|
registerCreateStatusUpdate(server);
|
|
757
816
|
registerSaveStories(server);
|
|
758
817
|
}
|
|
@@ -849,6 +908,11 @@ function registerGetRoadmap(server) {
|
|
|
849
908
|
})),
|
|
850
909
|
epics: roadmap2.epics,
|
|
851
910
|
stories: roadmap2.stories,
|
|
911
|
+
designDescription: roadmap2.design?.description ?? null,
|
|
912
|
+
planDescription: roadmap2.plan?.description ?? null,
|
|
913
|
+
buildDescription: roadmap2.build?.description ?? null,
|
|
914
|
+
releaseDescription: roadmap2.release?.description ?? null,
|
|
915
|
+
prompt: roadmap2.build?.prompt ?? roadmap2.prompt ?? null,
|
|
852
916
|
createdAt: roadmap2.createdAt
|
|
853
917
|
}, null, 2)
|
|
854
918
|
}
|
|
@@ -1114,7 +1178,11 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1114
1178
|
horizon: horizonSchema.optional().describe("New planning horizon"),
|
|
1115
1179
|
value: z10.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
|
|
1116
1180
|
effort: effortSizeSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
|
|
1117
|
-
order: z10.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
|
|
1181
|
+
order: z10.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
|
|
1182
|
+
designDescription: z10.string().nullable().optional().describe("Description for the Design phase"),
|
|
1183
|
+
planDescription: z10.string().nullable().optional().describe("Description for the Planning phase"),
|
|
1184
|
+
buildDescription: z10.string().nullable().optional().describe("Description for the Build phase"),
|
|
1185
|
+
releaseDescription: z10.string().nullable().optional().describe("Description for the Release phase")
|
|
1118
1186
|
}
|
|
1119
1187
|
}, async ({
|
|
1120
1188
|
id,
|
|
@@ -1123,7 +1191,11 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1123
1191
|
horizon,
|
|
1124
1192
|
value,
|
|
1125
1193
|
effort,
|
|
1126
|
-
order
|
|
1194
|
+
order,
|
|
1195
|
+
designDescription,
|
|
1196
|
+
planDescription,
|
|
1197
|
+
buildDescription,
|
|
1198
|
+
releaseDescription
|
|
1127
1199
|
}) => {
|
|
1128
1200
|
const client2 = getApiClient();
|
|
1129
1201
|
const updates = {};
|
|
@@ -1140,6 +1212,23 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1140
1212
|
if (order !== undefined)
|
|
1141
1213
|
updates.order = order;
|
|
1142
1214
|
const roadmap2 = await client2.updateRoadmap(id, updates);
|
|
1215
|
+
const phaseUpdates = {};
|
|
1216
|
+
if (designDescription !== undefined) {
|
|
1217
|
+
await client2.updateDesignDescription(id, designDescription);
|
|
1218
|
+
phaseUpdates.designDescription = designDescription;
|
|
1219
|
+
}
|
|
1220
|
+
if (planDescription !== undefined) {
|
|
1221
|
+
await client2.updatePlanDescription(id, planDescription);
|
|
1222
|
+
phaseUpdates.planDescription = planDescription;
|
|
1223
|
+
}
|
|
1224
|
+
if (buildDescription !== undefined) {
|
|
1225
|
+
await client2.updateBuildDescription(id, { description: buildDescription });
|
|
1226
|
+
phaseUpdates.buildDescription = buildDescription;
|
|
1227
|
+
}
|
|
1228
|
+
if (releaseDescription !== undefined) {
|
|
1229
|
+
await client2.updateReleaseDescription(id, releaseDescription);
|
|
1230
|
+
phaseUpdates.releaseDescription = releaseDescription;
|
|
1231
|
+
}
|
|
1143
1232
|
return {
|
|
1144
1233
|
content: [
|
|
1145
1234
|
{
|
|
@@ -1154,7 +1243,8 @@ function registerUpdateRoadmapItem(server) {
|
|
|
1154
1243
|
value: roadmap2.value,
|
|
1155
1244
|
effort: roadmap2.effort,
|
|
1156
1245
|
order: roadmap2.order
|
|
1157
|
-
}
|
|
1246
|
+
},
|
|
1247
|
+
phaseDescriptionsUpdated: phaseUpdates
|
|
1158
1248
|
}, null, 2)
|
|
1159
1249
|
}
|
|
1160
1250
|
]
|
|
@@ -2034,7 +2124,7 @@ function registerListStatusUpdates(server) {
|
|
|
2034
2124
|
}
|
|
2035
2125
|
function registerGetHistory(server) {
|
|
2036
2126
|
server.registerTool("get_history", {
|
|
2037
|
-
description: "Get history events for a date range. Returns
|
|
2127
|
+
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.",
|
|
2038
2128
|
inputSchema: {
|
|
2039
2129
|
startDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
2040
2130
|
endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
|
|
@@ -2066,6 +2156,26 @@ function registerGetHistory(server) {
|
|
|
2066
2156
|
};
|
|
2067
2157
|
});
|
|
2068
2158
|
}
|
|
2159
|
+
function registerGetHistorySummary(server) {
|
|
2160
|
+
server.registerTool("get_history_summary", {
|
|
2161
|
+
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.",
|
|
2162
|
+
inputSchema: {
|
|
2163
|
+
startDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
|
|
2164
|
+
endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
|
|
2165
|
+
}
|
|
2166
|
+
}, async ({ startDate, endDate }) => {
|
|
2167
|
+
const client2 = getApiClient();
|
|
2168
|
+
const summary = await client2.getHistorySummary({ startDate, endDate });
|
|
2169
|
+
return {
|
|
2170
|
+
content: [
|
|
2171
|
+
{
|
|
2172
|
+
type: "text",
|
|
2173
|
+
text: JSON.stringify(summary, null, 2)
|
|
2174
|
+
}
|
|
2175
|
+
]
|
|
2176
|
+
};
|
|
2177
|
+
});
|
|
2178
|
+
}
|
|
2069
2179
|
function registerCreateStatusUpdate(server) {
|
|
2070
2180
|
server.registerTool("create_status_update", {
|
|
2071
2181
|
description: "Create a new status report. Use this after generating the report content from history events.",
|