@prmichaelsen/remember-mcp 2.7.1 → 2.7.3

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 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.3] - 2026-02-17
9
+
10
+ ### Fixed
11
+
12
+ - **CRITICAL: Fixed `remember_update_memory` "Memory not found" error**
13
+ - Changed `handleUpdateMemory()` to use `fetchMemoryWithAllProperties()` wrapper
14
+ - Previously used direct `collection.query.fetchObjectById()` call without fallback
15
+ - Direct call failed when querying memories with certain property configurations (e.g., `parent_id: ""`)
16
+ - Wrapper provides graceful fallback for schema evolution and property incompatibilities
17
+ - Matches pattern used in other working tools like `handlePublish()`
18
+
19
+ ### Root Cause
20
+
21
+ - `handleUpdateMemory()` bypassed the `fetchMemoryWithAllProperties()` abstraction layer
22
+ - Direct `fetchObjectById()` without property specification can fail on edge case property values
23
+ - Error was caught and converted to misleading "Memory not found" message
24
+ - Wrapper's try-catch with fallback handles these cases gracefully
25
+ - This fix ensures consistent behavior across all memory operations
26
+
27
+ ### Technical Details
28
+
29
+ - Modified: `src/tools/update-memory.ts` (lines 8, 140)
30
+ - Added import: `fetchMemoryWithAllProperties` from `weaviate/client.js`
31
+ - Replaced: `collection.query.fetchObjectById(id)` → `fetchMemoryWithAllProperties(collection, id)`
32
+ - Verified working in local testing with memories containing `parent_id: ""`
33
+
34
+ ---
35
+
36
+ ## [2.7.2] - 2026-02-17
37
+
38
+ ### Fixed
39
+
40
+ - **CRITICAL: Fixed Insert API Call Format**: Wrap properties in `{properties: ...}` object
41
+ - Changed `publicCollection.data.insert(publishedMemory)` to `publicCollection.data.insert({properties: publishedMemory})`
42
+ - Weaviate insert API expects `{properties: {...}}` format, not properties directly
43
+ - This is why ALL inserts were creating documents with zero properties
44
+ - The properties were being ignored because they weren't in the expected format
45
+
46
+ ### Root Cause
47
+
48
+ - Weaviate client `insert()` API signature: `insert({properties: {...}, vectors?: ..., id?: ...})`
49
+ - We were passing properties directly: `insert(properties)`
50
+ - Weaviate accepted the call but ignored the properties (wrong format)
51
+ - Created documents with UUID but zero properties
52
+ - This explains ALL the empty document issues across all schema approaches
53
+
54
+ ---
55
+
8
56
  ## [2.7.1] - 2026-02-17
9
57
 
10
58
  ### Fixed
@@ -1948,7 +1948,7 @@ async function handleUpdateMemory(args, userId) {
1948
1948
  const collection = getMemoryCollection(userId);
1949
1949
  let existingMemory;
1950
1950
  try {
1951
- existingMemory = await collection.query.fetchObjectById(args.memory_id);
1951
+ existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
1952
1952
  } catch (fetchError) {
1953
1953
  const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
1954
1954
  logger.error("Failed to fetch memory for update:", {
@@ -4071,7 +4071,9 @@ async function executePublishMemory(request, userId) {
4071
4071
  contentLength: publishedMemory.content?.length || 0,
4072
4072
  titleValue: publishedMemory.title || "NO_TITLE"
4073
4073
  });
4074
- const result = await publicCollection.data.insert(publishedMemory);
4074
+ const result = await publicCollection.data.insert({
4075
+ properties: publishedMemory
4076
+ });
4075
4077
  logger.info("Memory published successfully", {
4076
4078
  function: "executePublishMemory",
4077
4079
  spaceMemoryId: result,
package/dist/server.js CHANGED
@@ -2016,7 +2016,7 @@ async function handleUpdateMemory(args, userId) {
2016
2016
  const collection = getMemoryCollection(userId);
2017
2017
  let existingMemory;
2018
2018
  try {
2019
- existingMemory = await collection.query.fetchObjectById(args.memory_id);
2019
+ existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
2020
2020
  } catch (fetchError) {
2021
2021
  const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
2022
2022
  logger.error("Failed to fetch memory for update:", {
@@ -4139,7 +4139,9 @@ async function executePublishMemory(request, userId) {
4139
4139
  contentLength: publishedMemory.content?.length || 0,
4140
4140
  titleValue: publishedMemory.title || "NO_TITLE"
4141
4141
  });
4142
- const result = await publicCollection.data.insert(publishedMemory);
4142
+ const result = await publicCollection.data.insert({
4143
+ properties: publishedMemory
4144
+ });
4143
4145
  logger.info("Memory published successfully", {
4144
4146
  function: "executePublishMemory",
4145
4147
  spaceMemoryId: result,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prmichaelsen/remember-mcp",
3
- "version": "2.7.1",
3
+ "version": "2.7.3",
4
4
  "description": "Multi-tenant memory system MCP server with vector search and relationships",
5
5
  "main": "dist/server.js",
6
6
  "type": "module",
@@ -263,7 +263,10 @@ async function executePublishMemory(
263
263
  });
264
264
 
265
265
  // Insert directly into unified public collection
266
- const result = await publicCollection.data.insert(publishedMemory as any);
266
+ // CRITICAL: Weaviate insert API expects {properties: {...}}, not the properties directly!
267
+ const result = await publicCollection.data.insert({
268
+ properties: publishedMemory,
269
+ });
267
270
 
268
271
  logger.info('Memory published successfully', {
269
272
  function: 'executePublishMemory',
@@ -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.query.fetchObjectById(args.memory_id);
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:', {