Skip to main content
Glama

MCP Memory Server with Qdrant Vector Database

πŸŽ‰ STATUS: PRODUCTION READY βœ… | All 9 Implementation Steps Complete

A Model Context Protocol (MCP) server that provides intelligent memory management capabilities using Qdrant vector database for semantic search and storage. Built specifically for Cursor IDE integration with comprehensive policy governance.

🌟 Complete Feature Set

🧠 Multiple Memory Types

  • Global Memory: Shared across all agents for common knowledge

  • Learned Memory: Lessons learned and mistakes to avoid

  • Agent-Specific Memory: Individual agent contexts and specialized knowledge

πŸ” Advanced Search & Processing

  • Vector-based similarity search using sentence transformers

  • Duplicate detection to prevent redundant content

  • Configurable similarity thresholds

  • Markdown processing with intelligent content cleaning

  • YAML front matter extraction and section organization

πŸ›οΈ Policy Governance System (NEW)

  • 75 Enforceable Rules across 4 categories (Principles, Forbidden Actions, Requirements, Style Guide)

  • Semantic Policy Search with vector embeddings for contextual rule discovery

  • Compliance Tracking with violation logging and agent accountability

  • Version Management with SHA-256 integrity verification

  • Schema Validation enforcing required sections and data consistency

πŸ“‹ Prompt Management System (NEW)

  • Dynamic Template Engine with variable substitution and conditional logic

  • Agent-Specific Prompts with custom configurations and role definitions

  • Validation Framework ensuring prompt consistency and formatting standards

  • Context Integration with memory and policy systems for enhanced prompts

πŸ”§ Complete MCP Integration

  • 9 MCP Tools: Memory management, markdown processing, policy compliance, prompt generation

  • 4 MCP Resources: Read-only access to memory, policies, prompts, and system status

  • Standard MCP protocol compliance for Cursor IDE

  • stdin/stdout communication with comprehensive error handling

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 β”‚    β”‚                  β”‚    β”‚                 β”‚
β”‚   Cursor IDE    │◄──►│  MCP Server      │◄──►│  Qdrant Vector  β”‚
β”‚                 β”‚    β”‚  (stdin/stdout)  β”‚    β”‚  Database       β”‚
β”‚                 β”‚    β”‚                  β”‚    β”‚                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β”‚
                                β–Ό
                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                       β”‚ Sentence         β”‚
                       β”‚ Transformers     β”‚
                       β”‚ (Embeddings)     β”‚
                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Installation

Prerequisites

  1. Python 3.10+ with pip

  2. Qdrant Database (can run locally with Docker)

  3. Cursor IDE for MCP integration

Setup Qdrant Database

Using Docker (recommended):

docker run -p 6333:6333 -v $(pwd)/qdrant_storage:/qdrant/storage qdrant/qdrant

Or install Qdrant locally following their installation guide.

Install Dependencies

Using Poetry (recommended):

# Install dependencies using Poetry
poetry install

Or using pip:

# Install Python dependencies
pip install -r requirements.txt

Configuration

  1. Copy the example environment file:

cp .env.example .env
  1. Edit .env with your settings:

# Qdrant Configuration
QDRANT_HOST=localhost
QDRANT_PORT=6333
QDRANT_API_KEY=

# Embedding Model Configuration  
EMBEDDING_MODEL=all-MiniLM-L6-v2
EMBEDDING_DIMENSION=384

# Memory Configuration
SIMILARITY_THRESHOLD=0.8
MAX_RESULTS=10

# Agent Configuration
DEFAULT_AGENT_ID=default

# Server Configuration
LOG_LEVEL=INFO

Usage

Starting the Server

python server.py

The server will:

  1. Connect to Qdrant database

  2. Initialize vector collections

  3. Load the embedding model

  4. Start listening for MCP commands via stdin/stdout

Cursor IDE Integration

Add the server to your Cursor MCP configuration:

{
  "mcpServers": {
    "memory-server": {
      "command": "/media/hannesn/storage/Code/MCP/.venv/bin/python",
      "args": ["/media/hannesn/storage/Code/MCP/server.py"],
      "cwd": "/media/hannesn/storage/Code/MCP",
      "env": {
        "PYTHONPATH": "/media/hannesn/storage/Code/MCP",
        "QDRANT_HOST": "localhost",
        "QDRANT_PORT": "6333",
        "EMBEDDING_MODEL": "all-MiniLM-L6-v2",
        "SIMILARITY_THRESHOLD": "0.8",
        "MAX_RESULTS": "10",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

Alternatively, you can run the server using Poetry:

poetry run python server.py

MCP Tools

1. set_agent_context

Initialize agent context from a markdown file.

Parameters:

  • agent_id (string): Unique identifier for the agent

  • context_file_path (string): Path to markdown file with agent context

  • description (string, optional): Description of the context

Example:

{
  "tool": "set_agent_context",
  "arguments": {
    "agent_id": "frontend_dev",
    "context_file_path": "./contexts/frontend_agent.md",
    "description": "Frontend development agent context"
  }
}

2. add_to_global_memory

Add content to global memory shared across all agents.

Parameters:

  • file_path (string): Path to markdown file

  • description (string, optional): Content description

Example:

{
  "tool": "add_to_global_memory", 
  "arguments": {
    "file_path": "./docs/coding_standards.md",
    "description": "Company coding standards"
  }
}

3. add_to_learned_memory

Store lessons learned to avoid repeated mistakes.

Parameters:

  • file_path (string): Path to markdown file with lessons

  • lesson_type (string): Type of lesson (e.g., "deployment", "security")

  • description (string, optional): Lesson description

Example:

{
  "tool": "add_to_learned_memory",
  "arguments": {
    "file_path": "./lessons/deployment_issues.md", 
    "lesson_type": "deployment",
    "description": "Critical deployment lessons"
  }
}

4. add_to_agent_memory

Add content to agent-specific memory.

Parameters:

  • agent_id (string): Target agent identifier

  • file_path (string): Path to markdown file

  • description (string, optional): Content description

Example:

{
  "tool": "add_to_agent_memory",
  "arguments": {
    "agent_id": "backend_dev",
    "file_path": "./docs/api_patterns.md",
    "description": "Backend API design patterns"
  }
}

5. query_memory

Search memory collections for relevant content.

Parameters:

  • query (string): Search query

  • memory_type (string): "global", "learned", "agent", or "all"

  • agent_id (string, optional): Agent ID for agent-specific queries

  • max_results (integer, optional): Maximum results (default: 10)

Example:

{
  "tool": "query_memory",
  "arguments": {
    "query": "authentication best practices",
    "memory_type": "all",
    "max_results": 5
  }
}

6. compare_against_learned_memory

Check proposed actions against past lessons learned.

Parameters:

  • action_description (string): Description of proposed action

  • agent_id (string, optional): Agent making the request

Example:

{
  "tool": "compare_against_learned_memory",
  "arguments": {
    "action_description": "Deploy database migration on Friday afternoon",
    "agent_id": "devops_agent"
  }
}

Memory Types Explained

Global Memory

  • Purpose: Store knowledge shared across all agents

  • Content: Coding standards, documentation, best practices

  • Access: All agents can query this memory

  • Use Case: Company-wide policies, architectural decisions

Learned Memory

  • Purpose: Store lessons learned from past mistakes

  • Content: Incident reports, post-mortems, anti-patterns

  • Access: Most agents (exclude "human-like" testers)

  • Use Case: Avoid repeating past mistakes, improve decisions

Agent-Specific Memory

  • Purpose: Store knowledge specific to individual agents

  • Content: Role definitions, specialized knowledge, context

  • Access: Only the specific agent

  • Use Case: Agent initialization, specialized expertise

Testing

Run Basic Functionality Tests

python tests/test_basic_functionality.py

This will test:

  • Qdrant connection and collection setup

  • Memory operations (add, query, duplicate detection)

  • Markdown processing and content cleaning

  • Vector embedding and similarity search

Manual Testing with Sample Data

  1. Start the server:

python server.py
  1. Use the provided sample markdown files in sample_data/:

    • frontend_agent_context.md: Frontend agent context

    • backend_agent_context.md: Backend agent context

    • deployment_lessons.md: Learned lessons

    • global_standards.md: Global development standards

Troubleshooting

Common Issues

Qdrant Connection Failed

❌ Failed to initialize Qdrant: ConnectionError
  • Ensure Qdrant is running on configured host/port

  • Check firewall settings

  • Verify API key if using Qdrant Cloud

Embedding Model Download Issues

❌ Failed to load embedding model
  • Ensure internet connection for first download

  • Check available disk space (models can be large)

  • Try alternative model in configuration

Memory Full / Performance Issues

  • Reduce EMBEDDING_DIMENSION for smaller models

  • Increase SIMILARITY_THRESHOLD to reduce results

  • Consider pruning old content from collections

Debugging

Enable debug logging:

export LOG_LEVEL=DEBUG
python server.py

Check Qdrant collections:

curl http://localhost:6333/collections

Configuration Reference

Environment Variables

Variable

Default

Description

QDRANT_HOST

localhost

Qdrant server host

QDRANT_PORT

6333

Qdrant server port

QDRANT_API_KEY

API key for Qdrant Cloud

EMBEDDING_MODEL

all-MiniLM-L6-v2

Sentence transformer model

EMBEDDING_DIMENSION

384

Vector dimension size

SIMILARITY_THRESHOLD

0.8

Duplicate detection threshold

MAX_RESULTS

10

Default max query results

DEFAULT_AGENT_ID

default

Default agent identifier

LOG_LEVEL

INFO

Logging verbosity

Collection Names

  • Global Memory: global_memory

  • Learned Memory: learned_memory

  • Agent Memory: agent_specific_memory_{agent_id}

Development

Project Structure

mcp-memory-server/
β”œβ”€β”€ server.py                 # Main MCP server
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ config.py             # Configuration management
β”‚   β”œβ”€β”€ memory_manager.py     # Qdrant operations
β”‚   └── markdown_processor.py # Markdown handling
β”œβ”€β”€ tests/
β”‚   └── test_basic_functionality.py
β”œβ”€β”€ sample_data/              # Example markdown files
β”œβ”€β”€ docs/                     # Additional documentation
β”œβ”€β”€ requirements.txt          # Python dependencies
β”œβ”€β”€ pyproject.toml           # Poetry configuration
└── README.md                # This file

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Run tests: python -m pytest tests/

  5. Submit a pull request

Adding New Tools

  1. Add tool function to MCPMemoryServer._register_tools()

  2. Update _list_tools() method with tool schema

  3. Add tests for the new functionality

  4. Update this README

License

MIT License - see LICENSE file for details.

Support

For issues and questions:

  1. Check the troubleshooting section above

  2. Review Qdrant documentation for database issues

  3. Check MCP protocol documentation for integration issues

  4. Open an issue with detailed logs and configuration

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hannesnortje/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server