ChromaDB Remote MCP Server

A Streamable HTTP MCP (Model Context Protocol) server that provides remote access to ChromaDB for AI assistants like Claude. Enables semantic search and vector database operations from mobile devices and remote locations.
Note: This project uses MCP Streamable HTTP (2025-03-26 spec). SSE transport is deprecated.
νκ΅μ΄ λ¬Έμ
Cross-Platform AI Memory Server
Compatible with ALL major AI platforms:
- Claude (Desktop, Mobile, Code)
- Gemini (CLI, Code Assist)
- Cursor, Cline, Windsurf, VS Code Copilot
- and use Remote MCP with any other MCP-compatible client
Features
Remote MCP server that enables all Claude clients (Desktop, Code, Mobile) to access the same self-hosted ChromaDB instance.
- Shared Memory Across Devices - All Claude clients use the same ChromaDB instance
- Self-Hosted & Private - Your data stays on your infrastructure
- Remote Access - Connect from anywhere via Tailscale or public internet
- Complete ChromaDB Support - All CRUD operations via MCP tools
- REST API Proxy - Direct ChromaDB access for Python/JavaScript
- Unified Authentication - Single token protects both MCP and REST API endpoints
- Easy Deployment - One-command installation with Docker
Architecture
Overview
ββββββββββββββββββββββββββββββββ ββββββββββββββββ
β Claude Desktop + Mobile β β Claude Code β
β (Custom Connector - synced) β β (CLI setup) β
ββββββββββββββββ¬ββββββββββββββββ ββββββββ¬ββββββββ
β β
β MCP Remote Connector β
βββββββββββββββ¬ββββββββββββββββ
β HTTPS
βββββββββββΌβββββββββββ
β Remote MCP β
β Server (Node.js) β
β β
β β’ Auth Gateway β
β β’ MCP Protocol β
β β’ REST API Proxy β
βββββββββββ¬βββββββββββ
β
βββββββββββΌβββββββββββ
β ChromaDB β
β (Vector Database) β
β β
β β’ Embeddings β
β β’ Collections β
β β’ Semantic Search β
ββββββββββββββββββββββ
How Clients Connect:
- Claude Desktop + Mobile: Set up once using custom connector in Claude Desktop, and it automatically syncs to the mobile app. Both share the same connection automatically.
- Claude Code: Requires separate setup using
claude mcp add CLI command.
All clients access the same self-hosted ChromaDB through this remote MCP server. Vector embeddings and semantic search results persist across all platforms.
API Endpoints
| Path | Purpose | Client | Authentication |
|---|
/mcp | MCP Protocol | Claude Desktop/Code/Mobile | β
|
/api/v2/* | ChromaDB REST API | Python | β
|
/docs | Swagger UI | Browser (API docs) | β
|
/openapi.json | OpenAPI Spec | API tools | β
|
/health | Health check | Monitoring | β |
How It Works
- Claude Desktop/Mobile: Add MCP server via custom connector (syncs automatically between devices)
- Claude Code: Add MCP server using
claude mcp add CLI command
- Remote MCP Server authenticates requests and translates MCP protocol to ChromaDB operations
- ChromaDB stores and retrieves vector embeddings for semantic search
- Python can also access ChromaDB directly via the proxied REST API
Benefits:
- Same vector database across all clients
- Desktop and mobile share connection automatically
- Self-hosted and private
- Persistent memory across app restarts
- Single source of truth for embeddings
Quick Start
One-Command Installation
curl -fsSL https://raw.githubusercontent.com/meloncafe/chromadb-remote-mcp/release/scripts/install.sh | bash
This will:
- Download
docker-compose.yml and .env.example
- Auto-detect Docker Compose command (
docker-compose or docker compose)
- Auto-generate a secure authentication token (optional)
- Configure ChromaDB data storage location (Docker volume, local directory, or custom path)
- Pull Docker images
- Display your authentication token and connection URL
Manual Installation
Option 1: Docker (Recommended - Pre-built Image)
# Download configuration files
mkdir chromadb-remote-mcp && cd chromadb-remote-mcp
curl -O https://raw.githubusercontent.com/meloncafe/chromadb-remote-mcp/release/docker-compose.yml
curl -O https://raw.githubusercontent.com/meloncafe/chromadb-remote-mcp/release/.env.example
# Configure environment
cp .env.example .env
# Edit .env and set:
# - MCP_AUTH_TOKEN (see token generation below)
# - PORT (default: 8080)
# - CHROMA_DATA_PATH (default: chroma-data)
# Start services
docker compose up -d
# or: docker-compose up -d (for older versions)
# Check health
curl http://localhost:8080/health
# View logs
docker compose logs -f
Option 2: Build from Source
# Clone repository
git clone https://github.com/meloncafe/chromadb-remote-mcp.git
cd chromadb-remote-mcp
# Configure environment
cp .env.example .env
# Edit .env with your configuration
# Start with docker-compose (builds image from source)
docker compose -f docker-compose.dev.yml up -d
# or: docker-compose -f docker-compose.dev.yml up -d (for older versions)
Option 3: Local Development
# Clone and install
git clone https://github.com/meloncafe/chromadb-remote-mcp.git
cd chromadb-remote-mcp
yarn install
# Configure environment
cp .env.example .env
# Edit .env file
# Build and run
yarn build
yarn start
Generate Secure Token
For production use, generate a secure token for MCP_AUTH_TOKEN in .env:
# Method 1: Node.js (Recommended)
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
# Method 2: OpenSSL
openssl rand -base64 32 | tr '+/' '-_' | tr -d '='
Copy the generated token and paste it into your .env file:
MCP_AUTH_TOKEN=your-generated-token-here
Server Endpoints
- MCP:
http://localhost:8080/mcp (via Caddy proxy)
- Health:
http://localhost:8080/health
- ChromaDB API:
http://localhost:8080/api/v2/*
- Swagger UI:
http://localhost:8080/docs
Configuration
Environment Variables (.env file)
All configuration is done through the .env file. Copy .env.example to .env and customize:
| Variable | Description | Default | Required |
|---|
PORT | External port (Caddy reverse proxy) | 8080 | No |
CHROMA_DATA_PATH | ChromaDB data storage path (volume name, ./data, or absolute path) | chroma-data | No |
CHROMA_HOST | ChromaDB host (internal) | chromadb | No |
CHROMA_PORT | ChromaDB port (internal) | 8000 | No |
CHROMA_TENANT | ChromaDB tenant | default_tenant | No |
CHROMA_DATABASE | ChromaDB database | default_database | No |
MCP_AUTH_TOKEN | Authentication token for MCP and REST API | - | Yes (for public access) |
CHROMA_AUTH_TOKEN | ChromaDB auth token (if ChromaDB requires auth) | - | No |
RATE_LIMIT_MAX | Max requests per IP per 15 minutes | 100 | No |
ALLOWED_ORIGINS | Comma-separated list of allowed origins (DNS rebinding protection) | - | No |
Authentication
IMPORTANT: For public internet access (Tailscale Funnel, Cloudflare Tunnel, etc.), you must set MCP_AUTH_TOKEN in your .env file.
Generate a secure token:
# Method 1: Node.js (Recommended - from .env.example)
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
# Method 2: OpenSSL
openssl rand -base64 32 | tr '+/' '-_' | tr -d '='
Edit your .env file:
MCP_AUTH_TOKEN=your-generated-token-here
Then restart the services:
docker compose restart
# or: docker-compose restart