@unified-product-graph/mcp-server 0.8.8 → 0.8.9

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/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to `@unified-product-graph/mcp-server` are documented in this file. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
4
4
 
5
+ ## [0.8.9] - 2026-06-03
6
+
7
+ ### Added
8
+ - `apply_framework` accepts `slot_roles` (entity id to role); `score_entity` accepts `slot_role` (Phase 3b-2), validated against the framework's declared slot roles.
9
+
10
+ ### Changed
11
+ - Bundles core 0.8.9 (scoring_lens to scoring_method rename; slot_role on the exercise edge).
12
+
5
13
  ## [0.8.8] - 2026-06-03
6
14
 
7
15
  ### Added
package/TOOLS.md CHANGED
@@ -1410,12 +1410,13 @@ Apply a framework (MoSCoW, RICE, Kano, ...) to a set of entities: creates a fram
1410
1410
  | ---- | ---- | -------- | ----------- |
1411
1411
  | `entity_ids` | array | | Entities to pull into the exercise (any type). |
1412
1412
  | `framework_id` | string | ✓ | Required. UPGFramework.id (e.g. "moscow", "rice-scoring"). |
1413
+ | `slot_roles` | object | | Optional map of entity id → framework slot role (e.g. { "feat_x": "pain_reliever" }), stamped onto each entity's includes edge. Validated against the framework's declared slot roles (warn-only). |
1413
1414
  | `status` | string | | Lifecycle phase: draft \| active \| archived (default draft). |
1414
1415
  | `title` | string | | Human label for the exercise (default "<Framework> exercise"). |
1415
1416
 
1416
1417
  **Returns:**
1417
1418
 
1418
- JSON: `{ exercise_id, exercise, included: [{ edge_id, entity_id, edge_type }], warnings }`
1419
+ JSON: `{ exercise_id, exercise, included: [{ edge_id, entity_id, edge_type, slot_role? }], warnings }`
1419
1420
  (the shared cross-surface envelope; identical to CLI `apply --json`).
1420
1421
 
1421
1422
  **Throws:**
@@ -2359,7 +2360,8 @@ Record a framework's result for one entity on the exercise's includes edge (a Mo
2359
2360
  | `entity_id` | string | ✓ | Required. The entity being scored. |
2360
2361
  | `exercise_id` | string | ✓ | Required. The framework_exercise id. |
2361
2362
  | `replace` | boolean | | Replace the edge properties instead of merging (default false). |
2362
- | `values` | object || Required. The result as { input: value }, e.g. { "moscow": "must" } or { "reach": 800, "impact": 3 }. |
2363
+ | `slot_role` | string | | Optional framework slot role this entity plays (e.g. "pain_reliever"). Rides the same edge as the scores; validated against the framework's declared slot roles (warn-only). |
2364
+ | `values` | object | ✓ | Required. The result as { input: value }, e.g. { "moscow": "must" } or { "reach": 4, "impact": 3 }. |
2363
2365
 
2364
2366
  **Returns:**
2365
2367
 
package/dist/index.js CHANGED
@@ -12521,7 +12521,7 @@ var UPG_FRAMEWORKS = [
12521
12521
  "format": "number"
12522
12522
  }
12523
12523
  ],
12524
- "scoring_lens": {
12524
+ "scoring_method": {
12525
12525
  "applies_to": [
12526
12526
  "feature",
12527
12527
  "opportunity",
@@ -12864,7 +12864,7 @@ var UPG_FRAMEWORKS = [
12864
12864
  "format": "number"
12865
12865
  }
12866
12866
  ],
12867
- "scoring_lens": {
12867
+ "scoring_method": {
12868
12868
  "applies_to": [
12869
12869
  "feature"
12870
12870
  ],
@@ -14981,7 +14981,7 @@ var UPG_FRAMEWORKS = [
14981
14981
  "format": "number"
14982
14982
  }
14983
14983
  ],
14984
- "scoring_lens": {
14984
+ "scoring_method": {
14985
14985
  "applies_to": [
14986
14986
  "risk"
14987
14987
  ],
@@ -15246,7 +15246,7 @@ var UPG_FRAMEWORKS = [
15246
15246
  "format": "number"
15247
15247
  }
15248
15248
  ],
15249
- "scoring_lens": {
15249
+ "scoring_method": {
15250
15250
  "applies_to": [
15251
15251
  "feature",
15252
15252
  "opportunity",
@@ -15502,7 +15502,7 @@ var UPG_FRAMEWORKS = [
15502
15502
  "format": "number"
15503
15503
  }
15504
15504
  ],
15505
- "scoring_lens": {
15505
+ "scoring_method": {
15506
15506
  "applies_to": [
15507
15507
  "feature",
15508
15508
  "opportunity"
@@ -15739,7 +15739,7 @@ var UPG_FRAMEWORKS = [
15739
15739
  "format": "number"
15740
15740
  }
15741
15741
  ],
15742
- "scoring_lens": {
15742
+ "scoring_method": {
15743
15743
  "applies_to": [
15744
15744
  "feature",
15745
15745
  "opportunity"
@@ -24365,7 +24365,7 @@ function serializePortfolioWithHeader(doc, opts) {
24365
24365
  header.integrity = { algorithm: INTEGRITY_ALGORITHM, body: computeBodyChecksum(doc) };
24366
24366
  return JSON.stringify({ $upg: header, ...body }, null, 2) + "\n";
24367
24367
  }
24368
- var UPG_VERSION = "0.8.7";
24368
+ var UPG_VERSION = "0.8.9";
24369
24369
  var MARKDOWN_FORMAT_VERSION = "0.1";
24370
24370
  var UPG_TYPES = getTypes();
24371
24371
  var UPG_TYPES_SET = new Set(UPG_TYPES);
@@ -26892,6 +26892,7 @@ var applyFramework = (args, ctx) => {
26892
26892
  framework_id: frameworkId,
26893
26893
  title: args.title,
26894
26894
  entity_ids: args.entity_ids ?? [],
26895
+ slot_roles: args.slot_roles,
26895
26896
  status: args.status
26896
26897
  });
26897
26898
  return text(JSON.stringify(applyFrameworkEnvelope(result), null, 2));
@@ -26915,6 +26916,7 @@ var scoreEntity = (args, ctx) => {
26915
26916
  exercise_id: exerciseId,
26916
26917
  entity_id: entityId,
26917
26918
  values,
26919
+ slot_role: args.slot_role,
26918
26920
  replace: args.replace
26919
26921
  });
26920
26922
  if ("error" in result) return textError(result.error);
@@ -29299,6 +29301,7 @@ var TOOL_DEFINITIONS = [
29299
29301
  framework_id: { type: "string", description: 'Required. UPGFramework.id (e.g. "moscow", "rice-scoring").' },
29300
29302
  title: { type: "string", description: 'Human label for the exercise (default "<Framework> exercise").' },
29301
29303
  entity_ids: { type: "array", items: { type: "string" }, description: "Entities to pull into the exercise (any type)." },
29304
+ slot_roles: { type: "object", description: `Optional map of entity id \u2192 framework slot role (e.g. { "feat_x": "pain_reliever" }), stamped onto each entity's includes edge. Validated against the framework's declared slot roles (warn-only).` },
29302
29305
  status: { type: "string", description: "Lifecycle phase: draft | active | archived (default draft)." }
29303
29306
  },
29304
29307
  required: ["framework_id"]
@@ -29312,7 +29315,8 @@ var TOOL_DEFINITIONS = [
29312
29315
  properties: {
29313
29316
  exercise_id: { type: "string", description: "Required. The framework_exercise id." },
29314
29317
  entity_id: { type: "string", description: "Required. The entity being scored." },
29315
- values: { type: "object", description: 'Required. The result as { input: value }, e.g. { "moscow": "must" } or { "reach": 800, "impact": 3 }.' },
29318
+ values: { type: "object", description: 'Required. The result as { input: value }, e.g. { "moscow": "must" } or { "reach": 4, "impact": 3 }.' },
29319
+ slot_role: { type: "string", description: `Optional framework slot role this entity plays (e.g. "pain_reliever"). Rides the same edge as the scores; validated against the framework's declared slot roles (warn-only).` },
29316
29320
  replace: { type: "boolean", description: "Replace the edge properties instead of merging (default false)." }
29317
29321
  },
29318
29322
  required: ["exercise_id", "entity_id", "values"]