An MCP server that provides persistent memory capabilities through a local knowledge graph implementation. This server enables AI assistants to maintain context and information across chat sessions using a graph-based storage system.
- Domain-based memory organization for context isolation
- Store and retrieve memories with content, tags, and metadata
- Cross-domain memory references with relationship tracking
- Memory domain transfer capability
- Multiple storage backends (JSON, SQLite, and MariaDB)
- Multiple transport protocols (STDIO and HTTP)
- Full-text search capabilities with SQL-based storage backends
- Advanced content search with fuzzy matching and regex support
- Combine multiple search strategies (content, path, tags)
- Flexible result sorting and relevance scoring
- Graph traversal across domains and relationships
- Mermaid graph visualization for memory connections
- Docker and Docker Compose support
- Getting Started Guide - Quick setup and basic usage guide
- Use Cases - Examples of how to use Memory Graph in real-world scenarios
- Configuration - Comprehensive configuration options
- Storage Overview - Overview of storage backends
- Transport Overview - Overview of transport types
- Memory Architecture - Domain-based memory system
- Graph Model - Graph data model explanation
- Memory Tools Reference - Comprehensive tool documentation
- Database Schemas - Technical reference for database schemas
- Architecture - System architecture and design patterns
- Contributing - Contributing guidelines
- Testing - Testing strategy
# Install dependencies
npm install
# Build the TypeScript code
npm run build
# Clean build directory
npm run clean
The server is available as a Docker container from GitHub Container Registry:
# Pull the image
docker pull ghcr.io/aaronsb/memory-graph:latest
# Or build locally
./scripts/build-local.sh
Run the container with your desired configuration:
# Using STDIO transport (default)
docker run -v /path/to/data:/app/data \
-e MEMORY_DIR=/app/data \
-e TRANSPORT_TYPE=STDIO \
-e STORAGE_TYPE=sqlite \
ghcr.io/aaronsb/memory-graph:latest
# Using HTTP transport
docker run -v /path/to/data:/app/data \
-e MEMORY_DIR=/app/data \
-e TRANSPORT_TYPE=HTTP \
-e PORT=3000 \
-e HOST=127.0.0.1 \
-p 3000:3000 \
ghcr.io/aaronsb/memory-graph:latest
# Using MariaDB storage
docker run -v /path/to/data:/app/data \
--network=host \
-e MEMORY_DIR=/app/data \
-e STORAGE_TYPE=mariadb \
-e MARIADB_HOST=localhost \
-e MARIADB_PORT=3306 \
-e MARIADB_USER=memory_user \
-e MARIADB_PASSWORD=secure_password \
-e MARIADB_DATABASE=memory_graph \
ghcr.io/aaronsb/memory-graph:latest
For convenience, a Docker Compose configuration is provided:
# Start with Docker Compose
docker-compose up -d
# Stop services
docker-compose down
# Start the server
npm start
# Run using custom configuration
MEMORY_DIR=/path/to/data STORAGE_TYPE=sqlite npm start
The server can be configured using environment variables:
MEMORY_DIR
: Directory to store memory files (default:./data
)MEMORY_FILES
: Comma-separated list of specific memory files to useLOAD_ALL_FILES
: Set to 'true' to load all JSON files in the storage directoryDEFAULT_PATH
: Default path for storing memoriesSTRICT_MODE
: Set to 'true' to ensure all logging goes to stderr, preventing interference with JSON-RPC communication on stdout
STORAGE_TYPE
: Storage backend to use (json
,sqlite
, ormariadb
, default:json
)
MARIADB_HOST
: Database server hostname (default:localhost
)MARIADB_PORT
: Database server port (default:3306
)MARIADB_USER
: Database username (default:root
)MARIADB_PASSWORD
: Database password (default: empty)MARIADB_DATABASE
: Database name (default:memory_graph
)MARIADB_CONNECTION_LIMIT
: Maximum number of connections in the pool (default:10
)
TRANSPORT_TYPE
: Communication transport to use (STDIO
orHTTP
, default:STDIO
)PORT
: Port number for HTTP transport (required whenTRANSPORT_TYPE=HTTP
)HOST
: Host address for HTTP transport (default:127.0.0.1
, only used whenTRANSPORT_TYPE=HTTP
)
To use this server with an AI assistant via MCP, add it to your MCP configuration file:
{
"mcpServers": {
"memory-graph": {
"command": "node",
"args": ["/path/to/memory-graph/build/index.js"],
"env": {
"MEMORY_DIR": "/path/to/memory/storage",
"STORAGE_TYPE": "sqlite",
"STRICT_MODE": "true"
},
"disabled": false,
"autoApprove": []
}
}
}
{
"mcpServers": {
"memory-graph": {
"command": "node",
"args": ["/path/to/memory-graph/build/index.js"],
"env": {
"MEMORY_DIR": "/path/to/memory/storage",
"STORAGE_TYPE": "sqlite",
"TRANSPORT_TYPE": "HTTP",
"PORT": "3000",
"STRICT_MODE": "true"
},
"disabled": false,
"autoApprove": []
}
}
}
{
"mcpServers": {
"memory-graph": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--network=host",
"-v", "/path/to/data:/app/data",
"-e", "MEMORY_DIR=/app/data",
"-e", "STORAGE_TYPE=mariadb",
"-e", "MARIADB_HOST=localhost",
"-e", "MARIADB_PORT=3306",
"-e", "MARIADB_USER=memory_user",
"-e", "MARIADB_PASSWORD=secure_password",
"-e", "MARIADB_DATABASE=memory_graph",
"-e", "STRICT_MODE=true",
"ghcr.io/aaronsb/memory-graph:latest"
],
"disabled": false,
"autoApprove": []
}
}
}
The Memory Graph MCP supports three storage backends:
-
JSON: Simple file-based storage (default)
- One JSON file per domain in the
memories/
directory - Good for smaller datasets and simple deployments
- Easy to inspect and manually edit if needed
- One JSON file per domain in the
-
SQLite: Database storage with improved performance
- Single SQLite database file for all domains
- Better performance for large datasets
- Full-text search capabilities
- More efficient memory usage
- Good for local deployments
-
MariaDB: Production-ready database storage
- Uses a MariaDB/MySQL database server
- Ideal for large-scale deployments
- Full-text search capabilities
- Better scalability and concurrency support
- Suitable for deployments with high load or multiple concurrent users
To switch between storage types, set the STORAGE_TYPE
environment variable to json
, sqlite
, or mariadb
.
For detailed information about storage options, including how to convert between formats, see Storage Overview and Converting Between Storage Types.
The Memory Graph MCP provides the following tools:
select_domain
: Switch to a different memory domainlist_domains
: List all available memory domainscreate_domain
: Create a new memory domain
store_memory
: Store new information in the memory graphrecall_memories
: Retrieve memories using various strategiesedit_memory
: Edit an existing memory or move it to another domainforget_memory
: Remove a memory from the graph
generate_mermaid_graph
: Generate a visual representation of memory relationships
search_memory_content
: Full-text search capabilities (with SQLite and MariaDB backends)traverse_memories
: Explore connections between memories across domains
For detailed information about all tools and their parameters, see the Memory Tools Reference.
memory-graph/
├── src/
│ ├── graph/ # Knowledge graph implementation
│ ├── storage/ # Storage backends (JSON, SQLite, MariaDB)
│ ├── tools/ # MCP tool implementations
│ ├── types/ # TypeScript type definitions
│ └── index.ts # Main server entry
├── data/ # Memory storage (created at runtime)
└── docs/ # Project documentation
# Build the TypeScript code
npm run build
# Build local Docker image
./scripts/build-local.sh
# Run all tests
npm test
# Run tests in watch mode
npm test:watch
# Convert from JSON to SQLite
npx ts-node scripts/convert-storage.ts json2sqlite /path/to/json/data /path/to/sqlite/file.db
# Convert from SQLite to JSON
npx ts-node scripts/convert-storage.ts sqlite2json /path/to/sqlite/file.db /path/to/json/data
# Convert from JSON to MariaDB
npx ts-node scripts/convert-storage.ts json2mariadb /path/to/json/data "mariadb://user:password@localhost:3306/memory_graph"
MIT