mindgraph-mcp 0.12.0 → 0.13.1

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/cli.js CHANGED
@@ -1483,6 +1483,11 @@ async function getGeneratedTools(client2) {
1483
1483
  const byName = /* @__PURE__ */ new Map();
1484
1484
  const tools = [];
1485
1485
  for (const d of resp.tools ?? []) {
1486
+ if (byName.has(d.name)) {
1487
+ throw new DuplicateGeneratedToolError(
1488
+ `duplicate generated ontology tool name: ${d.name}`
1489
+ );
1490
+ }
1486
1491
  byName.set(d.name, d);
1487
1492
  tools.push({
1488
1493
  name: d.name,
@@ -1492,22 +1497,26 @@ async function getGeneratedTools(client2) {
1492
1497
  }
1493
1498
  cache = { tools, byName, fetchedAt: Date.now() };
1494
1499
  return { tools, byName };
1495
- } catch {
1500
+ } catch (error) {
1501
+ if (error instanceof DuplicateGeneratedToolError) throw error;
1496
1502
  cache = { tools: [], byName: /* @__PURE__ */ new Map(), fetchedAt: Date.now() };
1497
1503
  return { tools: cache.tools, byName: cache.byName };
1498
1504
  }
1499
1505
  }
1500
1506
  async function handleGeneratedTool(client2, desc, args) {
1501
1507
  try {
1508
+ const ontologyClient = client2;
1502
1509
  switch (desc.maps_to) {
1503
1510
  case "search": {
1504
1511
  const query = args.query;
1505
1512
  if (!query) return err2(`query is required for ${desc.name}`);
1506
1513
  const limit = typeof args.limit === "number" ? args.limit : void 0;
1514
+ const filters = Array.isArray(args.filters) ? args.filters : void 0;
1507
1515
  return ok2(
1508
- await client2.searchDomainObjects(query, {
1516
+ await ontologyClient.searchDomainObjects(query, {
1509
1517
  schema_id: desc.schema_id,
1510
1518
  object_types: [desc.object_type],
1519
+ filters,
1511
1520
  limit
1512
1521
  })
1513
1522
  );
@@ -1515,13 +1524,57 @@ async function handleGeneratedTool(client2, desc, args) {
1515
1524
  case "object": {
1516
1525
  const uid = args.uid;
1517
1526
  if (!uid) return err2(`uid is required for ${desc.name}`);
1518
- return ok2(await client2.getDomainObject(uid));
1527
+ return ok2(await ontologyClient.getDomainObject(uid, {
1528
+ schema_id: desc.schema_id,
1529
+ object_type: desc.object_type
1530
+ }));
1519
1531
  }
1520
1532
  case "object_context": {
1521
1533
  const uid = args.uid;
1522
1534
  if (!uid) return err2(`uid is required for ${desc.name}`);
1523
1535
  const depth = typeof args.depth === "number" ? args.depth : void 0;
1524
- return ok2(await client2.getDomainObjectContext(uid, depth));
1536
+ return ok2(await ontologyClient.getDomainObjectContext(uid, depth, {
1537
+ schema_id: desc.schema_id,
1538
+ object_type: desc.object_type
1539
+ }));
1540
+ }
1541
+ case "related": {
1542
+ const uid = args.uid;
1543
+ if (!uid) return err2(`uid is required for ${desc.name}`);
1544
+ if (!desc.relation || !desc.entry_role || !desc.far_type) {
1545
+ return err2(`invalid related descriptor: ${desc.name}`);
1546
+ }
1547
+ if (!ontologyClient.queryRelatedDomainObjects) {
1548
+ return err2(
1549
+ "related ontology tools require a graph-aware version of the mindgraph SDK"
1550
+ );
1551
+ }
1552
+ return ok2(await ontologyClient.queryRelatedDomainObjects({
1553
+ schema_id: desc.schema_id,
1554
+ entry_type: desc.object_type,
1555
+ uid,
1556
+ relation: desc.relation,
1557
+ entry_role: desc.entry_role,
1558
+ far_type: desc.far_type,
1559
+ where: Array.isArray(args.where) ? args.where : void 0,
1560
+ include_provenance: args.include_provenance === true,
1561
+ limit: typeof args.limit === "number" ? args.limit : void 0,
1562
+ offset: typeof args.offset === "number" ? args.offset : void 0
1563
+ }));
1564
+ }
1565
+ case "structured_query": {
1566
+ const select = args.select;
1567
+ if (!select) return err2(`select is required for ${desc.name}`);
1568
+ if (!ontologyClient.queryDomainStructured) {
1569
+ return err2(
1570
+ "structured ontology tools require a graph-aware version of the mindgraph SDK"
1571
+ );
1572
+ }
1573
+ return ok2(await ontologyClient.queryDomainStructured({
1574
+ ...args,
1575
+ schema_id: desc.schema_id,
1576
+ select
1577
+ }));
1525
1578
  }
1526
1579
  default:
1527
1580
  return err2(`unknown generated tool mapping: ${desc.maps_to}`);
@@ -1530,7 +1583,7 @@ async function handleGeneratedTool(client2, desc, args) {
1530
1583
  return err2(e instanceof Error ? e.message : String(e));
1531
1584
  }
1532
1585
  }
1533
- var ok2, err2, CACHE_TTL_MS, cache;
1586
+ var ok2, err2, CACHE_TTL_MS, cache, DuplicateGeneratedToolError;
1534
1587
  var init_generated_tools = __esm({
1535
1588
  "src/generated-tools.ts"() {
1536
1589
  "use strict";
@@ -1543,6 +1596,8 @@ var init_generated_tools = __esm({
1543
1596
  });
1544
1597
  CACHE_TTL_MS = 5 * 60 * 1e3;
1545
1598
  cache = null;
1599
+ DuplicateGeneratedToolError = class extends Error {
1600
+ };
1546
1601
  }
1547
1602
  });
1548
1603
 
@@ -1672,7 +1727,11 @@ var init_src = __esm({
1672
1727
  client = new import_mindgraph.MindGraph({
1673
1728
  baseUrl: BASE_URL,
1674
1729
  apiKey: API_KEY,
1675
- orgId: ORG_ID
1730
+ orgId: ORG_ID,
1731
+ // Available in the companion mindgraph SDK from the D6 telemetry batch.
1732
+ // Cast keeps this repository buildable during the cross-package release
1733
+ // window where npm may still resolve the preceding SDK declaration file.
1734
+ telemetrySurface: "mcp"
1676
1735
  });
1677
1736
  INSTRUCTIONS = `You have access to a persistent knowledge graph via MindGraph (7 tools).
1678
1737
 
@@ -1752,7 +1811,7 @@ Capture knowledge when the user shares something worth remembering:
1752
1811
  server = new import_server.Server(
1753
1812
  {
1754
1813
  name: "mindgraph",
1755
- version: "0.12.0"
1814
+ version: "0.13.1"
1756
1815
  },
1757
1816
  {
1758
1817
  capabilities: {
package/dist/index.js CHANGED
@@ -1452,6 +1452,8 @@ var err2 = (message) => ({
1452
1452
  });
1453
1453
  var CACHE_TTL_MS = 5 * 60 * 1e3;
1454
1454
  var cache = null;
1455
+ var DuplicateGeneratedToolError = class extends Error {
1456
+ };
1455
1457
  async function getGeneratedTools(client2) {
1456
1458
  if (cache && Date.now() - cache.fetchedAt < CACHE_TTL_MS) {
1457
1459
  return { tools: cache.tools, byName: cache.byName };
@@ -1466,6 +1468,11 @@ async function getGeneratedTools(client2) {
1466
1468
  const byName = /* @__PURE__ */ new Map();
1467
1469
  const tools = [];
1468
1470
  for (const d of resp.tools ?? []) {
1471
+ if (byName.has(d.name)) {
1472
+ throw new DuplicateGeneratedToolError(
1473
+ `duplicate generated ontology tool name: ${d.name}`
1474
+ );
1475
+ }
1469
1476
  byName.set(d.name, d);
1470
1477
  tools.push({
1471
1478
  name: d.name,
@@ -1475,22 +1482,26 @@ async function getGeneratedTools(client2) {
1475
1482
  }
1476
1483
  cache = { tools, byName, fetchedAt: Date.now() };
1477
1484
  return { tools, byName };
1478
- } catch {
1485
+ } catch (error) {
1486
+ if (error instanceof DuplicateGeneratedToolError) throw error;
1479
1487
  cache = { tools: [], byName: /* @__PURE__ */ new Map(), fetchedAt: Date.now() };
1480
1488
  return { tools: cache.tools, byName: cache.byName };
1481
1489
  }
1482
1490
  }
1483
1491
  async function handleGeneratedTool(client2, desc, args) {
1484
1492
  try {
1493
+ const ontologyClient = client2;
1485
1494
  switch (desc.maps_to) {
1486
1495
  case "search": {
1487
1496
  const query = args.query;
1488
1497
  if (!query) return err2(`query is required for ${desc.name}`);
1489
1498
  const limit = typeof args.limit === "number" ? args.limit : void 0;
1499
+ const filters = Array.isArray(args.filters) ? args.filters : void 0;
1490
1500
  return ok2(
1491
- await client2.searchDomainObjects(query, {
1501
+ await ontologyClient.searchDomainObjects(query, {
1492
1502
  schema_id: desc.schema_id,
1493
1503
  object_types: [desc.object_type],
1504
+ filters,
1494
1505
  limit
1495
1506
  })
1496
1507
  );
@@ -1498,13 +1509,57 @@ async function handleGeneratedTool(client2, desc, args) {
1498
1509
  case "object": {
1499
1510
  const uid = args.uid;
1500
1511
  if (!uid) return err2(`uid is required for ${desc.name}`);
1501
- return ok2(await client2.getDomainObject(uid));
1512
+ return ok2(await ontologyClient.getDomainObject(uid, {
1513
+ schema_id: desc.schema_id,
1514
+ object_type: desc.object_type
1515
+ }));
1502
1516
  }
1503
1517
  case "object_context": {
1504
1518
  const uid = args.uid;
1505
1519
  if (!uid) return err2(`uid is required for ${desc.name}`);
1506
1520
  const depth = typeof args.depth === "number" ? args.depth : void 0;
1507
- return ok2(await client2.getDomainObjectContext(uid, depth));
1521
+ return ok2(await ontologyClient.getDomainObjectContext(uid, depth, {
1522
+ schema_id: desc.schema_id,
1523
+ object_type: desc.object_type
1524
+ }));
1525
+ }
1526
+ case "related": {
1527
+ const uid = args.uid;
1528
+ if (!uid) return err2(`uid is required for ${desc.name}`);
1529
+ if (!desc.relation || !desc.entry_role || !desc.far_type) {
1530
+ return err2(`invalid related descriptor: ${desc.name}`);
1531
+ }
1532
+ if (!ontologyClient.queryRelatedDomainObjects) {
1533
+ return err2(
1534
+ "related ontology tools require a graph-aware version of the mindgraph SDK"
1535
+ );
1536
+ }
1537
+ return ok2(await ontologyClient.queryRelatedDomainObjects({
1538
+ schema_id: desc.schema_id,
1539
+ entry_type: desc.object_type,
1540
+ uid,
1541
+ relation: desc.relation,
1542
+ entry_role: desc.entry_role,
1543
+ far_type: desc.far_type,
1544
+ where: Array.isArray(args.where) ? args.where : void 0,
1545
+ include_provenance: args.include_provenance === true,
1546
+ limit: typeof args.limit === "number" ? args.limit : void 0,
1547
+ offset: typeof args.offset === "number" ? args.offset : void 0
1548
+ }));
1549
+ }
1550
+ case "structured_query": {
1551
+ const select = args.select;
1552
+ if (!select) return err2(`select is required for ${desc.name}`);
1553
+ if (!ontologyClient.queryDomainStructured) {
1554
+ return err2(
1555
+ "structured ontology tools require a graph-aware version of the mindgraph SDK"
1556
+ );
1557
+ }
1558
+ return ok2(await ontologyClient.queryDomainStructured({
1559
+ ...args,
1560
+ schema_id: desc.schema_id,
1561
+ select
1562
+ }));
1508
1563
  }
1509
1564
  default:
1510
1565
  return err2(`unknown generated tool mapping: ${desc.maps_to}`);
@@ -1615,7 +1670,11 @@ if (!API_KEY) {
1615
1670
  var client = new import_mindgraph.MindGraph({
1616
1671
  baseUrl: BASE_URL,
1617
1672
  apiKey: API_KEY,
1618
- orgId: ORG_ID
1673
+ orgId: ORG_ID,
1674
+ // Available in the companion mindgraph SDK from the D6 telemetry batch.
1675
+ // Cast keeps this repository buildable during the cross-package release
1676
+ // window where npm may still resolve the preceding SDK declaration file.
1677
+ telemetrySurface: "mcp"
1619
1678
  });
1620
1679
  var INSTRUCTIONS = `You have access to a persistent knowledge graph via MindGraph (7 tools).
1621
1680
 
@@ -1695,7 +1754,7 @@ Capture knowledge when the user shares something worth remembering:
1695
1754
  var server = new import_server.Server(
1696
1755
  {
1697
1756
  name: "mindgraph",
1698
- version: "0.12.0"
1757
+ version: "0.13.1"
1699
1758
  },
1700
1759
  {
1701
1760
  capabilities: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindgraph-mcp",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
4
4
  "description": "MCP server for MindGraph — connect Claude Desktop, Claude Code, and any MCP client to your knowledge graph",
5
5
  "repository": {
6
6
  "type": "git",
@@ -32,7 +32,7 @@
32
32
  "license": "MIT",
33
33
  "dependencies": {
34
34
  "@modelcontextprotocol/sdk": "^1.12.1",
35
- "mindgraph": "^0.12.0"
35
+ "mindgraph": "^0.13.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^22.0.0",