@ourroadmaps/mcp 0.2.0 → 0.4.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 +128 -3
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -23746,11 +23746,12 @@ var prdSchema = exports_external.object({
23746
23746
  var savePrdInputSchema = exports_external.object({
23747
23747
  what: exports_external.string().nullable(),
23748
23748
  why: exports_external.string().nullable(),
23749
+ status: prdStatusSchema,
23749
23750
  outcomes: exports_external.array(exports_external.object({
23750
23751
  id: exports_external.string().uuid().optional(),
23751
23752
  description: exports_external.string(),
23752
- status: prdStatusSchema.optional()
23753
- })).optional()
23753
+ order: exports_external.number().int().min(0)
23754
+ }))
23754
23755
  });
23755
23756
  var brainstormMediaSchema = exports_external.object({
23756
23757
  id: exports_external.string().uuid(),
@@ -24032,6 +24033,28 @@ class ApiClient {
24032
24033
  method: "DELETE"
24033
24034
  });
24034
24035
  }
24036
+ async listStatusUpdates() {
24037
+ const response = await this.request("/v1/status-updates");
24038
+ return response.data;
24039
+ }
24040
+ async createStatusUpdate(data) {
24041
+ const response = await this.request("/v1/status-updates", {
24042
+ method: "POST",
24043
+ body: JSON.stringify(data)
24044
+ });
24045
+ return response.data;
24046
+ }
24047
+ async getHistory(params) {
24048
+ const searchParams = new URLSearchParams({
24049
+ startDate: params.startDate,
24050
+ endDate: params.endDate
24051
+ });
24052
+ if (params.entityType) {
24053
+ searchParams.set("entityType", params.entityType);
24054
+ }
24055
+ const response = await this.request(`/v1/history?${searchParams.toString()}`);
24056
+ return response.data;
24057
+ }
24035
24058
  }
24036
24059
  var client = null;
24037
24060
  function getApiClient() {
@@ -24073,6 +24096,9 @@ function registerAllTools(server) {
24073
24096
  registerCreateAudience(server);
24074
24097
  registerUpdateAudience(server);
24075
24098
  registerDeleteAudience(server);
24099
+ registerListStatusUpdates(server);
24100
+ registerGetHistory(server);
24101
+ registerCreateStatusUpdate(server);
24076
24102
  }
24077
24103
  function registerSearchRoadmaps(server) {
24078
24104
  server.registerTool("search_roadmaps", {
@@ -24522,7 +24548,8 @@ function registerSavePrd(server) {
24522
24548
  const prd = await client2.savePrd(roadmapId, {
24523
24549
  what: what ?? null,
24524
24550
  why: why ?? null,
24525
- outcomes: (outcomes ?? []).map((desc) => ({ description: desc }))
24551
+ status: "draft",
24552
+ outcomes: (outcomes ?? []).map((desc, index) => ({ description: desc, order: index }))
24526
24553
  });
24527
24554
  return {
24528
24555
  content: [
@@ -25133,6 +25160,104 @@ function registerDeleteAudience(server) {
25133
25160
  };
25134
25161
  });
25135
25162
  }
25163
+ function registerListStatusUpdates(server) {
25164
+ server.registerTool("list_status_updates", {
25165
+ description: "List all status reports for the organization. Use this to find when the last report ended to auto-detect start date for a new report.",
25166
+ inputSchema: {}
25167
+ }, async () => {
25168
+ const client2 = getApiClient();
25169
+ const updates = await client2.listStatusUpdates();
25170
+ return {
25171
+ content: [
25172
+ {
25173
+ type: "text",
25174
+ text: JSON.stringify(updates.map((u) => ({
25175
+ id: u.id,
25176
+ title: u.title,
25177
+ startDate: u.startDate,
25178
+ endDate: u.endDate,
25179
+ createdAt: u.createdAt
25180
+ })), null, 2)
25181
+ }
25182
+ ]
25183
+ };
25184
+ });
25185
+ }
25186
+ function registerGetHistory(server) {
25187
+ server.registerTool("get_history", {
25188
+ 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.",
25189
+ inputSchema: {
25190
+ startDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
25191
+ endDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
25192
+ entityType: exports_external.enum([
25193
+ "roadmap",
25194
+ "feature",
25195
+ "idea",
25196
+ "prd",
25197
+ "wireframe",
25198
+ "product",
25199
+ "audience",
25200
+ "scenario"
25201
+ ]).optional().describe("Filter to specific entity type")
25202
+ }
25203
+ }, async ({
25204
+ startDate,
25205
+ endDate,
25206
+ entityType
25207
+ }) => {
25208
+ const client2 = getApiClient();
25209
+ const events = await client2.getHistory({ startDate, endDate, entityType });
25210
+ return {
25211
+ content: [
25212
+ {
25213
+ type: "text",
25214
+ text: JSON.stringify(events, null, 2)
25215
+ }
25216
+ ]
25217
+ };
25218
+ });
25219
+ }
25220
+ function registerCreateStatusUpdate(server) {
25221
+ server.registerTool("create_status_update", {
25222
+ description: "Create a new status report. Use this after generating the report content from history events.",
25223
+ inputSchema: {
25224
+ startDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
25225
+ endDate: exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
25226
+ content: exports_external.string().describe("The markdown content of the status report"),
25227
+ title: exports_external.string().optional().describe("Optional title for the report")
25228
+ }
25229
+ }, async ({
25230
+ startDate,
25231
+ endDate,
25232
+ content,
25233
+ title
25234
+ }) => {
25235
+ const client2 = getApiClient();
25236
+ const update = await client2.createStatusUpdate({
25237
+ startDate,
25238
+ endDate,
25239
+ content,
25240
+ title
25241
+ });
25242
+ return {
25243
+ content: [
25244
+ {
25245
+ type: "text",
25246
+ text: JSON.stringify({
25247
+ success: true,
25248
+ statusUpdate: {
25249
+ id: update.id,
25250
+ title: update.title,
25251
+ startDate: update.startDate,
25252
+ endDate: update.endDate,
25253
+ createdAt: update.createdAt
25254
+ }
25255
+ }, null, 2)
25256
+ }
25257
+ ]
25258
+ };
25259
+ });
25260
+ }
25136
25261
 
25137
25262
  // src/index.ts
25138
25263
  async function main() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourroadmaps/mcp",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "license": "MIT",
34
34
  "dependencies": {
35
- "@modelcontextprotocol/sdk": "^1.0.0",
35
+ "@modelcontextprotocol/sdk": "^1.24.3",
36
36
  "@ourroadmaps/shared": "*",
37
37
  "zod": "^3.23.0"
38
38
  },