@prmichaelsen/remember-mcp 2.7.2 → 2.7.5
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/CHANGELOG.md +48 -0
- package/dist/server-factory.js +4 -3
- package/dist/server.js +4 -3
- package/package.json +2 -1
- package/src/tools/update-memory.ts +3 -1
- package/src/weaviate/schema.ts +3 -2
- package/src/weaviate/space-schema.ts +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,54 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.7.4] - 2026-02-17
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Enhanced Vectorization**: Added `title` and `summary` to vectorized source properties
|
|
13
|
+
- User memory schema: Now vectorizes `content`, `title`, `summary`, and `observation`
|
|
14
|
+
- Space memory schema: Now vectorizes `content`, `title`, `summary`, and `observation`
|
|
15
|
+
- Improves semantic search by including titles and summaries in vector embeddings
|
|
16
|
+
- Note: `title` and `summary` are optional fields, handled gracefully by vectorizer
|
|
17
|
+
|
|
18
|
+
### Technical Details
|
|
19
|
+
|
|
20
|
+
- Modified: `src/weaviate/schema.ts` (line 49)
|
|
21
|
+
- Modified: `src/weaviate/space-schema.ts` (line 101)
|
|
22
|
+
- Changed `sourceProperties` from `['content', 'observation']` to `['content', 'title', 'summary', 'observation']`
|
|
23
|
+
- Applies to all new collections created after this version
|
|
24
|
+
- Existing collections retain their original vectorizer configuration
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## [2.7.3] - 2026-02-17
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **CRITICAL: Fixed `remember_update_memory` "Memory not found" error**
|
|
33
|
+
- Changed `handleUpdateMemory()` to use `fetchMemoryWithAllProperties()` wrapper
|
|
34
|
+
- Previously used direct `collection.query.fetchObjectById()` call without fallback
|
|
35
|
+
- Direct call failed when querying memories with certain property configurations (e.g., `parent_id: ""`)
|
|
36
|
+
- Wrapper provides graceful fallback for schema evolution and property incompatibilities
|
|
37
|
+
- Matches pattern used in other working tools like `handlePublish()`
|
|
38
|
+
|
|
39
|
+
### Root Cause
|
|
40
|
+
|
|
41
|
+
- `handleUpdateMemory()` bypassed the `fetchMemoryWithAllProperties()` abstraction layer
|
|
42
|
+
- Direct `fetchObjectById()` without property specification can fail on edge case property values
|
|
43
|
+
- Error was caught and converted to misleading "Memory not found" message
|
|
44
|
+
- Wrapper's try-catch with fallback handles these cases gracefully
|
|
45
|
+
- This fix ensures consistent behavior across all memory operations
|
|
46
|
+
|
|
47
|
+
### Technical Details
|
|
48
|
+
|
|
49
|
+
- Modified: `src/tools/update-memory.ts` (lines 8, 140)
|
|
50
|
+
- Added import: `fetchMemoryWithAllProperties` from `weaviate/client.js`
|
|
51
|
+
- Replaced: `collection.query.fetchObjectById(id)` → `fetchMemoryWithAllProperties(collection, id)`
|
|
52
|
+
- Verified working in local testing with memories containing `parent_id: ""`
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
8
56
|
## [2.7.2] - 2026-02-17
|
|
9
57
|
|
|
10
58
|
### Fixed
|
package/dist/server-factory.js
CHANGED
|
@@ -699,8 +699,9 @@ async function createMemoryCollection(userId) {
|
|
|
699
699
|
// Vectorizer configuration
|
|
700
700
|
vectorizers: weaviate2.configure.vectorizer.text2VecOpenAI({
|
|
701
701
|
model: "text-embedding-3-small",
|
|
702
|
-
// Vectorize
|
|
703
|
-
|
|
702
|
+
// Vectorize content, title, summary, and observation for semantic search
|
|
703
|
+
// Note: title and summary are optional fields
|
|
704
|
+
sourceProperties: ["content", "title", "summary", "observation"]
|
|
704
705
|
}),
|
|
705
706
|
properties: [
|
|
706
707
|
// Discriminator
|
|
@@ -1948,7 +1949,7 @@ async function handleUpdateMemory(args, userId) {
|
|
|
1948
1949
|
const collection = getMemoryCollection(userId);
|
|
1949
1950
|
let existingMemory;
|
|
1950
1951
|
try {
|
|
1951
|
-
existingMemory = await collection
|
|
1952
|
+
existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
|
|
1952
1953
|
} catch (fetchError) {
|
|
1953
1954
|
const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
1954
1955
|
logger.error("Failed to fetch memory for update:", {
|
package/dist/server.js
CHANGED
|
@@ -767,8 +767,9 @@ async function createMemoryCollection(userId) {
|
|
|
767
767
|
// Vectorizer configuration
|
|
768
768
|
vectorizers: weaviate2.configure.vectorizer.text2VecOpenAI({
|
|
769
769
|
model: "text-embedding-3-small",
|
|
770
|
-
// Vectorize
|
|
771
|
-
|
|
770
|
+
// Vectorize content, title, summary, and observation for semantic search
|
|
771
|
+
// Note: title and summary are optional fields
|
|
772
|
+
sourceProperties: ["content", "title", "summary", "observation"]
|
|
772
773
|
}),
|
|
773
774
|
properties: [
|
|
774
775
|
// Discriminator
|
|
@@ -2016,7 +2017,7 @@ async function handleUpdateMemory(args, userId) {
|
|
|
2016
2017
|
const collection = getMemoryCollection(userId);
|
|
2017
2018
|
let existingMemory;
|
|
2018
2019
|
try {
|
|
2019
|
-
existingMemory = await collection
|
|
2020
|
+
existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
|
|
2020
2021
|
} catch (fetchError) {
|
|
2021
2022
|
const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
2022
2023
|
logger.error("Failed to fetch memory for update:", {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prmichaelsen/remember-mcp",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.5",
|
|
4
4
|
"description": "Multi-tenant memory system MCP server with vector search and relationships",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"type": "module",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
51
51
|
"@prmichaelsen/firebase-admin-sdk-v8": "^2.2.0",
|
|
52
52
|
"@prmichaelsen/mcp-auth": "^7.0.4",
|
|
53
|
+
"@prmichaelsen/remember-mcp": "^2.7.3",
|
|
53
54
|
"dotenv": "^16.4.5",
|
|
54
55
|
"weaviate-client": "^3.2.0"
|
|
55
56
|
},
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import type { Memory, MemoryUpdate } from '../types/memory.js';
|
|
7
7
|
import { getMemoryCollection } from '../weaviate/schema.js';
|
|
8
|
+
import { fetchMemoryWithAllProperties } from '../weaviate/client.js';
|
|
8
9
|
import { logger } from '../utils/logger.js';
|
|
9
10
|
import { handleToolError, withErrorHandling } from '../utils/error-handler.js';
|
|
10
11
|
import { isValidContentType } from '../constants/content-types.js';
|
|
@@ -133,9 +134,10 @@ export async function handleUpdateMemory(
|
|
|
133
134
|
// Get existing memory - fetch ALL properties for replace operation
|
|
134
135
|
// We need the full object to use replace() instead of update()
|
|
135
136
|
// (Weaviate bug: update() only persists if vectorized fields change)
|
|
137
|
+
// Use fetchMemoryWithAllProperties() to handle schema evolution gracefully
|
|
136
138
|
let existingMemory;
|
|
137
139
|
try {
|
|
138
|
-
existingMemory = await collection
|
|
140
|
+
existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
|
|
139
141
|
} catch (fetchError) {
|
|
140
142
|
const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
141
143
|
logger.error('Failed to fetch memory for update:', {
|
package/src/weaviate/schema.ts
CHANGED
|
@@ -45,8 +45,9 @@ export async function createMemoryCollection(userId: string): Promise<void> {
|
|
|
45
45
|
// Vectorizer configuration
|
|
46
46
|
vectorizers: weaviate.configure.vectorizer.text2VecOpenAI({
|
|
47
47
|
model: 'text-embedding-3-small',
|
|
48
|
-
// Vectorize
|
|
49
|
-
|
|
48
|
+
// Vectorize content, title, summary, and observation for semantic search
|
|
49
|
+
// Note: title and summary are optional fields
|
|
50
|
+
sourceProperties: ['content', 'title', 'summary', 'observation'],
|
|
50
51
|
}),
|
|
51
52
|
|
|
52
53
|
properties: [
|
|
@@ -97,8 +97,9 @@ async function createSpaceCollection(
|
|
|
97
97
|
// Vectorizer configuration
|
|
98
98
|
vectorizers: weaviate.configure.vectorizer.text2VecOpenAI({
|
|
99
99
|
model: 'text-embedding-3-small',
|
|
100
|
-
// Vectorize content for semantic search
|
|
101
|
-
|
|
100
|
+
// Vectorize content, title, summary, and observation for semantic search
|
|
101
|
+
// Note: title and summary are optional fields
|
|
102
|
+
sourceProperties: ['content', 'title', 'summary', 'observation'],
|
|
102
103
|
}),
|
|
103
104
|
|
|
104
105
|
properties: [
|