Semantic code search MCP server with AST chunking, symbol graph, and Qdrant + Ollama
10K+
Semantic code search for AI coding assistants. This is the core MCP server for the Paparats project. It enables Claude Code, Cursor, Windsurf, Codex, and other MCP-compatible tools to search your codebase by meaning, not keywords. Everything runs locally - your code never leaves your machine.
calls/called_by, references/referenced_by. Powers the find_usages tool/mcp) for developers and support (/support/mcp) for bots and support teams, each with its own tool set and system instructionsPAPARATS_METRICS=true for operational visibility/mcp)| Tool | Description |
|---|---|
search_code | Semantic search with confidence scores and symbol info |
get_chunk | Retrieve a chunk by ID with optional surrounding context |
find_usages | Symbol relationships: callers, dependencies, or both directions |
health_check | Indexing status per group |
reindex | Trigger full reindex |
/support/mcp)All coding tools plus:
| Tool | Description |
|---|---|
get_chunk_meta | Git history and ticket references for a chunk |
search_changes | Semantic search filtered by last commit date |
explain_feature | Feature analysis: code locations + changes + modules |
recent_changes | Timeline of changes with commits and tickets |
impact_analysis | Dependency subgraph: blast radius + service graph |
# Install CLI
npm install -g @paparats/cli
# One-time setup (starts Docker containers, downloads ~1.6 GB model)
paparats install
# In your project
cd your-project
paparats init # creates .paparats.yml
paparats index # index the codebase
paparats watch # keep index fresh
docker pull ibaz/paparats-server:latest
# docker-compose.yml
services:
paparats:
image: ibaz/paparats-server:latest
ports:
- "9876:9876"
environment:
QDRANT_URL: http://qdrant:6333
OLLAMA_URL: http://host.docker.internal:11434
volumes:
- paparats_data:/data
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
volumes:
- qdrant_data:/qdrant/storage
volumes:
paparats_data:
qdrant_data:
Use
paparats installfor automated setup with all options (local/Docker Ollama, developer/server/support modes).
Port 9876 (configurable via PORT env var).
| Variable | Default | Description |
|---|---|---|
PORT | 9876 | HTTP server port |
QDRANT_URL | http://localhost:6333 | Qdrant vector database URL |
OLLAMA_URL | http://host.docker.internal:11434 | Ollama embedding service URL |
PAPARATS_METRICS | false | Enable Prometheus metrics at /metrics |
QUERY_CACHE_MAX_ENTRIES | 1000 | Max cached search queries |
QUERY_CACHE_TTL_MS | 300000 | Cache TTL in milliseconds |
| Path | Description |
|---|---|
/data | Embedding cache (SQLite) and metadata store |
| Path | Description |
|---|---|
/mcp | MCP coding endpoint (Streamable HTTP) |
/sse | MCP coding endpoint (SSE) |
/support/mcp | MCP support endpoint (Streamable HTTP) |
/support/sse | MCP support endpoint (SSE) |
/api/* | HTTP API (index, search, stats, health) |
/health | Health check |
/metrics | Prometheus metrics (when enabled) |
{
"mcpServers": {
"paparats": {
"type": "http",
"url": "http://localhost:9876/mcp"
}
}
}
claude mcp add --transport http paparats http://localhost:9876/mcp
AI Assistant (Cursor/Claude) -> MCP Client -> [This Container] -> Qdrant
|
Host: Ollama (embeddings)
The server receives MCP tool calls from AI assistants, performs semantic search against Qdrant, and returns only the relevant code chunks with symbol information, confidence scores, and metadata.
| Image | Description |
|---|---|
ibaz/paparats-indexer | Automated repo indexer - clones and indexes on a schedule |
ibaz/paparats-ollama | Ollama with pre-baked Jina Code Embeddings model |
Part of the Paparats MCP project - local, private semantic code search for AI coding assistants.
Content type
Image
Digest
sha256:2f379fbb7…
Size
84 MB
Last updated
17 days ago
docker pull ibaz/paparats-server