@prmichaelsen/remember-mcp 0.2.7 → 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/CHANGELOG.md +145 -0
- package/dist/server-factory.d.ts +1 -1
- package/dist/server-factory.js +2 -4
- package/package.json +1 -1
- package/src/server-factory.spec.ts +8 -8
- package/src/server-factory.ts +4 -7
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2026-02-12
|
|
9
|
+
|
|
10
|
+
### 🚨 BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
- **`createServer` is now async**: The factory function now returns `Promise<Server>` instead of `Server`. Consumers must use `await` when calling `createServer()`.
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
// Before (0.2.x)
|
|
16
|
+
const server = createServer(token, userId);
|
|
17
|
+
|
|
18
|
+
// After (1.0.0+)
|
|
19
|
+
const server = await createServer(token, userId);
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Impact**: Only affects direct factory users. The mcp-auth wrapper handles async factories automatically, so no changes needed for mcp-auth users.
|
|
23
|
+
|
|
24
|
+
### ✨ Added
|
|
25
|
+
|
|
26
|
+
- **Weaviate v3 Filter API**: Implemented proper Weaviate v3 filter builders using fluent API
|
|
27
|
+
- Created `src/utils/weaviate-filters.ts` with filter builder utilities
|
|
28
|
+
- Supports AND/OR logic for complex filter combinations
|
|
29
|
+
- Comprehensive filter support: type, weight, trust, date range, tags
|
|
30
|
+
|
|
31
|
+
- **Combined Memory + Relationship Search**: `remember_search_memory` now searches BOTH memories and relationships by default
|
|
32
|
+
- Uses OR logic to search both doc types
|
|
33
|
+
- Results separated into `memories` and `relationships` arrays
|
|
34
|
+
- Backward compatible: set `include_relationships: false` to search only memories
|
|
35
|
+
- Relationship observations are now searchable
|
|
36
|
+
|
|
37
|
+
- **Comprehensive Unit Tests**: Added 29 test cases for filter builders
|
|
38
|
+
- Tests for `buildMemoryOnlyFilters`, `buildRelationshipOnlyFilters`, `buildCombinedSearchFilters`
|
|
39
|
+
- Tests for edge cases and complex filter scenarios
|
|
40
|
+
- 83.67% code coverage on weaviate-filters.ts
|
|
41
|
+
|
|
42
|
+
- **Jest Type Support**: Added "jest" to tsconfig types array for proper TypeScript support in test files
|
|
43
|
+
|
|
44
|
+
### 🐛 Fixed
|
|
45
|
+
|
|
46
|
+
- **gRPC Filter Error**: Fixed "paths needs to have an uneven number of components" error
|
|
47
|
+
- Replaced old Weaviate v2 filter format (path/operator/valueText) with v3 fluent API
|
|
48
|
+
- Affected tools: `remember_search_memory`, `remember_query_memory`
|
|
49
|
+
|
|
50
|
+
- **Database Initialization**: Changed from fire-and-forget to await pattern
|
|
51
|
+
- Server now waits for database initialization before accepting requests
|
|
52
|
+
- Prevents server from starting in broken state
|
|
53
|
+
- Errors propagate clearly to caller
|
|
54
|
+
|
|
55
|
+
- **Test Failures**: Fixed server-factory tests to handle async createServer
|
|
56
|
+
- Updated all tests to use async/await
|
|
57
|
+
- Changed synchronous expect() calls to async expect().resolves/rejects
|
|
58
|
+
|
|
59
|
+
### 📊 Test Results
|
|
60
|
+
|
|
61
|
+
- **54 tests passing** (up from 25)
|
|
62
|
+
- **4 test suites passing** (all green)
|
|
63
|
+
- **Overall coverage: 26.54%** (up from 22.53%)
|
|
64
|
+
- **1 skipped** (integration test requiring live Weaviate)
|
|
65
|
+
|
|
66
|
+
### 📝 Documentation
|
|
67
|
+
|
|
68
|
+
- Updated `agent/progress.yaml` with Task 20 completion
|
|
69
|
+
- Updated `agent/tasks/task-20-fix-weaviate-v3-filters.md` with implementation details
|
|
70
|
+
- All changes documented in agent directory
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## [0.2.8] - 2026-02-11
|
|
75
|
+
|
|
76
|
+
### ✨ Added
|
|
77
|
+
|
|
78
|
+
- Complete memory CRUD operations (create, read, update, delete)
|
|
79
|
+
- Complete relationship CRUD operations (create, read, update, delete)
|
|
80
|
+
- User preferences system with 6 categories
|
|
81
|
+
- 12 MCP tools fully implemented
|
|
82
|
+
- Hybrid search (semantic + keyword)
|
|
83
|
+
- Vector similarity search
|
|
84
|
+
- RAG-optimized queries
|
|
85
|
+
- 45 content types
|
|
86
|
+
|
|
87
|
+
### 📊 Milestones Completed
|
|
88
|
+
|
|
89
|
+
- M1: Project Foundation (100%)
|
|
90
|
+
- M2: Core Memory System (100%)
|
|
91
|
+
- M3: Relationships & Graph (100%)
|
|
92
|
+
- M4: User Preferences (100%)
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## [0.1.0] - 2026-02-11
|
|
97
|
+
|
|
98
|
+
### ✨ Initial Release
|
|
99
|
+
|
|
100
|
+
- Project structure and configuration
|
|
101
|
+
- Weaviate client with multi-tenant support
|
|
102
|
+
- Firestore integration
|
|
103
|
+
- Basic MCP server with stdio transport
|
|
104
|
+
- Server factory for mcp-auth compatibility
|
|
105
|
+
- 25 unit tests
|
|
106
|
+
- Dual build: standalone server + library factory
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Migration Guides
|
|
111
|
+
|
|
112
|
+
### Migrating from 0.2.x to 1.0.0
|
|
113
|
+
|
|
114
|
+
**If you're using the factory export:**
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// OLD (0.2.x)
|
|
118
|
+
import { createServer } from '@prmichaelsen/remember-mcp/factory';
|
|
119
|
+
const server = createServer(accessToken, userId);
|
|
120
|
+
|
|
121
|
+
// NEW (1.0.0+)
|
|
122
|
+
import { createServer } from '@prmichaelsen/remember-mcp/factory';
|
|
123
|
+
const server = await createServer(accessToken, userId);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**If you're using mcp-auth wrapper:**
|
|
127
|
+
- No changes needed! mcp-auth handles async factories automatically.
|
|
128
|
+
|
|
129
|
+
**If you're using standalone server:**
|
|
130
|
+
- No changes needed! You don't call createServer directly.
|
|
131
|
+
|
|
132
|
+
**If you're using Claude Desktop:**
|
|
133
|
+
- No changes needed! You use the built server via npx.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Versioning Policy
|
|
138
|
+
|
|
139
|
+
This project follows [Semantic Versioning](https://semver.org/):
|
|
140
|
+
|
|
141
|
+
- **Major** (X.0.0): Breaking changes
|
|
142
|
+
- **Minor** (0.X.0): New features, backward compatible
|
|
143
|
+
- **Patch** (0.0.X): Bug fixes, backward compatible
|
|
144
|
+
|
|
145
|
+
**Note**: Version 1.0.0 indicates the first stable release with a breaking change from 0.2.x. Future breaking changes will increment the major version (2.0.0, 3.0.0, etc.).
|
package/dist/server-factory.d.ts
CHANGED
|
@@ -38,5 +38,5 @@ export interface ServerOptions {
|
|
|
38
38
|
* });
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
export declare function createServer(accessToken: string, userId: string, options?: ServerOptions): Server
|
|
41
|
+
export declare function createServer(accessToken: string, userId: string, options?: ServerOptions): Promise<Server>;
|
|
42
42
|
//# sourceMappingURL=server-factory.d.ts.map
|
package/dist/server-factory.js
CHANGED
|
@@ -3190,14 +3190,12 @@ async function ensureDatabasesInitialized() {
|
|
|
3190
3190
|
})();
|
|
3191
3191
|
return initializationPromise;
|
|
3192
3192
|
}
|
|
3193
|
-
function createServer(accessToken, userId, options = {}) {
|
|
3193
|
+
async function createServer(accessToken, userId, options = {}) {
|
|
3194
3194
|
if (!userId) {
|
|
3195
3195
|
throw new Error("userId is required");
|
|
3196
3196
|
}
|
|
3197
3197
|
logger.debug("Creating server instance", { userId });
|
|
3198
|
-
ensureDatabasesInitialized()
|
|
3199
|
-
logger.error("Failed to initialize databases:", error);
|
|
3200
|
-
});
|
|
3198
|
+
await ensureDatabasesInitialized();
|
|
3201
3199
|
const server = new Server(
|
|
3202
3200
|
{
|
|
3203
3201
|
name: options.name || "remember-mcp",
|
package/package.json
CHANGED
|
@@ -3,24 +3,24 @@ import { createServer } from './server-factory.js';
|
|
|
3
3
|
|
|
4
4
|
describe('Server Factory', () => {
|
|
5
5
|
describe('Parameter Validation', () => {
|
|
6
|
-
it('should create server instance with valid parameters', () => {
|
|
7
|
-
const server = createServer('test-token', 'user123');
|
|
6
|
+
it('should create server instance with valid parameters', async () => {
|
|
7
|
+
const server = await createServer('test-token', 'user123');
|
|
8
8
|
expect(server).toBeDefined();
|
|
9
9
|
expect(server).toHaveProperty('setRequestHandler');
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
-
it('should allow empty accessToken (not used by remember-mcp)', () => {
|
|
12
|
+
it('should allow empty accessToken (not used by remember-mcp)', async () => {
|
|
13
13
|
// accessToken is not used by remember-mcp (self-managed data)
|
|
14
14
|
// Should not throw even with empty string
|
|
15
|
-
expect(
|
|
15
|
+
await expect(createServer('', 'user123')).resolves.toBeDefined();
|
|
16
16
|
});
|
|
17
17
|
|
|
18
|
-
it('should require userId', () => {
|
|
19
|
-
expect(
|
|
18
|
+
it('should require userId', async () => {
|
|
19
|
+
await expect(createServer('token', '')).rejects.toThrow('userId is required');
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
it('should accept custom options', () => {
|
|
23
|
-
const server = createServer('token', 'user123', {
|
|
22
|
+
it('should accept custom options', async () => {
|
|
23
|
+
const server = await createServer('token', 'user123', {
|
|
24
24
|
name: 'custom-name',
|
|
25
25
|
version: '2.0.0',
|
|
26
26
|
});
|
package/src/server-factory.ts
CHANGED
|
@@ -113,11 +113,11 @@ async function ensureDatabasesInitialized(): Promise<void> {
|
|
|
113
113
|
* });
|
|
114
114
|
* ```
|
|
115
115
|
*/
|
|
116
|
-
export function createServer(
|
|
116
|
+
export async function createServer(
|
|
117
117
|
accessToken: string,
|
|
118
118
|
userId: string,
|
|
119
119
|
options: ServerOptions = {}
|
|
120
|
-
): Server {
|
|
120
|
+
): Promise<Server> {
|
|
121
121
|
// Note: accessToken is not used by remember-mcp (self-managed data)
|
|
122
122
|
// but required by mcp-auth contract. Can be any value including empty string.
|
|
123
123
|
|
|
@@ -128,11 +128,8 @@ export function createServer(
|
|
|
128
128
|
logger.debug('Creating server instance', { userId });
|
|
129
129
|
|
|
130
130
|
// Ensure databases are initialized (happens once globally)
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
ensureDatabasesInitialized().catch(error => {
|
|
134
|
-
logger.error('Failed to initialize databases:', error);
|
|
135
|
-
});
|
|
131
|
+
// Initialization must succeed or server creation fails
|
|
132
|
+
await ensureDatabasesInitialized();
|
|
136
133
|
|
|
137
134
|
// Create MCP server
|
|
138
135
|
const server = new Server(
|