Skip to main content

RAG and Memory tools exposed via Model Context Protocol (MCP)

Project description

rag-mem

RAG and Memory tools exposed via Model Context Protocol (MCP).

Features

  • RAG (Retrieval-Augmented Generation): Semantic search over your documents
    • Hybrid retrieval (vector + BM25)
    • CrossEncoder reranking (optional)
    • Support for PDF, Markdown, Python, JSON, Jupyter notebooks
  • Memory System: Persistent fact/memory storage
    • BM25-based fast search
    • ChromaDB vector fallback
    • Simple CRUD operations
  • Multiple Embedding Providers:
    • Ollama (default, requires Ollama running)
    • SentenceTransformers (pip install rag-mem[local])
    • OpenAI (pip install rag-mem[openai])
    • Anthropic/Voyage (pip install rag-mem[anthropic])
    • Cohere (pip install rag-mem[cohere])
  • LLM-Agnostic: Works with any LLM client that supports MCP

Installation

# Basic install (fast, lightweight ~50MB)
pip install rag-mem

# Then install an embedding provider:
pip install rag-mem[local]    # SentenceTransformers (offline, +2GB PyTorch)
pip install rag-mem[openai]   # OpenAI API
pip install rag-mem[all]      # All providers

Note: Base install is fast. You must install an embedding provider separately, or use Ollama (no extra install needed if Ollama is running).

Quick Start

1. Initialize Configuration

memory-mcp init

This creates ~/.memory-mcp/config.toml with default settings.

2. Start the Server

# Basic server
memory-mcp serve

# With document paths for RAG
memory-mcp serve --docs ./documents ./notes

# With specific embedding provider
memory-mcp serve --embed-provider openai --embed-model text-embedding-3-small

3. Connect from Claude Desktop

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

{
  "mcpServers": {
    "memory": {
      "command": "memory-mcp",
      "args": ["serve", "--docs", "/path/to/your/documents"]
    }
  }
}

Configuration

Configuration is loaded from (in order of precedence):

  1. Environment variables (prefixed with MEMORY_MCP_)
  2. Config file (~/.memory-mcp/config.toml)
  3. Default values

Environment Variables

export MEMORY_MCP_EMBED_PROVIDER=openai
export MEMORY_MCP_OPENAI_API_KEY=sk-...
export MEMORY_MCP_QDRANT_MODE=cloud
export MEMORY_MCP_QDRANT_URL=https://your-cluster.qdrant.io
export MEMORY_MCP_QDRANT_API_KEY=...

Config File Example

# ~/.memory-mcp/config.toml

# Embedding provider (choose one):
# Option 1: SentenceTransformers (requires: pip install rag-mem[local])
embed_provider = "sentence-transformers"
embed_model = "all-MiniLM-L6-v2"

# Option 2: Ollama (requires Ollama running, no extra pip install)
# embed_provider = "ollama"
# embed_model = "nomic-embed-text"

# Option 3: OpenAI (requires: pip install rag-mem[openai])
# embed_provider = "openai"
# openai_api_key = "sk-..."

# Qdrant settings
qdrant_mode = "local"  # local, cloud, or memory

# RAG settings
rag_chunk_size = 700
rag_top_k = 5
rag_rerank = true

Docker

# Build
docker build -t memory-mcp .

# Run with OpenAI embeddings
docker run -it --rm \
  -v ./documents:/docs:ro \
  -v ./data:/data \
  -e MEMORY_MCP_EMBED_PROVIDER=openai \
  -e MEMORY_MCP_OPENAI_API_KEY=sk-... \
  memory-mcp serve --docs /docs

# Run with Ollama (requires host network for Ollama access)
docker run -it --rm \
  --network host \
  -v ./documents:/docs:ro \
  -v ./data:/data \
  memory-mcp serve --docs /docs

Available Tools

When connected via MCP, these tools are available:

RAG Tools

  • query_knowledge_base: Search indexed documents
    • query: Search query
    • doc_path: Optional specific document path
    • top_k: Number of results

Memory Tools

  • save_memory: Store text content
  • save_fact: Store structured fact with metadata
  • search_memories: Search stored memories
  • delete_memory: Delete by ID
  • list_all_memories: List all stored memories

CLI Commands

# Initialize config
memory-mcp init

# Show current config
memory-mcp config

# Start MCP server
memory-mcp serve [--docs PATH...] [--embed-provider PROVIDER]

# Index documents (without starting server)
memory-mcp index PATH... [--force]

Python API

from memory_mcp import Settings, create_server
from memory_mcp.rag import RAGPipeline
from memory_mcp.memory import MemoryStore

# Custom settings
settings = Settings(
    embed_provider="openai",
    openai_api_key="sk-...",
)

# Use RAG directly
pipeline = RAGPipeline(
    settings=settings,
    document_paths=["./docs"],
)
pipeline.index()
results = pipeline.search("How does authentication work?")

# Use memory directly
memory = MemoryStore(settings)
memory.add("User prefers dark mode")
memories = memory.search("preferences")

Custom Embedding Providers

Implement the EmbeddingProvider interface:

from memory_mcp.embeddings.base import EmbeddingProvider

class MyEmbeddings(EmbeddingProvider):
    @property
    def dimension(self) -> int:
        return 768

    def embed_documents(self, texts: list[str]) -> list[list[float]]:
        # Your implementation
        pass

    def embed_query(self, text: str) -> list[float]:
        # Your implementation
        pass

Architecture

memory-mcp/
├── embeddings/     # Pluggable embedding providers
├── rag/            # RAG pipeline (Qdrant + BM25 + reranking)
├── memory/         # Memory store (ChromaDB + BM25)
├── server.py       # FastMCP server
├── config.py       # Pydantic settings
└── cli.py          # CLI entry point

License

MIT

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

rag_mem-0.1.2.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

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

rag_mem-0.1.2-py3-none-any.whl (25.7 kB view details)

Uploaded Python 3

File details

Details for the file rag_mem-0.1.2.tar.gz.

File metadata

  • Download URL: rag_mem-0.1.2.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rag_mem-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8db3078a993179da4a495ccd6be5be710b6f2e3cf28a5f816f10d60e45cd0e3e
MD5 d6f41c6f5bee58cdec43d5baf66074a1
BLAKE2b-256 b9c400271de7cb784b422a6f8f89d051a0e2f205787da6621f89e7de0c23d1a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for rag_mem-0.1.2.tar.gz:

Publisher: memory-mcp-publish.yml on MasihMoafi/A-Modular-Kingdom

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rag_mem-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: rag_mem-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 25.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rag_mem-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4eaca5f5f40b9b2bb29e159a3c0d60844fd762a10b1d3eba9cf7f5022e2a2fbf
MD5 14e9ae63c927bec55b909b4bcdd64584
BLAKE2b-256 6137c829fbe676952ffb31648a2ae53a9780b4219a997648623741935189fbb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rag_mem-0.1.2-py3-none-any.whl:

Publisher: memory-mcp-publish.yml on MasihMoafi/A-Modular-Kingdom

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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