@hebbianvault/mcp 0.5.0 → 0.6.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.
@@ -1,13 +1,7 @@
1
1
  /**
2
- * src/tools/traverse.ts
3
- *
4
2
  * Tool: hebbian_traverse
5
- * Walk the workspace graph outward from a starting node up to N hops.
6
3
  *
7
- * Built over the scoped workspace graph (GET /vault/graph), where each node
8
- * carries its inline edges. We do a breadth-first walk from the start node;
9
- * only nodes the caller's token may see are present in the graph, so traversal
10
- * never crosses an access boundary.
4
+ * Return a bounded, weight-ranked neighbourhood from the scoped workspace graph.
11
5
  */
12
6
  import type { Tool } from "@modelcontextprotocol/sdk/types.js";
13
7
  import type { HebbianClient } from "../client.js";
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/tools/traverse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,eAAO,MAAM,gBAAgB,EAAE,IA+B9B,CAAC;AAEF,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,CAwFjB"}
1
+ {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../src/tools/traverse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgBlD,eAAO,MAAM,gBAAgB,EAAE,IAgC9B,CAAC;AAEF,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyFD,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,CA8LjB"}
@@ -1,19 +1,21 @@
1
1
  /**
2
- * src/tools/traverse.ts
3
- *
4
2
  * Tool: hebbian_traverse
5
- * Walk the workspace graph outward from a starting node up to N hops.
6
3
  *
7
- * Built over the scoped workspace graph (GET /vault/graph), where each node
8
- * carries its inline edges. We do a breadth-first walk from the start node;
9
- * only nodes the caller's token may see are present in the graph, so traversal
10
- * never crosses an access boundary.
4
+ * Return a bounded, weight-ranked neighbourhood from the scoped workspace graph.
11
5
  */
12
6
  import { HebbianApiError } from "../client.js";
13
7
  import { fetchGraph, normaliseEdge, summarise } from "./graph_helpers.js";
14
- import { stringifyUntrustedResult } from "./untrusted_content.js";
8
+ import { frameUntrustedText, stringifyUntrustedResult } from "./untrusted_content.js";
15
9
  const MAX_HOPS = 3;
16
10
  const DEFAULT_HOPS = 2;
11
+ // neighbourhood_v0 response budgets. PROVISIONAL — not ratified by any lane, including
12
+ // graph. Ported from the Python reference (py/src/hebbianvault_mcp/tools.py:39-41), but the
13
+ // two runtimes do NOT measure the same byte stream: Python frames untrusted text per field,
14
+ // TypeScript frames the whole response once at the MCP boundary (src/index.ts:185). Retune
15
+ // here, in one place, and only against measurements taken on THIS runtime.
16
+ const NEIGHBOURHOOD_MAX_NODES = 50;
17
+ const NEIGHBOURHOOD_MAX_CHARS = 15_000;
18
+ const NEIGHBOURHOOD_MAX_DEPTH = 3;
17
19
  export const HEBBIAN_TRAVERSE = {
18
20
  name: "hebbian_traverse",
19
21
  description: "Walk your Hebbian workspace graph from a starting node, returning connected " +
@@ -32,9 +34,10 @@ export const HEBBIAN_TRAVERSE = {
32
34
  max_hops: {
33
35
  type: "number",
34
36
  description: `Maximum number of hops to traverse. Default: ${DEFAULT_HOPS}. Max: ${MAX_HOPS}. ` +
35
- "Each extra hop multiplies the size of the response, not its relevance. On a " +
36
- "dense workspace a 3-hop walk already returns hundreds of thousands of " +
37
- "characters. Start at 1 or 2 and widen only if the answer is genuinely missing.",
37
+ "Each extra hop multiplies the size of the response, not its relevance. The " +
38
+ "response is bounded to about 50 nodes and 15,000 characters; inspect " +
39
+ "truncated_at_hop, bound_hit, and nodes_dropped to detect truncation. Start " +
40
+ "at 1 or 2 and widen only if the answer is genuinely missing.",
38
41
  minimum: 1,
39
42
  maximum: MAX_HOPS,
40
43
  },
@@ -43,76 +46,219 @@ export const HEBBIAN_TRAVERSE = {
43
46
  additionalProperties: false,
44
47
  },
45
48
  };
49
+ function isUuidV5(uuid) {
50
+ const groups = uuid.split("-");
51
+ return groups.length >= 3 && groups[2].length > 0 && groups[2].startsWith("5");
52
+ }
53
+ function deduplicateNeighbourhoodNodes(nodes) {
54
+ const twinsByTitle = new Map();
55
+ for (const [index, node] of nodes.entries()) {
56
+ if (typeof node.uuid !== "string" || node.uuid.length === 0)
57
+ continue;
58
+ const title = typeof node.title === "string" && node.title.length > 0
59
+ ? node.title
60
+ : `__uuid__:${node.uuid}`;
61
+ const twins = twinsByTitle.get(title) ?? [];
62
+ twins.push({ node, index });
63
+ twinsByTitle.set(title, twins);
64
+ }
65
+ const winners = [];
66
+ const aliases = new Map();
67
+ let duplicatesDropped = 0;
68
+ for (const twins of twinsByTitle.values()) {
69
+ const winner = twins.reduce((best, candidate) => {
70
+ const bestHasTags = Array.isArray(best.node.tags) && best.node.tags.length > 0;
71
+ const candidateHasTags = Array.isArray(candidate.node.tags) && candidate.node.tags.length > 0;
72
+ if (isUuidV5(candidate.node.uuid) !== isUuidV5(best.node.uuid)) {
73
+ return isUuidV5(candidate.node.uuid) ? candidate : best;
74
+ }
75
+ if (candidateHasTags !== bestHasTags)
76
+ return candidateHasTags ? candidate : best;
77
+ return candidate.index < best.index ? candidate : best;
78
+ });
79
+ winners.push(winner);
80
+ for (const twin of twins)
81
+ aliases.set(twin.node.uuid, winner.node.uuid);
82
+ duplicatesDropped += twins.length - 1;
83
+ }
84
+ winners.sort((left, right) => left.index - right.index);
85
+ return { nodes: winners.map(({ node }) => node), aliases, duplicatesDropped };
86
+ }
87
+ function neighbourhoodWeight(value) {
88
+ if (typeof value !== "number" && typeof value !== "string")
89
+ return 0;
90
+ const weight = Number(value);
91
+ return Number.isFinite(weight) ? weight : 0;
92
+ }
93
+ function neighbourhoodSummary(node, depth) {
94
+ const result = summarise(node);
95
+ for (const key of ["domain", "archetype", "tags"]) {
96
+ const value = result[key];
97
+ if (Array.isArray(value) ? value.length === 0 : !value)
98
+ delete result[key];
99
+ }
100
+ if (depth > 1) {
101
+ const snippet = result.snippet;
102
+ delete result.snippet;
103
+ if (snippet)
104
+ result.snippet_withheld = "depth_policy";
105
+ }
106
+ return result;
107
+ }
46
108
  export async function handleTraverse(client, args) {
47
109
  const { start_uuid, max_hops = DEFAULT_HOPS } = args;
48
110
  if (!start_uuid || typeof start_uuid !== "string" || start_uuid.trim().length === 0) {
49
111
  throw new Error("start_uuid is required and must be a non-empty string");
50
112
  }
51
- const hops = Math.min(Math.max(1, max_hops), MAX_HOPS);
113
+ const requestedHops = Math.max(1, typeof max_hops === "number" && Number.isFinite(max_hops) ? Math.trunc(max_hops) : DEFAULT_HOPS);
114
+ const hops = Math.min(requestedHops, MAX_HOPS);
52
115
  const start = start_uuid.trim();
53
116
  try {
54
117
  const graph = await fetchGraph(client);
55
- const { nodes } = graph;
118
+ const deduplicated = deduplicateNeighbourhoodNodes(graph.nodes);
56
119
  const byUuid = new Map();
57
- for (const n of nodes)
58
- byUuid.set(n.uuid, n);
59
- if (!byUuid.has(start)) {
120
+ for (const node of deduplicated.nodes)
121
+ byUuid.set(node.uuid, node);
122
+ const canonicalStart = deduplicated.aliases.get(start) ?? start;
123
+ const emptyDiagnostics = {
124
+ truncated_at_hop: null,
125
+ nodes_dropped: 0,
126
+ duplicates_dropped: deduplicated.duplicatesDropped,
127
+ bound_hit: null,
128
+ weight_spread: null,
129
+ distinct_weights: 0,
130
+ edges_considered: 0,
131
+ };
132
+ if (!byUuid.has(canonicalStart)) {
60
133
  return JSON.stringify({
61
134
  start_uuid: start,
62
135
  message: "Start node not found in the visible workspace graph. It may not exist " +
63
136
  "or may be outside your token's scope.",
64
137
  nodes: [],
65
138
  edges: [],
139
+ ...emptyDiagnostics,
66
140
  ...(graph.truncated ? { truncated: true } : {}),
67
141
  }, null, 2);
68
142
  }
69
- // BFS over inline edges.
70
- const visited = new Set([start]);
143
+ // The start is hop 0 and, like every accepted node, consumes response budget.
144
+ const visited = new Set([canonicalStart]);
145
+ const resultNodes = [neighbourhoodSummary(byUuid.get(canonicalStart), 0)];
71
146
  const collectedEdges = [];
72
- const edgeSeen = new Set();
73
- let frontier = [start];
74
- for (let hop = 0; hop < hops; hop++) {
75
- const next = [];
76
- for (const uuid of frontier) {
147
+ let frontier = [{ uuid: canonicalStart, score: 0 }];
148
+ const weights = [];
149
+ let edgesConsidered = 0;
150
+ let truncatedAtHop = null;
151
+ let nodesDropped = 0;
152
+ let boundHit = null;
153
+ const payload = (nodes, edges, markerHop, dropped, hit) => {
154
+ const minWeight = weights.length > 0 ? Math.min(...weights) : null;
155
+ const weightSpread = minWeight !== null && minWeight > 0
156
+ ? Number(((Math.max(...weights) - minWeight) / minWeight).toFixed(5))
157
+ : null;
158
+ return {
159
+ start_uuid: start,
160
+ max_hops: hops,
161
+ node_count: nodes.length,
162
+ edge_count: edges.length,
163
+ nodes,
164
+ edges,
165
+ truncated_at_hop: markerHop,
166
+ nodes_dropped: dropped,
167
+ duplicates_dropped: deduplicated.duplicatesDropped,
168
+ bound_hit: hit,
169
+ weight_spread: weightSpread,
170
+ distinct_weights: new Set(weights).size,
171
+ edges_considered: edgesConsidered,
172
+ ...(graph.truncated ? { truncated: true } : {}),
173
+ };
174
+ };
175
+ const expandFrontier = (activeFrontier) => {
176
+ const candidates = new Map();
177
+ let discoveryIndex = 0;
178
+ for (const { uuid, score: accumulatedWeight } of activeFrontier) {
77
179
  const node = byUuid.get(uuid);
78
180
  if (!node || !Array.isArray(node.edges))
79
181
  continue;
80
- for (const e of node.edges) {
81
- const { source: src, target: tgt, relation, weight } = normaliseEdge(e, uuid);
82
- const neighbour = src === uuid ? tgt : src;
83
- const key = `${src}->${tgt}:${relation ?? ""}`;
84
- if (!edgeSeen.has(key)) {
85
- edgeSeen.add(key);
86
- collectedEdges.push({
87
- source_uuid: src,
88
- target_uuid: tgt,
89
- relation_type: relation,
90
- weight,
91
- });
92
- }
93
- if (neighbour && !visited.has(neighbour) && byUuid.has(neighbour)) {
94
- visited.add(neighbour);
95
- next.push(neighbour);
96
- }
182
+ for (const rawEdge of node.edges) {
183
+ if (rawEdge === null || typeof rawEdge !== "object" || Array.isArray(rawEdge))
184
+ continue;
185
+ edgesConsidered += 1;
186
+ const normalised = normaliseEdge(rawEdge, uuid);
187
+ const source = deduplicated.aliases.get(normalised.source) ?? normalised.source;
188
+ const target = deduplicated.aliases.get(normalised.target) ?? normalised.target;
189
+ const rawWeight = normalised.weight;
190
+ const weight = neighbourhoodWeight(rawWeight);
191
+ weights.push(weight);
192
+ const neighbour = source === uuid ? target : source;
193
+ if (visited.has(neighbour) || !byUuid.has(neighbour))
194
+ continue;
195
+ const candidate = {
196
+ uuid: neighbour,
197
+ score: accumulatedWeight + weight,
198
+ edge: { source, target, relation: normalised.relation, weight: rawWeight },
199
+ discoveryIndex,
200
+ };
201
+ const existing = candidates.get(neighbour);
202
+ if (!existing || candidate.score > existing.score)
203
+ candidates.set(neighbour, candidate);
204
+ discoveryIndex += 1;
205
+ }
206
+ }
207
+ return [...candidates.values()].sort((left, right) => right.score - left.score || left.discoveryIndex - right.discoveryIndex);
208
+ };
209
+ for (let depth = 1; depth <= requestedHops; depth += 1) {
210
+ const candidates = expandFrontier(frontier);
211
+ if (depth > NEIGHBOURHOOD_MAX_DEPTH) {
212
+ if (candidates.length > 0) {
213
+ truncatedAtHop = NEIGHBOURHOOD_MAX_DEPTH;
214
+ nodesDropped = candidates.length;
215
+ boundHit = "depth";
97
216
  }
217
+ break;
98
218
  }
99
- frontier = next;
219
+ if (candidates.length === 0)
220
+ break;
221
+ const nextFrontier = [];
222
+ for (let position = 0; position < candidates.length; position += 1) {
223
+ const candidate = candidates[position];
224
+ if (resultNodes.length >= NEIGHBOURHOOD_MAX_NODES) {
225
+ truncatedAtHop = depth;
226
+ nodesDropped = candidates.length - position;
227
+ boundHit = "nodes";
228
+ break;
229
+ }
230
+ const nodeSummary = neighbourhoodSummary(byUuid.get(candidate.uuid), depth);
231
+ const edgeSummary = {
232
+ source_uuid: candidate.edge.source,
233
+ target_uuid: candidate.edge.target,
234
+ relation_type: candidate.edge.relation,
235
+ weight: candidate.edge.weight,
236
+ };
237
+ const candidatePayload = payload([...resultNodes, nodeSummary], [...collectedEdges, edgeSummary], depth, candidates.length - position, "chars");
238
+ if (frameUntrustedText(stringifyUntrustedResult(candidatePayload)).length > NEIGHBOURHOOD_MAX_CHARS) {
239
+ truncatedAtHop = depth;
240
+ nodesDropped = candidates.length - position;
241
+ boundHit = "chars";
242
+ break;
243
+ }
244
+ visited.add(candidate.uuid);
245
+ resultNodes.push(nodeSummary);
246
+ collectedEdges.push(edgeSummary);
247
+ nextFrontier.push({ uuid: candidate.uuid, score: candidate.score });
248
+ }
249
+ if (boundHit)
250
+ break;
251
+ frontier = nextFrontier;
100
252
  if (frontier.length === 0)
101
253
  break;
102
254
  }
103
- const resultNodes = [...visited]
104
- .map((u) => byUuid.get(u))
105
- .filter((n) => Boolean(n))
106
- .map(summarise);
107
- return stringifyUntrustedResult({
108
- start_uuid: start,
109
- max_hops: hops,
110
- node_count: resultNodes.length,
111
- edge_count: collectedEdges.length,
112
- nodes: resultNodes,
113
- edges: collectedEdges,
114
- ...(graph.truncated ? { truncated: true } : {}),
115
- });
255
+ if (boundHit === null &&
256
+ frameUntrustedText(stringifyUntrustedResult(payload(resultNodes, collectedEdges, 0, 0, "chars"))).length >
257
+ NEIGHBOURHOOD_MAX_CHARS) {
258
+ truncatedAtHop = 0;
259
+ boundHit = "chars";
260
+ }
261
+ return stringifyUntrustedResult(payload(resultNodes, collectedEdges, truncatedAtHop, nodesDropped, boundHit));
116
262
  }
117
263
  catch (err) {
118
264
  if (err instanceof HebbianApiError) {
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/tools/traverse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traverse.js","sourceRoot":"","sources":["../../src/tools/traverse.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hebbianvault/mcp",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Customer-installable MCP server for the Hebbian tenant brain. One package, scope-by-token (Employee or Company). Install in Claude Code, Claude Desktop, Cursor, Cowork, or any MCP-compatible agent.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",