Ai Memory — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Ai Memory (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
User message -> search relevant memories -> inject into system prompt -> AI responds -> auto-extract facts -> saveD:\Betting\
|
|-- memory\
| +-- memory-mcp-server.js <- MCP server for Claude CLI (8 tools)
|
|-- memory-engine.js <- Core engine (FTS5, vector, graph, dedup)
|-- embeddings.js <- 5 embedding providers + fact extractor
|-- memory-middleware.js <- Auto-inject middleware (Vercel, OpenAI, generic)
|-- ai-sdk-tools.js <- Vercel AI SDK tools (6 tools)
|-- examples.js <- Usage examples for every feature
|-- test-memory.js <- Test suite (36 tests)
|-- package.json
|
|-- .mcp.json <- Project-level MCP config (auto-starts server)
|-- CLAUDE.md <- Instructions for Claude to use memory
|-- memories.db <- SQLite database (created on first use)better-sqlite3 installed (npm install better-sqlite3)Already configured. The .mcp.json file auto-registers the server:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["D:/Betting/memory/memory-mcp-server.js"],
"env": {
"MEMORY_DB_PATH": "D:/Betting/memories.db",
"MEMORY_CONTAINER": "claude_memory"
}
}
}
}Run this in a regular terminal (NOT inside Claude Code):
claude mcp add memory --scope user -- node D:/Betting/memory/memory-mcp-server.jsVerify:
claude mcp listclaude mcp add-json memory "{\"command\":\"node\",\"args\":[\"D:/Betting/memory/memory-mcp-server.js\"]}"In ~/.claude/settings.json (already configured):
{
"enableAllProjectMcpServers": true,
"enabledMcpjsonServers": ["memory"]
}| File | Location | Purpose |
|---|---|---|
.mcp.json | D:\Betting\.mcp.json | Registers MCP server for this project |
CLAUDE.md | D:\Betting\CLAUDE.md | Tells Claude when/how to use memory tools |
settings.json | C:\Users\ravik\.claude\settings.json | Global settings + auto-approve MCP |
memories.db | D:\Betting\memories.db | SQLite database (all memories stored here) |
| Tool | Description |
|---|---|
search_memories | Search by keyword, filter by type/importance |
add_memory | Save with type (static/dynamic/episodic/semantic) + importance (critical/high/normal/low) |
update_memory | Update existing memory content or importance |
delete_memory | Soft-delete a memory (recoverable) |
get_user_profile | Load all static facts + recent dynamic context |
list_memories | List all memories, optionally filter by type |
link_memories | Create relationships between memories |
memory_stats | Total count, breakdown by type and importance |
Restart Claude Code in D:\Betting, then:
> My name is Ravi and I prefer dark mode
> What do you know about me?Close and reopen:
> What's my name?It remembers.
Run the test suite:
node test-memory.jsExpected: 36/36 PASS.
import { selfHostedMemoryTools } from './ai-sdk-tools.js';
const tools = selfHostedMemoryTools({
dbPath: './memories.db',
containerTags: ['user_123'],
});
// 6 tools: searchMemories, addMemory, updateMemory,
// forgetMemory, getUserProfile, getRelatedMemoriesimport { withMemory } from './memory-middleware.js';
const model = withMemory(openai('gpt-4o'), 'user_123', {
dbPath: './memories.db',
addMemory: 'always',
tokenBudget: 2000,
});import { withOpenAIMemory } from './memory-middleware.js';
withOpenAIMemory(openaiClient, 'user_123', {
dbPath: './memories.db',
addMemory: 'always',
});
// openai.chat.completions.create() now auto-injects memoriesimport { withGenericMemory } from './memory-middleware.js';
const chat = withGenericMemory(myLLMFunction, 'user_123', {
dbPath: './memories.db',
addMemory: 'always',
});See examples.js for 7 complete examples.
# Custom database path
set MEMORY_DB_PATH=D:\my-path\memories.db
# Separate memories by project
set MEMORY_CONTAINER=my_project
# With MCP registration
claude mcp add memory -e MEMORY_DB_PATH=D:/path/memories.db -e MEMORY_CONTAINER=my_project --scope user -- node D:/Betting/memory/memory-mcp-server.js| Feature | Supermemory ($29/mo) | Mem0 ($20/mo) | Zep ($49/mo) | This (FREE) |
|---|---|---|---|---|
| FTS5 search | Cloud only | No | No | Yes |
| Vector search | Yes | Yes | Yes | Yes (5 options) |
| Hybrid ranking | No | No | Partial | Yes |
| Importance levels | No | No | No | 4 levels |
| Time decay | No | Partial | Yes | Yes |
| Memory dedup/merge | Server-side | Basic | No | Yes |
| Fact extraction | No | Yes ($) | No | Yes (any LLM) |
| Memory graph | No | No | No | Yes |
| 4 memory types | 2 | 1 | 2 | 4 |
| Chunking | No | No | Yes | Yes |
| Token budget | No | No | No | Yes |
| Soft delete | No | No | No | Yes |
| Export/import | No | No | No | Yes |
| MCP for Claude CLI | No | No | No | 8 tools |
| Self-hosted | No | No | No | Yes |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.