code-context-mcp
by Bek85
README.md
# Code Context MCP
A **multi-provider embedding MCP server** with local Milvus for semantic code search. Works with Claude Code, Cursor, Windsurf, and other MCP-compatible IDEs.
## Features
- **Multi-provider embeddings**: Local Qwen (free), OpenAI, or DeepSeek
- **Dimension mismatch detection**: Warns before indexing if dimensions don't match
- **Zero cloud dependency**: Use local Qwen for completely offline operation
- **Dual deployment**: Docker or local with pnpm
## Architecture
```
┌─────────────────┐ ┌────────────────────┐ ┌─────────────────┐
│ Your Codebase │────▶│ Embedding Provider │────▶│ Local Milvus │
│ │ │ (Qwen/OpenAI/etc) │ │ (Vector Store) │
└─────────────────┘ └────────────────────┘ └─────────────────┘
│ │
│ ┌────────────────────────────┐ │
└────────▶│ code-context-mcp │◀─────────┘
│ (MCP Server) │
└────────────────────────────┘
│
┌─────────────┴─────────────┐
▼ ▼ ▼
Claude Code Cursor Windsurf
```
## Quick Start
### Option A: Docker (Recommended)
```bash
# 1. Configure
cp .env.example .env
# Edit .env with your settings
# 2. Start all services
docker-compose up -d
# 3. Verify (~60 seconds to initialize)
curl http://localhost:9091/healthz # Milvus
curl http://localhost:3100/health # MCP Server
```
**IDE Configuration (Docker):**
```json
{
"mcpServers": {
"code-context": {
"url": "http://localhost:3100/sse"
}
}
}
```
### Option B: Local Development
```bash
# 1. Start only Milvus in Docker
docker-compose up -d milvus
# 2. Install and build
pnpm install
pnpm build
# 3. Configure IDE (see below)
```
**IDE Configuration (Local):**
```json
{
"mcpServers": {
"code-context": {
"command": "node",
"args": ["/path/to/code-context-mcp/dist/index.js"],
"env": {
"EMBEDDING_PROVIDER": "qwen-local",
"QWEN_LOCAL_BASE_URL": "http://172.18.35.123:8001/v1",
"QWEN_LOCAL_MODEL": "Qwen3-Embedding-4B",
"MILVUS_ADDRESS": "127.0.0.1:19530"
}
}
}
}
```
## MCP Tools
| Tool | Description |
|------|-------------|
| `index_codebase` | Index a directory into Milvus |
| `search_code` | Semantic search across indexed code |
| `check_dimensions` | Check provider/collection dimension compatibility |
| `drop_collection` | Delete a collection (for re-indexing) |
| `get_provider_info` | Show current provider configuration |
**Usage:**
```
index_codebase /path/to/your/project
search_code "authentication logic"
check_dimensions
```
## Embedding Providers
| Provider | Model | Dimensions | Cost |
|----------|-------|------------|------|
| `qwen-local` | Qwen3-Embedding-4B | 2560 | Free |
| `openai` | text-embedding-3-small | 1536 | $0.02/1M tokens |
| `openai` | text-embedding-3-large | 3072 | $0.13/1M tokens |
| `deepseek` | deepseek-embedding-v2 | 768 | Paid |
## Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| `EMBEDDING_PROVIDER` | `openai`, `qwen-local`, `deepseek` | `openai` |
| `MILVUS_ADDRESS` | Milvus server address | `127.0.0.1:19530` |
| `DIMENSION_CHECK_ENABLED` | Check dimensions before indexing | `true` |
| `MCP_TRANSPORT` | `stdio` or `http` | `stdio` |
| `MCP_PORT` | HTTP port (http mode) | `3100` |
**Provider-specific:**
| Provider | Variables |
|----------|-----------|
| Local Qwen | `QWEN_LOCAL_BASE_URL`, `QWEN_LOCAL_MODEL` |
| OpenAI | `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_EMBEDDING_MODEL` |
| DeepSeek | `DEEPSEEK_API_KEY`, `DEEPSEEK_BASE_URL`, `DEEPSEEK_EMBEDDING_MODEL` |
## Dimension Mismatch Handling
Different providers produce different dimensions. Switching providers requires re-indexing:
```
drop_collection code_context confirm=true
index_codebase /path/to/project
```
## Docker Commands
```bash
docker-compose up -d # Start all
docker-compose up -d milvus # Start only Milvus
docker-compose logs -f # View logs
docker-compose down # Stop all
docker-compose down -v # Reset (delete data)
docker-compose build --no-cache # Rebuild
```
## Local Development
```bash
pnpm install # Install dependencies
pnpm build # Build TypeScript
pnpm dev # Run in dev mode
pnpm start # Run production build
```
## Project Structure
```
code-context-mcp/
├── docker-compose.yml # Milvus + MCP server
├── Dockerfile
├── package.json
├── tsconfig.json
├── .env.example
└── src/
├── index.ts # Entry point (stdio + HTTP)
├── config.ts # Configuration
├── providers/ # Embedding providers
│ ├── base.ts
│ ├── openai.ts
│ ├── qwen-local.ts
│ └── deepseek.ts
├── milvus/ # Milvus integration
│ ├── client.ts
│ └── dimension-checker.ts
└── tools/ # MCP tools
├── index-codebase.ts
├── search-code.ts
└── check-dimensions.ts
```
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues