@henrychong-ai/mcp-neo4j-knowledge-graph 1.0.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/LICENSE +21 -0
- package/README.md +718 -0
- package/dist/KnowledgeGraphManager.d.ts +215 -0
- package/dist/KnowledgeGraphManager.js +910 -0
- package/dist/KnowledgeGraphManager.js.map +1 -0
- package/dist/callToolHandler.d.ts +5 -0
- package/dist/callToolHandler.js +26 -0
- package/dist/callToolHandler.js.map +1 -0
- package/dist/cli/neo4j-setup.d.ts +52 -0
- package/dist/cli/neo4j-setup.js +258 -0
- package/dist/cli/neo4j-setup.js.map +1 -0
- package/dist/config/paths.d.ts +13 -0
- package/dist/config/paths.js +41 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/storage.d.ts +35 -0
- package/dist/config/storage.js +52 -0
- package/dist/config/storage.js.map +1 -0
- package/dist/embeddings/DefaultEmbeddingService.d.ts +64 -0
- package/dist/embeddings/DefaultEmbeddingService.js +139 -0
- package/dist/embeddings/DefaultEmbeddingService.js.map +1 -0
- package/dist/embeddings/EmbeddingJobManager.d.ts +212 -0
- package/dist/embeddings/EmbeddingJobManager.js +545 -0
- package/dist/embeddings/EmbeddingJobManager.js.map +1 -0
- package/dist/embeddings/EmbeddingService.d.ts +96 -0
- package/dist/embeddings/EmbeddingService.js +44 -0
- package/dist/embeddings/EmbeddingService.js.map +1 -0
- package/dist/embeddings/EmbeddingServiceFactory.d.ts +72 -0
- package/dist/embeddings/EmbeddingServiceFactory.js +147 -0
- package/dist/embeddings/EmbeddingServiceFactory.js.map +1 -0
- package/dist/embeddings/OpenAIEmbeddingService.d.ts +73 -0
- package/dist/embeddings/OpenAIEmbeddingService.js +195 -0
- package/dist/embeddings/OpenAIEmbeddingService.js.map +1 -0
- package/dist/embeddings/config.d.ts +83 -0
- package/dist/embeddings/config.js +65 -0
- package/dist/embeddings/config.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +220 -0
- package/dist/index.js.map +1 -0
- package/dist/server/handlers/callToolHandler.d.ts +20 -0
- package/dist/server/handlers/callToolHandler.js +505 -0
- package/dist/server/handlers/callToolHandler.js.map +1 -0
- package/dist/server/handlers/listToolsHandler.d.ts +7 -0
- package/dist/server/handlers/listToolsHandler.js +511 -0
- package/dist/server/handlers/listToolsHandler.js.map +1 -0
- package/dist/server/handlers/toolHandlers/addObservations.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/addObservations.js +99 -0
- package/dist/server/handlers/toolHandlers/addObservations.js.map +1 -0
- package/dist/server/handlers/toolHandlers/createEntities.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/createEntities.js +20 -0
- package/dist/server/handlers/toolHandlers/createEntities.js.map +1 -0
- package/dist/server/handlers/toolHandlers/createRelations.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/createRelations.js +20 -0
- package/dist/server/handlers/toolHandlers/createRelations.js.map +1 -0
- package/dist/server/handlers/toolHandlers/deleteEntities.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/deleteEntities.js +20 -0
- package/dist/server/handlers/toolHandlers/deleteEntities.js.map +1 -0
- package/dist/server/handlers/toolHandlers/index.d.ts +8 -0
- package/dist/server/handlers/toolHandlers/index.js +9 -0
- package/dist/server/handlers/toolHandlers/index.js.map +1 -0
- package/dist/server/handlers/toolHandlers/readGraph.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/readGraph.js +20 -0
- package/dist/server/handlers/toolHandlers/readGraph.js.map +1 -0
- package/dist/server/setup.d.ts +8 -0
- package/dist/server/setup.js +48 -0
- package/dist/server/setup.js.map +1 -0
- package/dist/storage/FileStorageProvider.d.ts +125 -0
- package/dist/storage/FileStorageProvider.js +322 -0
- package/dist/storage/FileStorageProvider.js.map +1 -0
- package/dist/storage/SearchResultCache.d.ts +102 -0
- package/dist/storage/SearchResultCache.js +258 -0
- package/dist/storage/SearchResultCache.js.map +1 -0
- package/dist/storage/StorageProvider.d.ts +171 -0
- package/dist/storage/StorageProvider.js +46 -0
- package/dist/storage/StorageProvider.js.map +1 -0
- package/dist/storage/StorageProviderFactory.d.ts +63 -0
- package/dist/storage/StorageProviderFactory.js +113 -0
- package/dist/storage/StorageProviderFactory.js.map +1 -0
- package/dist/storage/VectorStoreFactory.d.ts +43 -0
- package/dist/storage/VectorStoreFactory.js +41 -0
- package/dist/storage/VectorStoreFactory.js.map +1 -0
- package/dist/storage/neo4j/Neo4jConfig.d.ts +37 -0
- package/dist/storage/neo4j/Neo4jConfig.js +13 -0
- package/dist/storage/neo4j/Neo4jConfig.js.map +1 -0
- package/dist/storage/neo4j/Neo4jConnectionManager.d.ts +40 -0
- package/dist/storage/neo4j/Neo4jConnectionManager.js +58 -0
- package/dist/storage/neo4j/Neo4jConnectionManager.js.map +1 -0
- package/dist/storage/neo4j/Neo4jSchemaManager.d.ts +74 -0
- package/dist/storage/neo4j/Neo4jSchemaManager.js +224 -0
- package/dist/storage/neo4j/Neo4jSchemaManager.js.map +1 -0
- package/dist/storage/neo4j/Neo4jStorageProvider.d.ts +225 -0
- package/dist/storage/neo4j/Neo4jStorageProvider.js +1900 -0
- package/dist/storage/neo4j/Neo4jStorageProvider.js.map +1 -0
- package/dist/storage/neo4j/Neo4jVectorStore.d.ts +80 -0
- package/dist/storage/neo4j/Neo4jVectorStore.js +396 -0
- package/dist/storage/neo4j/Neo4jVectorStore.js.map +1 -0
- package/dist/types/entity-embedding.d.ts +156 -0
- package/dist/types/entity-embedding.js +2 -0
- package/dist/types/entity-embedding.js.map +1 -0
- package/dist/types/relation.d.ts +77 -0
- package/dist/types/relation.js +93 -0
- package/dist/types/relation.js.map +1 -0
- package/dist/types/temporalEntity.d.ts +55 -0
- package/dist/types/temporalEntity.js +66 -0
- package/dist/types/temporalEntity.js.map +1 -0
- package/dist/types/temporalRelation.d.ts +60 -0
- package/dist/types/temporalRelation.js +89 -0
- package/dist/types/temporalRelation.js.map +1 -0
- package/dist/types/vector-index.d.ts +48 -0
- package/dist/types/vector-index.js +2 -0
- package/dist/types/vector-index.js.map +1 -0
- package/dist/types/vector-store.d.ts +16 -0
- package/dist/types/vector-store.js +2 -0
- package/dist/types/vector-store.js.map +1 -0
- package/dist/utils/fs.d.ts +2 -0
- package/dist/utils/fs.js +3 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +35 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for the embedding subsystem
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default settings for embedding job processing
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_EMBEDDING_SETTINGS = {
|
|
8
|
+
/**
|
|
9
|
+
* Maximum batch size for processing embedding jobs
|
|
10
|
+
* Larger batches may be more efficient but use more memory
|
|
11
|
+
*/
|
|
12
|
+
BATCH_SIZE: 10,
|
|
13
|
+
/**
|
|
14
|
+
* Minimum time in milliseconds between API calls (rate limiting)
|
|
15
|
+
*/
|
|
16
|
+
API_RATE_LIMIT_MS: 1000,
|
|
17
|
+
/**
|
|
18
|
+
* Time-to-live in milliseconds for cached embeddings (default: 30 days)
|
|
19
|
+
*/
|
|
20
|
+
CACHE_TTL_MS: 30 * 24 * 60 * 60 * 1000,
|
|
21
|
+
/**
|
|
22
|
+
* Maximum number of entries to keep in the embedding cache
|
|
23
|
+
*/
|
|
24
|
+
CACHE_MAX_SIZE: 1000,
|
|
25
|
+
/**
|
|
26
|
+
* Minimum age in milliseconds for jobs to be eligible for cleanup
|
|
27
|
+
* Default: 30 days
|
|
28
|
+
*/
|
|
29
|
+
JOB_CLEANUP_AGE_MS: 30 * 24 * 60 * 60 * 1000,
|
|
30
|
+
/**
|
|
31
|
+
* Status options for embedding jobs
|
|
32
|
+
*/
|
|
33
|
+
JOB_STATUS: {
|
|
34
|
+
PENDING: 'pending',
|
|
35
|
+
PROCESSING: 'processing',
|
|
36
|
+
COMPLETED: 'completed',
|
|
37
|
+
FAILED: 'failed',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Get configuration for the LRU cache for embeddings
|
|
42
|
+
*
|
|
43
|
+
* @param options - Optional overrides for cache settings
|
|
44
|
+
* @returns Configuration object for the LRU cache
|
|
45
|
+
*/
|
|
46
|
+
export function getEmbeddingCacheConfig(options = {}) {
|
|
47
|
+
return {
|
|
48
|
+
max: options.max || DEFAULT_EMBEDDING_SETTINGS.CACHE_MAX_SIZE,
|
|
49
|
+
ttl: options.ttl || DEFAULT_EMBEDDING_SETTINGS.CACHE_TTL_MS,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get configuration for embedding job processing
|
|
54
|
+
*
|
|
55
|
+
* @param options - Optional overrides for job processing settings
|
|
56
|
+
* @returns Configuration object for job processing
|
|
57
|
+
*/
|
|
58
|
+
export function getJobProcessingConfig(options = {}) {
|
|
59
|
+
return {
|
|
60
|
+
batchSize: options.batchSize || DEFAULT_EMBEDDING_SETTINGS.BATCH_SIZE,
|
|
61
|
+
apiRateLimitMs: options.apiRateLimitMs || DEFAULT_EMBEDDING_SETTINGS.API_RATE_LIMIT_MS,
|
|
62
|
+
jobCleanupAgeMs: options.jobCleanupAgeMs || DEFAULT_EMBEDDING_SETTINGS.JOB_CLEANUP_AGE_MS,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/embeddings/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC;;;OAGG;IACH,UAAU,EAAE,EAAE;IAEd;;OAEG;IACH,iBAAiB,EAAE,IAAI;IAEvB;;OAEG;IACH,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAEtC;;OAEG;IACH,cAAc,EAAE,IAAI;IAEpB;;;OAGG;IACH,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;IAE5C;;OAEG;IACH,UAAU,EAAE;QACV,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,QAAQ;KACjB;CACF,CAAC;AAqCF;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA0C,EAAE;IAE5C,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,0BAA0B,CAAC,cAAc;QAC7D,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,0BAA0B,CAAC,YAAY;KAC5D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkD,EAAE;IAEpD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,0BAA0B,CAAC,UAAU;QACrE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,0BAA0B,CAAC,iBAAiB;QACtF,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,0BAA0B,CAAC,kBAAkB;KAC1F,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { KnowledgeGraphManager } from './KnowledgeGraphManager.js';
|
|
4
|
+
import { initializeStorageProvider } from './config/storage.js';
|
|
5
|
+
import { setupServer } from './server/setup.js';
|
|
6
|
+
import { EmbeddingJobManager } from './embeddings/EmbeddingJobManager.js';
|
|
7
|
+
import { EmbeddingServiceFactory } from './embeddings/EmbeddingServiceFactory.js';
|
|
8
|
+
import { logger } from './utils/logger.js';
|
|
9
|
+
// Re-export the types and classes for use in other modules
|
|
10
|
+
export * from './KnowledgeGraphManager.js';
|
|
11
|
+
// Export the Relation type
|
|
12
|
+
export { Relation } from './types/relation.js';
|
|
13
|
+
// Initialize storage and create KnowledgeGraphManager
|
|
14
|
+
const storageProvider = initializeStorageProvider();
|
|
15
|
+
// Initialize embedding job manager only if storage provider supports it
|
|
16
|
+
let embeddingJobManager = undefined;
|
|
17
|
+
try {
|
|
18
|
+
// Force debug logging to help troubleshoot
|
|
19
|
+
logger.debug(`OpenAI API key exists: ${!!process.env.OPENAI_API_KEY}`);
|
|
20
|
+
logger.debug(`OpenAI Embedding model: ${process.env.OPENAI_EMBEDDING_MODEL || 'not set'}`);
|
|
21
|
+
logger.debug(`Storage provider type: ${process.env.MEMORY_STORAGE_TYPE || 'default'}`);
|
|
22
|
+
// Ensure OPENAI_API_KEY is defined for embedding generation
|
|
23
|
+
if (!process.env.OPENAI_API_KEY) {
|
|
24
|
+
logger.warn('OPENAI_API_KEY environment variable is not set. Semantic search will use random embeddings.');
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
logger.info('OpenAI API key found, will use for generating embeddings');
|
|
28
|
+
}
|
|
29
|
+
// Initialize the embedding service
|
|
30
|
+
const embeddingService = EmbeddingServiceFactory.createFromEnvironment();
|
|
31
|
+
logger.debug(`Embedding service model info: ${JSON.stringify(embeddingService.getModelInfo())}`);
|
|
32
|
+
// Configure rate limiting options - stricter limits to prevent OpenAI API abuse
|
|
33
|
+
const rateLimiterOptions = {
|
|
34
|
+
tokensPerInterval: process.env.EMBEDDING_RATE_LIMIT_TOKENS
|
|
35
|
+
? parseInt(process.env.EMBEDDING_RATE_LIMIT_TOKENS, 10)
|
|
36
|
+
: 20, // Default: 20 requests per minute
|
|
37
|
+
interval: process.env.EMBEDDING_RATE_LIMIT_INTERVAL
|
|
38
|
+
? parseInt(process.env.EMBEDDING_RATE_LIMIT_INTERVAL, 10)
|
|
39
|
+
: 60 * 1000, // Default: 1 minute
|
|
40
|
+
};
|
|
41
|
+
logger.info('Initializing EmbeddingJobManager', {
|
|
42
|
+
rateLimiterOptions,
|
|
43
|
+
model: embeddingService.getModelInfo().name,
|
|
44
|
+
storageType: process.env.MEMORY_STORAGE_TYPE || 'neo4j',
|
|
45
|
+
});
|
|
46
|
+
// For Neo4j (which is always the storage provider)
|
|
47
|
+
// Create a compatible wrapper for the Neo4j storage provider
|
|
48
|
+
const adaptedStorageProvider = {
|
|
49
|
+
...storageProvider,
|
|
50
|
+
// Add a fake db with exec function for compatibility
|
|
51
|
+
db: {
|
|
52
|
+
exec: (sql) => {
|
|
53
|
+
logger.debug(`Neo4j adapter: Received SQL: ${sql}`);
|
|
54
|
+
// No-op, just for compatibility
|
|
55
|
+
return null;
|
|
56
|
+
},
|
|
57
|
+
prepare: () => ({
|
|
58
|
+
run: () => null,
|
|
59
|
+
all: () => [],
|
|
60
|
+
get: () => null,
|
|
61
|
+
}),
|
|
62
|
+
},
|
|
63
|
+
// Make sure getEntity is available
|
|
64
|
+
getEntity: async (name) => {
|
|
65
|
+
if (typeof storageProvider.getEntity === 'function') {
|
|
66
|
+
return storageProvider.getEntity(name);
|
|
67
|
+
}
|
|
68
|
+
const result = await storageProvider.openNodes([name]);
|
|
69
|
+
return result.entities[0] || null;
|
|
70
|
+
},
|
|
71
|
+
// Make sure storeEntityVector is available
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
|
+
storeEntityVector: async (name, embedding) => {
|
|
74
|
+
logger.debug(`Neo4j adapter: storeEntityVector called for ${name}`, {
|
|
75
|
+
embeddingType: typeof embedding,
|
|
76
|
+
vectorLength: embedding?.vector?.length || 'no vector',
|
|
77
|
+
model: embedding?.model || 'no model',
|
|
78
|
+
});
|
|
79
|
+
// Ensure embedding has the correct format
|
|
80
|
+
const formattedEmbedding = {
|
|
81
|
+
vector: embedding.vector || embedding,
|
|
82
|
+
model: embedding.model || 'unknown',
|
|
83
|
+
lastUpdated: embedding.lastUpdated || Date.now(),
|
|
84
|
+
};
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
86
|
+
if (typeof storageProvider.updateEntityEmbedding === 'function') {
|
|
87
|
+
try {
|
|
88
|
+
logger.debug(`Neo4j adapter: Using updateEntityEmbedding for ${name}`);
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
+
return await storageProvider.updateEntityEmbedding(name, formattedEmbedding);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.error(`Neo4j adapter: Error in storeEntityVector for ${name}`, error);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const errorMsg = `Neo4j adapter: Neither storeEntityVector nor updateEntityEmbedding implemented for ${name}`;
|
|
99
|
+
logger.error(errorMsg);
|
|
100
|
+
throw new Error(errorMsg);
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
// Create the embedding job manager with adapted storage provider
|
|
105
|
+
embeddingJobManager = new EmbeddingJobManager(
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
+
adaptedStorageProvider, embeddingService, rateLimiterOptions, null, // Use default cache options
|
|
108
|
+
logger);
|
|
109
|
+
// Schedule periodic processing for embedding jobs
|
|
110
|
+
const EMBEDDING_PROCESS_INTERVAL = 10000; // 10 seconds - more frequent processing
|
|
111
|
+
setInterval(async () => {
|
|
112
|
+
try {
|
|
113
|
+
// Process pending embedding jobs
|
|
114
|
+
await embeddingJobManager?.processJobs(10);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
// Log error but don't crash
|
|
118
|
+
logger.error('Error in scheduled job processing', {
|
|
119
|
+
error: error instanceof Error ? error.message : String(error),
|
|
120
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}, EMBEDDING_PROCESS_INTERVAL);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
// Fail gracefully if embedding job manager initialization fails
|
|
127
|
+
logger.error('Failed to initialize EmbeddingJobManager', {
|
|
128
|
+
error: error instanceof Error ? error.message : String(error),
|
|
129
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
130
|
+
});
|
|
131
|
+
embeddingJobManager = undefined;
|
|
132
|
+
}
|
|
133
|
+
// Create the KnowledgeGraphManager with the storage provider, embedding job manager, and vector store options
|
|
134
|
+
const knowledgeGraphManager = new KnowledgeGraphManager({
|
|
135
|
+
storageProvider,
|
|
136
|
+
embeddingJobManager,
|
|
137
|
+
// Pass vector store options from storage provider if available
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
+
vectorStoreOptions: storageProvider.vectorStoreOptions,
|
|
140
|
+
});
|
|
141
|
+
// Ensure the storeEntityVector method is available on KnowledgeGraphManager's storageProvider
|
|
142
|
+
// Cast to any to bypass type checking for internal properties
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
144
|
+
const knowledgeGraphManagerAny = knowledgeGraphManager;
|
|
145
|
+
if (knowledgeGraphManagerAny.storageProvider &&
|
|
146
|
+
typeof knowledgeGraphManagerAny.storageProvider.storeEntityVector !== 'function') {
|
|
147
|
+
// Add the storeEntityVector method to the storage provider
|
|
148
|
+
knowledgeGraphManagerAny.storageProvider.storeEntityVector = async (name,
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
150
|
+
embedding) => {
|
|
151
|
+
logger.debug(`Neo4j knowledgeGraphManager adapter: storeEntityVector called for ${name}`, {
|
|
152
|
+
embeddingType: typeof embedding,
|
|
153
|
+
vectorLength: embedding?.vector?.length || 'no vector',
|
|
154
|
+
model: embedding?.model || 'no model',
|
|
155
|
+
});
|
|
156
|
+
// Ensure embedding has the correct format
|
|
157
|
+
const formattedEmbedding = {
|
|
158
|
+
vector: embedding.vector || embedding,
|
|
159
|
+
model: embedding.model || 'unknown',
|
|
160
|
+
lastUpdated: embedding.lastUpdated || Date.now(),
|
|
161
|
+
};
|
|
162
|
+
if (typeof knowledgeGraphManagerAny.storageProvider.updateEntityEmbedding === 'function') {
|
|
163
|
+
try {
|
|
164
|
+
logger.debug(`Neo4j knowledgeGraphManager adapter: Using updateEntityEmbedding for ${name}`);
|
|
165
|
+
return await knowledgeGraphManagerAny.storageProvider.updateEntityEmbedding(name, formattedEmbedding);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
logger.error(`Neo4j knowledgeGraphManager adapter: Error in storeEntityVector for ${name}`, error);
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const errorMsg = `Neo4j knowledgeGraphManager adapter: updateEntityEmbedding not implemented for ${name}`;
|
|
174
|
+
logger.error(errorMsg);
|
|
175
|
+
throw new Error(errorMsg);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
logger.info('Added storeEntityVector adapter method to Neo4j storage provider for KnowledgeGraphManager');
|
|
179
|
+
}
|
|
180
|
+
// Use a custom createEntities method for immediate job processing, but only if knowledgeGraphManager exists
|
|
181
|
+
if (knowledgeGraphManager && typeof knowledgeGraphManager.createEntities === 'function') {
|
|
182
|
+
const originalCreateEntities = knowledgeGraphManager.createEntities.bind(knowledgeGraphManager);
|
|
183
|
+
knowledgeGraphManager.createEntities = async function (entities) {
|
|
184
|
+
// First call the original method to create the entities
|
|
185
|
+
const result = await originalCreateEntities(entities);
|
|
186
|
+
// Then process jobs immediately if we have an embedding job manager
|
|
187
|
+
if (embeddingJobManager) {
|
|
188
|
+
try {
|
|
189
|
+
logger.info('Processing embedding jobs immediately after entity creation', {
|
|
190
|
+
entityCount: entities.length,
|
|
191
|
+
entityNames: entities.map((e) => e.name).join(', '),
|
|
192
|
+
});
|
|
193
|
+
await embeddingJobManager.processJobs(entities.length);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
logger.error('Error processing embedding jobs immediately', {
|
|
197
|
+
error: error instanceof Error ? error.message : String(error),
|
|
198
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
// Setup the server with the KnowledgeGraphManager
|
|
206
|
+
const server = setupServer(knowledgeGraphManager);
|
|
207
|
+
// Export main function for testing
|
|
208
|
+
export async function main() {
|
|
209
|
+
const transport = new StdioServerTransport();
|
|
210
|
+
await server.connect(transport);
|
|
211
|
+
}
|
|
212
|
+
// Only run main if not in a test environment
|
|
213
|
+
if (!process.env.VITEST && !process.env.NODE_ENV?.includes('test')) {
|
|
214
|
+
main().catch((error) => {
|
|
215
|
+
// Log error but don't use console.error
|
|
216
|
+
logger.error(`Main process terminated: ${error}`);
|
|
217
|
+
process.exit(1);
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles the CallTool request.
|
|
3
|
+
* Delegates to the appropriate tool handler based on the tool name.
|
|
4
|
+
*
|
|
5
|
+
* @param request The CallTool request object
|
|
6
|
+
* @param knowledgeGraphManager The KnowledgeGraphManager instance
|
|
7
|
+
* @returns A response object with the result content
|
|
8
|
+
* @throws Error if the tool is unknown or arguments are missing
|
|
9
|
+
*/
|
|
10
|
+
export declare function handleCallToolRequest(request: {
|
|
11
|
+
params?: {
|
|
12
|
+
name?: string;
|
|
13
|
+
arguments?: Record<string, unknown>;
|
|
14
|
+
};
|
|
15
|
+
}, knowledgeGraphManager: any): Promise<{
|
|
16
|
+
content: Array<{
|
|
17
|
+
type: string;
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
}>;
|