@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.
Files changed (2) hide show
  1. package/dist/index.js +118 -8
  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
@@ -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
- throw new Error(`API Error (${response.status}): ${error.error?.message || error.message}`);
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-items`, {
573
+ await this.request(`/v1/features/${featureId}/roadmap-links`, {
552
574
  method: "POST",
553
- body: JSON.stringify({ roadmapItemId: roadmapId })
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 all changes (created, updated, deleted) to roadmaps, features, ideas, etc. Use this to gather data for generating status reports.",
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.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourroadmaps/mcp",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
5
5
  "type": "module",
6
6
  "bin": {