MCP server for indexing and querying codebases using CocoIndex
Project description
CocoIndex Code
An MCP (Model Context Protocol) server for indexing and querying codebases using CocoIndex.
Features
- Semantic Code Search: Find relevant code using natural language queries
- Incremental Indexing: Only re-indexes changed files for fast updates
- Multi-Language Support: Python, JavaScript/TypeScript, Rust, Go, Java, C/C++, C#, SQL, Shell
- Flexible Embeddings: Local SentenceTransformers (default) or 100+ cloud providers via LiteLLM
- SQLite Storage: Portable, no external database required
Prerequisites
Install uv (which provides uvx):
curl -LsSf https://astral.sh/uv/install.sh | sh
Usage with Claude Code
No installation needed — uvx runs it directly.
Default (Local Embeddings)
Uses a local SentenceTransformers model (sentence-transformers/all-MiniLM-L6-v2). No API key required:
claude mcp add cocoindex-code \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
With a Cloud or Custom Embedding Model
Set COCOINDEX_CODE_EMBEDDING_MODEL to any LiteLLM-supported model, along with the provider's API key:
Ollama (Local)
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=ollama/nomic-embed-text \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Set OLLAMA_API_BASE if your Ollama server is not at http://localhost:11434.
OpenAI
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=text-embedding-3-small \
-e OPENAI_API_KEY=your-api-key \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Azure OpenAI
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=azure/your-deployment-name \
-e AZURE_API_KEY=your-api-key \
-e AZURE_API_BASE=https://your-resource.openai.azure.com \
-e AZURE_API_VERSION=2024-06-01 \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Gemini
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=gemini/text-embedding-004 \
-e GEMINI_API_KEY=your-api-key \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Mistral
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=mistral/mistral-embed \
-e MISTRAL_API_KEY=your-api-key \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Voyage (Code-Optimized)
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=voyage/voyage-code-3 \
-e VOYAGE_API_KEY=your-api-key \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Cohere
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=cohere/embed-english-v3.0 \
-e COHERE_API_KEY=your-api-key \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
AWS Bedrock
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=bedrock/amazon.titan-embed-text-v2:0 \
-e AWS_ACCESS_KEY_ID=your-access-key \
-e AWS_SECRET_ACCESS_KEY=your-secret-key \
-e AWS_REGION_NAME=us-east-1 \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Nebius
claude mcp add cocoindex-code \
-e COCOINDEX_CODE_EMBEDDING_MODEL=nebius/BAAI/bge-en-icl \
-e NEBIUS_API_KEY=your-api-key \
-- uvx --prerelease=explicit --with "cocoindex>=1.0.0a13" cocoindex-code@latest
Any model supported by LiteLLM works — see the full list of embedding providers.
Setup .gitignore
Add the index directory to your .gitignore so it isn't committed:
echo .cocoindex_code >> .gitignore
Uninstall
Remove the MCP server and delete the local index:
claude mcp remove cocoindex-code
rm -rf .cocoindex_code
Configuration
| Variable | Description | Default |
|---|---|---|
COCOINDEX_CODE_ROOT_PATH |
Root path of the codebase | Auto-discovered (see below) |
COCOINDEX_CODE_EMBEDDING_MODEL |
Embedding model (see below) | sbert/sentence-transformers/all-MiniLM-L6-v2 |
Embedding Model
The COCOINDEX_CODE_EMBEDDING_MODEL variable uses a prefix to select the embedding backend:
sbert/prefix — uses SentenceTransformers (runs locally, no API key needed). Example:sbert/sentence-transformers/all-MiniLM-L6-v2- Otherwise — uses LiteLLM (supports 100+ providers). Example:
text-embedding-3-small
Root Path Discovery
If COCOINDEX_CODE_ROOT_PATH is not set, the codebase root is discovered by:
- Finding the nearest parent directory containing
.cocoindex_code/ - Finding the nearest parent directory containing
.git/ - Falling back to the current working directory
MCP Tools
search
Search the codebase using semantic similarity.
search(
query: str, # Natural language query or code snippet
limit: int = 10, # Maximum results (1-100)
offset: int = 0, # Pagination offset
refresh_index: bool = True # Refresh index before querying
)
The refresh_index parameter controls whether the index is refreshed before searching:
True(default): Refreshes the index to include any recent changesFalse: Skip refresh for faster consecutive queries
Returns matching code chunks with:
- File path
- Language
- Code content
- Line numbers (start/end)
- Similarity score
Index Storage
The index is stored in .cocoindex_code/ under your codebase root:
your-project/
├── .cocoindex_code/
│ ├── target_sqlite.db # Vector index (SQLite + sqlite-vec)
│ └── cocoindex.db/ # CocoIndex state
├── src/
│ └── ...
Add .cocoindex_code/ to your .gitignore.
Supported File Types
- Python:
.py,.pyi - JavaScript:
.js,.jsx,.mjs,.cjs - TypeScript:
.ts,.tsx - Rust:
.rs - Go:
.go - Java:
.java - C:
.c,.h - C++:
.cpp,.hpp,.cc,.cxx,.hxx,.hh - C#:
.cs - SQL:
.sql - Shell:
.sh,.bash,.zsh - Markdown:
.md,.mdx - Plain Text:
.txt,.rst
Common generated directories are automatically excluded:
__pycache__/node_modules/target/dist/vendor/(Go vendored dependencies, matched by domain-based child paths)
Development
Local Testing with Claude Code
To test locally without installing the package, use the Claude Code CLI:
claude mcp add cocoindex-code \
-- uv run --project /path/to/cocoindex-code cocoindex-code
Or add to .mcp.json in your project root:
{
"mcpServers": {
"cocoindex-code": {
"command": "uv",
"args": ["run", "--project", "/path/to/cocoindex-code", "cocoindex-code"]
}
}
}
Running Tests
# Install dev dependencies
uv sync --group dev
# Run tests
uv run pytest tests/ -v
# Run pre-commit hooks
uv run pre-commit run --all-files
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cocoindex_code-0.1.3.tar.gz.
File metadata
- Download URL: cocoindex_code-0.1.3.tar.gz
- Upload date:
- Size: 13.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
076f16ce85586c5c891123fa5611183b07c7164781fcb7cc0aa60473aa00b972
|
|
| MD5 |
b34adfaae784e1e65d40bd1e910bf635
|
|
| BLAKE2b-256 |
4d11735d67dcded056ba38237ce690673565574a3c90c70ea53ca80c521f4cb5
|
Provenance
The following attestation bundles were made for cocoindex_code-0.1.3.tar.gz:
Publisher:
release.yml on cocoindex-io/cocoindex-code
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cocoindex_code-0.1.3.tar.gz -
Subject digest:
076f16ce85586c5c891123fa5611183b07c7164781fcb7cc0aa60473aa00b972 - Sigstore transparency entry: 956281250
- Sigstore integration time:
-
Permalink:
cocoindex-io/cocoindex-code@a42a843f246ac76727f2d5ffdccabb494735c5b5 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/cocoindex-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a42a843f246ac76727f2d5ffdccabb494735c5b5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file cocoindex_code-0.1.3-py3-none-any.whl.
File metadata
- Download URL: cocoindex_code-0.1.3-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50de9a8c08a644b24eea057fcad6da0ca1f3901c3a6cee62461664fbe6e3b31a
|
|
| MD5 |
c90e0cdbca459b4c55ea118e7ab2263a
|
|
| BLAKE2b-256 |
3e9fdd9193df0917038320cd307c9fef8513178a2f36f0c81128716d6ecc2967
|
Provenance
The following attestation bundles were made for cocoindex_code-0.1.3-py3-none-any.whl:
Publisher:
release.yml on cocoindex-io/cocoindex-code
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cocoindex_code-0.1.3-py3-none-any.whl -
Subject digest:
50de9a8c08a644b24eea057fcad6da0ca1f3901c3a6cee62461664fbe6e3b31a - Sigstore transparency entry: 956281257
- Sigstore integration time:
-
Permalink:
cocoindex-io/cocoindex-code@a42a843f246ac76727f2d5ffdccabb494735c5b5 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/cocoindex-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a42a843f246ac76727f2d5ffdccabb494735c5b5 -
Trigger Event:
release
-
Statement type: