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 +66 -7
- package/dist/index.js +65 -6
- package/package.json +2 -2
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
35
|
+
"mindgraph": "^0.13.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^22.0.0",
|