Skip to main content

Spatial bidirectional persistent memory MCP server for LLMs - vector-based semantic memory as a navigable landscape

Project description

Spatial Memory MCP Server

A vector-based spatial memory system that treats knowledge as a navigable landscape, not a filing cabinet.

Project Status: All phases complete. Production-ready with 1094 tests passing.

Supported Platforms

  • Windows 11
  • macOS (latest)
  • Linux (Fedora, Ubuntu, Linux Mint)

Overview

Spatial Memory MCP Server provides persistent, semantic memory for LLMs through the Model Context Protocol (MCP). Unlike traditional keyword-based memory systems, it uses vector embeddings to enable:

  • Semantic Search: Find memories by meaning, not just keywords
  • Spatial Navigation: Discover connections through journey and wander operations
  • Auto-Clustering: regions automatically groups related concepts
  • Cognitive Dynamics: Memories consolidate, decay, and reinforce like human cognition
  • Visual Understanding: Generate Mermaid/SVG/JSON visualizations of your knowledge space
  • Hybrid Search: Combine vector similarity with full-text search

Features

  • 21 MCP tools across 4 categories (core, spatial, lifecycle, utility)
  • Clean Architecture with ports/adapters pattern for testability
  • LanceDB vector storage with automatic indexing
  • Dual embedding support: Local (sentence-transformers) or OpenAI API
  • ONNX Runtime by default for 2-3x faster embeddings
  • Enterprise features: Connection pooling, retry logic, batch operations
  • Comprehensive security: Path validation, SQL injection prevention, input sanitization
  • 1094 tests including security edge cases

Roadmap

Phase Status Features
Phase 1: Foundation Complete Config, Database, Embeddings, Models, Errors
Phase 2: Core Operations Complete remember, recall, nearby, forget
Phase 3: Spatial Operations Complete journey, wander, regions, visualize
Phase 4: Lifecycle Operations Complete consolidate, extract, decay, reinforce
Phase 5: Utilities Complete stats, namespaces, export, import, hybrid_recall
Phase 6: Polish & Release In Progress PyPI release pending

Installation

Development Setup

git clone https://github.com/arman-tech/spatial-memory-mcp.git
cd spatial-memory-mcp
pip install -e ".[dev]"

With OpenAI Support

pip install -e ".[dev,openai]"

Verify Installation

After installation, verify that all dependencies are correctly installed:

python -m spatial_memory.verify

Or manually check:

# Run in Python interpreter
from spatial_memory.core.embeddings import EmbeddingService, _is_onnx_available
print(f"ONNX available: {_is_onnx_available()}")
svc = EmbeddingService()
print(f"Backend: {svc.backend}, Dimensions: {svc.dimensions}")

Expected output with ONNX Runtime (default):

ONNX available: True
Backend: onnx, Dimensions: 384

If ONNX shows as unavailable, reinstall with:

pip install --force-reinstall "sentence-transformers[onnx]"

Configuration

Copy .env.example to .env and customize:

cp .env.example .env

Key Configuration Options

Variable Default Description
SPATIAL_MEMORY_MEMORY_PATH ./.spatial-memory LanceDB storage directory
SPATIAL_MEMORY_EMBEDDING_MODEL all-MiniLM-L6-v2 Embedding model (local or openai:*)
SPATIAL_MEMORY_EMBEDDING_BACKEND auto Backend: auto, onnx, or pytorch
SPATIAL_MEMORY_OPENAI_API_KEY - Required only for OpenAI embeddings
SPATIAL_MEMORY_LOG_LEVEL INFO Logging verbosity
SPATIAL_MEMORY_AUTO_CREATE_INDEXES true Auto-create vector indexes

Embedding Models

Local models (no API key required):

  • all-MiniLM-L6-v2 - Fast, good quality (384 dimensions)
  • all-mpnet-base-v2 - Slower, better quality (768 dimensions)

OpenAI models (requires API key):

  • openai:text-embedding-3-small - Fast, cost-effective (1536 dimensions)
  • openai:text-embedding-3-large - Best quality (3072 dimensions)

Embedding Backend

By default, local models use ONNX Runtime for 2-3x faster inference and 60% less memory:

Backend Speed Memory Notes
ONNX Runtime (default) 2-3x faster 60% less Optimized for CPU inference
PyTorch Baseline Baseline Full flexibility

Configure via environment variable:

# Auto-detect (default) - uses ONNX if available
SPATIAL_MEMORY_EMBEDDING_BACKEND=auto

# Force specific backend
SPATIAL_MEMORY_EMBEDDING_BACKEND=onnx
SPATIAL_MEMORY_EMBEDDING_BACKEND=pytorch

Usage

Add to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "spatial-memory": {
      "command": "python",
      "args": ["-m", "spatial_memory"],
      "env": {
        "SPATIAL_MEMORY_MEMORY_PATH": "/path/to/memory/storage"
      }
    }
  }
}

Available Tools (21 Total)

For complete API documentation including parameters, return types, and examples, see docs/API.md.

Core Operations

Tool Description
remember Store a memory with optional tags, importance, and metadata
remember_batch Store multiple memories efficiently in a single operation
recall Find memories semantically similar to a query with optional filters
nearby Find memories spatially close to a specific memory by ID
forget Remove a memory by ID
forget_batch Remove multiple memories by IDs

Spatial Operations

Tool Description
journey Interpolate a path between two memories using SLERP, discovering concepts along the way
wander Random walk through memory space for serendipitous discovery
regions Discover conceptual regions via HDBSCAN clustering with auto-generated labels
visualize Generate 2D visualization (JSON coordinates, Mermaid diagrams, or SVG)

Lifecycle Operations

Tool Description
decay Reduce importance of stale/unused memories based on time or access patterns
reinforce Boost importance of useful memories
extract Auto-extract memorable facts, decisions, and insights from text
consolidate Find and merge similar/duplicate memories with configurable strategies

Utility Operations

Tool Description
stats Get comprehensive database statistics (counts, storage, indexes)
namespaces List all namespaces with memory counts
delete_namespace Delete a namespace and all its memories
rename_namespace Rename a namespace
export_memories Export memories to Parquet, JSON, or CSV format
import_memories Import memories from exported files with validation
hybrid_recall Combined vector + full-text search with configurable weighting

Tool Examples

Remember a Memory

Store this: "Use repository pattern for database access in this project"
Tags: architecture, patterns
Importance: 0.8

Semantic Recall

What do I know about database patterns?

Journey Between Concepts

Show me a journey from "React components" to "database design"

This reveals intermediate concepts like state management, data flow, API design, etc.

Discover Regions

What conceptual regions exist in my memories?

Returns auto-clustered groups with labels and representative memories.

Apply Memory Decay

Decay unused memories (dry run first to preview)

Export for Backup

Export all memories to parquet format

Security Features

  • Path Traversal Prevention: All file operations validate paths against allowed directories
  • Symlink Attack Protection: Optional symlink blocking for sensitive environments
  • SQL Injection Prevention: 15+ dangerous patterns detected and blocked
  • Input Validation: Pydantic models validate all inputs
  • Error Sanitization: Internal errors return reference IDs, not stack traces
  • Secure Credential Handling: API keys stored as SecretStr

Development

Running Tests

# All tests
pytest tests/ -v

# Fast unit tests only
pytest tests/ -m unit -v

# Security-specific tests
pytest tests/ -k "security or injection" -v

Type Checking

mypy spatial_memory/ --ignore-missing-imports

Linting

ruff check spatial_memory/ tests/

Architecture

The project follows Clean Architecture principles:

spatial_memory/
├── core/           # Domain logic (database, embeddings, models, errors)
├── services/       # Application services (memory, spatial, lifecycle)
├── adapters/       # Infrastructure (LanceDB repository)
├── ports/          # Protocol interfaces
└── server.py       # MCP server entry point

See SPATIAL-MEMORY-ARCHITECTURE-DIAGRAMS.md for visual architecture documentation.

Documentation

Document Description
docs/API.md Complete API reference for all 21 tools
docs/BENCHMARKS.md Performance benchmarks and test results
docs/METRICS.md Prometheus metrics documentation
docs/troubleshooting.md Troubleshooting guide

Troubleshooting

Common Issues

Model download fails: The first run downloads the embedding model (~80MB). Ensure internet connectivity.

Permission errors: Check that SPATIAL_MEMORY_MEMORY_PATH is writable.

OpenAI errors: Verify SPATIAL_MEMORY_OPENAI_API_KEY is set correctly.

Import validation errors: Use dry_run=true first to preview validation issues.

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Ensure all tests pass
  5. Submit a pull request

Security

For security vulnerabilities, please email directly rather than opening a public issue.

For Claude Code Users

This project includes CLAUDE.md with instructions for the Claude Code AI assistant to interact with the memory system.

License

MIT - See LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spatial_memory_mcp-1.0.2.tar.gz (365.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spatial_memory_mcp-1.0.2-py3-none-any.whl (144.5 kB view details)

Uploaded Python 3

File details

Details for the file spatial_memory_mcp-1.0.2.tar.gz.

File metadata

  • Download URL: spatial_memory_mcp-1.0.2.tar.gz
  • Upload date:
  • Size: 365.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.6

File hashes

Hashes for spatial_memory_mcp-1.0.2.tar.gz
Algorithm Hash digest
SHA256 0ff56c77f48786378dc24d15f0c2e4ac85b0e01e92956cfe3cbb7b7915974947
MD5 3353eb87132fd0c2c8d124eaf54fa230
BLAKE2b-256 d82291651c87d03bb954af182f88b2412c79ff25f4ad05d5300b38945320dd70

See more details on using hashes here.

File details

Details for the file spatial_memory_mcp-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for spatial_memory_mcp-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6131f1ff370e723e6877351e1be923f807e57c25a6c4294c0f9ff4685744d1aa
MD5 51512438c54333161c74560bbe2ee752
BLAKE2b-256 bd012d21c7bae6fa8b69a92b44eec80419980854b690b72432da31b7fe1dcdec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page