@unified-product-graph/mcp-server 0.8.7 → 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,23 @@
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
+
13
+ ## [0.8.8] - 2026-06-03
14
+
15
+ ### Added
16
+ - `validate_graph` now returns `structurally_valid` (spec conformance, independent of product-health linting) alongside the existing `valid` (combined structure + health, unchanged). N4.
17
+ - Non-breaking parameter aliases: `get_node` accepts `node_id`|`id`, `get_framework` `id`|`framework_id`, `switch_product` `file`|`product`; the canonical key wins and errors name both. N2.
18
+
19
+ ### Changed
20
+ - Bundles core 0.8.8 (slot roles, kano/raid-log scoring lenses, framework-score validation).
21
+
5
22
  ## [0.8.7] - 2026-06-03
6
23
 
7
24
  `list_frameworks` now returns a lightweight summary per framework (the full four-layer record was overflowing the tool-result token cap on the default call); `get_framework` returns the full record. `apply_framework` shares one cross-surface envelope with the CLI (`{ exercise_id, exercise, included, warnings }`). `get_framework` gives a helpful error on an unknown id. Last-writer provenance is stamped on writes. The `upg-prioritise` skill teaches the apply/score exercise flow. Co-versions the @unified-product-graph/* 0.8.7 train.
package/TOOLS.md CHANGED
@@ -379,7 +379,8 @@ Get a single entity by ID, with full properties and all connected edges.
379
379
  | Name | Type | Required | Description |
380
380
  | ---- | ---- | -------- | ----------- |
381
381
  | `compact_edges` | boolean | | Omit source_title/target_title from edges (saves ~30% on edge-heavy nodes) |
382
- | `node_id` | string || The node ID |
382
+ | `id` | string | | Alias for `node_id`. |
383
+ | `node_id` | string | ✓ | The node ID. Alias: `id`. |
383
384
 
384
385
  **Returns:**
385
386
 
@@ -388,8 +389,8 @@ omits `source_title` and `target_title` (saves ~30% on edge-heavy nodes).
388
389
 
389
390
  **Throws:**
390
391
 
391
- - Returns a textError when `node_id` is missing or the node does not
392
- exist.
392
+ - Returns a textError when neither `node_id` nor `id` is provided, or
393
+ the node does not exist.
393
394
 
394
395
  **See also:** `get_nodes`
395
396
 
@@ -1296,7 +1297,8 @@ loads the new file as separate filesystem operations.`
1296
1297
 
1297
1298
  | Name | Type | Required | Description |
1298
1299
  | ---- | ---- | -------- | ----------- |
1299
- | `file` | string | ✓ | Path to the .upg file (relative, absolute, or a bare product name in workspace mode). |
1300
+ | `file` | string | ✓ | Path to the .upg file (relative, absolute, or a bare product name in workspace mode). Alias: `product`. |
1301
+ | `product` | string | | Alias for `file`. |
1300
1302
 
1301
1303
  **Returns:**
1302
1304
 
@@ -1304,8 +1306,8 @@ JSON: `{ message, file, product: { title, stage }, entities }`.
1304
1306
 
1305
1307
  **Throws:**
1306
1308
 
1307
- - Returns a textError when the file cannot be resolved or the load
1308
- fails (file watcher / parse error).
1309
+ - Returns a textError when neither `file` nor `product` is provided, or
1310
+ the file cannot be resolved, or the load fails (file watcher / parse error).
1309
1311
 
1310
1312
  **Warnings (non-error surfaces):**
1311
1313
 
@@ -1408,12 +1410,13 @@ Apply a framework (MoSCoW, RICE, Kano, ...) to a set of entities: creates a fram
1408
1410
  | ---- | ---- | -------- | ----------- |
1409
1411
  | `entity_ids` | array | | Entities to pull into the exercise (any type). |
1410
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). |
1411
1414
  | `status` | string | | Lifecycle phase: draft \| active \| archived (default draft). |
1412
1415
  | `title` | string | | Human label for the exercise (default "<Framework> exercise"). |
1413
1416
 
1414
1417
  **Returns:**
1415
1418
 
1416
- 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 }`
1417
1420
  (the shared cross-surface envelope; identical to CLI `apply --json`).
1418
1421
 
1419
1422
  **Throws:**
@@ -1568,7 +1571,8 @@ Return one `UPGFramework` by id (e.g. "rice-scoring", "lean-canvas"). Includes a
1568
1571
 
1569
1572
  | Name | Type | Required | Description |
1570
1573
  | ---- | ---- | -------- | ----------- |
1571
- | `id` | string | | Framework id (kebab-case). |
1574
+ | `framework_id` | string | | Alias for `id` (matches the key used by apply_framework / prioritise). |
1575
+ | `id` | string | ✓ | Framework id (kebab-case). Alias: `framework_id`. |
1572
1576
 
1573
1577
  **Returns:**
1574
1578
 
@@ -1576,7 +1580,8 @@ JSON: the full `UPGFramework` record.
1576
1580
 
1577
1581
  **Throws:**
1578
1582
 
1579
- - textError when `id` is missing or unknown.
1583
+ - textError when neither `id` nor `framework_id` is provided, or the
1584
+ id is unknown.
1580
1585
 
1581
1586
  **See also:** `list_frameworks`, `prioritise`, `get_playbook`, `get_approach`
1582
1587
 
@@ -2355,7 +2360,8 @@ Record a framework's result for one entity on the exercise's includes edge (a Mo
2355
2360
  | `entity_id` | string | ✓ | Required. The entity being scored. |
2356
2361
  | `exercise_id` | string | ✓ | Required. The framework_exercise id. |
2357
2362
  | `replace` | boolean | | Replace the edge properties instead of merging (default false). |
2358
- | `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 }. |
2359
2365
 
2360
2366
  **Returns:**
2361
2367
 
@@ -2611,11 +2617,12 @@ Walk the loaded graph and return a per-class, per-node report of schema drift pl
2611
2617
 
2612
2618
  **Returns:**
2613
2619
 
2614
- JSON: `{ valid, summary, entity_drift?, edge_drift?,
2615
- property_drift?, top_level_drift?, lifecycle_drift?, self_referential?,
2616
- anti_pattern_violations?, notes?, _hash }`. Per-class drift arrays appear
2617
- only when the requested `scope` includes that class. Each array is capped
2618
- at `limit` (default 100).
2620
+ JSON: `{ valid, structurally_valid?, summary, entity_drift?,
2621
+ edge_drift?, property_drift?, top_level_drift?, lifecycle_drift?,
2622
+ self_referential?, anti_pattern_violations?, notes?, _hash }`. Per-class
2623
+ drift arrays appear only when the requested `scope` includes that class.
2624
+ Each array is capped at `limit` (default 100). `structurally_valid` is
2625
+ omitted when `skip_drift: true`.
2619
2626
 
2620
2627
  **Throws:**
2621
2628
 
@@ -2624,9 +2631,11 @@ recognised values.
2624
2631
 
2625
2632
  **Warnings (non-error surfaces):**
2626
2633
 
2627
- - Top-level `valid` is true ONLY when both drift is empty AND no
2628
- anti-pattern violations fired. Set `skip_anti_patterns: true` for a
2629
- pure spec-shape check; `skip_drift: true` for catalog-only.
2634
+ - `valid` is true ONLY when both drift is empty AND no anti-pattern
2635
+ violations fired it conflates structure and product-health. For a pure
2636
+ spec-conformance check read `structurally_valid` (or set
2637
+ `skip_anti_patterns: true`, which makes `valid` track structure alone).
2638
+ `skip_drift: true` gives a catalog-only run and omits `structurally_valid`.
2630
2639
 
2631
2640
  **Examples:**
2632
2641