@apart-tech/intelligence-mcp 0.2.0 → 0.3.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/index.js +179 -61
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
- package/src/index.ts +266 -81
package/dist/index.js
CHANGED
|
@@ -2,19 +2,14 @@
|
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import {
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const edgeService = new EdgeService(db);
|
|
14
|
-
const searchService = new SearchService(db, embeddings, config, tenant);
|
|
15
|
-
const domainService = new DomainService(db, tenant);
|
|
16
|
-
const workspaceService = new WorkspaceService(db, tenant);
|
|
17
|
-
const contextService = new ContextService(nodeService, edgeService, searchService, config, workspaceService, domainService);
|
|
5
|
+
import { createApiProvider } from "@apart-tech/intelligence-api-client";
|
|
6
|
+
const apiUrl = process.env.APART_API_URL;
|
|
7
|
+
const apiKey = process.env.APART_API_KEY;
|
|
8
|
+
if (!apiUrl || !apiKey) {
|
|
9
|
+
console.error("APART_API_URL and APART_API_KEY environment variables are required");
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const api = createApiProvider({ server: apiUrl, apiKey });
|
|
18
13
|
const server = new McpServer({
|
|
19
14
|
name: "apart-intelligence",
|
|
20
15
|
version: "0.1.0",
|
|
@@ -41,26 +36,16 @@ server.tool("search_knowledge", "Hybrid semantic + keyword search across all kno
|
|
|
41
36
|
.describe("Workspace slug — auto-applies domain/type/tag filters"),
|
|
42
37
|
}, async ({ query, limit, types, include_drafts, domain_slugs, workspace }) => {
|
|
43
38
|
let domainIds;
|
|
44
|
-
let resolvedTypes = types;
|
|
45
|
-
// Apply workspace filters (explicit params override workspace defaults)
|
|
46
|
-
if (workspace) {
|
|
47
|
-
const filter = await workspaceService.resolveFilter(workspace, (slugs) => domainService.resolveSlugs(slugs));
|
|
48
|
-
if (filter) {
|
|
49
|
-
if (!domainIds && filter.domainIds)
|
|
50
|
-
domainIds = filter.domainIds;
|
|
51
|
-
if (!resolvedTypes && filter.types)
|
|
52
|
-
resolvedTypes = filter.types;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
39
|
if (domain_slugs?.length) {
|
|
56
|
-
domainIds = await
|
|
40
|
+
domainIds = await api.domains.resolveSlugs(domain_slugs);
|
|
57
41
|
}
|
|
58
|
-
const results = await
|
|
42
|
+
const results = await api.search.search({
|
|
59
43
|
query,
|
|
60
44
|
limit,
|
|
61
|
-
types
|
|
45
|
+
types,
|
|
62
46
|
includeDrafts: include_drafts,
|
|
63
47
|
domainIds,
|
|
48
|
+
workspace,
|
|
64
49
|
});
|
|
65
50
|
return {
|
|
66
51
|
content: [
|
|
@@ -73,15 +58,16 @@ server.tool("search_knowledge", "Hybrid semantic + keyword search across all kno
|
|
|
73
58
|
});
|
|
74
59
|
server.tool("get_node", "Retrieve a specific knowledge node by ID with its edges", {
|
|
75
60
|
id: z.string().describe("Node UUID"),
|
|
76
|
-
|
|
77
|
-
|
|
61
|
+
decrypt: z.boolean().optional().describe("Decrypt PII fields if the node contains encrypted PII"),
|
|
62
|
+
}, async ({ id, decrypt: _decrypt }) => {
|
|
63
|
+
const node = await api.nodes.getById(id);
|
|
78
64
|
if (!node) {
|
|
79
65
|
return {
|
|
80
66
|
content: [{ type: "text", text: "Node not found" }],
|
|
81
67
|
isError: true,
|
|
82
68
|
};
|
|
83
69
|
}
|
|
84
|
-
const edges = await
|
|
70
|
+
const edges = await api.edges.getByNodeId(id);
|
|
85
71
|
return {
|
|
86
72
|
content: [
|
|
87
73
|
{
|
|
@@ -108,9 +94,9 @@ server.tool("get_context", "Assemble a context package for a topic — returns r
|
|
|
108
94
|
}, async ({ query, max_depth, max_nodes, include_drafts, types, domain_slugs, workspace }) => {
|
|
109
95
|
let domainIds;
|
|
110
96
|
if (domain_slugs?.length) {
|
|
111
|
-
domainIds = await
|
|
97
|
+
domainIds = await api.domains.resolveSlugs(domain_slugs);
|
|
112
98
|
}
|
|
113
|
-
const ctx = await
|
|
99
|
+
const ctx = await api.search.context({
|
|
114
100
|
query,
|
|
115
101
|
maxDepth: max_depth,
|
|
116
102
|
maxNodes: max_nodes,
|
|
@@ -129,26 +115,12 @@ server.tool("get_neighborhood", "Return a node and its N-hop graph neighborhood"
|
|
|
129
115
|
id: z.string().describe("Node UUID"),
|
|
130
116
|
depth: z.number().optional().describe("Hops to traverse (default 1)"),
|
|
131
117
|
}, async ({ id, depth }) => {
|
|
132
|
-
const
|
|
133
|
-
if (!node) {
|
|
134
|
-
return {
|
|
135
|
-
content: [{ type: "text", text: "Node not found" }],
|
|
136
|
-
isError: true,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
const neighborIds = await edgeService.getNeighborIds(id, depth ?? 1);
|
|
140
|
-
const neighbors = [];
|
|
141
|
-
for (const nId of neighborIds) {
|
|
142
|
-
const n = await nodeService.getById(nId);
|
|
143
|
-
if (n)
|
|
144
|
-
neighbors.push(n);
|
|
145
|
-
}
|
|
146
|
-
const edges = await edgeService.getByNodeId(id);
|
|
118
|
+
const result = await api.nodes.getNeighborhood(id, depth);
|
|
147
119
|
return {
|
|
148
120
|
content: [
|
|
149
121
|
{
|
|
150
122
|
type: "text",
|
|
151
|
-
text: JSON.stringify(
|
|
123
|
+
text: JSON.stringify(result, null, 2),
|
|
152
124
|
},
|
|
153
125
|
],
|
|
154
126
|
};
|
|
@@ -156,7 +128,7 @@ server.tool("get_neighborhood", "Return a node and its N-hop graph neighborhood"
|
|
|
156
128
|
server.tool("list_drafts", "List all draft nodes pending curation", {
|
|
157
129
|
limit: z.number().optional().describe("Max results (default 50)"),
|
|
158
130
|
}, async ({ limit }) => {
|
|
159
|
-
const drafts = await
|
|
131
|
+
const drafts = await api.nodes.listDrafts(limit);
|
|
160
132
|
return {
|
|
161
133
|
content: [
|
|
162
134
|
{ type: "text", text: JSON.stringify(drafts, null, 2) },
|
|
@@ -165,8 +137,8 @@ server.tool("list_drafts", "List all draft nodes pending curation", {
|
|
|
165
137
|
});
|
|
166
138
|
server.tool("list_types", "List all node types and relationship types currently in use", {}, async () => {
|
|
167
139
|
const [nodeTypes, edgeTypes] = await Promise.all([
|
|
168
|
-
|
|
169
|
-
|
|
140
|
+
api.nodes.listTypes(),
|
|
141
|
+
api.edges.listRelationshipTypes(),
|
|
170
142
|
]);
|
|
171
143
|
return {
|
|
172
144
|
content: [
|
|
@@ -178,7 +150,7 @@ server.tool("list_types", "List all node types and relationship types currently
|
|
|
178
150
|
};
|
|
179
151
|
});
|
|
180
152
|
server.tool("list_domains", "List the full domain taxonomy tree", {}, async () => {
|
|
181
|
-
const tree = await
|
|
153
|
+
const tree = await api.domains.getTree();
|
|
182
154
|
return {
|
|
183
155
|
content: [
|
|
184
156
|
{ type: "text", text: JSON.stringify(tree, null, 2) },
|
|
@@ -186,7 +158,7 @@ server.tool("list_domains", "List the full domain taxonomy tree", {}, async () =
|
|
|
186
158
|
};
|
|
187
159
|
});
|
|
188
160
|
server.tool("seed_domains", "Seed the default domain taxonomy", {}, async () => {
|
|
189
|
-
const result = await
|
|
161
|
+
const result = await api.domains.seed();
|
|
190
162
|
return {
|
|
191
163
|
content: [
|
|
192
164
|
{
|
|
@@ -198,7 +170,7 @@ server.tool("seed_domains", "Seed the default domain taxonomy", {}, async () =>
|
|
|
198
170
|
});
|
|
199
171
|
// ── Workspace Tools ───────────────────────────────────────────────────────
|
|
200
172
|
server.tool("list_workspaces", "List all workspaces — each defines a filtered view of the knowledge graph for a specific kind of work", {}, async () => {
|
|
201
|
-
const list = await
|
|
173
|
+
const list = await api.workspaces.list();
|
|
202
174
|
return {
|
|
203
175
|
content: [
|
|
204
176
|
{ type: "text", text: JSON.stringify(list, null, 2) },
|
|
@@ -208,7 +180,7 @@ server.tool("list_workspaces", "List all workspaces — each defines a filtered
|
|
|
208
180
|
server.tool("get_workspace", "Get full workspace definition including filter rules and system prompt", {
|
|
209
181
|
slug: z.string().describe("Workspace slug"),
|
|
210
182
|
}, async ({ slug }) => {
|
|
211
|
-
const ws = await
|
|
183
|
+
const ws = await api.workspaces.getBySlug(slug);
|
|
212
184
|
if (!ws) {
|
|
213
185
|
return {
|
|
214
186
|
content: [{ type: "text", text: "Workspace not found" }],
|
|
@@ -224,7 +196,7 @@ server.tool("get_workspace", "Get full workspace definition including filter rul
|
|
|
224
196
|
server.tool("export_workspace", "Export a workspace as a CLAUDE.md-formatted markdown document", {
|
|
225
197
|
slug: z.string().describe("Workspace slug"),
|
|
226
198
|
}, async ({ slug }) => {
|
|
227
|
-
const md = await
|
|
199
|
+
const md = await api.workspaces.exportAsMarkdown(slug);
|
|
228
200
|
if (!md) {
|
|
229
201
|
return {
|
|
230
202
|
content: [{ type: "text", text: "Workspace not found" }],
|
|
@@ -257,11 +229,11 @@ server.tool("add_node", "Create a new knowledge node (defaults to draft status)"
|
|
|
257
229
|
}, async ({ type, title, content, metadata, created_by, domain_slug }) => {
|
|
258
230
|
let domainId;
|
|
259
231
|
if (domain_slug) {
|
|
260
|
-
const domain = await
|
|
232
|
+
const domain = await api.domains.getBySlug(domain_slug);
|
|
261
233
|
if (domain)
|
|
262
234
|
domainId = domain.id;
|
|
263
235
|
}
|
|
264
|
-
const node = await
|
|
236
|
+
const node = await api.nodes.create({
|
|
265
237
|
type,
|
|
266
238
|
title,
|
|
267
239
|
content,
|
|
@@ -282,7 +254,7 @@ server.tool("update_node", "Update content or metadata of an existing knowledge
|
|
|
282
254
|
metadata: z.record(z.unknown()).optional().describe("New metadata"),
|
|
283
255
|
type: z.string().optional().describe("New node type"),
|
|
284
256
|
}, async ({ id, title, content, metadata, type }) => {
|
|
285
|
-
const node = await
|
|
257
|
+
const node = await api.nodes.update(id, { title, content, metadata, type });
|
|
286
258
|
if (!node) {
|
|
287
259
|
return {
|
|
288
260
|
content: [{ type: "text", text: "Node not found" }],
|
|
@@ -304,7 +276,7 @@ server.tool("link_nodes", "Create an edge between two knowledge nodes", {
|
|
|
304
276
|
weight: z.number().optional().describe("Relevance weight (default 1.0)"),
|
|
305
277
|
created_by: z.string().optional().describe("Creator identifier"),
|
|
306
278
|
}, async ({ source_node_id, target_node_id, relationship_type, weight, created_by }) => {
|
|
307
|
-
const edge = await
|
|
279
|
+
const edge = await api.edges.create({
|
|
308
280
|
sourceNodeId: source_node_id,
|
|
309
281
|
targetNodeId: target_node_id,
|
|
310
282
|
relationshipType: relationship_type,
|
|
@@ -323,7 +295,7 @@ server.tool("set_status", "Change node status (draft/reviewed/approved/archived)
|
|
|
323
295
|
.enum(["draft", "reviewed", "approved", "archived"])
|
|
324
296
|
.describe("New status"),
|
|
325
297
|
}, async ({ id, status }) => {
|
|
326
|
-
const node = await
|
|
298
|
+
const node = await api.nodes.setStatus(id, status);
|
|
327
299
|
if (!node) {
|
|
328
300
|
return {
|
|
329
301
|
content: [{ type: "text", text: "Node not found" }],
|
|
@@ -336,6 +308,152 @@ server.tool("set_status", "Change node status (draft/reviewed/approved/archived)
|
|
|
336
308
|
],
|
|
337
309
|
};
|
|
338
310
|
});
|
|
311
|
+
// ── Delete Tools ──────────────────────────────────────────────────────────
|
|
312
|
+
server.tool("delete_node", "Delete a knowledge node and all its edges", {
|
|
313
|
+
id: z.string().describe("Node UUID"),
|
|
314
|
+
}, async ({ id }) => {
|
|
315
|
+
const node = await api.nodes.getById(id);
|
|
316
|
+
if (!node) {
|
|
317
|
+
return {
|
|
318
|
+
content: [{ type: "text", text: "Node not found" }],
|
|
319
|
+
isError: true,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
await api.nodes.delete(node.id);
|
|
323
|
+
return {
|
|
324
|
+
content: [{ type: "text", text: `Deleted node "${node.title}" (${node.id})` }],
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
server.tool("delete_edge", "Delete an edge between two nodes", {
|
|
328
|
+
id: z.string().describe("Edge UUID"),
|
|
329
|
+
}, async ({ id }) => {
|
|
330
|
+
const deleted = await api.edges.delete(id);
|
|
331
|
+
if (!deleted) {
|
|
332
|
+
return {
|
|
333
|
+
content: [{ type: "text", text: "Edge not found" }],
|
|
334
|
+
isError: true,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
content: [{ type: "text", text: `Deleted edge ${id}` }],
|
|
339
|
+
};
|
|
340
|
+
});
|
|
341
|
+
// ── Graph Health Tools ────────────────────────────────────────────────────
|
|
342
|
+
server.tool("health_report", "Comprehensive graph health report — node/edge counts, orphans, stale nodes, connected components", {
|
|
343
|
+
stale_days: z.number().optional().describe("Days before a node is considered stale (default 90)"),
|
|
344
|
+
}, async ({ stale_days }) => {
|
|
345
|
+
const report = await api.cleaning.getHealthReport(stale_days ?? 90);
|
|
346
|
+
return {
|
|
347
|
+
content: [{ type: "text", text: JSON.stringify(report, null, 2) }],
|
|
348
|
+
};
|
|
349
|
+
});
|
|
350
|
+
server.tool("validate_edges", "Validate edge integrity — detect self-loops, duplicates, low-relevance connections, contradictions, and rare types", {
|
|
351
|
+
low_relevance_threshold: z.number().optional().describe("Similarity threshold for low-relevance detection (default 0.3)"),
|
|
352
|
+
rare_type_threshold: z.number().optional().describe("Flag relationship types used this many times or fewer (default 1)"),
|
|
353
|
+
}, async ({ low_relevance_threshold, rare_type_threshold }) => {
|
|
354
|
+
const report = await api.cleaning.validate({
|
|
355
|
+
lowRelevanceThreshold: low_relevance_threshold,
|
|
356
|
+
rareTypeThreshold: rare_type_threshold,
|
|
357
|
+
});
|
|
358
|
+
return {
|
|
359
|
+
content: [{ type: "text", text: JSON.stringify(report, null, 2) }],
|
|
360
|
+
};
|
|
361
|
+
});
|
|
362
|
+
server.tool("find_orphans", "Find nodes with no connections to other nodes", {}, async () => {
|
|
363
|
+
const orphans = await api.cleaning.findOrphans();
|
|
364
|
+
return {
|
|
365
|
+
content: [{ type: "text", text: JSON.stringify(orphans, null, 2) }],
|
|
366
|
+
};
|
|
367
|
+
});
|
|
368
|
+
server.tool("find_duplicates", "Find near-duplicate node pairs by embedding cosine similarity", {
|
|
369
|
+
threshold: z.number().optional().describe("Minimum cosine similarity 0-1 (default 0.95)"),
|
|
370
|
+
limit: z.number().optional().describe("Max pairs to return (default 50)"),
|
|
371
|
+
}, async ({ threshold, limit }) => {
|
|
372
|
+
const duplicates = await api.cleaning.findDuplicates(threshold ?? 0.95, limit ?? 50);
|
|
373
|
+
return {
|
|
374
|
+
content: [{ type: "text", text: JSON.stringify(duplicates, null, 2) }],
|
|
375
|
+
};
|
|
376
|
+
});
|
|
377
|
+
server.tool("find_islands", "Detect disconnected clusters (connected components) in the graph, optionally with bridge suggestions", {
|
|
378
|
+
bridges: z.boolean().optional().describe("Include suggested links to bridge islands"),
|
|
379
|
+
max_bridges: z.number().optional().describe("Max bridge suggestions (default 10)"),
|
|
380
|
+
}, async ({ bridges, max_bridges }) => {
|
|
381
|
+
const result = await api.cleaning.findIslands({
|
|
382
|
+
bridges,
|
|
383
|
+
maxBridges: max_bridges,
|
|
384
|
+
});
|
|
385
|
+
return {
|
|
386
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
387
|
+
};
|
|
388
|
+
});
|
|
389
|
+
server.tool("suggest_links", "Suggest missing links between semantically similar but unconnected nodes", {
|
|
390
|
+
node_id: z.string().optional().describe("Node UUID to suggest links for (omit for global scan)"),
|
|
391
|
+
min_similarity: z.number().optional().describe("Minimum cosine similarity (default 0.8 global, 0.7 per-node)"),
|
|
392
|
+
limit: z.number().optional().describe("Max suggestions (default 10 per-node, 20 global)"),
|
|
393
|
+
}, async ({ node_id, min_similarity, limit }) => {
|
|
394
|
+
const suggestions = await api.cleaning.suggestLinks({
|
|
395
|
+
nodeId: node_id,
|
|
396
|
+
minSimilarity: min_similarity,
|
|
397
|
+
limit,
|
|
398
|
+
});
|
|
399
|
+
return {
|
|
400
|
+
content: [{ type: "text", text: JSON.stringify(suggestions, null, 2) }],
|
|
401
|
+
};
|
|
402
|
+
});
|
|
403
|
+
server.tool("analyze_relationship_types", "Analyze relationship type vocabulary and suggest merges for semantically similar types", {
|
|
404
|
+
min_similarity: z.number().optional().describe("Minimum similarity to suggest merge (default 0.7)"),
|
|
405
|
+
}, async ({ min_similarity }) => {
|
|
406
|
+
const report = await api.cleaning.analyzeRelationshipTypes({
|
|
407
|
+
minSimilarity: min_similarity,
|
|
408
|
+
});
|
|
409
|
+
return {
|
|
410
|
+
content: [{ type: "text", text: JSON.stringify(report, null, 2) }],
|
|
411
|
+
};
|
|
412
|
+
});
|
|
413
|
+
server.tool("retype_edges", "Rename all edges of one relationship type to another", {
|
|
414
|
+
from_type: z.string().describe("Current relationship type to rename"),
|
|
415
|
+
to_type: z.string().describe("New relationship type name"),
|
|
416
|
+
}, async ({ from_type, to_type }) => {
|
|
417
|
+
const result = await api.cleaning.retypeMany(from_type, to_type);
|
|
418
|
+
return {
|
|
419
|
+
content: [{ type: "text", text: JSON.stringify({ renamed: result.count, from: from_type, to: to_type }, null, 2) }],
|
|
420
|
+
};
|
|
421
|
+
});
|
|
422
|
+
// ── PII Tools ─────────────────────────────────────────────────────────────
|
|
423
|
+
server.tool("get_pii_config", "Get the current PII detection/encryption policy for this organization", {}, async () => {
|
|
424
|
+
const config = await api.pii.getConfig();
|
|
425
|
+
if (!config) {
|
|
426
|
+
return {
|
|
427
|
+
content: [{ type: "text", text: JSON.stringify({ configured: false }, null, 2) }],
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
return {
|
|
431
|
+
content: [{ type: "text", text: JSON.stringify(config, null, 2) }],
|
|
432
|
+
};
|
|
433
|
+
});
|
|
434
|
+
server.tool("test_pii", "Test a text string for PII detection — returns matches with types and positions", {
|
|
435
|
+
text: z.string().describe("Text to scan for PII"),
|
|
436
|
+
}, async ({ text }) => {
|
|
437
|
+
const result = await api.pii.test(text);
|
|
438
|
+
return {
|
|
439
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
440
|
+
};
|
|
441
|
+
});
|
|
442
|
+
// ── Maintenance Tools ─────────────────────────────────────────────────────
|
|
443
|
+
server.tool("re_embed", "Re-generate embeddings for nodes (useful after changing embedding provider/model)", {
|
|
444
|
+
type: z.string().optional().describe("Only re-embed nodes of this type"),
|
|
445
|
+
limit: z.number().optional().describe("Limit to N nodes"),
|
|
446
|
+
dry_run: z.boolean().optional().describe("Show what would be re-embedded without making changes"),
|
|
447
|
+
}, async ({ type, limit, dry_run }) => {
|
|
448
|
+
const result = await api.reEmbed({
|
|
449
|
+
type,
|
|
450
|
+
limit,
|
|
451
|
+
dryRun: dry_run ?? false,
|
|
452
|
+
});
|
|
453
|
+
return {
|
|
454
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
455
|
+
};
|
|
456
|
+
});
|
|
339
457
|
// ── Start Server ───────────────────────────────────────────────────────────
|
|
340
458
|
async function main() {
|
|
341
459
|
const transport = new StdioServerTransport();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apart-tech/intelligence-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "MCP server for Apart Intelligence knowledge graph",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"tc-mcp": "dist/index.js"
|
|
9
9
|
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"lint": "tsc --noEmit",
|
|
15
|
+
"test": "vitest run"
|
|
16
|
+
},
|
|
10
17
|
"dependencies": {
|
|
11
18
|
"@modelcontextprotocol/sdk": "^1.8.0",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
19
|
+
"@apart-tech/intelligence-api-client": "^0.1.0",
|
|
20
|
+
"zod": "^3.24.0"
|
|
14
21
|
},
|
|
15
22
|
"devDependencies": {
|
|
16
23
|
"@types/node": "^25.5.0",
|
|
17
24
|
"typescript": "^5.7.0",
|
|
18
25
|
"vitest": "^3.0.0"
|
|
19
|
-
},
|
|
20
|
-
"scripts": {
|
|
21
|
-
"build": "tsc",
|
|
22
|
-
"dev": "tsc --watch",
|
|
23
|
-
"start": "node dist/index.js",
|
|
24
|
-
"lint": "tsc --noEmit",
|
|
25
|
-
"test": "vitest run"
|
|
26
26
|
}
|
|
27
|
-
}
|
|
27
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -3,39 +3,18 @@
|
|
|
3
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
import type { NodeStatus, TenantContext } from "@apart-tech/intelligence-core";
|
|
19
|
-
|
|
20
|
-
const config = loadConfig();
|
|
21
|
-
const tenant: TenantContext = {
|
|
22
|
-
organizationId: config.tenancy.organizationId ?? SINGLE_TENANT_ORG_ID,
|
|
23
|
-
};
|
|
24
|
-
const db = getTenantDb(config.database.url, tenant);
|
|
25
|
-
const embeddings = createEmbeddingProvider(config, { db });
|
|
26
|
-
const nodeService = new NodeService(db, embeddings, tenant);
|
|
27
|
-
const edgeService = new EdgeService(db);
|
|
28
|
-
const searchService = new SearchService(db, embeddings, config, tenant);
|
|
29
|
-
const domainService = new DomainService(db, tenant);
|
|
30
|
-
const workspaceService = new WorkspaceService(db, tenant);
|
|
31
|
-
const contextService = new ContextService(
|
|
32
|
-
nodeService,
|
|
33
|
-
edgeService,
|
|
34
|
-
searchService,
|
|
35
|
-
config,
|
|
36
|
-
workspaceService,
|
|
37
|
-
domainService,
|
|
38
|
-
);
|
|
6
|
+
import { createApiProvider } from "@apart-tech/intelligence-api-client";
|
|
7
|
+
import type { ServiceProvider, NodeStatus } from "@apart-tech/intelligence-api-client";
|
|
8
|
+
|
|
9
|
+
const apiUrl = process.env.APART_API_URL;
|
|
10
|
+
const apiKey = process.env.APART_API_KEY;
|
|
11
|
+
|
|
12
|
+
if (!apiUrl || !apiKey) {
|
|
13
|
+
console.error("APART_API_URL and APART_API_KEY environment variables are required");
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const api: ServiceProvider = createApiProvider({ server: apiUrl, apiKey });
|
|
39
18
|
|
|
40
19
|
const server = new McpServer({
|
|
41
20
|
name: "apart-intelligence",
|
|
@@ -69,28 +48,17 @@ server.tool(
|
|
|
69
48
|
},
|
|
70
49
|
async ({ query, limit, types, include_drafts, domain_slugs, workspace }) => {
|
|
71
50
|
let domainIds: string[] | undefined;
|
|
72
|
-
let resolvedTypes = types;
|
|
73
|
-
|
|
74
|
-
// Apply workspace filters (explicit params override workspace defaults)
|
|
75
|
-
if (workspace) {
|
|
76
|
-
const filter = await workspaceService.resolveFilter(workspace, (slugs) =>
|
|
77
|
-
domainService.resolveSlugs(slugs),
|
|
78
|
-
);
|
|
79
|
-
if (filter) {
|
|
80
|
-
if (!domainIds && filter.domainIds) domainIds = filter.domainIds;
|
|
81
|
-
if (!resolvedTypes && filter.types) resolvedTypes = filter.types;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
51
|
|
|
85
52
|
if (domain_slugs?.length) {
|
|
86
|
-
domainIds = await
|
|
53
|
+
domainIds = await api.domains.resolveSlugs(domain_slugs);
|
|
87
54
|
}
|
|
88
|
-
const results = await
|
|
55
|
+
const results = await api.search.search({
|
|
89
56
|
query,
|
|
90
57
|
limit,
|
|
91
|
-
types
|
|
58
|
+
types,
|
|
92
59
|
includeDrafts: include_drafts,
|
|
93
60
|
domainIds,
|
|
61
|
+
workspace,
|
|
94
62
|
});
|
|
95
63
|
return {
|
|
96
64
|
content: [
|
|
@@ -108,16 +76,18 @@ server.tool(
|
|
|
108
76
|
"Retrieve a specific knowledge node by ID with its edges",
|
|
109
77
|
{
|
|
110
78
|
id: z.string().describe("Node UUID"),
|
|
79
|
+
decrypt: z.boolean().optional().describe("Decrypt PII fields if the node contains encrypted PII"),
|
|
111
80
|
},
|
|
112
|
-
async ({ id }) => {
|
|
113
|
-
const node = await
|
|
81
|
+
async ({ id, decrypt: _decrypt }) => {
|
|
82
|
+
const node = await api.nodes.getById(id);
|
|
114
83
|
if (!node) {
|
|
115
84
|
return {
|
|
116
85
|
content: [{ type: "text" as const, text: "Node not found" }],
|
|
117
86
|
isError: true,
|
|
118
87
|
};
|
|
119
88
|
}
|
|
120
|
-
const edges = await
|
|
89
|
+
const edges = await api.edges.getByNodeId(id);
|
|
90
|
+
|
|
121
91
|
return {
|
|
122
92
|
content: [
|
|
123
93
|
{
|
|
@@ -150,9 +120,9 @@ server.tool(
|
|
|
150
120
|
async ({ query, max_depth, max_nodes, include_drafts, types, domain_slugs, workspace }) => {
|
|
151
121
|
let domainIds: string[] | undefined;
|
|
152
122
|
if (domain_slugs?.length) {
|
|
153
|
-
domainIds = await
|
|
123
|
+
domainIds = await api.domains.resolveSlugs(domain_slugs);
|
|
154
124
|
}
|
|
155
|
-
const ctx = await
|
|
125
|
+
const ctx = await api.search.context({
|
|
156
126
|
query,
|
|
157
127
|
maxDepth: max_depth,
|
|
158
128
|
maxNodes: max_nodes,
|
|
@@ -177,25 +147,12 @@ server.tool(
|
|
|
177
147
|
depth: z.number().optional().describe("Hops to traverse (default 1)"),
|
|
178
148
|
},
|
|
179
149
|
async ({ id, depth }) => {
|
|
180
|
-
const
|
|
181
|
-
if (!node) {
|
|
182
|
-
return {
|
|
183
|
-
content: [{ type: "text" as const, text: "Node not found" }],
|
|
184
|
-
isError: true,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
const neighborIds = await edgeService.getNeighborIds(id, depth ?? 1);
|
|
188
|
-
const neighbors = [];
|
|
189
|
-
for (const nId of neighborIds) {
|
|
190
|
-
const n = await nodeService.getById(nId);
|
|
191
|
-
if (n) neighbors.push(n);
|
|
192
|
-
}
|
|
193
|
-
const edges = await edgeService.getByNodeId(id);
|
|
150
|
+
const result = await api.nodes.getNeighborhood(id, depth);
|
|
194
151
|
return {
|
|
195
152
|
content: [
|
|
196
153
|
{
|
|
197
154
|
type: "text" as const,
|
|
198
|
-
text: JSON.stringify(
|
|
155
|
+
text: JSON.stringify(result, null, 2),
|
|
199
156
|
},
|
|
200
157
|
],
|
|
201
158
|
};
|
|
@@ -209,7 +166,7 @@ server.tool(
|
|
|
209
166
|
limit: z.number().optional().describe("Max results (default 50)"),
|
|
210
167
|
},
|
|
211
168
|
async ({ limit }) => {
|
|
212
|
-
const drafts = await
|
|
169
|
+
const drafts = await api.nodes.listDrafts(limit);
|
|
213
170
|
return {
|
|
214
171
|
content: [
|
|
215
172
|
{ type: "text" as const, text: JSON.stringify(drafts, null, 2) },
|
|
@@ -224,8 +181,8 @@ server.tool(
|
|
|
224
181
|
{},
|
|
225
182
|
async () => {
|
|
226
183
|
const [nodeTypes, edgeTypes] = await Promise.all([
|
|
227
|
-
|
|
228
|
-
|
|
184
|
+
api.nodes.listTypes(),
|
|
185
|
+
api.edges.listRelationshipTypes(),
|
|
229
186
|
]);
|
|
230
187
|
return {
|
|
231
188
|
content: [
|
|
@@ -243,7 +200,7 @@ server.tool(
|
|
|
243
200
|
"List the full domain taxonomy tree",
|
|
244
201
|
{},
|
|
245
202
|
async () => {
|
|
246
|
-
const tree = await
|
|
203
|
+
const tree = await api.domains.getTree();
|
|
247
204
|
return {
|
|
248
205
|
content: [
|
|
249
206
|
{ type: "text" as const, text: JSON.stringify(tree, null, 2) },
|
|
@@ -257,7 +214,7 @@ server.tool(
|
|
|
257
214
|
"Seed the default domain taxonomy",
|
|
258
215
|
{},
|
|
259
216
|
async () => {
|
|
260
|
-
const result = await
|
|
217
|
+
const result = await api.domains.seed();
|
|
261
218
|
return {
|
|
262
219
|
content: [
|
|
263
220
|
{
|
|
@@ -276,7 +233,7 @@ server.tool(
|
|
|
276
233
|
"List all workspaces — each defines a filtered view of the knowledge graph for a specific kind of work",
|
|
277
234
|
{},
|
|
278
235
|
async () => {
|
|
279
|
-
const list = await
|
|
236
|
+
const list = await api.workspaces.list();
|
|
280
237
|
return {
|
|
281
238
|
content: [
|
|
282
239
|
{ type: "text" as const, text: JSON.stringify(list, null, 2) },
|
|
@@ -292,7 +249,7 @@ server.tool(
|
|
|
292
249
|
slug: z.string().describe("Workspace slug"),
|
|
293
250
|
},
|
|
294
251
|
async ({ slug }) => {
|
|
295
|
-
const ws = await
|
|
252
|
+
const ws = await api.workspaces.getBySlug(slug);
|
|
296
253
|
if (!ws) {
|
|
297
254
|
return {
|
|
298
255
|
content: [{ type: "text" as const, text: "Workspace not found" }],
|
|
@@ -314,7 +271,7 @@ server.tool(
|
|
|
314
271
|
slug: z.string().describe("Workspace slug"),
|
|
315
272
|
},
|
|
316
273
|
async ({ slug }) => {
|
|
317
|
-
const md = await
|
|
274
|
+
const md = await api.workspaces.exportAsMarkdown(slug);
|
|
318
275
|
if (!md) {
|
|
319
276
|
return {
|
|
320
277
|
content: [{ type: "text" as const, text: "Workspace not found" }],
|
|
@@ -354,10 +311,10 @@ server.tool(
|
|
|
354
311
|
async ({ type, title, content, metadata, created_by, domain_slug }) => {
|
|
355
312
|
let domainId: string | undefined;
|
|
356
313
|
if (domain_slug) {
|
|
357
|
-
const domain = await
|
|
314
|
+
const domain = await api.domains.getBySlug(domain_slug);
|
|
358
315
|
if (domain) domainId = domain.id;
|
|
359
316
|
}
|
|
360
|
-
const node = await
|
|
317
|
+
const node = await api.nodes.create({
|
|
361
318
|
type,
|
|
362
319
|
title,
|
|
363
320
|
content,
|
|
@@ -384,7 +341,7 @@ server.tool(
|
|
|
384
341
|
type: z.string().optional().describe("New node type"),
|
|
385
342
|
},
|
|
386
343
|
async ({ id, title, content, metadata, type }) => {
|
|
387
|
-
const node = await
|
|
344
|
+
const node = await api.nodes.update(id, { title, content, metadata, type });
|
|
388
345
|
if (!node) {
|
|
389
346
|
return {
|
|
390
347
|
content: [{ type: "text" as const, text: "Node not found" }],
|
|
@@ -412,7 +369,7 @@ server.tool(
|
|
|
412
369
|
created_by: z.string().optional().describe("Creator identifier"),
|
|
413
370
|
},
|
|
414
371
|
async ({ source_node_id, target_node_id, relationship_type, weight, created_by }) => {
|
|
415
|
-
const edge = await
|
|
372
|
+
const edge = await api.edges.create({
|
|
416
373
|
sourceNodeId: source_node_id,
|
|
417
374
|
targetNodeId: target_node_id,
|
|
418
375
|
relationshipType: relationship_type,
|
|
@@ -437,7 +394,7 @@ server.tool(
|
|
|
437
394
|
.describe("New status"),
|
|
438
395
|
},
|
|
439
396
|
async ({ id, status }) => {
|
|
440
|
-
const node = await
|
|
397
|
+
const node = await api.nodes.setStatus(id, status as NodeStatus);
|
|
441
398
|
if (!node) {
|
|
442
399
|
return {
|
|
443
400
|
content: [{ type: "text" as const, text: "Node not found" }],
|
|
@@ -452,6 +409,234 @@ server.tool(
|
|
|
452
409
|
}
|
|
453
410
|
);
|
|
454
411
|
|
|
412
|
+
// ── Delete Tools ──────────────────────────────────────────────────────────
|
|
413
|
+
|
|
414
|
+
server.tool(
|
|
415
|
+
"delete_node",
|
|
416
|
+
"Delete a knowledge node and all its edges",
|
|
417
|
+
{
|
|
418
|
+
id: z.string().describe("Node UUID"),
|
|
419
|
+
},
|
|
420
|
+
async ({ id }) => {
|
|
421
|
+
const node = await api.nodes.getById(id);
|
|
422
|
+
if (!node) {
|
|
423
|
+
return {
|
|
424
|
+
content: [{ type: "text" as const, text: "Node not found" }],
|
|
425
|
+
isError: true,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
await api.nodes.delete(node.id);
|
|
429
|
+
return {
|
|
430
|
+
content: [{ type: "text" as const, text: `Deleted node "${node.title}" (${node.id})` }],
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
);
|
|
434
|
+
|
|
435
|
+
server.tool(
|
|
436
|
+
"delete_edge",
|
|
437
|
+
"Delete an edge between two nodes",
|
|
438
|
+
{
|
|
439
|
+
id: z.string().describe("Edge UUID"),
|
|
440
|
+
},
|
|
441
|
+
async ({ id }) => {
|
|
442
|
+
const deleted = await api.edges.delete(id);
|
|
443
|
+
if (!deleted) {
|
|
444
|
+
return {
|
|
445
|
+
content: [{ type: "text" as const, text: "Edge not found" }],
|
|
446
|
+
isError: true,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
return {
|
|
450
|
+
content: [{ type: "text" as const, text: `Deleted edge ${id}` }],
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
// ── Graph Health Tools ────────────────────────────────────────────────────
|
|
456
|
+
|
|
457
|
+
server.tool(
|
|
458
|
+
"health_report",
|
|
459
|
+
"Comprehensive graph health report — node/edge counts, orphans, stale nodes, connected components",
|
|
460
|
+
{
|
|
461
|
+
stale_days: z.number().optional().describe("Days before a node is considered stale (default 90)"),
|
|
462
|
+
},
|
|
463
|
+
async ({ stale_days }) => {
|
|
464
|
+
const report = await api.cleaning.getHealthReport(stale_days ?? 90);
|
|
465
|
+
return {
|
|
466
|
+
content: [{ type: "text" as const, text: JSON.stringify(report, null, 2) }],
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
server.tool(
|
|
472
|
+
"validate_edges",
|
|
473
|
+
"Validate edge integrity — detect self-loops, duplicates, low-relevance connections, contradictions, and rare types",
|
|
474
|
+
{
|
|
475
|
+
low_relevance_threshold: z.number().optional().describe("Similarity threshold for low-relevance detection (default 0.3)"),
|
|
476
|
+
rare_type_threshold: z.number().optional().describe("Flag relationship types used this many times or fewer (default 1)"),
|
|
477
|
+
},
|
|
478
|
+
async ({ low_relevance_threshold, rare_type_threshold }) => {
|
|
479
|
+
const report = await api.cleaning.validate({
|
|
480
|
+
lowRelevanceThreshold: low_relevance_threshold,
|
|
481
|
+
rareTypeThreshold: rare_type_threshold,
|
|
482
|
+
});
|
|
483
|
+
return {
|
|
484
|
+
content: [{ type: "text" as const, text: JSON.stringify(report, null, 2) }],
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
);
|
|
488
|
+
|
|
489
|
+
server.tool(
|
|
490
|
+
"find_orphans",
|
|
491
|
+
"Find nodes with no connections to other nodes",
|
|
492
|
+
{},
|
|
493
|
+
async () => {
|
|
494
|
+
const orphans = await api.cleaning.findOrphans();
|
|
495
|
+
return {
|
|
496
|
+
content: [{ type: "text" as const, text: JSON.stringify(orphans, null, 2) }],
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
server.tool(
|
|
502
|
+
"find_duplicates",
|
|
503
|
+
"Find near-duplicate node pairs by embedding cosine similarity",
|
|
504
|
+
{
|
|
505
|
+
threshold: z.number().optional().describe("Minimum cosine similarity 0-1 (default 0.95)"),
|
|
506
|
+
limit: z.number().optional().describe("Max pairs to return (default 50)"),
|
|
507
|
+
},
|
|
508
|
+
async ({ threshold, limit }) => {
|
|
509
|
+
const duplicates = await api.cleaning.findDuplicates(threshold ?? 0.95, limit ?? 50);
|
|
510
|
+
return {
|
|
511
|
+
content: [{ type: "text" as const, text: JSON.stringify(duplicates, null, 2) }],
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
);
|
|
515
|
+
|
|
516
|
+
server.tool(
|
|
517
|
+
"find_islands",
|
|
518
|
+
"Detect disconnected clusters (connected components) in the graph, optionally with bridge suggestions",
|
|
519
|
+
{
|
|
520
|
+
bridges: z.boolean().optional().describe("Include suggested links to bridge islands"),
|
|
521
|
+
max_bridges: z.number().optional().describe("Max bridge suggestions (default 10)"),
|
|
522
|
+
},
|
|
523
|
+
async ({ bridges, max_bridges }) => {
|
|
524
|
+
const result = await api.cleaning.findIslands({
|
|
525
|
+
bridges,
|
|
526
|
+
maxBridges: max_bridges,
|
|
527
|
+
});
|
|
528
|
+
return {
|
|
529
|
+
content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
);
|
|
533
|
+
|
|
534
|
+
server.tool(
|
|
535
|
+
"suggest_links",
|
|
536
|
+
"Suggest missing links between semantically similar but unconnected nodes",
|
|
537
|
+
{
|
|
538
|
+
node_id: z.string().optional().describe("Node UUID to suggest links for (omit for global scan)"),
|
|
539
|
+
min_similarity: z.number().optional().describe("Minimum cosine similarity (default 0.8 global, 0.7 per-node)"),
|
|
540
|
+
limit: z.number().optional().describe("Max suggestions (default 10 per-node, 20 global)"),
|
|
541
|
+
},
|
|
542
|
+
async ({ node_id, min_similarity, limit }) => {
|
|
543
|
+
const suggestions = await api.cleaning.suggestLinks({
|
|
544
|
+
nodeId: node_id,
|
|
545
|
+
minSimilarity: min_similarity,
|
|
546
|
+
limit,
|
|
547
|
+
});
|
|
548
|
+
return {
|
|
549
|
+
content: [{ type: "text" as const, text: JSON.stringify(suggestions, null, 2) }],
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
);
|
|
553
|
+
|
|
554
|
+
server.tool(
|
|
555
|
+
"analyze_relationship_types",
|
|
556
|
+
"Analyze relationship type vocabulary and suggest merges for semantically similar types",
|
|
557
|
+
{
|
|
558
|
+
min_similarity: z.number().optional().describe("Minimum similarity to suggest merge (default 0.7)"),
|
|
559
|
+
},
|
|
560
|
+
async ({ min_similarity }) => {
|
|
561
|
+
const report = await api.cleaning.analyzeRelationshipTypes({
|
|
562
|
+
minSimilarity: min_similarity,
|
|
563
|
+
});
|
|
564
|
+
return {
|
|
565
|
+
content: [{ type: "text" as const, text: JSON.stringify(report, null, 2) }],
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
server.tool(
|
|
571
|
+
"retype_edges",
|
|
572
|
+
"Rename all edges of one relationship type to another",
|
|
573
|
+
{
|
|
574
|
+
from_type: z.string().describe("Current relationship type to rename"),
|
|
575
|
+
to_type: z.string().describe("New relationship type name"),
|
|
576
|
+
},
|
|
577
|
+
async ({ from_type, to_type }) => {
|
|
578
|
+
const result = await api.cleaning.retypeMany(from_type, to_type);
|
|
579
|
+
return {
|
|
580
|
+
content: [{ type: "text" as const, text: JSON.stringify({ renamed: result.count, from: from_type, to: to_type }, null, 2) }],
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
);
|
|
584
|
+
|
|
585
|
+
// ── PII Tools ─────────────────────────────────────────────────────────────
|
|
586
|
+
|
|
587
|
+
server.tool(
|
|
588
|
+
"get_pii_config",
|
|
589
|
+
"Get the current PII detection/encryption policy for this organization",
|
|
590
|
+
{},
|
|
591
|
+
async () => {
|
|
592
|
+
const config = await api.pii.getConfig();
|
|
593
|
+
if (!config) {
|
|
594
|
+
return {
|
|
595
|
+
content: [{ type: "text" as const, text: JSON.stringify({ configured: false }, null, 2) }],
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
return {
|
|
599
|
+
content: [{ type: "text" as const, text: JSON.stringify(config, null, 2) }],
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
);
|
|
603
|
+
|
|
604
|
+
server.tool(
|
|
605
|
+
"test_pii",
|
|
606
|
+
"Test a text string for PII detection — returns matches with types and positions",
|
|
607
|
+
{
|
|
608
|
+
text: z.string().describe("Text to scan for PII"),
|
|
609
|
+
},
|
|
610
|
+
async ({ text }) => {
|
|
611
|
+
const result = await api.pii.test(text);
|
|
612
|
+
return {
|
|
613
|
+
content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
);
|
|
617
|
+
|
|
618
|
+
// ── Maintenance Tools ─────────────────────────────────────────────────────
|
|
619
|
+
|
|
620
|
+
server.tool(
|
|
621
|
+
"re_embed",
|
|
622
|
+
"Re-generate embeddings for nodes (useful after changing embedding provider/model)",
|
|
623
|
+
{
|
|
624
|
+
type: z.string().optional().describe("Only re-embed nodes of this type"),
|
|
625
|
+
limit: z.number().optional().describe("Limit to N nodes"),
|
|
626
|
+
dry_run: z.boolean().optional().describe("Show what would be re-embedded without making changes"),
|
|
627
|
+
},
|
|
628
|
+
async ({ type, limit, dry_run }) => {
|
|
629
|
+
const result = await api.reEmbed({
|
|
630
|
+
type,
|
|
631
|
+
limit,
|
|
632
|
+
dryRun: dry_run ?? false,
|
|
633
|
+
});
|
|
634
|
+
return {
|
|
635
|
+
content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }],
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
);
|
|
639
|
+
|
|
455
640
|
// ── Start Server ───────────────────────────────────────────────────────────
|
|
456
641
|
|
|
457
642
|
async function main() {
|