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

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,19 @@
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.8] - 2026-06-03
6
+
7
+ ### Added
8
+ - `validate_graph` now returns `structurally_valid` (spec conformance, independent of product-health linting) alongside the existing `valid` (combined structure + health, unchanged). N4.
9
+ - 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.
10
+
11
+ ### Changed
12
+ - Bundles core 0.8.8 (slot roles, kano/raid-log scoring lenses, framework-score validation).
13
+
14
+ ## [0.8.7] - 2026-06-03
15
+
16
+ `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.
17
+
5
18
  ## [0.8.5] - 2026-06-02
6
19
 
7
20
  Field-report fast-follow (tester report on 0.8.4).
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
 
@@ -1413,11 +1415,13 @@ Apply a framework (MoSCoW, RICE, Kano, ...) to a set of entities: creates a fram
1413
1415
 
1414
1416
  **Returns:**
1415
1417
 
1416
- JSON: `{ exercise_id, exercise, included: [{ edge_id, entity_id }], warnings }`.
1418
+ JSON: `{ exercise_id, exercise, included: [{ edge_id, entity_id, edge_type }], warnings }`
1419
+ (the shared cross-surface envelope; identical to CLI `apply --json`).
1417
1420
 
1418
1421
  **Throws:**
1419
1422
 
1420
- - textError on a missing/unknown framework_id.
1423
+ - textError on a missing/unknown framework_id, or when no requested
1424
+ entity resolves (no dangling exercise is left behind).
1421
1425
 
1422
1426
  **See also:** `score_entity`
1423
1427
 
@@ -1566,7 +1570,8 @@ Return one `UPGFramework` by id (e.g. "rice-scoring", "lean-canvas"). Includes a
1566
1570
 
1567
1571
  | Name | Type | Required | Description |
1568
1572
  | ---- | ---- | -------- | ----------- |
1569
- | `id` | string | | Framework id (kebab-case). |
1573
+ | `framework_id` | string | | Alias for `id` (matches the key used by apply_framework / prioritise). |
1574
+ | `id` | string | ✓ | Framework id (kebab-case). Alias: `framework_id`. |
1570
1575
 
1571
1576
  **Returns:**
1572
1577
 
@@ -1574,7 +1579,8 @@ JSON: the full `UPGFramework` record.
1574
1579
 
1575
1580
  **Throws:**
1576
1581
 
1577
- - textError when `id` is missing or unknown.
1582
+ - textError when neither `id` nor `framework_id` is provided, or the
1583
+ id is unknown.
1578
1584
 
1579
1585
  **See also:** `list_frameworks`, `prioritise`, `get_playbook`, `get_approach`
1580
1586
 
@@ -2021,7 +2027,7 @@ JSON: `{ patterns: string[], total: number }`
2021
2027
 
2022
2028
  ### `list_frameworks`
2023
2029
 
2024
- 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.
2030
+ 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.
2025
2031
 
2026
2032
  **Atomicity:** `atomic (read-only)`
2027
2033
 
@@ -2035,7 +2041,7 @@ List the canonical `UPGFramework` definitions; the 34 curated, famous product fr
2035
2041
 
2036
2042
  **Returns:**
2037
2043
 
2038
- JSON: `{ total, count, next_cursor?, frameworks: UPGFramework[] }`
2044
+ JSON: `{ total, count, next_cursor?, frameworks: Array<{ id, name, category, description, tags, approach_ids, structure_pattern }> }`
2039
2045
 
2040
2046
  **See also:** `get_framework`, `list_framework_categories`, `list_framework_structure_patterns`, `prioritise`, `list_approaches`
2041
2047
 
@@ -2609,11 +2615,12 @@ Walk the loaded graph and return a per-class, per-node report of schema drift pl
2609
2615
 
2610
2616
  **Returns:**
2611
2617
 
2612
- JSON: `{ valid, summary, entity_drift?, edge_drift?,
2613
- property_drift?, top_level_drift?, lifecycle_drift?, self_referential?,
2614
- anti_pattern_violations?, notes?, _hash }`. Per-class drift arrays appear
2615
- only when the requested `scope` includes that class. Each array is capped
2616
- at `limit` (default 100).
2618
+ JSON: `{ valid, structurally_valid?, summary, entity_drift?,
2619
+ edge_drift?, property_drift?, top_level_drift?, lifecycle_drift?,
2620
+ self_referential?, anti_pattern_violations?, notes?, _hash }`. Per-class
2621
+ drift arrays appear only when the requested `scope` includes that class.
2622
+ Each array is capped at `limit` (default 100). `structurally_valid` is
2623
+ omitted when `skip_drift: true`.
2617
2624
 
2618
2625
  **Throws:**
2619
2626
 
@@ -2622,9 +2629,11 @@ recognised values.
2622
2629
 
2623
2630
  **Warnings (non-error surfaces):**
2624
2631
 
2625
- - Top-level `valid` is true ONLY when both drift is empty AND no
2626
- anti-pattern violations fired. Set `skip_anti_patterns: true` for a
2627
- pure spec-shape check; `skip_drift: true` for catalog-only.
2632
+ - `valid` is true ONLY when both drift is empty AND no anti-pattern
2633
+ violations fired it conflates structure and product-health. For a pure
2634
+ spec-conformance check read `structurally_valid` (or set
2635
+ `skip_anti_patterns: true`, which makes `valid` track structure alone).
2636
+ `skip_drift: true` gives a catalog-only run and omits `structurally_valid`.
2628
2637
 
2629
2638
  **Examples:**
2630
2639