@knowledgine/mcp-server 0.0.1 → 0.1.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.
- package/dist/helpers.d.ts +7 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +19 -3
- package/dist/helpers.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +3 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +121 -13
- package/dist/server.js.map +1 -1
- package/package.json +6 -4
package/dist/helpers.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { KnowledgeRepository } from "@knowledgine/core";
|
|
2
|
-
import type { KnowledgineConfig } from "@knowledgine/core";
|
|
1
|
+
import { KnowledgeRepository, GraphRepository } from "@knowledgine/core";
|
|
2
|
+
import type { KnowledgineConfig, EmbeddingProvider } from "@knowledgine/core";
|
|
3
3
|
export declare function resolveConfig(): KnowledgineConfig;
|
|
4
|
-
export declare function initializeDependencies(config: KnowledgineConfig):
|
|
4
|
+
export declare function initializeDependencies(config: KnowledgineConfig): {
|
|
5
|
+
repository: KnowledgeRepository;
|
|
6
|
+
embeddingProvider: EmbeddingProvider | undefined;
|
|
7
|
+
graphRepository: GraphRepository;
|
|
8
|
+
};
|
|
5
9
|
export declare function formatToolResult(data: unknown): {
|
|
6
10
|
content: Array<{
|
|
7
11
|
type: "text";
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,mBAAmB,EACnB,eAAe,EAIhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,wBAAgB,aAAa,IAAI,iBAAiB,CAOjD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG;IACjE,UAAU,EAAE,mBAAmB,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,eAAe,EAAE,eAAe,CAAC;CAClC,CAyBA;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG;IAC/C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAIA;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAChD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAKA"}
|
package/dist/helpers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineConfig, createDatabase, Migrator, KnowledgeRepository, ALL_MIGRATIONS, } from "@knowledgine/core";
|
|
1
|
+
import { defineConfig, createDatabase, Migrator, KnowledgeRepository, GraphRepository, ALL_MIGRATIONS, OnnxEmbeddingProvider, ModelManager, } from "@knowledgine/core";
|
|
2
2
|
export function resolveConfig() {
|
|
3
3
|
const dbPath = process.env["KNOWLEDGINE_DB_PATH"];
|
|
4
4
|
const rootPath = process.env["KNOWLEDGINE_ROOT_PATH"] ?? process.cwd();
|
|
@@ -8,9 +8,25 @@ export function resolveConfig() {
|
|
|
8
8
|
});
|
|
9
9
|
}
|
|
10
10
|
export function initializeDependencies(config) {
|
|
11
|
-
|
|
11
|
+
// 1. sqlite-vec のロードを含む DB 作成(createDatabase 内で try/catch)
|
|
12
|
+
const db = createDatabase(config.dbPath, { enableVec: true });
|
|
13
|
+
// 2. migrate(sqlite-vec ロード後に実行)
|
|
12
14
|
new Migrator(db, ALL_MIGRATIONS).migrate();
|
|
13
|
-
|
|
15
|
+
const repository = new KnowledgeRepository(db);
|
|
16
|
+
const graphRepository = new GraphRepository(db);
|
|
17
|
+
// 3. EmbeddingProvider 初期化(モデルが存在する場合のみ)
|
|
18
|
+
let embeddingProvider;
|
|
19
|
+
if (config.embedding?.enabled) {
|
|
20
|
+
const modelManager = new ModelManager();
|
|
21
|
+
if (modelManager.isModelAvailable(config.embedding.modelName)) {
|
|
22
|
+
embeddingProvider = new OnnxEmbeddingProvider(config.embedding.modelName, modelManager);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.error(`[knowledgine] Embedding model "${config.embedding.modelName}" not found. ` +
|
|
26
|
+
"Semantic search will be unavailable. Run: node scripts/download-model.js");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return { repository, embeddingProvider, graphRepository };
|
|
14
30
|
}
|
|
15
31
|
export function formatToolResult(data) {
|
|
16
32
|
return {
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvE,OAAO,YAAY,CAAC;QAClB,QAAQ;QACR,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAyB;IAK9D,2DAA2D;IAC3D,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,iCAAiC;IACjC,IAAI,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;IAE3C,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;IAEhD,yCAAyC;IACzC,IAAI,iBAAgD,CAAC;IACrD,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,iBAAiB,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,kCAAkC,MAAM,CAAC,SAAS,CAAC,SAAS,eAAe;gBACzE,0EAA0E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAG5C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAI7C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,8 +7,8 @@ export { resolveConfig, initializeDependencies, formatToolResult, formatToolErro
|
|
|
7
7
|
export { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
8
8
|
async function main() {
|
|
9
9
|
const config = resolveConfig();
|
|
10
|
-
const repository = initializeDependencies(config);
|
|
11
|
-
const server = createKnowledgineMcpServer(repository, config.rootPath);
|
|
10
|
+
const { repository, embeddingProvider, graphRepository } = initializeDependencies(config);
|
|
11
|
+
const server = createKnowledgineMcpServer(repository, config.rootPath, embeddingProvider, graphRepository);
|
|
12
12
|
const transport = new StdioServerTransport();
|
|
13
13
|
await server.connect(transport);
|
|
14
14
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,0BAA0B,CACvC,UAAU,EACV,MAAM,CAAC,QAAQ,EACf,iBAAiB,EACjB,eAAe,CAChB,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,0DAA0D;AAC1D,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACnF,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import type { KnowledgeRepository } from "@knowledgine/core";
|
|
3
|
-
|
|
2
|
+
import type { KnowledgeRepository, EmbeddingProvider } from "@knowledgine/core";
|
|
3
|
+
import type { GraphRepository } from "@knowledgine/core";
|
|
4
|
+
export declare function createKnowledgineMcpServer(repository: KnowledgeRepository, rootPath?: string, embeddingProvider?: EmbeddingProvider, graphRepository?: GraphRepository): McpServer;
|
|
4
5
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,mBAAmB,EAC/B,QAAQ,CAAC,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,eAAe,CAAC,EAAE,eAAe,GAChC,SAAS,CAiOX"}
|
package/dist/server.js
CHANGED
|
@@ -2,21 +2,30 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { KnowledgeSearcher, LocalLinkGenerator } from "@knowledgine/core";
|
|
4
4
|
import { formatToolResult, formatToolError } from "./helpers.js";
|
|
5
|
-
export function createKnowledgineMcpServer(repository, rootPath) {
|
|
5
|
+
export function createKnowledgineMcpServer(repository, rootPath, embeddingProvider, graphRepository) {
|
|
6
6
|
const server = new McpServer({ name: "knowledgine", version: "0.0.1" });
|
|
7
|
+
const searcher = new KnowledgeSearcher(repository, embeddingProvider);
|
|
7
8
|
// Tool 1: search_knowledge
|
|
8
9
|
server.registerTool("search_knowledge", {
|
|
9
|
-
description: "
|
|
10
|
+
description: "Full-text and semantic search across notes in the knowledge base. Use mode='keyword' for exact matches, 'semantic' for conceptual similarity, or 'hybrid' to combine both.",
|
|
10
11
|
inputSchema: {
|
|
11
|
-
query: z.string().describe("
|
|
12
|
-
limit: z.number().int().positive().optional().describe("
|
|
12
|
+
query: z.string().describe("Search query"),
|
|
13
|
+
limit: z.number().int().positive().optional().describe("Maximum number of results"),
|
|
14
|
+
mode: z
|
|
15
|
+
.enum(["keyword", "semantic", "hybrid"])
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Search mode (default: keyword)"),
|
|
13
18
|
},
|
|
14
19
|
}, async (input) => {
|
|
15
20
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
21
|
+
const results = await searcher.search({
|
|
22
|
+
query: input.query,
|
|
23
|
+
limit: input.limit ?? 20,
|
|
24
|
+
mode: input.mode ?? "keyword",
|
|
25
|
+
});
|
|
18
26
|
return formatToolResult({
|
|
19
27
|
query: input.query,
|
|
28
|
+
mode: input.mode ?? "keyword",
|
|
20
29
|
totalResults: results.length,
|
|
21
30
|
results: results.map((r) => ({
|
|
22
31
|
noteId: r.note.id,
|
|
@@ -34,11 +43,18 @@ export function createKnowledgineMcpServer(repository, rootPath) {
|
|
|
34
43
|
});
|
|
35
44
|
// Tool 2: find_related
|
|
36
45
|
server.registerTool("find_related", {
|
|
37
|
-
description: "
|
|
46
|
+
description: "Find related notes and problem-solution pairs for a given note by ID or file path. Optionally traverses the knowledge graph.",
|
|
38
47
|
inputSchema: {
|
|
39
|
-
noteId: z.number().int().positive().optional().describe("
|
|
40
|
-
filePath: z.string().optional().describe("
|
|
41
|
-
limit: z.number().int().positive().optional().describe("
|
|
48
|
+
noteId: z.number().int().positive().optional().describe("Note ID"),
|
|
49
|
+
filePath: z.string().optional().describe("File path"),
|
|
50
|
+
limit: z.number().int().positive().optional().describe("Maximum number of results"),
|
|
51
|
+
maxHops: z
|
|
52
|
+
.number()
|
|
53
|
+
.int()
|
|
54
|
+
.min(1)
|
|
55
|
+
.max(3)
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("Graph traversal hops (default: 1, max: 3)"),
|
|
42
58
|
},
|
|
43
59
|
}, async (input) => {
|
|
44
60
|
try {
|
|
@@ -61,13 +77,31 @@ export function createKnowledgineMcpServer(repository, rootPath) {
|
|
|
61
77
|
if (!resolvedNoteId) {
|
|
62
78
|
return formatToolError("Either noteId or filePath is required");
|
|
63
79
|
}
|
|
64
|
-
const linkGenerator = new LocalLinkGenerator(repository);
|
|
80
|
+
const linkGenerator = new LocalLinkGenerator(repository, graphRepository);
|
|
65
81
|
const relatedNotes = linkGenerator.findRelatedNotes(resolvedNoteId, input.limit ?? 5);
|
|
66
82
|
const problemSolutionPairs = repository.getProblemSolutionPairsByNoteId(resolvedNoteId);
|
|
83
|
+
// Graph relations if available
|
|
84
|
+
let graphRelations = [];
|
|
85
|
+
if (graphRepository) {
|
|
86
|
+
const linkedEntities = graphRepository.getLinkedEntities(resolvedNoteId);
|
|
87
|
+
const maxHops = input.maxHops ?? 1;
|
|
88
|
+
graphRelations = linkedEntities.map((entity) => ({
|
|
89
|
+
entityId: entity.id,
|
|
90
|
+
name: entity.name,
|
|
91
|
+
entityType: entity.entityType,
|
|
92
|
+
relatedEntities: graphRepository.findRelatedEntities(entity.id, maxHops).map((e) => ({
|
|
93
|
+
id: e.id,
|
|
94
|
+
name: e.name,
|
|
95
|
+
entityType: e.entityType,
|
|
96
|
+
hops: e.hops,
|
|
97
|
+
})),
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
67
100
|
return formatToolResult({
|
|
68
101
|
noteId: resolvedNoteId,
|
|
69
102
|
relatedNotes,
|
|
70
103
|
problemSolutionPairs,
|
|
104
|
+
graphRelations,
|
|
71
105
|
});
|
|
72
106
|
}
|
|
73
107
|
catch (error) {
|
|
@@ -76,11 +110,85 @@ export function createKnowledgineMcpServer(repository, rootPath) {
|
|
|
76
110
|
});
|
|
77
111
|
// Tool 3: get_stats
|
|
78
112
|
server.registerTool("get_stats", {
|
|
79
|
-
description: "
|
|
113
|
+
description: "Get statistics for the knowledge base including note counts, embedding status, and knowledge graph stats.",
|
|
80
114
|
inputSchema: {},
|
|
81
115
|
}, async () => {
|
|
82
116
|
try {
|
|
83
|
-
|
|
117
|
+
const stats = repository.getStats();
|
|
118
|
+
const notesWithoutEmbeddings = embeddingProvider
|
|
119
|
+
? repository.getNotesWithoutEmbeddings().length
|
|
120
|
+
: null;
|
|
121
|
+
const graphStats = graphRepository ? graphRepository.getGraphStats() : null;
|
|
122
|
+
return formatToolResult({
|
|
123
|
+
...stats,
|
|
124
|
+
embeddingStatus: {
|
|
125
|
+
available: embeddingProvider != null,
|
|
126
|
+
notesWithoutEmbeddings,
|
|
127
|
+
},
|
|
128
|
+
graphStats,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return formatToolError(error instanceof Error ? error.message : String(error));
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
// Tool 4: search_entities
|
|
136
|
+
server.registerTool("search_entities", {
|
|
137
|
+
description: "Search for entities (people, technologies, projects, concepts) in the knowledge graph.",
|
|
138
|
+
inputSchema: {
|
|
139
|
+
query: z.string().describe("Entity name or description to search for"),
|
|
140
|
+
limit: z.number().int().positive().optional().describe("Maximum number of results"),
|
|
141
|
+
},
|
|
142
|
+
}, async (input) => {
|
|
143
|
+
try {
|
|
144
|
+
if (!graphRepository) {
|
|
145
|
+
return formatToolError("Knowledge graph is not available");
|
|
146
|
+
}
|
|
147
|
+
const entities = graphRepository.searchEntities(input.query, input.limit ?? 20);
|
|
148
|
+
return formatToolResult({
|
|
149
|
+
query: input.query,
|
|
150
|
+
totalResults: entities.length,
|
|
151
|
+
entities: entities.map((e) => ({
|
|
152
|
+
id: e.id,
|
|
153
|
+
name: e.name,
|
|
154
|
+
entityType: e.entityType,
|
|
155
|
+
description: e.description,
|
|
156
|
+
createdAt: e.createdAt,
|
|
157
|
+
})),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return formatToolError(error instanceof Error ? error.message : String(error));
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// Tool 5: get_entity_graph
|
|
165
|
+
server.registerTool("get_entity_graph", {
|
|
166
|
+
description: "Get full graph data for a specific entity including observations, relations, and linked notes.",
|
|
167
|
+
inputSchema: {
|
|
168
|
+
entityId: z.number().int().positive().optional().describe("Entity ID"),
|
|
169
|
+
entityName: z.string().optional().describe("Entity name (case-insensitive)"),
|
|
170
|
+
},
|
|
171
|
+
}, async (input) => {
|
|
172
|
+
try {
|
|
173
|
+
if (!graphRepository) {
|
|
174
|
+
return formatToolError("Knowledge graph is not available");
|
|
175
|
+
}
|
|
176
|
+
let entityId = input.entityId;
|
|
177
|
+
if (!entityId && input.entityName) {
|
|
178
|
+
const entity = graphRepository.getEntityByName(input.entityName);
|
|
179
|
+
if (!entity) {
|
|
180
|
+
return formatToolError(`Entity not found: ${input.entityName}`);
|
|
181
|
+
}
|
|
182
|
+
entityId = entity.id;
|
|
183
|
+
}
|
|
184
|
+
if (!entityId) {
|
|
185
|
+
return formatToolError("Either entityId or entityName is required");
|
|
186
|
+
}
|
|
187
|
+
const graph = graphRepository.getEntityWithGraph(entityId);
|
|
188
|
+
if (!graph) {
|
|
189
|
+
return formatToolError(`Entity not found: id=${entityId}`);
|
|
190
|
+
}
|
|
191
|
+
return formatToolResult(graph);
|
|
84
192
|
}
|
|
85
193
|
catch (error) {
|
|
86
194
|
return formatToolError(error instanceof Error ? error.message : String(error));
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knowledgine/mcp-server",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
18
18
|
"zod": "^4.3.6",
|
|
19
|
-
"@knowledgine/core": "0.0
|
|
19
|
+
"@knowledgine/core": "0.1.0"
|
|
20
20
|
},
|
|
21
21
|
"files": [
|
|
22
22
|
"dist"
|
|
@@ -26,8 +26,10 @@
|
|
|
26
26
|
"mcp",
|
|
27
27
|
"model-context-protocol",
|
|
28
28
|
"knowledge",
|
|
29
|
-
"
|
|
30
|
-
"search"
|
|
29
|
+
"markdown",
|
|
30
|
+
"search",
|
|
31
|
+
"mcp-server",
|
|
32
|
+
"developer-tools"
|
|
31
33
|
],
|
|
32
34
|
"license": "MIT",
|
|
33
35
|
"repository": {
|