remember-mcp
Multi-tenant memory system MCP server with vector search, relationships, and trust-based access control for AI assistants.
README
remember-mcp
Multi-tenant memory system MCP server with vector search, relationships, and trust-based access control.
Value Proposition
remember-mcp gives AI assistants a persistent, searchable memory system that enables them to:
- Remember Everything: Store and recall information across conversations
- Find Connections: Discover relationships between memories using semantic search
- Learn Over Time: Build a knowledge graph that grows with each interaction
- Personalize Responses: Access user preferences and context for tailored interactions
- Search Intelligently: Use hybrid semantic + keyword search to find relevant memories
- Organize Knowledge: Categorize memories with 45+ content types (people, events, recipes, notes, etc.)
Why Use remember-mcp?
For AI Assistants:
- Persistent memory across sessions (no more forgetting previous conversations)
- Semantic search finds relevant context even with different wording
- Relationship tracking reveals connections between memories
- RAG-optimized queries for natural language understanding
- Trust-based access control for privacy-sensitive information
For Developers:
- Multi-tenant architecture with per-user isolation
- Production-ready with comprehensive error handling
- Compatible with Claude Desktop, mcp-auth, and custom integrations
- Vector embeddings via OpenAI for semantic understanding
- Firestore for metadata and preferences
For Users:
- Their AI assistant remembers important information
- Discovers connections between different topics
- Provides personalized responses based on preferences
- Respects privacy with trust-based access control
Use Cases
Personal Assistant
- "Remember that Sarah's birthday is June 15th"
- "What did I learn about React hooks last week?"
- "Find all my camping trip memories"
- "What recipes have I saved that use chicken?"
Knowledge Management
- Store research notes with semantic search
- Track relationships between concepts
- Build a personal knowledge graph
- Query with natural language
Project Tracking
- Remember project decisions and context
- Link related tasks and ideas
- Search across all project memories
- Track what inspired each decision
Relationship Management
- Remember details about people you meet
- Track connections between contacts
- Recall conversation context
- Find related interactions
Features
- 29+ MCP Tools: Complete CRUD for memories, relationships, preferences, shared spaces, content sync, and 11 admin debugging tools
- Soft Delete with Recovery: Safe deletion with confirmation flow and recovery capability
- Multi-Tenant: Per-user isolation with secure data boundaries
- Shared Spaces: Publish memories to shared discovery spaces like "The Void"
- Token-Based Confirmation: Secure two-phase workflow for sensitive operations (publish, delete)
- Vector Search: Semantic + keyword hybrid search with Weaviate
- Knowledge Graph: N-way relationships with bidirectional tracking
- RAG Queries: Natural language queries with context-aware responses
- 45 Content Types: Notes, events, people, recipes, goals, tasks, and more
- User Preferences: Customizable search, location, privacy, and display settings
- Trust-Based Access: Fine-grained access control (0-1 trust levels)
- Production-Ready: Comprehensive error handling and logging
Quick Start
Option 1: Use with Claude Desktop (Recommended)
Add to your Claude Desktop MCP configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"remember": {
"command": "npx",
"args": ["-y", "@prmichaelsen/remember-mcp"],
"env": {
"WEAVIATE_REST_URL": "https://your-instance.weaviate.cloud",
"WEAVIATE_API_KEY": "your-weaviate-api-key",
"OPENAI_EMBEDDINGS_API_KEY": "sk-...",
"FIREBASE_ADMIN_SERVICE_ACCOUNT_KEY": "{\"type\":\"service_account\",\"project_id\":\"your-project\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\\nYOUR_KEY\\n-----END PRIVATE KEY-----\\n\",\"client_email\":\"firebase-adminsdk@your-project.iam.gserviceaccount.com\"}",
"FIREBASE_PROJECT_ID": "your-project-id"
}
}
}
}
Important:
- Use
\\n(double backslash) for newlines in private_key - Escape all quotes with
\" - Get Weaviate Cloud at https://console.weaviate.cloud
- Get Firebase service account from Firebase Console → Project Settings → Service Accounts
Option 2: Standalone (stdio transport)
# Install dependencies
npm install
# Set up environment
cp .env.example .env
# Edit .env with your configuration
# Run in development
npm run dev
# Build for production
npm run build
npm start
Option 3: Local with OAuth (Claude Code / CLI)
Use an API token to authenticate against a remote platform (e.g. agentbase.me):
# Set auth scheme to oauth
export REMEMBER_AUTH_SCHEME=oauth
export REMEMBER_OAUTH_ENDPOINT=https://agentbase.me/api/oauth/token
export REMEMBER_API_TOKEN=ab_live-sk_your_token_here
# Or use a config file instead of env vars:
mkdir -p ~/.remember
cat > ~/.remember/config << 'EOF'
oauth_endpoint: https://agentbase.me/api/oauth/token
api_token: ab_live-sk_your_token_here
EOF
# Run — will exchange token for JWT at startup
npm start
Config file resolution order (first wins per field):
./.remember/config(project-level — different tokens per project)~/.remember/config(global)REMEMBER_API_TOKEN/REMEMBER_OAUTH_ENDPOINTenv vars (override)
Auth env vars:
| Variable | Default | Description |
|---|---|---|
REMEMBER_AUTH_SCHEME |
service |
Auth mode: service (JWT via mcp-auth) or oauth (local token exchange) |
REMEMBER_OAUTH_ENDPOINT |
— | OAuth token exchange URL (required when scheme=oauth) |
REMEMBER_API_TOKEN |
— | API token for OAuth exchange (or via .remember/config) |
Option 4: With mcp-auth (multi-tenant production)
import { wrapServer, JWTAuthProvider } from '@prmichaelsen/mcp-auth';
import { createServer } from '@prmichaelsen/remember-mcp/factory';
const wrapped = wrapServer({
serverFactory: createServer,
authProvider: new JWTAuthProvider({
jwtSecret: process.env.JWT_SECRET
}),
// tokenResolver not needed - remember-mcp is self-managed
resourceType: 'remember',
transport: { type: 'sse', port: 3000 }
});
await wrapped.start();
Architecture
- Weaviate: Vector storage for memories, relationships, and shared spaces
- Personal collections:
Memory_users_{userId}(per-user isolation) - Public space collection:
Memory_spaces_public(all shared spaces) - Group collections:
Memory_groups_{groupId}(private groups) - Composite IDs:
{userId}.{memoryId}for published memories - Tracking arrays:
space_ids[]andgroup_ids[]track publication locations
- Personal collections:
- Firestore: Permissions, preferences, confirmation tokens
- User data:
users/{user_id}/preferences,users/{user_id}/requests
- User data:
- Firebase Auth: User authentication
Memory Collection Pattern v2 (v3.1.0+)
Three-tier collection architecture with composite IDs and tracking arrays.
Collections:
Memory_users_{userId}— Private memories with simple IDsMemory_spaces_public— All public space memories with composite IDsMemory_groups_{groupId}— Group memories with composite IDs
Key Features:
- Publish to multiple spaces and groups simultaneously
- Composite IDs (
{userId}.{memoryId}) preserve source reference remember_revisesyncs content changes to all published copies- Orphan strategy keeps retracted memories for historical reference
- Revision history (max 10 entries) tracks content changes
Example:
// Publish to spaces + groups
remember_publish({
memory_id: "my-recipe",
spaces: ["cooking", "recipes"],
groups: ["foodie-club"]
})
// Search across spaces
remember_search_space({
query: "pasta recipe",
spaces: ["cooking"],
search_type: "hybrid"
})
Shared Spaces
Publish memories to shared discovery spaces where other users can find them.
The Void
"The Void" is a shared space for discovering thoughts and ideas from other users.
Publishing Workflow
- Publish: Generate confirmation token
// Publish to spaces + groups
remember_publish({
memory_id: "abc123",
spaces: ["the_void", "cooking"],
groups: ["foodie-club"]
})
// Returns: { success: true, token: "xyz789" }
- Confirm: Execute the publication
remember_confirm({ token: "xyz789" })
// Creates composite ID copies in Memory_spaces_public and Memory_groups_{groupId}
- Revise: Sync content changes (confirmation required)
// After updating source memory, request revision
remember_revise({ memory_id: "abc123" })
// Returns: { success: true, token: "xyz789" }
remember_confirm({ token: "xyz789" })
// Updates all copies, preserves old content in revision_history
- Retract: Remove from specific destinations
remember_retract({ memory_id: "abc123", spaces: ["cooking"] })
// Orphan strategy: memory remains in collection for historical reference
- Search: Discover shared memories
remember_search_space({
query: "pasta recipe",
spaces: ["cooking"],
search_type: "hybrid" // hybrid | bm25 | semantic
})
Space & Group Tools
remember_publish- Publish to spaces and/or groups (confirmation required)remember_retract- Retract from spaces and/or groups (confirmation required)remember_revise- Sync content to all published copies (confirmation required)remember_confirm- Confirm any pending actionremember_deny- Cancel any pending actionremember_search_space- Search shared spaces and groupsremember_query_space- Ask questions about shared memories
Safe Deletion with Confirmation
v3.0.0+: Deletion now requires confirmation to prevent accidental data loss.
Deletion Workflow
- Request Deletion: Generate confirmation token
remember_delete_memory({
memory_id: "abc123",
reason: "No longer needed"
})
// Returns:
{
"success": true,
"token": "xyz789",
"expires_at": "2026-02-25T17:30:00Z",
"preview": {
"memory_id": "abc123",
"content": "My camping trip to Yosemite...",
"type": "note",
"relationships_count": 3,
"will_orphan": ["rel1", "rel2", "rel3"]
},
"message": "Deletion requested. Use remember_confirm with token..."
}
- User Confirms: Execute the deletion
remember_confirm({ token: "xyz789" })
// Returns:
{
"success": true,
"memory_id": "abc123",
"message": "Memory deleted successfully"
}
- Memory is Soft-Deleted: Marked as deleted, not removed
- Memory remains in database with
deleted_attimestamp - Excluded from searches by default
- Can be searched with
deleted_filter: "include"or"only" - Future: restoration tool (not in v3.0.0)
Searching Deleted Memories
Default behavior (exclude deleted):
remember_search_memory({ query: "camping" })
// Returns only active memories
Include deleted memories:
remember_search_memory({
query: "camping",
deleted_filter: "include"
})
// Returns both active and deleted memories
Only deleted memories:
remember_search_memory({
query: "camping",
deleted_filter: "only"
})
// Returns only deleted memories
Applies to all search tools:
remember_search_memoryremember_query_memoryremember_find_similarremember_search_relationship
Important Notes
⚠️ Breaking Change (v3.0.0):
- Deletion now requires confirmation (two-step process)
- Deleted memories excluded from searches by default
- Cannot create relationships with deleted memories
- Cannot update deleted memories
Data Safety:
- Deleted memories remain in database (soft delete)
- No permanent deletion feature
- Deletion timestamp and reason tracked
- Future restoration capability planned
Debugging
Enable detailed debug logging with the REMEMBER_MCP_DEBUG_LEVEL environment variable:
# No debug output (production default)
REMEMBER_MCP_DEBUG_LEVEL=NONE
# Only errors
REMEMBER_MCP_DEBUG_LEVEL=ERROR
# Warnings and errors
REMEMBER_MCP_DEBUG_LEVEL=WARN
# Info, warnings, and errors
REMEMBER_MCP_DEBUG_LEVEL=INFO
# Debug, info, warnings, and errors (recommended for development)
REMEMBER_MCP_DEBUG_LEVEL=DEBUG
# Everything including parameter dumps (use with caution)
REMEMBER_MCP_DEBUG_LEVEL=TRACE
Example:
# Enable debug logging for development
REMEMBER_MCP_DEBUG_LEVEL=DEBUG npm run dev
# Enable trace logging for troubleshooting
REMEMBER_MCP_DEBUG_LEVEL=TRACE npm start
⚠️ Security Note: TRACE level includes full parameter dumps and may expose sensitive data. Use only in development environments.
Documentation
See agent/design/ for detailed documentation:
- Memory Collection Pattern v2 — Architecture and design rationale
- v2 API Reference — Complete tool schemas and parameters
- v2 Migration Guide — Migrating from v1 to v2
- v2 Usage Examples — Real-world usage patterns
Additional project docs:
- Milestones (
agent/milestones/) - Implementation tasks (
agent/tasks/)
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。