@coreidentitylabs/open-graph-memory-mcp 1.0.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.
Files changed (91) hide show
  1. package/.agents/skills/mcp-builder/LICENSE.txt +202 -0
  2. package/.agents/skills/mcp-builder/SKILL.md +236 -0
  3. package/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
  4. package/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  5. package/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  6. package/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  7. package/.agents/skills/mcp-builder/scripts/connections.py +151 -0
  8. package/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
  9. package/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  10. package/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
  11. package/.env.example +26 -0
  12. package/Implementation Plan.md +358 -0
  13. package/README.md +187 -0
  14. package/dist/constants.d.ts +34 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +40 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/encoding/embedder.d.ts +12 -0
  19. package/dist/encoding/embedder.d.ts.map +1 -0
  20. package/dist/encoding/embedder.js +85 -0
  21. package/dist/encoding/embedder.js.map +1 -0
  22. package/dist/encoding/pipeline.d.ts +28 -0
  23. package/dist/encoding/pipeline.d.ts.map +1 -0
  24. package/dist/encoding/pipeline.js +146 -0
  25. package/dist/encoding/pipeline.js.map +1 -0
  26. package/dist/evolution/consolidator.d.ts +12 -0
  27. package/dist/evolution/consolidator.d.ts.map +1 -0
  28. package/dist/evolution/consolidator.js +212 -0
  29. package/dist/evolution/consolidator.js.map +1 -0
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +53 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/llm/openai-provider.d.ts +23 -0
  35. package/dist/llm/openai-provider.d.ts.map +1 -0
  36. package/dist/llm/openai-provider.js +141 -0
  37. package/dist/llm/openai-provider.js.map +1 -0
  38. package/dist/llm/prompts.d.ts +10 -0
  39. package/dist/llm/prompts.d.ts.map +1 -0
  40. package/dist/llm/prompts.js +63 -0
  41. package/dist/llm/prompts.js.map +1 -0
  42. package/dist/llm/provider.d.ts +7 -0
  43. package/dist/llm/provider.d.ts.map +1 -0
  44. package/dist/llm/provider.js +25 -0
  45. package/dist/llm/provider.js.map +1 -0
  46. package/dist/resources/context-resource.d.ts +8 -0
  47. package/dist/resources/context-resource.d.ts.map +1 -0
  48. package/dist/resources/context-resource.js +51 -0
  49. package/dist/resources/context-resource.js.map +1 -0
  50. package/dist/retrieval/search.d.ts +24 -0
  51. package/dist/retrieval/search.d.ts.map +1 -0
  52. package/dist/retrieval/search.js +143 -0
  53. package/dist/retrieval/search.js.map +1 -0
  54. package/dist/storage/factory.d.ts +10 -0
  55. package/dist/storage/factory.d.ts.map +1 -0
  56. package/dist/storage/factory.js +35 -0
  57. package/dist/storage/factory.js.map +1 -0
  58. package/dist/storage/json-store.d.ts +34 -0
  59. package/dist/storage/json-store.d.ts.map +1 -0
  60. package/dist/storage/json-store.js +248 -0
  61. package/dist/storage/json-store.js.map +1 -0
  62. package/dist/storage/neo4j-store.d.ts +31 -0
  63. package/dist/storage/neo4j-store.d.ts.map +1 -0
  64. package/dist/storage/neo4j-store.js +440 -0
  65. package/dist/storage/neo4j-store.js.map +1 -0
  66. package/dist/tools/memory-tools.d.ts +4 -0
  67. package/dist/tools/memory-tools.d.ts.map +1 -0
  68. package/dist/tools/memory-tools.js +873 -0
  69. package/dist/tools/memory-tools.js.map +1 -0
  70. package/dist/types.d.ts +129 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +5 -0
  73. package/dist/types.js.map +1 -0
  74. package/implementation_plan.md.resolved.md +322 -0
  75. package/package.json +43 -0
  76. package/src/constants.ts +52 -0
  77. package/src/encoding/embedder.ts +93 -0
  78. package/src/encoding/pipeline.ts +197 -0
  79. package/src/evolution/consolidator.ts +281 -0
  80. package/src/index.ts +67 -0
  81. package/src/llm/openai-provider.ts +208 -0
  82. package/src/llm/prompts.ts +66 -0
  83. package/src/llm/provider.ts +37 -0
  84. package/src/resources/context-resource.ts +74 -0
  85. package/src/retrieval/search.ts +203 -0
  86. package/src/storage/factory.ts +48 -0
  87. package/src/storage/json-store.ts +325 -0
  88. package/src/storage/neo4j-store.ts +564 -0
  89. package/src/tools/memory-tools.ts +1067 -0
  90. package/src/types.ts +207 -0
  91. package/tsconfig.json +21 -0
package/src/types.ts ADDED
@@ -0,0 +1,207 @@
1
+ // =============================================================================
2
+ // Open-Memory MCP Server — Core Type Definitions
3
+ // =============================================================================
4
+
5
+ /**
6
+ * Node types in the memory graph.
7
+ * - entity: People, tools, libraries, services
8
+ * - concept: Abstract ideas, patterns, paradigms
9
+ * - event: Something that happened (meeting, deployment, decision)
10
+ * - code_pattern: Recurring code structures, architectures
11
+ * - decision: Technical decisions and their rationale
12
+ * - conversation: Raw conversation history snapshot
13
+ */
14
+ export type NodeType =
15
+ | "entity"
16
+ | "concept"
17
+ | "event"
18
+ | "code_pattern"
19
+ | "decision"
20
+ | "conversation";
21
+
22
+ // -----------------------------------------------------------------------------
23
+ // Memory Graph Nodes & Edges
24
+ // -----------------------------------------------------------------------------
25
+
26
+ export interface MemoryNode {
27
+ id: string;
28
+ name: string;
29
+ type: NodeType;
30
+ description: string;
31
+ embedding?: number[];
32
+ metadata: Record<string, unknown>;
33
+ createdAt: string;
34
+ updatedAt: string;
35
+ /** Bi-temporal: when the fact became true in the real world */
36
+ validFrom?: string;
37
+ /** Bi-temporal: when the fact ceased to be true */
38
+ validUntil?: string;
39
+ /** Origin of this memory */
40
+ source?: string;
41
+ /** Number of times this node was retrieved */
42
+ accessCount: number;
43
+ /** Last time this node was accessed */
44
+ lastAccessedAt?: string;
45
+ }
46
+
47
+ export interface MemoryEdge {
48
+ id: string;
49
+ /** Source node ID */
50
+ source: string;
51
+ /** Target node ID */
52
+ target: string;
53
+ /** Relationship type, e.g. "uses", "depends_on", "decided_to" */
54
+ relation: string;
55
+ /** Natural language description of the relationship */
56
+ description: string;
57
+ /** Confidence/strength weight (0-1) */
58
+ weight: number;
59
+ metadata: Record<string, unknown>;
60
+ createdAt: string;
61
+ updatedAt: string;
62
+ }
63
+
64
+ // -----------------------------------------------------------------------------
65
+ // Search & Retrieval Types
66
+ // -----------------------------------------------------------------------------
67
+
68
+ export interface ScoredNode {
69
+ node: MemoryNode;
70
+ score: number;
71
+ matchType: "semantic" | "text" | "graph";
72
+ }
73
+
74
+ export interface Subgraph {
75
+ nodes: MemoryNode[];
76
+ edges: MemoryEdge[];
77
+ }
78
+
79
+ export interface SearchResult {
80
+ nodes: ScoredNode[];
81
+ relatedEdges: MemoryEdge[];
82
+ totalNodes: number;
83
+ }
84
+
85
+ export interface NodeFilter {
86
+ type?: NodeType;
87
+ source?: string;
88
+ createdAfter?: string;
89
+ createdBefore?: string;
90
+ nameContains?: string;
91
+ }
92
+
93
+ // -----------------------------------------------------------------------------
94
+ // Graph Statistics
95
+ // -----------------------------------------------------------------------------
96
+
97
+ export interface GraphStats {
98
+ totalNodes: number;
99
+ totalEdges: number;
100
+ nodesByType: Record<string, number>;
101
+ storageBackend: string;
102
+ lastConsolidated?: string;
103
+ memoryFilePath?: string;
104
+ }
105
+
106
+ // -----------------------------------------------------------------------------
107
+ // Storage Backend Interface
108
+ // -----------------------------------------------------------------------------
109
+
110
+ export interface StorageBackend {
111
+ initialize(): Promise<void>;
112
+
113
+ // Node operations
114
+ addNode(node: MemoryNode): Promise<void>;
115
+ updateNode(
116
+ id: string,
117
+ updates: Partial<MemoryNode>,
118
+ ): Promise<MemoryNode | null>;
119
+ deleteNode(id: string): Promise<boolean>;
120
+ getNode(id: string): Promise<MemoryNode | null>;
121
+ getNodeByName(name: string): Promise<MemoryNode | null>;
122
+ findNodes(filter: NodeFilter): Promise<MemoryNode[]>;
123
+ getAllNodes(
124
+ limit: number,
125
+ offset: number,
126
+ ): Promise<{ nodes: MemoryNode[]; total: number }>;
127
+ findNodesByEmbedding(
128
+ embedding: number[],
129
+ topK: number,
130
+ ): Promise<ScoredNode[]>;
131
+
132
+ // Edge operations
133
+ addEdge(edge: MemoryEdge): Promise<void>;
134
+ updateEdge(
135
+ id: string,
136
+ updates: Partial<MemoryEdge>,
137
+ ): Promise<MemoryEdge | null>;
138
+ deleteEdge(id: string): Promise<boolean>;
139
+ getEdge(id: string): Promise<MemoryEdge | null>;
140
+ getEdgesForNode(
141
+ nodeId: string,
142
+ direction?: "in" | "out" | "both",
143
+ ): Promise<MemoryEdge[]>;
144
+ getEdgesBetween(sourceId: string, targetId: string): Promise<MemoryEdge[]>;
145
+
146
+ // Graph traversal
147
+ getNeighborhood(nodeId: string, depth: number): Promise<Subgraph>;
148
+
149
+ // Stats & lifecycle
150
+ getStats(): Promise<GraphStats>;
151
+ close(): Promise<void>;
152
+ }
153
+
154
+ // -----------------------------------------------------------------------------
155
+ // Encoding / Extraction Types
156
+ // -----------------------------------------------------------------------------
157
+
158
+ export interface ExtractedEntity {
159
+ name: string;
160
+ type: NodeType;
161
+ description: string;
162
+ metadata?: Record<string, unknown>;
163
+ }
164
+
165
+ export interface ExtractedRelation {
166
+ source: string;
167
+ target: string;
168
+ relation: string;
169
+ description?: string;
170
+ weight?: number;
171
+ }
172
+
173
+ export interface ExtractionResult {
174
+ entities: ExtractedEntity[];
175
+ relations: ExtractedRelation[];
176
+ }
177
+
178
+ // -----------------------------------------------------------------------------
179
+ // LLM Provider Interface (Optional)
180
+ // -----------------------------------------------------------------------------
181
+
182
+ export interface LLMProvider {
183
+ extractEntitiesAndRelations(
184
+ text: string,
185
+ existingEntities: string[],
186
+ ): Promise<ExtractionResult>;
187
+ generateEmbedding(text: string): Promise<number[]>;
188
+ generateEmbeddingBatch(texts: string[]): Promise<number[][]>;
189
+ }
190
+
191
+ // -----------------------------------------------------------------------------
192
+ // Consolidation Types
193
+ // -----------------------------------------------------------------------------
194
+
195
+ export interface ConsolidationResult {
196
+ mergedNodes: number;
197
+ resolvedConflicts: number;
198
+ inferredEdges: number;
199
+ prunedNodes: number;
200
+ duration: number;
201
+ }
202
+
203
+ export type ConsolidationStrategy =
204
+ | "full"
205
+ | "merge_only"
206
+ | "prune_only"
207
+ | "infer_only";
package/tsconfig.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "Node16",
5
+ "moduleResolution": "Node16",
6
+ "lib": ["ES2022"],
7
+ "outDir": "./dist",
8
+ "rootDir": "./src",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "declaration": true,
14
+ "declarationMap": true,
15
+ "sourceMap": true,
16
+ "allowSyntheticDefaultImports": true,
17
+ "resolveJsonModule": true
18
+ },
19
+ "include": ["src/**/*"],
20
+ "exclude": ["node_modules", "dist"]
21
+ }