@unified-product-graph/mcp-server 0.8.5 → 0.8.7

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 CHANGED
@@ -7923,7 +7923,6 @@ function migrateStatusValue(entityType, currentStatus) {
7923
7923
  if (!typeMap) return null;
7924
7924
  return typeMap[currentStatus] ?? null;
7925
7925
  }
7926
- var crossProductEdgeTypeSet = new Set(UPG_CROSS_EDGE_TYPES);
7927
7926
  var UPG_PROPERTY_SCHEMA = {
7928
7927
  // A11yAnnotationProperties: Accessibility annotation.
7929
7928
  a11y_annotation: {
@@ -11080,6 +11079,7 @@ var UPG_PROPERTY_SCHEMA = {
11080
11079
  function getPropertySchema(entityType) {
11081
11080
  return UPG_PROPERTY_SCHEMA[entityType];
11082
11081
  }
11082
+ var crossProductEdgeTypeSet = new Set(UPG_CROSS_EDGE_TYPES);
11083
11083
  var UPG_FRAMEWORKS = [
11084
11084
  {
11085
11085
  "id": "opportunity-solution-tree",
@@ -12315,7 +12315,7 @@ var UPG_FRAMEWORKS = [
12315
12315
  ],
12316
12316
  "name": "RICE Scoring",
12317
12317
  "version": "1.0.0",
12318
- "description": "Score features and opportunities by Reach, Impact, Confidence, and Effort to produce a ranked priority list.",
12318
+ "description": "Score features, opportunities, and needs by Reach, Impact, Confidence, and Effort to produce a ranked priority list.",
12319
12319
  "category": "prioritization",
12320
12320
  "origin": {
12321
12321
  "type": "practitioner",
@@ -12333,7 +12333,17 @@ var UPG_FRAMEWORKS = [
12333
12333
  {
12334
12334
  "label": "Items to score",
12335
12335
  "entityTypeId": "feature",
12336
- "description": "Features, opportunities, or solutions being evaluated"
12336
+ "description": "Features, opportunities, or needs being evaluated"
12337
+ },
12338
+ {
12339
+ "label": "Opportunities to score",
12340
+ "entityTypeId": "opportunity",
12341
+ "description": "Opportunities scored on the same RICE Scoring inputs as features."
12342
+ },
12343
+ {
12344
+ "label": "Needs to score",
12345
+ "entityTypeId": "need",
12346
+ "description": "Needs scored on the same RICE Scoring inputs as features."
12337
12347
  }
12338
12348
  ],
12339
12349
  "data": {
@@ -12341,6 +12351,14 @@ var UPG_FRAMEWORKS = [
12341
12351
  {
12342
12352
  "type": "feature",
12343
12353
  "role": "scored_item"
12354
+ },
12355
+ {
12356
+ "type": "opportunity",
12357
+ "role": "scored_item"
12358
+ },
12359
+ {
12360
+ "type": "need",
12361
+ "role": "scored_item"
12344
12362
  }
12345
12363
  ],
12346
12364
  "required_properties": {
@@ -12381,6 +12399,82 @@ var UPG_FRAMEWORKS = [
12381
12399
  "label": "Effort",
12382
12400
  "description": "How much work is required to build and ship this, on the effort scale?"
12383
12401
  }
12402
+ ],
12403
+ "opportunity": [
12404
+ {
12405
+ "property": "reach",
12406
+ "type": "assessment",
12407
+ "scale_id": "reach_5",
12408
+ "required": true,
12409
+ "scope": "framework",
12410
+ "label": "Reach",
12411
+ "description": "How many users will this impact per quarter?"
12412
+ },
12413
+ {
12414
+ "property": "impact",
12415
+ "type": "assessment",
12416
+ "scale_id": "impact_5",
12417
+ "required": true,
12418
+ "scope": "framework",
12419
+ "label": "Impact",
12420
+ "description": "How much will this impact each user, on the impact scale?"
12421
+ },
12422
+ {
12423
+ "property": "confidence",
12424
+ "type": "assessment",
12425
+ "scale_id": "confidence_5",
12426
+ "required": true,
12427
+ "scope": "framework",
12428
+ "label": "Confidence",
12429
+ "description": "How confident are you in the reach, impact, and effort estimates?"
12430
+ },
12431
+ {
12432
+ "property": "effort",
12433
+ "type": "assessment",
12434
+ "scale_id": "effort_5",
12435
+ "required": true,
12436
+ "scope": "framework",
12437
+ "label": "Effort",
12438
+ "description": "How much work is required to build and ship this, on the effort scale?"
12439
+ }
12440
+ ],
12441
+ "need": [
12442
+ {
12443
+ "property": "reach",
12444
+ "type": "assessment",
12445
+ "scale_id": "reach_5",
12446
+ "required": true,
12447
+ "scope": "framework",
12448
+ "label": "Reach",
12449
+ "description": "How many users will this impact per quarter?"
12450
+ },
12451
+ {
12452
+ "property": "impact",
12453
+ "type": "assessment",
12454
+ "scale_id": "impact_5",
12455
+ "required": true,
12456
+ "scope": "framework",
12457
+ "label": "Impact",
12458
+ "description": "How much will this impact each user, on the impact scale?"
12459
+ },
12460
+ {
12461
+ "property": "confidence",
12462
+ "type": "assessment",
12463
+ "scale_id": "confidence_5",
12464
+ "required": true,
12465
+ "scope": "framework",
12466
+ "label": "Confidence",
12467
+ "description": "How confident are you in the reach, impact, and effort estimates?"
12468
+ },
12469
+ {
12470
+ "property": "effort",
12471
+ "type": "assessment",
12472
+ "scale_id": "effort_5",
12473
+ "required": true,
12474
+ "scope": "framework",
12475
+ "label": "Effort",
12476
+ "description": "How much work is required to build and ship this, on the effort scale?"
12477
+ }
12384
12478
  ]
12385
12479
  },
12386
12480
  "computed_properties": [
@@ -12390,8 +12484,75 @@ var UPG_FRAMEWORKS = [
12390
12484
  "entity_type": "feature",
12391
12485
  "label": "RICE Score",
12392
12486
  "format": "number"
12487
+ },
12488
+ {
12489
+ "property": "rice_score",
12490
+ "expression": "(reach * impact * confidence) / effort",
12491
+ "entity_type": "opportunity",
12492
+ "label": "RICE Score",
12493
+ "format": "number"
12494
+ },
12495
+ {
12496
+ "property": "rice_score",
12497
+ "expression": "(reach * impact * confidence) / effort",
12498
+ "entity_type": "need",
12499
+ "label": "RICE Score",
12500
+ "format": "number"
12393
12501
  }
12394
- ]
12502
+ ],
12503
+ "scoring_lens": {
12504
+ "applies_to": [
12505
+ "feature",
12506
+ "opportunity",
12507
+ "need"
12508
+ ],
12509
+ "inputs": [
12510
+ {
12511
+ "property": "reach",
12512
+ "type": "assessment",
12513
+ "scale_id": "reach_5",
12514
+ "required": true,
12515
+ "scope": "framework",
12516
+ "label": "Reach",
12517
+ "description": "How many users will this impact per quarter?"
12518
+ },
12519
+ {
12520
+ "property": "impact",
12521
+ "type": "assessment",
12522
+ "scale_id": "impact_5",
12523
+ "required": true,
12524
+ "scope": "framework",
12525
+ "label": "Impact",
12526
+ "description": "How much will this impact each user, on the impact scale?"
12527
+ },
12528
+ {
12529
+ "property": "confidence",
12530
+ "type": "assessment",
12531
+ "scale_id": "confidence_5",
12532
+ "required": true,
12533
+ "scope": "framework",
12534
+ "label": "Confidence",
12535
+ "description": "How confident are you in the reach, impact, and effort estimates?"
12536
+ },
12537
+ {
12538
+ "property": "effort",
12539
+ "type": "assessment",
12540
+ "scale_id": "effort_5",
12541
+ "required": true,
12542
+ "scope": "framework",
12543
+ "label": "Effort",
12544
+ "description": "How much work is required to build and ship this, on the effort scale?"
12545
+ }
12546
+ ],
12547
+ "computed": [
12548
+ {
12549
+ "property": "rice_score",
12550
+ "expression": "(reach * impact * confidence) / effort",
12551
+ "label": "RICE Score",
12552
+ "format": "number"
12553
+ }
12554
+ ]
12555
+ }
12395
12556
  },
12396
12557
  "structure": {
12397
12558
  "pattern": "table"
@@ -14516,7 +14677,7 @@ var UPG_FRAMEWORKS = [
14516
14677
  "entity_types": [
14517
14678
  {
14518
14679
  "type": "team",
14519
- "role": "scored_item"
14680
+ "role": "item"
14520
14681
  },
14521
14682
  {
14522
14683
  "type": "retrospective",
@@ -14773,6 +14934,16 @@ var UPG_FRAMEWORKS = [
14773
14934
  "label": "Ease",
14774
14935
  "entityTypeId": "feature",
14775
14936
  "description": "How easy is this to implement?"
14937
+ },
14938
+ {
14939
+ "label": "Opportunities to score",
14940
+ "entityTypeId": "opportunity",
14941
+ "description": "Opportunities scored on the same ICE Scoring inputs as features."
14942
+ },
14943
+ {
14944
+ "label": "Needs to score",
14945
+ "entityTypeId": "need",
14946
+ "description": "Needs scored on the same ICE Scoring inputs as features."
14776
14947
  }
14777
14948
  ],
14778
14949
  "data": {
@@ -14788,6 +14959,14 @@ var UPG_FRAMEWORKS = [
14788
14959
  {
14789
14960
  "type": "assumption",
14790
14961
  "role": "item"
14962
+ },
14963
+ {
14964
+ "type": "opportunity",
14965
+ "role": "scored_item"
14966
+ },
14967
+ {
14968
+ "type": "need",
14969
+ "role": "scored_item"
14791
14970
  }
14792
14971
  ],
14793
14972
  "required_properties": {
@@ -14816,6 +14995,58 @@ var UPG_FRAMEWORKS = [
14816
14995
  "label": "Ease",
14817
14996
  "description": "Ease of implementation (1-10)"
14818
14997
  }
14998
+ ],
14999
+ "opportunity": [
15000
+ {
15001
+ "property": "impact",
15002
+ "type": "number",
15003
+ "required": true,
15004
+ "scope": "framework",
15005
+ "label": "Impact",
15006
+ "description": "Expected impact on the target metric (1-10)"
15007
+ },
15008
+ {
15009
+ "property": "confidence",
15010
+ "type": "number",
15011
+ "required": true,
15012
+ "scope": "framework",
15013
+ "label": "Confidence",
15014
+ "description": "Confidence in the impact estimate (1-10)"
15015
+ },
15016
+ {
15017
+ "property": "ease",
15018
+ "type": "number",
15019
+ "required": true,
15020
+ "scope": "framework",
15021
+ "label": "Ease",
15022
+ "description": "Ease of implementation (1-10)"
15023
+ }
15024
+ ],
15025
+ "need": [
15026
+ {
15027
+ "property": "impact",
15028
+ "type": "number",
15029
+ "required": true,
15030
+ "scope": "framework",
15031
+ "label": "Impact",
15032
+ "description": "Expected impact on the target metric (1-10)"
15033
+ },
15034
+ {
15035
+ "property": "confidence",
15036
+ "type": "number",
15037
+ "required": true,
15038
+ "scope": "framework",
15039
+ "label": "Confidence",
15040
+ "description": "Confidence in the impact estimate (1-10)"
15041
+ },
15042
+ {
15043
+ "property": "ease",
15044
+ "type": "number",
15045
+ "required": true,
15046
+ "scope": "framework",
15047
+ "label": "Ease",
15048
+ "description": "Ease of implementation (1-10)"
15049
+ }
14819
15050
  ]
14820
15051
  },
14821
15052
  "computed_properties": [
@@ -14825,8 +15056,63 @@ var UPG_FRAMEWORKS = [
14825
15056
  "entity_type": "feature",
14826
15057
  "label": "ICE Score",
14827
15058
  "format": "number"
15059
+ },
15060
+ {
15061
+ "property": "ice_score",
15062
+ "expression": "impact * confidence * ease",
15063
+ "entity_type": "opportunity",
15064
+ "label": "ICE Score",
15065
+ "format": "number"
15066
+ },
15067
+ {
15068
+ "property": "ice_score",
15069
+ "expression": "impact * confidence * ease",
15070
+ "entity_type": "need",
15071
+ "label": "ICE Score",
15072
+ "format": "number"
14828
15073
  }
14829
- ]
15074
+ ],
15075
+ "scoring_lens": {
15076
+ "applies_to": [
15077
+ "feature",
15078
+ "opportunity",
15079
+ "need"
15080
+ ],
15081
+ "inputs": [
15082
+ {
15083
+ "property": "impact",
15084
+ "type": "number",
15085
+ "required": true,
15086
+ "scope": "framework",
15087
+ "label": "Impact",
15088
+ "description": "Expected impact on the target metric (1-10)"
15089
+ },
15090
+ {
15091
+ "property": "confidence",
15092
+ "type": "number",
15093
+ "required": true,
15094
+ "scope": "framework",
15095
+ "label": "Confidence",
15096
+ "description": "Confidence in the impact estimate (1-10)"
15097
+ },
15098
+ {
15099
+ "property": "ease",
15100
+ "type": "number",
15101
+ "required": true,
15102
+ "scope": "framework",
15103
+ "label": "Ease",
15104
+ "description": "Ease of implementation (1-10)"
15105
+ }
15106
+ ],
15107
+ "computed": [
15108
+ {
15109
+ "property": "ice_score",
15110
+ "expression": "impact * confidence * ease",
15111
+ "label": "ICE Score",
15112
+ "format": "number"
15113
+ }
15114
+ ]
15115
+ }
14830
15116
  },
14831
15117
  "structure": {
14832
15118
  "pattern": "table"
@@ -14928,6 +15214,11 @@ var UPG_FRAMEWORKS = [
14928
15214
  "label": "Job Size",
14929
15215
  "entityTypeId": "metric",
14930
15216
  "description": "Estimated effort (story points, t-shirt size, or person-weeks)"
15217
+ },
15218
+ {
15219
+ "label": "Opportunities to score",
15220
+ "entityTypeId": "opportunity",
15221
+ "description": "Opportunities scored on the same WSJF (Weighted Shortest Job First) inputs as features."
14931
15222
  }
14932
15223
  ],
14933
15224
  "data": {
@@ -14939,6 +15230,10 @@ var UPG_FRAMEWORKS = [
14939
15230
  {
14940
15231
  "type": "metric",
14941
15232
  "role": "item"
15233
+ },
15234
+ {
15235
+ "type": "opportunity",
15236
+ "role": "scored_item"
14942
15237
  }
14943
15238
  ],
14944
15239
  "required_properties": {
@@ -14975,6 +15270,40 @@ var UPG_FRAMEWORKS = [
14975
15270
  "label": "Job Size",
14976
15271
  "description": "Estimated effort (story points, t-shirt size, or person-weeks)"
14977
15272
  }
15273
+ ],
15274
+ "opportunity": [
15275
+ {
15276
+ "property": "user_value",
15277
+ "type": "number",
15278
+ "required": true,
15279
+ "scope": "framework",
15280
+ "label": "User/Business Value",
15281
+ "description": "Relative value to users and the business if delivered"
15282
+ },
15283
+ {
15284
+ "property": "time_criticality",
15285
+ "type": "number",
15286
+ "required": true,
15287
+ "scope": "framework",
15288
+ "label": "Time Criticality",
15289
+ "description": "How much value decays if delivery is delayed (deadlines, competition, seasonal windows)"
15290
+ },
15291
+ {
15292
+ "property": "risk_reduction",
15293
+ "type": "number",
15294
+ "required": true,
15295
+ "scope": "framework",
15296
+ "label": "Risk Reduction / Opportunity Enablement",
15297
+ "description": "Value from reducing risk or enabling future opportunities"
15298
+ },
15299
+ {
15300
+ "property": "job_size",
15301
+ "type": "number",
15302
+ "required": true,
15303
+ "scope": "framework",
15304
+ "label": "Job Size",
15305
+ "description": "Estimated effort (story points, t-shirt size, or person-weeks)"
15306
+ }
14978
15307
  ]
14979
15308
  },
14980
15309
  "computed_properties": [
@@ -14984,8 +15313,63 @@ var UPG_FRAMEWORKS = [
14984
15313
  "entity_type": "feature",
14985
15314
  "label": "WSJF Score",
14986
15315
  "format": "number"
15316
+ },
15317
+ {
15318
+ "property": "wsjf_score",
15319
+ "expression": "(user_value + time_criticality + risk_reduction) / job_size",
15320
+ "entity_type": "opportunity",
15321
+ "label": "WSJF Score",
15322
+ "format": "number"
14987
15323
  }
14988
- ]
15324
+ ],
15325
+ "scoring_lens": {
15326
+ "applies_to": [
15327
+ "feature",
15328
+ "opportunity"
15329
+ ],
15330
+ "inputs": [
15331
+ {
15332
+ "property": "user_value",
15333
+ "type": "number",
15334
+ "required": true,
15335
+ "scope": "framework",
15336
+ "label": "User/Business Value",
15337
+ "description": "Relative value to users and the business if delivered"
15338
+ },
15339
+ {
15340
+ "property": "time_criticality",
15341
+ "type": "number",
15342
+ "required": true,
15343
+ "scope": "framework",
15344
+ "label": "Time Criticality",
15345
+ "description": "How much value decays if delivery is delayed (deadlines, competition, seasonal windows)"
15346
+ },
15347
+ {
15348
+ "property": "risk_reduction",
15349
+ "type": "number",
15350
+ "required": true,
15351
+ "scope": "framework",
15352
+ "label": "Risk Reduction / Opportunity Enablement",
15353
+ "description": "Value from reducing risk or enabling future opportunities"
15354
+ },
15355
+ {
15356
+ "property": "job_size",
15357
+ "type": "number",
15358
+ "required": true,
15359
+ "scope": "framework",
15360
+ "label": "Job Size",
15361
+ "description": "Estimated effort (story points, t-shirt size, or person-weeks)"
15362
+ }
15363
+ ],
15364
+ "computed": [
15365
+ {
15366
+ "property": "wsjf_score",
15367
+ "expression": "(user_value + time_criticality + risk_reduction) / job_size",
15368
+ "label": "WSJF Score",
15369
+ "format": "number"
15370
+ }
15371
+ ]
15372
+ }
14989
15373
  },
14990
15374
  "structure": {
14991
15375
  "pattern": "table"
@@ -15058,7 +15442,7 @@ var UPG_FRAMEWORKS = [
15058
15442
  ],
15059
15443
  "name": "Cost of Delay",
15060
15444
  "version": "1.0.0",
15061
- "description": "Quantify the economic cost of not shipping a feature to drive priority decisions. Combines urgency with value.",
15445
+ "description": "Quantify the economic cost of not shipping a feature or opportunity to drive priority decisions. Combines urgency with value.",
15062
15446
  "category": "prioritization",
15063
15447
  "origin": {
15064
15448
  "type": "practitioner",
@@ -15091,6 +15475,11 @@ var UPG_FRAMEWORKS = [
15091
15475
  "label": "Risk Reduction",
15092
15476
  "entityTypeId": "risk",
15093
15477
  "description": "What risk does this mitigate?"
15478
+ },
15479
+ {
15480
+ "label": "Opportunities to score",
15481
+ "entityTypeId": "opportunity",
15482
+ "description": "Opportunities scored on the same Cost of Delay inputs as features."
15094
15483
  }
15095
15484
  ],
15096
15485
  "data": {
@@ -15110,6 +15499,10 @@ var UPG_FRAMEWORKS = [
15110
15499
  {
15111
15500
  "type": "risk",
15112
15501
  "role": "item"
15502
+ },
15503
+ {
15504
+ "type": "opportunity",
15505
+ "role": "scored_item"
15113
15506
  }
15114
15507
  ],
15115
15508
  "required_properties": {
@@ -15130,6 +15523,24 @@ var UPG_FRAMEWORKS = [
15130
15523
  "label": "Job Size",
15131
15524
  "description": "Weeks of development effort"
15132
15525
  }
15526
+ ],
15527
+ "opportunity": [
15528
+ {
15529
+ "property": "cost_of_delay",
15530
+ "type": "number",
15531
+ "required": true,
15532
+ "scope": "framework",
15533
+ "label": "Cost of Delay",
15534
+ "description": "Weekly revenue impact of not shipping"
15535
+ },
15536
+ {
15537
+ "property": "job_size",
15538
+ "type": "number",
15539
+ "required": true,
15540
+ "scope": "framework",
15541
+ "label": "Job Size",
15542
+ "description": "Weeks of development effort"
15543
+ }
15133
15544
  ]
15134
15545
  },
15135
15546
  "computed_properties": [
@@ -15139,8 +15550,47 @@ var UPG_FRAMEWORKS = [
15139
15550
  "entity_type": "feature",
15140
15551
  "label": "WSJF Score",
15141
15552
  "format": "number"
15553
+ },
15554
+ {
15555
+ "property": "wsjf_score",
15556
+ "expression": "cost_of_delay / job_size",
15557
+ "entity_type": "opportunity",
15558
+ "label": "WSJF Score",
15559
+ "format": "number"
15142
15560
  }
15143
- ]
15561
+ ],
15562
+ "scoring_lens": {
15563
+ "applies_to": [
15564
+ "feature",
15565
+ "opportunity"
15566
+ ],
15567
+ "inputs": [
15568
+ {
15569
+ "property": "cost_of_delay",
15570
+ "type": "number",
15571
+ "required": true,
15572
+ "scope": "framework",
15573
+ "label": "Cost of Delay",
15574
+ "description": "Weekly revenue impact of not shipping"
15575
+ },
15576
+ {
15577
+ "property": "job_size",
15578
+ "type": "number",
15579
+ "required": true,
15580
+ "scope": "framework",
15581
+ "label": "Job Size",
15582
+ "description": "Weeks of development effort"
15583
+ }
15584
+ ],
15585
+ "computed": [
15586
+ {
15587
+ "property": "wsjf_score",
15588
+ "expression": "cost_of_delay / job_size",
15589
+ "label": "WSJF Score",
15590
+ "format": "number"
15591
+ }
15592
+ ]
15593
+ }
15144
15594
  },
15145
15595
  "structure": {
15146
15596
  "pattern": "table"
@@ -23728,7 +24178,7 @@ function serializePortfolioWithHeader(doc, opts) {
23728
24178
  header.integrity = { algorithm: INTEGRITY_ALGORITHM, body: computeBodyChecksum(doc) };
23729
24179
  return JSON.stringify({ $upg: header, ...body }, null, 2) + "\n";
23730
24180
  }
23731
- var UPG_VERSION = "0.8.4";
24181
+ var UPG_VERSION = "0.8.7";
23732
24182
  var MARKDOWN_FORMAT_VERSION = "0.1";
23733
24183
  var UPG_TYPES = getTypes();
23734
24184
  var UPG_TYPES_SET = new Set(UPG_TYPES);
@@ -26237,6 +26687,7 @@ var getEntitySchema = (args, _ctx) => {
26237
26687
  // src/tools/frameworks.ts
26238
26688
  import {
26239
26689
  applyFramework as applyFrameworkLib,
26690
+ applyFrameworkEnvelope,
26240
26691
  scoreEntity as scoreEntityLib
26241
26692
  } from "@unified-product-graph/sdk";
26242
26693
  var applyFramework = (args, ctx) => {
@@ -26252,18 +26703,7 @@ var applyFramework = (args, ctx) => {
26252
26703
  entity_ids: args.entity_ids ?? [],
26253
26704
  status: args.status
26254
26705
  });
26255
- return text(
26256
- JSON.stringify(
26257
- {
26258
- exercise_id: result.exercise.id,
26259
- exercise: result.exercise,
26260
- included: result.edges.map((e) => ({ edge_id: e.id, entity_id: e.target })),
26261
- warnings: result.warnings
26262
- },
26263
- null,
26264
- 2
26265
- )
26266
- );
26706
+ return text(JSON.stringify(applyFrameworkEnvelope(result), null, 2));
26267
26707
  } catch (err) {
26268
26708
  return textError(err.message);
26269
26709
  }
@@ -27010,10 +27450,19 @@ var listFrameworks = (args) => {
27010
27450
  const slice = pool.slice(cursorOffset, cursorOffset + limit);
27011
27451
  const nextOffset = cursorOffset + slice.length;
27012
27452
  const nextCursor = nextOffset < total ? encodeCursor(nextOffset) : void 0;
27453
+ const frameworks = slice.map((f) => ({
27454
+ id: f.id,
27455
+ name: f.name,
27456
+ category: f.category,
27457
+ description: f.description,
27458
+ tags: f.tags,
27459
+ approach_ids: f.approach_ids,
27460
+ structure_pattern: f.structure?.pattern
27461
+ }));
27013
27462
  const body = {
27014
27463
  total,
27015
27464
  count: slice.length,
27016
- frameworks: slice
27465
+ frameworks
27017
27466
  };
27018
27467
  if (nextCursor) body.next_cursor = nextCursor;
27019
27468
  return text(JSON.stringify(body, null, 2));
@@ -27022,7 +27471,10 @@ var getFramework = (args) => {
27022
27471
  const id = args.id;
27023
27472
  if (!id) return textError("Missing required parameter: id");
27024
27473
  const framework = UPG_FRAMEWORKS_BY_ID[id];
27025
- if (!framework) return textError(`Unknown framework id: ${id}`);
27474
+ if (!framework)
27475
+ return textError(
27476
+ `Unknown framework id: "${id}". Pass a framework id from the catalog (e.g. 'moscow', 'rice-scoring', 'kano-model'). See list_frameworks for the full list.`
27477
+ );
27026
27478
  return text(JSON.stringify(framework, null, 2));
27027
27479
  };
27028
27480
  function buildEdgeEntries(filterSource, filterTarget) {
@@ -28713,7 +29165,7 @@ var TOOL_DEFINITIONS = [
28713
29165
  },
28714
29166
  {
28715
29167
  name: "list_frameworks",
28716
- description: "List the canonical `UPGFramework` definitions; the 34 curated, famous product frameworks that anchor the public catalog (spanning strategy, discovery, prioritisation, design, growth, engineering, and reflection classics). Paginated (default 50, max 200). Cursor is opaque: pass `next_cursor` from a previous response. Optional `category` is exact-match against `UPGFramework.category` and applies before pagination.",
29168
+ description: "List the canonical `UPGFramework` definitions: the curated, famous product frameworks that anchor the public catalog (spanning strategy, discovery, prioritisation, design, growth, engineering, and reflection classics). Returns a lightweight summary per framework (id, name, category, description, tags, approach_ids, structure_pattern); call `get_framework(id)` for the full record. Paginated (default 50, max 200). Cursor is opaque: pass `next_cursor` from a previous response. Optional `category` is exact-match against `UPGFramework.category` and applies before pagination.",
28717
29169
  inputSchema: {
28718
29170
  type: "object",
28719
29171
  properties: {
@@ -29642,6 +30094,7 @@ async function runMcpServer() {
29642
30094
  }
29643
30095
  }
29644
30096
  const store = new UPGFileStore();
30097
+ store.setWriter("upg-mcp-local", SERVER_VERSION);
29645
30098
  await store.load(resolvedPath);
29646
30099
  const deprecated = getDeprecatedTypes();
29647
30100
  const nodes = store.getAllNodes();