@ourroadmaps/mcp 0.8.0 → 0.9.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 +114 -5
  2. 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
@@ -698,6 +719,14 @@ class ApiClient {
698
719
  const response = await this.request(`/v1/history?${searchParams.toString()}`);
699
720
  return response.data;
700
721
  }
722
+ async getHistorySummary(params) {
723
+ const searchParams = new URLSearchParams({
724
+ startDate: params.startDate,
725
+ endDate: params.endDate
726
+ });
727
+ const response = await this.request(`/v1/history/summary?${searchParams}`);
728
+ return response.data;
729
+ }
701
730
  async saveStories(roadmapId, data) {
702
731
  const response = await this.request(`/v1/roadmaps/${roadmapId}/stories`, {
703
732
  method: "POST",
@@ -705,6 +734,34 @@ class ApiClient {
705
734
  });
706
735
  return response.data;
707
736
  }
737
+ async updateDesignDescription(roadmapId, description) {
738
+ const response = await this.request(`/v1/designs/roadmaps/${roadmapId}/design`, {
739
+ method: "PATCH",
740
+ body: JSON.stringify({ description })
741
+ });
742
+ return response.data;
743
+ }
744
+ async updatePlanDescription(roadmapId, description) {
745
+ const response = await this.request(`/v1/plans/roadmaps/${roadmapId}/plan`, {
746
+ method: "PATCH",
747
+ body: JSON.stringify({ description })
748
+ });
749
+ return response.data;
750
+ }
751
+ async updateBuildDescription(roadmapId, data) {
752
+ const response = await this.request(`/v1/builds/roadmaps/${roadmapId}/build`, {
753
+ method: "PATCH",
754
+ body: JSON.stringify(data)
755
+ });
756
+ return response.data;
757
+ }
758
+ async updateReleaseDescription(roadmapId, description) {
759
+ const response = await this.request(`/v1/releases/roadmaps/${roadmapId}/release`, {
760
+ method: "PATCH",
761
+ body: JSON.stringify({ description })
762
+ });
763
+ return response.data;
764
+ }
708
765
  }
709
766
  var client = null;
710
767
  function getApiClient() {
@@ -753,6 +810,7 @@ function registerAllTools(server) {
753
810
  registerDeleteAudience(server);
754
811
  registerListStatusUpdates(server);
755
812
  registerGetHistory(server);
813
+ registerGetHistorySummary(server);
756
814
  registerCreateStatusUpdate(server);
757
815
  registerSaveStories(server);
758
816
  }
@@ -849,6 +907,11 @@ function registerGetRoadmap(server) {
849
907
  })),
850
908
  epics: roadmap2.epics,
851
909
  stories: roadmap2.stories,
910
+ designDescription: roadmap2.design?.description ?? null,
911
+ planDescription: roadmap2.plan?.description ?? null,
912
+ buildDescription: roadmap2.build?.description ?? null,
913
+ releaseDescription: roadmap2.release?.description ?? null,
914
+ prompt: roadmap2.build?.prompt ?? roadmap2.prompt ?? null,
852
915
  createdAt: roadmap2.createdAt
853
916
  }, null, 2)
854
917
  }
@@ -1114,7 +1177,11 @@ function registerUpdateRoadmapItem(server) {
1114
1177
  horizon: horizonSchema.optional().describe("New planning horizon"),
1115
1178
  value: z10.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
1116
1179
  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)")
1180
+ order: z10.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
1181
+ designDescription: z10.string().nullable().optional().describe("Description for the Design phase"),
1182
+ planDescription: z10.string().nullable().optional().describe("Description for the Planning phase"),
1183
+ buildDescription: z10.string().nullable().optional().describe("Description for the Build phase"),
1184
+ releaseDescription: z10.string().nullable().optional().describe("Description for the Release phase")
1118
1185
  }
1119
1186
  }, async ({
1120
1187
  id,
@@ -1123,7 +1190,11 @@ function registerUpdateRoadmapItem(server) {
1123
1190
  horizon,
1124
1191
  value,
1125
1192
  effort,
1126
- order
1193
+ order,
1194
+ designDescription,
1195
+ planDescription,
1196
+ buildDescription,
1197
+ releaseDescription
1127
1198
  }) => {
1128
1199
  const client2 = getApiClient();
1129
1200
  const updates = {};
@@ -1140,6 +1211,23 @@ function registerUpdateRoadmapItem(server) {
1140
1211
  if (order !== undefined)
1141
1212
  updates.order = order;
1142
1213
  const roadmap2 = await client2.updateRoadmap(id, updates);
1214
+ const phaseUpdates = {};
1215
+ if (designDescription !== undefined) {
1216
+ await client2.updateDesignDescription(id, designDescription);
1217
+ phaseUpdates.designDescription = designDescription;
1218
+ }
1219
+ if (planDescription !== undefined) {
1220
+ await client2.updatePlanDescription(id, planDescription);
1221
+ phaseUpdates.planDescription = planDescription;
1222
+ }
1223
+ if (buildDescription !== undefined) {
1224
+ await client2.updateBuildDescription(id, { description: buildDescription });
1225
+ phaseUpdates.buildDescription = buildDescription;
1226
+ }
1227
+ if (releaseDescription !== undefined) {
1228
+ await client2.updateReleaseDescription(id, releaseDescription);
1229
+ phaseUpdates.releaseDescription = releaseDescription;
1230
+ }
1143
1231
  return {
1144
1232
  content: [
1145
1233
  {
@@ -1154,7 +1242,8 @@ function registerUpdateRoadmapItem(server) {
1154
1242
  value: roadmap2.value,
1155
1243
  effort: roadmap2.effort,
1156
1244
  order: roadmap2.order
1157
- }
1245
+ },
1246
+ phaseDescriptionsUpdated: phaseUpdates
1158
1247
  }, null, 2)
1159
1248
  }
1160
1249
  ]
@@ -2034,7 +2123,7 @@ function registerListStatusUpdates(server) {
2034
2123
  }
2035
2124
  function registerGetHistory(server) {
2036
2125
  server.registerTool("get_history", {
2037
- description: "Get history events for a date range. Returns all changes (created, updated, deleted) to roadmaps, features, ideas, etc. Use this to gather data for generating status reports.",
2126
+ 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
2127
  inputSchema: {
2039
2128
  startDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2040
2129
  endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
@@ -2066,6 +2155,26 @@ function registerGetHistory(server) {
2066
2155
  };
2067
2156
  });
2068
2157
  }
2158
+ function registerGetHistorySummary(server) {
2159
+ server.registerTool("get_history_summary", {
2160
+ 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.",
2161
+ inputSchema: {
2162
+ startDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2163
+ endDate: z10.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
2164
+ }
2165
+ }, async ({ startDate, endDate }) => {
2166
+ const client2 = getApiClient();
2167
+ const summary = await client2.getHistorySummary({ startDate, endDate });
2168
+ return {
2169
+ content: [
2170
+ {
2171
+ type: "text",
2172
+ text: JSON.stringify(summary, null, 2)
2173
+ }
2174
+ ]
2175
+ };
2176
+ });
2177
+ }
2069
2178
  function registerCreateStatusUpdate(server) {
2070
2179
  server.registerTool("create_status_update", {
2071
2180
  description: "Create a new status report. Use this after generating the report content from history events.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourroadmaps/mcp",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
5
5
  "type": "module",
6
6
  "bin": {