Mnemosyne MCP
Provides persistent knowledge graph memory for AI agents with local semantic search using Neo4j and ONNX embeddings, enabling offline operation with zero API costs.
README
Mnemosyne MCP
Knowledge graph memory for AI agents with local semantic search. Zero API costs.
Named after Mnemosyne, the Greek goddess of memory and mother of the Muses.
Overview
Mnemosyne provides persistent memory for AI agents using Neo4j knowledge graphs and local vector embeddings. Unlike traditional solutions requiring paid API access, Mnemosyne runs embeddings locally via ONNX Runtime.
Key Features:
- Local semantic search with BGE embeddings
- No API keys or external dependencies
- Works offline after initial setup
- Compatible with Model Context Protocol (MCP)
- Drop-in replacement for cloud-based solutions
Performance Comparison
| Metric | Cloud Services | Mnemosyne |
|---|---|---|
| Cost | ~$0.02/1M tokens | Free |
| API Key | Required | None |
| Network | Always required | Initial download only |
| Privacy | External | Local |
| Latency | ~100ms | ~200-500ms |
Installation
Prerequisites
- Node.js >= 20.0.0
- Neo4j Database (Download)
Quick Start (NPM)
npx @zhadyz/mnemosyne-mcp
From Source
git clone https://github.com/zhadyz/mnemosyne-mcp.git
cd mnemosyne-mcp
npm install
npm run build
Neo4j Setup
- Install Neo4j Desktop
- Create a database instance
- Set credentials (default password:
neo4j) - Start the database (default port: 7687)
Environment Configuration
Create .env in project root:
EMBEDDING_PROVIDER=local
LOCAL_EMBEDDING_MODEL=Xenova/bge-base-en-v1.5
NEO4J_URI=bolt://127.0.0.1:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=neo4j
# NEO4J_DATABASE - Automatically set by router based on project config
Multi-Project Database Routing
Mnemosyne includes built-in dynamic database routing that automatically selects the correct Neo4j database based on your current project.
Why Use Multi-Database Architecture?
Performance at Scale:
- Query 10⁴ entities instead of 10⁵+ in monolithic architecture
- O(log n) query complexity through database partitioning
- Linear project addition without performance degradation
Project Isolation:
- Namespace separation prevents cross-contamination of knowledge graphs
- Each project gets its own isolated database
- Global patterns database for cross-project learnings
Setup
1. Create project databases in Neo4j:
CREATE DATABASE my_project_db IF NOT EXISTS;
CREATE DATABASE another_project_db IF NOT EXISTS;
2. Add .mnemosyne file to each project root:
# Project-specific database name (required)
MNEMOSYNE_DATABASE=my_project_db
# Optional metadata
PROJECT_NAME=My Project
RETENTION_DAYS=90
AUTO_CLEANUP=true
ISOLATION_LEVEL=project
3. Router automatically detects database:
Your Projects:
├─ project-alpha/
│ └─ .mnemosyne → MNEMOSYNE_DATABASE=alpha_db
│ Routes to "alpha_db" database ✓
│
├─ project-beta/
│ └─ .mnemosyne → MNEMOSYNE_DATABASE=beta_db
│ Routes to "beta_db" database ✓
│
└─ unconfigured-project/
No .mnemosyne → Routes to "neo4j" (global patterns) ✓
The router walks up the directory tree from your current working directory, finds .mnemosyne or .env, and routes to the specified database. If no config is found, it defaults to neo4j (global patterns database).
Template: Copy the included template to your project:
cp node_modules/@zhadyz/mnemosyne-mcp/.mnemosyne.template .mnemosyne
# Edit MNEMOSYNE_DATABASE to your database name
Claude Integration
Claude Code (Recommended)
Add Mnemosyne to Claude Code with a single command:
claude mcp add --scope user mnemosyne -- npx -y @zhadyz/mnemosyne-mcp
Verify it's installed:
claude mcp list
You should see mnemosyne: npx -y @zhadyz/mnemosyne-mcp - ✓ Connected
Default Configuration:
- Neo4j URI:
bolt://localhost:7687 - Username/Password:
neo4j/neo4j - Database: Automatic (via router -
neo4jif no.mnemosynefile found) - Embeddings: Local (BGE base-en-v1.5, 768 dimensions)
Custom Neo4j Setup:
If you use different credentials, edit ~/.claude.json and add environment variables:
claude mcp add --scope user mnemosyne \
-e NEO4J_PASSWORD=your_password \
-- npx -y @zhadyz/mnemosyne-mcp
Dual MCP Instance Setup (Project + Global Memory)
For advanced workflows, run two separate Mnemosyne instances - one for project-specific knowledge and one for cross-project patterns.
Architecture:
- Project Instance: Uses automatic routing (finds
.mnemosynein your project) - Global Instance: Always routes to
neo4jdatabase (forced override)
Setup:
# Project-specific knowledge (automatic routing)
claude mcp add --scope user mnemosyne-project -- npx -y @zhadyz/mnemosyne-mcp
# Global cross-project patterns (forced to neo4j database)
claude mcp add --scope user mnemosyne-global \
-e MNEMOSYNE_FORCE_DATABASE=neo4j \
-- npx -y @zhadyz/mnemosyne-mcp
Agent Usage:
Tools appear with prefixes in Claude:
mcp__mnemosyne-project__create_entities→ stores in project databasemcp__mnemosyne-global__create_entities→ stores in globalneo4jdatabase
Decision Heuristic for Agents:
Store in project database when knowledge is:
- Project-specific code: classes, functions, APIs, models
- Project context: dependencies, architecture decisions, local conventions
- Temporary learnings: current sprint patterns, debugging insights
Store in global database when knowledge is:
- Reusable patterns: error handling strategies, design patterns
- Framework best practices: Next.js optimization, React patterns
- Security patterns: authentication flows, input validation
- Meta-learnings: what works across multiple projects
Default Rule: When uncertain, store in project database. Manually promote proven patterns to global database after validation.
Claude Desktop
Basic Setup:
Add to claude_desktop_config.json:
{
"mcpServers": {
"mnemosyne": {
"command": "npx",
"args": ["-y", "@zhadyz/mnemosyne-mcp"],
"env": {
"NEO4J_URI": "bolt://127.0.0.1:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "neo4j",
"EMBEDDING_PROVIDER": "local",
"LOCAL_EMBEDDING_MODEL": "Xenova/bge-base-en-v1.5"
}
}
}
}
Dual Instance Setup (Project + Global):
{
"mcpServers": {
"mnemosyne-project": {
"command": "npx",
"args": ["-y", "@zhadyz/mnemosyne-mcp"],
"env": {
"NEO4J_URI": "bolt://127.0.0.1:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "neo4j",
"EMBEDDING_PROVIDER": "local",
"LOCAL_EMBEDDING_MODEL": "Xenova/bge-base-en-v1.5"
}
},
"mnemosyne-global": {
"command": "npx",
"args": ["-y", "@zhadyz/mnemosyne-mcp"],
"env": {
"NEO4J_URI": "bolt://127.0.0.1:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "neo4j",
"EMBEDDING_PROVIDER": "local",
"LOCAL_EMBEDDING_MODEL": "Xenova/bge-base-en-v1.5",
"MNEMOSYNE_FORCE_DATABASE": "neo4j"
}
}
}
}
Local Development
{
"mcpServers": {
"mnemosyne": {
"command": "node",
"args": ["/absolute/path/to/mnemosyne-mcp/dist/router.js"],
"env": {
"NEO4J_URI": "bolt://127.0.0.1:7687",
"NEO4J_USERNAME": "neo4j",
"NEO4J_PASSWORD": "neo4j",
"EMBEDDING_PROVIDER": "local",
"LOCAL_EMBEDDING_MODEL": "Xenova/bge-base-en-v1.5"
}
}
}
}
Embedding Models
Mnemosyne supports multiple BGE models:
| Model | Dimensions | Size | Use Case |
|---|---|---|---|
| bge-base-en-v1.5 | 768 | 90MB | Balanced (default) |
| bge-small-en-v1.5 | 384 | 30MB | Resource-constrained |
| bge-large-en-v1.5 | 1024 | 200MB | Maximum accuracy |
| bge-m3 | 1024 | 200MB | Multilingual |
Models download automatically on first use and cache to ~/.cache/huggingface/.
Usage
Create Entities
{
"name": "create_entities",
"arguments": {
"entities": [{
"name": "TypeScript",
"entityType": "programming_language",
"observations": [
"Strongly typed superset of JavaScript",
"Compiles to JavaScript",
"Static type checking"
]
}]
}
}
Semantic Search
{
"name": "semantic_search",
"arguments": {
"query": "type-safe languages for web development",
"limit": 5
}
}
Create Relations
{
"name": "create_relations",
"arguments": {
"relations": [{
"from": "TypeScript",
"to": "JavaScript",
"relationType": "compiles_to"
}]
}
}
Architecture
EmbeddingServiceFactory
├── DefaultEmbeddingService (testing)
├── OpenAIEmbeddingService (cloud)
└── LocalEmbeddingService (ONNX)
All services implement IEmbeddingService, enabling seamless provider swapping.
Local Embeddings Stack
- ONNX Runtime: Optimized ML inference
- Transformers.js: JavaScript ML library
- BGE Models: BAAI general embeddings
- L2 Normalization: Vector similarity search
Development
npm test # Run tests
npm run test:watch # Watch mode
npm run build # Build
npm run dev # Development mode
npm run fix # Lint and format
Configuration
| Variable | Options | Description |
|---|---|---|
EMBEDDING_PROVIDER |
auto, local, openai |
Provider selection |
LOCAL_EMBEDDING_MODEL |
BGE model name | Local model choice |
NEO4J_URI |
bolt://... |
Database connection |
NEO4J_USERNAME |
string | Database user |
NEO4J_PASSWORD |
string | Database password |
NEO4J_DATABASE |
string | Database name |
Provider Selection:
auto: OpenAI if API key present, otherwise locallocal: Always use local embeddingsopenai: Always use OpenAI (requires API key)
Credits
Forked from memento-mcp by Gannon Hall.
Additions:
- Local ONNX embedding support
- BGE model integration
- Auto-fallback configuration
- Zero-dependency operation
License
MIT License - see LICENSE file.
Contributing
Pull requests welcome.
Built by zhadyz Powered by ONNX Runtime + Transformers.js + BGE Embeddings
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。