semantic-code-index-mcp
MCP server for Claude Code: semantic code search with SQLite + local embeddings (free, no API key needed).
Instead of reading your entire codebase, Claude searches semantically — finding relevant code by meaning, not just keywords. Saves 80-90% tokens per query.
Quick Install (npx)
cd /path/to/your/project
npx semantic-code-index-mcp install
This automatically:
- Creates
.claude/mcp.jsonand.mcp.json(merged with existing config) - Adds
.claude/rules/semantic-search.mdso Claude prefers semantic search - Updates
.gitignore
Requires Python 3.11+ and uv (brew install uv or pip install uv).
Uninstall
npx semantic-code-index-mcp uninstall
Cleanly removes all config. If you have other MCP servers configured, they are preserved.
Install from source (dev)
git clone https://github.com/thinhdo/semantic-code-index-mcp
cd semantic-code-index-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
# Install into a project using local binary
semantic-code-index-mcp install /path/to/your/project
# Or via npx with --local flag
npx semantic-code-index-mcp install /path/to/project --local .venv/bin/semantic-code-index-mcp
Usage
Once installed, open Claude Code in your project. First time, ask Claude:
Index this project
After that, Claude will automatically use semantic_search for code exploration. The index auto-syncs when files change — no manual steps needed.
Tools
| Tool | Description |
|---|---|
index_project |
Full re-index of the codebase |
sync_index |
Incremental sync (new/changed/deleted files only) |
semantic_search |
Hybrid search: semantic vectors + keyword BM25. Auto-syncs before searching |
list_indexed_files |
List all indexed files with token count and chunk count |
get_file_chunks |
Get full content of a file's indexed chunks |
token_usage_stats |
Compare: tokens if reading full repo vs tokens used by searches |
search_log |
View recent search history with token usage and savings |
How it works
- Chunking — source files are split into overlapping chunks (~100 lines, 15-line overlap)
- Embedding — each chunk is vectorized locally using
fastembed(BAAI/bge-small-en-v1.5, ONNX) - Storage — vectors + metadata stored in SQLite (at
~/.cache/semantic-code-index/<hash>/) - Search — hybrid retrieval: cosine similarity + FTS5 BM25, fused with Reciprocal Rank Fusion
- Auto-sync — on each search, changed files are detected and re-indexed automatically
Token savings
Each search returns only relevant snippets instead of the full repo. Example on a ~10k token repo:
| Query | Result tokens | Full repo | Saved |
|---|---|---|---|
| "how does embedding work" | 1,569 | 9,577 | 83% |
| "install setup" | 925 | 9,577 | 90% |
| "chunking strategy" | 1,331 | 9,577 | 86% |
On larger repos (100k+ tokens), savings are even more significant.
Environment variables
SEMANTIC_CODE_ROOTorWORKSPACE_ROOT: root directory of the project to index (default: MCP server's working directory)
Notes
- Token counting uses
tiktokenencodingcl100k_base(approximate for Claude/GPT-4), not actual billing - First run downloads the ONNX embedding model (~30MB)
- Vector search scans all chunks in SQLite; very large repos may need scaling (sqlite-vec / ANN)
Metadata
Release files for semantic-code-index-mcp 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| semantic_code_index_mcp-0.3.2.tar.gz | 17.0 kB | Without provenance | Details for semantic_code_index_mcp-0.3.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| semantic_code_index_mcp-0.3.2-py3-none-any.whl | Python 3 | none | any | Details for semantic_code_index_mcp-0.3.2-py3-none-any.whl |
Total release size: 33.2 kB
Release files / semantic_code_index_mcp-0.3.2.tar.gz
| Download URL | semantic_code_index_mcp-0.3.2.tar.gz |
|---|---|
| Size | 17.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5b4253b9e298f039928052ea4a2aae5ba7ae531dda16d009997a8c2a94fa111e
|
|
BLAKE2b-256 checksum How to use checksums |
9f87721cf31f3e3cf67c74ae3226a6766851d779509aec9c95ba98b088620643
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / semantic_code_index_mcp-0.3.2-py3-none-any.whl
| Download URL | semantic_code_index_mcp-0.3.2-py3-none-any.whl |
|---|---|
| Size | 16.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
77be4360b4afbb100fe7eb61635e8b267dc3057eea774f53e723b0af911aca24
|
|
BLAKE2b-256 checksum How to use checksums |
ddd9492514c441fddb8be686a29156656b922aba00e5b64c5a3f437ce6cd667f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for semantic-code-index-mcp 0.3.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.