@ourroadmaps/mcp 0.19.0 → 0.21.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 +102 -101
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -22,10 +22,28 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
22
22
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
23
23
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
24
24
  // ../../packages/shared/src/schemas/audience.ts
25
- import { z as z2 } from "zod";
26
-
27
- // ../../packages/shared/src/schemas/constants.ts
28
25
  import { z } from "zod";
26
+ var audienceSchema = z.object({
27
+ id: z.string().uuid(),
28
+ organizationId: z.string(),
29
+ name: z.string(),
30
+ description: z.string().nullable(),
31
+ order: z.number().int(),
32
+ createdAt: z.string(),
33
+ updatedAt: z.string().nullable()
34
+ });
35
+ var createAudienceSchema = z.object({
36
+ name: z.string().min(1),
37
+ description: z.string().nullable().optional()
38
+ });
39
+ var updateAudienceSchema = z.object({
40
+ name: z.string().min(1).optional(),
41
+ description: z.string().nullable().optional(),
42
+ order: z.number().int().optional()
43
+ });
44
+ var audienceListSchema = z.array(audienceSchema);
45
+ // ../../packages/shared/src/schemas/constants.ts
46
+ import { z as z2 } from "zod";
29
47
  var HORIZONS = [
30
48
  "inbox",
31
49
  "now",
@@ -36,7 +54,7 @@ var HORIZONS = [
36
54
  "done",
37
55
  "cancelled"
38
56
  ];
39
- var horizonSchema = z.enum(HORIZONS);
57
+ var horizonSchema = z2.enum(HORIZONS);
40
58
  var ROADMAP_STATUSES = [
41
59
  "not_started",
42
60
  "planning",
@@ -46,17 +64,17 @@ var ROADMAP_STATUSES = [
46
64
  "done",
47
65
  "cancelled"
48
66
  ];
49
- var roadmapStatusSchema = z.enum(ROADMAP_STATUSES);
67
+ var roadmapStatusSchema = z2.enum(ROADMAP_STATUSES);
50
68
  var EFFORT_SIZES = ["xs", "s", "m", "l", "xl"];
51
- var effortSchema = z.enum(EFFORT_SIZES);
69
+ var effortSchema = z2.enum(EFFORT_SIZES);
52
70
  var DATE_GRANULARITIES = ["day", "month", "quarter", "half-year", "year"];
53
- var dateGranularitySchema = z.enum(DATE_GRANULARITIES);
71
+ var dateGranularitySchema = z2.enum(DATE_GRANULARITIES);
54
72
  var PRD_STATUSES = ["draft", "completed"];
55
- var prdStatusSchema = z.enum(PRD_STATUSES);
73
+ var prdStatusSchema = z2.enum(PRD_STATUSES);
56
74
  var IDEA_STATUSES = ["new", "under-review", "planned", "declined", "done"];
57
- var ideaStatusSchema = z.enum(IDEA_STATUSES);
75
+ var ideaStatusSchema = z2.enum(IDEA_STATUSES);
58
76
  var FEATURE_TYPES = ["area", "feature"];
59
- var featureTypeSchema = z.enum(FEATURE_TYPES);
77
+ var featureTypeSchema = z2.enum(FEATURE_TYPES);
60
78
  var PRODUCT_TYPES = [
61
79
  "brand",
62
80
  "product",
@@ -65,41 +83,11 @@ var PRODUCT_TYPES = [
65
83
  "landing_page",
66
84
  "service"
67
85
  ];
68
- var productTypeSchema = z.enum(PRODUCT_TYPES);
86
+ var productTypeSchema = z2.enum(PRODUCT_TYPES);
69
87
  var AUDIENCE_TYPES = ["stakeholder", "user_persona"];
70
- var audienceTypeSchema = z.enum(AUDIENCE_TYPES);
88
+ var audienceTypeSchema = z2.enum(AUDIENCE_TYPES);
71
89
  var BRAINSTORM_MEDIA_TYPES = ["image", "video"];
72
- var brainstormMediaTypeSchema = z.enum(BRAINSTORM_MEDIA_TYPES);
73
-
74
- // ../../packages/shared/src/schemas/audience.ts
75
- var audienceSchema = z2.object({
76
- id: z2.string().uuid(),
77
- organizationId: z2.string(),
78
- type: audienceTypeSchema,
79
- role: z2.string().nullable(),
80
- likes: z2.string().nullable(),
81
- dislikes: z2.string().nullable(),
82
- priorities: z2.string().nullable(),
83
- order: z2.number().int(),
84
- deletedAt: z2.string().nullable(),
85
- createdAt: z2.string()
86
- });
87
- var createAudienceSchema = z2.object({
88
- type: audienceTypeSchema,
89
- role: z2.string().min(1),
90
- likes: z2.string().nullable().optional(),
91
- dislikes: z2.string().nullable().optional(),
92
- priorities: z2.string().nullable().optional()
93
- });
94
- var updateAudienceSchema = z2.object({
95
- type: audienceTypeSchema.optional(),
96
- role: z2.string().min(1).optional(),
97
- likes: z2.string().nullable().optional(),
98
- dislikes: z2.string().nullable().optional(),
99
- priorities: z2.string().nullable().optional(),
100
- order: z2.number().int().optional()
101
- });
102
- var audienceListSchema = z2.array(audienceSchema);
90
+ var brainstormMediaTypeSchema = z2.enum(BRAINSTORM_MEDIA_TYPES);
103
91
  // ../../packages/shared/src/schemas/context.ts
104
92
  import { z as z3 } from "zod";
105
93
  var domainContextSchema = z3.object({
@@ -1382,13 +1370,21 @@ function registerCreateRoadmapItem(server) {
1382
1370
  title: z11.string().describe("Title of the roadmap item"),
1383
1371
  status: roadmapStatusSchema.optional().describe('Status (defaults to "not_started")'),
1384
1372
  horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
1385
- initiativeId: z11.string().optional().describe("UUID of initiative to link this item to on creation")
1373
+ initiativeId: z11.string().optional().describe("UUID of initiative to link this item to on creation"),
1374
+ dateGranularity: dateGranularitySchema2.optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
1375
+ dateValue: z11.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1376
+ targetGranularity: dateGranularitySchema2.optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
1377
+ targetValue: z11.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1386
1378
  }
1387
1379
  }, async ({
1388
1380
  title,
1389
1381
  status,
1390
1382
  horizon,
1391
- initiativeId
1383
+ initiativeId,
1384
+ dateGranularity,
1385
+ dateValue,
1386
+ targetGranularity,
1387
+ targetValue
1392
1388
  }) => {
1393
1389
  const client2 = getApiClient();
1394
1390
  const createData = {
@@ -1399,6 +1395,18 @@ function registerCreateRoadmapItem(server) {
1399
1395
  if (initiativeId) {
1400
1396
  createData.initiativeId = initiativeId;
1401
1397
  }
1398
+ if (dateGranularity && dateValue) {
1399
+ createData.date = {
1400
+ granularity: dateGranularity,
1401
+ value: dateValue
1402
+ };
1403
+ }
1404
+ if (targetGranularity && targetValue) {
1405
+ createData.target = {
1406
+ granularity: targetGranularity,
1407
+ value: targetValue
1408
+ };
1409
+ }
1402
1410
  const roadmap2 = await client2.createRoadmap(createData);
1403
1411
  return {
1404
1412
  content: [
@@ -1410,7 +1418,9 @@ function registerCreateRoadmapItem(server) {
1410
1418
  id: roadmap2.id,
1411
1419
  title: roadmap2.title,
1412
1420
  status: roadmap2.status,
1413
- horizon: roadmap2.horizon
1421
+ horizon: roadmap2.horizon,
1422
+ date: roadmap2.date,
1423
+ target: roadmap2.target
1414
1424
  }
1415
1425
  }, null, 2)
1416
1426
  }
@@ -1421,7 +1431,7 @@ function registerCreateRoadmapItem(server) {
1421
1431
  var effortSizeSchema = z11.enum(["xs", "s", "m", "l", "xl"]);
1422
1432
  function registerUpdateRoadmapItem(server) {
1423
1433
  server.registerTool("update_roadmap_item", {
1424
- description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, initiative link, or brainstorm notes.",
1434
+ description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, initiative link, target date, or brainstorm notes.",
1425
1435
  inputSchema: {
1426
1436
  id: z11.string().describe("The UUID of the roadmap item to update"),
1427
1437
  title: z11.string().optional().describe("New title"),
@@ -1435,7 +1445,11 @@ function registerUpdateRoadmapItem(server) {
1435
1445
  planDescription: z11.string().nullable().optional().describe("Description for the Planning phase"),
1436
1446
  buildDescription: z11.string().nullable().optional().describe("Description for the Build phase"),
1437
1447
  releaseDescription: z11.string().nullable().optional().describe("Description for the Release phase"),
1438
- prompt: z11.string().nullable().optional().describe("Build prompt for the roadmap item")
1448
+ prompt: z11.string().nullable().optional().describe("Build prompt for the roadmap item"),
1449
+ dateGranularity: dateGranularitySchema2.nullable().optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
1450
+ dateValue: z11.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1451
+ targetGranularity: dateGranularitySchema2.nullable().optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
1452
+ targetValue: z11.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1439
1453
  }
1440
1454
  }, async ({
1441
1455
  id,
@@ -1450,7 +1464,11 @@ function registerUpdateRoadmapItem(server) {
1450
1464
  planDescription,
1451
1465
  buildDescription,
1452
1466
  releaseDescription,
1453
- prompt
1467
+ prompt,
1468
+ dateGranularity,
1469
+ dateValue,
1470
+ targetGranularity,
1471
+ targetValue
1454
1472
  }) => {
1455
1473
  const client2 = getApiClient();
1456
1474
  const updates = {};
@@ -1468,6 +1486,18 @@ function registerUpdateRoadmapItem(server) {
1468
1486
  updates.order = order;
1469
1487
  if (initiativeId !== undefined)
1470
1488
  updates.initiativeId = initiativeId;
1489
+ if (dateGranularity !== undefined || dateValue !== undefined) {
1490
+ updates.date = {
1491
+ granularity: dateGranularity ?? null,
1492
+ value: dateValue ?? null
1493
+ };
1494
+ }
1495
+ if (targetGranularity !== undefined || targetValue !== undefined) {
1496
+ updates.target = {
1497
+ granularity: targetGranularity ?? null,
1498
+ value: targetValue ?? null
1499
+ };
1500
+ }
1471
1501
  const roadmap2 = Object.keys(updates).length > 0 ? await client2.updateRoadmap(id, updates) : await client2.getRoadmap(id);
1472
1502
  const phaseUpdates = {};
1473
1503
  if (designDescription !== undefined) {
@@ -1507,7 +1537,9 @@ function registerUpdateRoadmapItem(server) {
1507
1537
  horizon: roadmap2.horizon,
1508
1538
  value: roadmap2.value,
1509
1539
  effort: roadmap2.effort,
1510
- order: roadmap2.order
1540
+ order: roadmap2.order,
1541
+ date: roadmap2.date,
1542
+ target: roadmap2.target
1511
1543
  },
1512
1544
  phaseDescriptionsUpdated: phaseUpdates
1513
1545
  }, null, 2)
@@ -2247,31 +2279,18 @@ function registerUpdateProductDocumentation(server) {
2247
2279
  };
2248
2280
  });
2249
2281
  }
2250
- var audienceTypeSchema2 = z11.enum(["stakeholder", "user_persona"]);
2251
2282
  function registerCreateAudience(server) {
2252
2283
  server.registerTool("create_audience", {
2253
- description: "Create a new audience member - either a stakeholder or user persona. Audiences represent who the product serves.",
2284
+ description: "Create a new audience member. Audiences represent who the product serves.",
2254
2285
  inputSchema: {
2255
- type: audienceTypeSchema2.describe("Type of audience - stakeholder or user_persona"),
2256
- role: z11.string().describe('Role or title of the audience (e.g., "Product Manager", "End User")'),
2257
- likes: z11.string().nullable().optional().describe("What this audience likes or values"),
2258
- dislikes: z11.string().nullable().optional().describe("What this audience dislikes or avoids"),
2259
- priorities: z11.string().nullable().optional().describe("Key priorities for this audience")
2286
+ name: z11.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
2287
+ description: z11.string().nullable().optional().describe("Description of the audience")
2260
2288
  }
2261
- }, async ({
2262
- type,
2263
- role,
2264
- likes,
2265
- dislikes,
2266
- priorities
2267
- }) => {
2289
+ }, async ({ name, description }) => {
2268
2290
  const client2 = getApiClient();
2269
2291
  const audience2 = await client2.createAudience({
2270
- type,
2271
- role,
2272
- likes: likes ?? null,
2273
- dislikes: dislikes ?? null,
2274
- priorities: priorities ?? null
2292
+ name,
2293
+ description: description ?? null
2275
2294
  });
2276
2295
  return {
2277
2296
  content: [
@@ -2281,11 +2300,8 @@ function registerCreateAudience(server) {
2281
2300
  success: true,
2282
2301
  audience: {
2283
2302
  id: audience2.id,
2284
- type: audience2.type,
2285
- role: audience2.role,
2286
- likes: audience2.likes,
2287
- dislikes: audience2.dislikes,
2288
- priorities: audience2.priorities
2303
+ name: audience2.name,
2304
+ description: audience2.description
2289
2305
  }
2290
2306
  }, null, 2)
2291
2307
  }
@@ -2298,32 +2314,20 @@ function registerUpdateAudience(server) {
2298
2314
  description: "Update an existing audience member.",
2299
2315
  inputSchema: {
2300
2316
  id: z11.string().describe("The UUID of the audience to update"),
2301
- type: audienceTypeSchema2.optional().describe("New type"),
2302
- role: z11.string().optional().describe("New role"),
2303
- likes: z11.string().nullable().optional().describe("New likes"),
2304
- dislikes: z11.string().nullable().optional().describe("New dislikes"),
2305
- priorities: z11.string().nullable().optional().describe("New priorities")
2317
+ name: z11.string().optional().describe("New name"),
2318
+ description: z11.string().nullable().optional().describe("New description")
2306
2319
  }
2307
2320
  }, async ({
2308
2321
  id,
2309
- type,
2310
- role,
2311
- likes,
2312
- dislikes,
2313
- priorities
2322
+ name,
2323
+ description
2314
2324
  }) => {
2315
2325
  const client2 = getApiClient();
2316
2326
  const updates = {};
2317
- if (type !== undefined)
2318
- updates.type = type;
2319
- if (role !== undefined)
2320
- updates.role = role;
2321
- if (likes !== undefined)
2322
- updates.likes = likes;
2323
- if (dislikes !== undefined)
2324
- updates.dislikes = dislikes;
2325
- if (priorities !== undefined)
2326
- updates.priorities = priorities;
2327
+ if (name !== undefined)
2328
+ updates.name = name;
2329
+ if (description !== undefined)
2330
+ updates.description = description;
2327
2331
  const audience2 = await client2.updateAudience(id, updates);
2328
2332
  return {
2329
2333
  content: [
@@ -2333,11 +2337,8 @@ function registerUpdateAudience(server) {
2333
2337
  success: true,
2334
2338
  audience: {
2335
2339
  id: audience2.id,
2336
- type: audience2.type,
2337
- role: audience2.role,
2338
- likes: audience2.likes,
2339
- dislikes: audience2.dislikes,
2340
- priorities: audience2.priorities
2340
+ name: audience2.name,
2341
+ description: audience2.description
2341
2342
  }
2342
2343
  }, null, 2)
2343
2344
  }
@@ -3114,7 +3115,7 @@ Expires: ${expiryDate}`
3114
3115
  };
3115
3116
  });
3116
3117
  }
3117
- var dateGranularitySchema2 = z11.enum(["day", "month", "quarter", "half_year", "year"]);
3118
+ var dateGranularitySchema2 = z11.enum(["day", "month", "quarter", "half-year", "year"]);
3118
3119
  function registerSearchInitiatives(server) {
3119
3120
  server.registerTool("search_initiatives", {
3120
3121
  description: "Search for initiatives by title or filter by horizon. Returns a list of matching initiatives with item counts.",
@@ -3194,7 +3195,7 @@ function registerCreateInitiative(server) {
3194
3195
  title: z11.string().describe("Title of the initiative"),
3195
3196
  description: z11.string().optional().describe("Description of the initiative (markdown)"),
3196
3197
  horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
3197
- dateGranularity: dateGranularitySchema2.optional().describe("Target date granularity: day, month, quarter, half_year, or year"),
3198
+ dateGranularity: dateGranularitySchema2.optional().describe("Target date granularity: day, month, quarter, half-year, or year"),
3198
3199
  dateValue: z11.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
3199
3200
  targetDate: z11.string().optional().describe("Target date in YYYY-MM-DD format")
3200
3201
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourroadmaps/mcp",
3
- "version": "0.19.0",
3
+ "version": "0.21.0",
4
4
  "description": "MCP server for OurRoadmaps - manage roadmaps, features, and ideas from Claude Code",
5
5
  "type": "module",
6
6
  "bin": {