A high-performance Model Context Protocol (MCP) server providing persistent multimodal context storage for LLM agents. Built with FastMCP, this server enables seamless context sharing across multiple agents working on the same task through thread-based scoping.
- Multimodal Context Storage: Store and retrieve both text and images
- Thread-Based Scoping: Agents working on the same task share context through thread IDs
- Flexible Metadata Filtering: Store custom structured data with any JSON-serializable fields and filter using 16 powerful operators
- Date Range Filtering: Filter context entries by creation timestamp using ISO 8601 format
- Tag-Based Organization: Efficient context retrieval with normalized, indexed tags
- Full-Text Search: Optional linguistic search with stemming, ranking, and boolean queries (FTS5/tsvector)
- Semantic Search: Optional vector similarity search for meaning-based retrieval
- Hybrid Search: Optional combined FTS + semantic search using Reciprocal Rank Fusion (RRF)
- Multiple Database Backends: Choose between SQLite (default, zero-config) or PostgreSQL (high-concurrency, production-grade)
- High Performance: WAL mode (SQLite) / MVCC (PostgreSQL), strategic indexing, and async operations
- MCP Standard Compliance: Works with Claude Code, LangGraph, and any MCP-compatible client
- Production Ready: Comprehensive test coverage, type safety, and robust error handling
uvpackage manager (install instructions)- An MCP-compatible client (Claude Code, LangGraph, or any MCP client)
There are two ways to add the MCP Context Server to Claude Code:
# From PyPI (recommended)
claude mcp add context-server -- uvx --python 3.12 mcp-context-server
# Or from GitHub (latest development version)
claude mcp add context-server -- uvx --python 3.12 --from git+https://github.com/alex-feel/mcp-context-server mcp-context-server
# Or with semantic search (for setup instructions, see the docs/semantic-search.md)
claude mcp add context-server -- uvx --python 3.12 --with mcp-context-server[semantic-search] mcp-context-server
# Or from GitHub (latest development version) with semantic search (for setup instructions, see docs/semantic-search.md)
claude mcp add context-server -- uvx --python 3.12 --from git+https://github.com/alex-feel/mcp-context-server --with mcp-context-server[semantic-search] mcp-context-serverFor more details, see: https://docs.claude.com/en/docs/claude-code/mcp#option-1%3A-add-a-local-stdio-server
Add the following to your .mcp.json file in your project directory:
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {}
}
}
}For the latest development version from GitHub, use:
"args": ["--python", "3.12", "--from", "git+https://github.com/alex-feel/mcp-context-server", "mcp-context-server"]For configuration file locations and details, see: https://docs.claude.com/en/docs/claude-code/settings#settings-files
# Start Claude Code
claude
# Check MCP tools are available
/mcpYou can configure the server using environment variables in your MCP configuration. The server supports environment variable expansion using ${VAR} or ${VAR:-default} syntax.
Example configuration with environment variables:
{
"mcpServers": {
"context-server": {
"type": "stdio",
"command": "uvx",
"args": ["--python", "3.12", "mcp-context-server"],
"env": {
"LOG_LEVEL": "${LOG_LEVEL:-INFO}",
"DB_PATH": "${DB_PATH:-~/.mcp/context_storage.db}",
"MAX_IMAGE_SIZE_MB": "${MAX_IMAGE_SIZE_MB:-10}",
"MAX_TOTAL_SIZE_MB": "${MAX_TOTAL_SIZE_MB:-100}"
}
}
}
}For more details on environment variable expansion, see: https://docs.claude.com/en/docs/claude-code/mcp#environment-variable-expansion-in-mcp-json
Core Settings:
- STORAGE_BACKEND: Database backend -
sqlite(default) orpostgresql - LOG_LEVEL: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) - defaults to ERROR
- DB_PATH: Database file location (SQLite only) - defaults to ~/.mcp/context_storage.db
- MAX_IMAGE_SIZE_MB: Maximum size per image in MB - defaults to 10
- MAX_TOTAL_SIZE_MB: Maximum total request size in MB - defaults to 100
Full-Text Search Settings:
- ENABLE_FTS: Enable full-text search functionality (true/false) - defaults to false
- FTS_LANGUAGE: Language for stemming and text search - defaults to
english. PostgreSQL supports 29 languages with full stemming. SQLite usesenglishfor Porter stemmer or any other value for unicode61 tokenizer (no stemming).
Hybrid Search Settings:
- ENABLE_HYBRID_SEARCH: Enable hybrid search combining FTS and semantic search with RRF fusion (true/false) - defaults to false
- HYBRID_RRF_K: RRF smoothing constant (1-1000) - defaults to 60. Higher values give more uniform treatment across ranks.
Semantic Search Settings:
- ENABLE_SEMANTIC_SEARCH: Enable semantic search functionality (true/false) - defaults to false
- OLLAMA_HOST: Ollama API host URL for embedding generation - defaults to http://localhost:11434
- EMBEDDING_MODEL: Embedding model name for semantic search - defaults to embeddinggemma:latest
- EMBEDDING_DIM: Embedding vector dimensions - defaults to 768. Note: Changing this after initial setup requires database migration (see Semantic Search Guide)
PostgreSQL Settings (only when STORAGE_BACKEND=postgresql):
- POSTGRESQL_HOST: PostgreSQL server host - defaults to localhost
- POSTGRESQL_PORT: PostgreSQL server port - defaults to 5432
- POSTGRESQL_USER: PostgreSQL username - defaults to postgres
- POSTGRESQL_PASSWORD: PostgreSQL password - defaults to postgres
- POSTGRESQL_DATABASE: PostgreSQL database name - defaults to mcp_context
Additional environment variables are available for advanced server tuning, including:
- Connection pool configuration
- Retry behavior settings
- SQLite performance optimization
- Circuit breaker thresholds
- Operation timeouts
For a complete list of all configuration options, see app/settings.py.
For detailed instructions on enabling optional semantic search with Ollama and EmbeddingGemma, see the Semantic Search Guide.
For full-text search with linguistic processing, stemming, ranking, and boolean queries, see the Full-Text Search Guide.
For combined FTS + semantic search using Reciprocal Rank Fusion (RRF), see the Hybrid Search Guide.
For comprehensive metadata filtering including 16 operators, nested JSON paths, and performance optimization, see the Metadata Guide.
The server supports multiple database backends, selectable via the STORAGE_BACKEND environment variable. SQLite (default) provides zero-configuration local storage perfect for single-user deployments. PostgreSQL offers high-performance capabilities with 10x+ write throughput for multi-user and high-traffic deployments.
For detailed configuration instructions including PostgreSQL setup with Docker, Supabase integration, connection methods, and troubleshooting, see the Database Backends Guide.
The MCP Context Server exposes 13 MCP tools for context management:
Core Operations: store_context, search_context, get_context_by_ids, delete_context, update_context, list_threads, get_statistics
Search Tools: semantic_search_context, fts_search_context, hybrid_search_context
Batch Operations: store_context_batch, update_context_batch, delete_context_batch
For complete tool documentation including parameters, return values, filtering options, and examples, see the API Reference.
For production deployments with HTTP transport and container orchestration, Docker Compose configurations are available for SQLite, PostgreSQL, and external PostgreSQL (Supabase). See the Docker Deployment Guide for setup instructions and client connection details.
For Kubernetes deployments, a Helm chart is provided with configurable values for different environments. See the Helm Deployment Guide for installation instructions, or the Kubernetes Deployment Guide for general Kubernetes concepts.
For HTTP transport deployments requiring authentication, see the Authentication Guide for bearer token, Google OAuth, and Azure AD configuration options.