Semantic Code Search for AI Assistants
Give your AI assistant the power to truly understand your codebase
Features • Quick Start • Capabilities • Limitations • Integrations • Use Cases
CodeGrok MCP is a Model Context Protocol (MCP) server that enables AI assistants to intelligently search and understand codebases using semantic embeddings and Tree-sitter parsing.
Unlike simple text search, CodeGrok understands code structure - it knows what functions, classes, and methods are, and can find relevant code even when you describe it in natural language.
You: "Where is authentication handled?"
CodeGrok: Returns auth middleware, login handlers, JWT validation code...
The Problem: AI assistants have limited context windows. Sending your entire codebase is expensive and often impossible.
The Solution: CodeGrok indexes your code once, then AI can query semantically and receive only the 5-10 most relevant code snippets—10-100x token reduction vs naive "read all files" approaches.
- Semantic Code Search - Find code by meaning, not just keywords
- 9 Languages Supported - Python, JavaScript, TypeScript, C, C++, Go, Java, Kotlin, Bash
- 28 File Extensions - Comprehensive coverage including
.jsx,.tsx,.mjs,.hpp, etc. - Fast Parallel Indexing - 3-5x faster with multi-threaded parsing
- Incremental Updates - Only re-index changed files (auto mode)
- Local & Private - All data stays on your machine in
.codegrok/folder - Zero LLM Dependencies - Lightweight, focused tool (no API keys required)
- GPU Acceleration - Auto-detects CUDA for faster embeddings
- Works with Any MCP Client - Claude, Cursor, Cline, and more
| Capability | Description |
|---|---|
| Semantic Code Search | Natural language queries → vector similarity search against indexed code |
| Find Code by Purpose | Query "How does auth work?" → Returns relevant auth files with line numbers |
| Symbol Extraction | Extracts functions, classes, methods with signatures, docstrings, calls, imports |
| Incremental Updates | learn with auto mode only re-indexes modified files (uses file modification time) |
| Persistent Storage | Index survives restarts in .codegrok/ folder |
| Load Existing Index | learn with mode='load_only' instantly loads previously indexed codebase |
| Capability | Description |
|---|---|
| Entry Point Discovery | Query "main entry point" to find where execution starts |
| Architecture Understanding | Query "database connection" to find DB layer |
| Domain Concepts | Query "user authentication flow" to find auth logic |
| Index Statistics | See files parsed, symbols extracted, timing info |
Important: Understanding limitations helps you use the tool effectively.
| Limitation | Explanation |
|---|---|
| Code Execution | Pure indexing/search - no interpreter, no running tests |
| Code Modification | Read-only search - doesn't write or edit files |
| Real-time File Watching | No daemon mode - manually call learn again to update index |
| Cross-repository Search | Single codebase per index - can't search multiple projects simultaneously |
| Find All Usages | Finds definitions, not references (no "who calls this function?") |
| Type Inference / LSP | No language server - no jump-to-definition, no autocomplete |
| Git History Analysis | Indexes current state only - no commit history or blame |
| Regex/Exact Search | Semantic only - use grep or ripgrep for exact string matching |
| Code Metrics | No complexity scoring, no linting, no coverage data |
| Constraint | Impact |
|---|---|
| First index is slow | ~50 chunks/second (~3-4 min for 10K symbols) |
| Memory usage | Embedding models use 500MB-2GB RAM |
| Model download | First run downloads ~500MB model from HuggingFace |
| Query latency | ~50-100ms per search |
# Clone the repository
git clone https://github.com/rdondeti/CodeGrok_mcp.git
cd CodeGrok_mcp
# Option 1: Use setup script (recommended)
./setup.sh # Linux/macOS
# or
.\setup.ps1 # Windows PowerShell
# Option 2: Manual install
python -m venv .venv
source .venv/bin/activate # Linux/macOS
pip install -e .
# Verify installation
codegrok-mcp --helpSetup script options:
| Flag | Description |
|---|---|
--clean |
Remove existing venv before creating new |
--prod |
Install production dependencies only |
--no-verify |
Skip verification step |
Once integrated with your AI tool (see below), ask your assistant:
"Learn my codebase at /path/to/my/project"
Then search:
"Find how API endpoints are defined"
"Where is error handling implemented?"
"Show me the database models"
How CodeGrok Saves Tokens:
Without CodeGrok:
AI tries to read entire codebase → exceeds context window → fails or costs $$
With CodeGrok:
AI: "I need to add a new route"
↓ calls get_sources("Express route definition")
CodeGrok: Returns routes/api.js:15, routes/auth.js:8
↓ AI reads only those 2 files
Result: 10-100x fewer tokens, faster responses
Step 1: "Learn my codebase at ~/projects/big-app"
Step 2: "Where is the main entry point?"
Step 3: "How is authentication implemented?"
Step 4: "Find the database connection logic"
Step 5: "Show me how API errors are handled"
"Find all functions that handle user input"
"Where is validation performed?"
"Show me error handling patterns"
The easiest way to add CodeGrok to Claude Code:
# Add the MCP server
claude mcp add codegrok-mcp -- codegrok-mcpOr manually add to your settings (~/.claude/settings.json):
{
"mcpServers": {
"codegrok": {
"command": "codegrok-mcp"
}
}
}Usage in Claude Code:
> learn my codebase at ./my-project
> find authentication logic
> where is the main entry point?
Add to your Claude Desktop configuration:
| Platform | Config File Location |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"codegrok": {
"command": "codegrok-mcp",
"args": []
}
}
}Restart Claude Desktop after saving.
Cursor supports MCP servers through its extension system:
- Open Settings → Extensions → MCP
- Add Server Configuration:
{
"codegrok": {
"command": "codegrok-mcp",
"transport": "stdio"
}
}Or add to .cursor/mcp.json in your project:
{
"servers": {
"codegrok": {
"command": "codegrok-mcp"
}
}
}Windsurf supports MCP through Cascade:
- Open Cascade Settings
- Navigate to MCP Servers
- Add configuration:
{
"codegrok": {
"command": "codegrok-mcp",
"transport": "stdio"
}
}Add to Cline's MCP settings in VS Code:
- Open Command Palette (
Ctrl+Shift+P/Cmd+Shift+P) - Search "Cline: Open MCP Settings"
- Add:
{
"mcpServers": {
"codegrok": {
"command": "codegrok-mcp"
}
}
}Zed supports MCP through its assistant panel. Add to settings:
{
"assistant": {
"mcp_servers": {
"codegrok": {
"command": "codegrok-mcp"
}
}
}
}Add to your Continue configuration (~/.continue/config.json):
{
"mcpServers": [
{
"name": "codegrok",
"command": "codegrok-mcp"
}
]
}For any MCP-compatible client, use stdio transport:
# Command to run
codegrok-mcp
# Transport
stdio (stdin/stdout)
# Protocol
Model Context Protocol (MCP)CodeGrok provides 4 tools for AI assistants:
| Tool | Description | Key Parameters |
|---|---|---|
learn |
Index a codebase (smart modes) | path (required), mode (auto/full/load_only), file_extensions, embedding_model |
get_sources |
Semantic code search | question (required), n_results (1-50, default: 10), language, symbol_type |
get_stats |
Get index statistics | None |
list_supported_languages |
List supported languages | None |
Learn modes:
auto(default): Smart detection - incremental reindex if exists, full index if newfull: Force complete re-index (destroys existing index)load_only: Just load existing index without any indexing
{
"tool": "learn",
"arguments": {
"path": "/home/user/my-project",
"mode": "auto"
}
}Response:
{
"success": true,
"message": "Indexed 150 files with 1,247 symbols",
"stats": {
"total_files": 150,
"total_symbols": 1247,
"total_chunks": 2834,
"indexing_time": 12.5
}
}{
"tool": "get_sources",
"arguments": {
"question": "How is user authentication implemented?",
"n_results": 5
}
}Response:
{
"sources": [
{
"file": "src/auth/middleware.py",
"symbol": "authenticate_request",
"type": "function",
"line": 45,
"content": "def authenticate_request(request):\n ...",
"score": 0.89
}
]
}{
"tool": "learn",
"arguments": {
"path": "/home/user/my-project",
"mode": "auto"
}
}Response (when index exists):
{
"success": true,
"mode_used": "incremental",
"files_added": 2,
"files_modified": 5,
"files_deleted": 1
}| Language | Extensions | Parser |
|---|---|---|
| Python | .py, .pyi, .pyw |
tree-sitter-python |
| JavaScript | .js, .jsx, .mjs, .cjs |
tree-sitter-javascript |
| TypeScript | .ts, .tsx, .mts, .cts |
tree-sitter-typescript |
| C | .c, .h |
tree-sitter-c |
| C++ | .cpp, .cc, .cxx, .hpp, .hh, .hxx |
tree-sitter-cpp |
| Go | .go |
tree-sitter-go |
| Java | .java |
tree-sitter-java |
| Kotlin | .kt, .kts |
tree-sitter-kotlin |
| Bash | .sh, .bash, .zsh |
tree-sitter-bash |
Total: 9 languages, 28 file extensions
┌─────────────────────────────────────────────────────────────┐
│ MCP Client │
│ (Claude, Cursor, Cline, etc.) │
└─────────────────────────┬───────────────────────────────────┘
│ MCP Protocol (stdio)
▼
┌─────────────────────────────────────────────────────────────┐
│ CodeGrok MCP Server │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Parsers │ │ Embeddings │ │ Vector Storage │ │
│ │ (Tree-sitter)│ │ (Sentence │ │ (ChromaDB) │ │
│ │ │ │ Transformers)│ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Source Files → Tree-sitter Parser → Symbol Extraction →
Code Chunks → Embeddings → ChromaDB Storage
- Parse: Tree-sitter extracts functions, classes, methods with signatures
- Chunk: Code is split into semantic chunks with context (docstrings, imports, calls)
- Embed: Sentence-transformers create vector embeddings
- Store: ChromaDB persists vectors locally in
.codegrok/
Query → Embedding → Vector Similarity → Ranked Results
- Embed Query: Convert natural language to vector
- Search: Find similar vectors in ChromaDB
- Return: Top-k results with file paths, line numbers, and code snippets
All data is stored locally in your project:
your-project/
└── .codegrok/
├── chroma/ # Vector database
└── metadata.json # Index metadata (stats, file mtimes)
| Variable | Description | Default |
|---|---|---|
CODEGROK_EMBEDDING_MODEL |
Embedding model to use | nomic-embed-code |
CODEGROK_DEVICE |
Compute device (cpu/cuda/mps) | Auto-detect |
| Model | Size | Best For |
|---|---|---|
coderankembed |
768d / 137M | Code (default, recommended) - uses nomic-ai/CodeRankEmbed |
The default model (nomic-ai/CodeRankEmbed) is optimized for code retrieval with:
- 768-dimensional embeddings
- 8192 max sequence length
- State-of-the-art performance on CodeSearchNet benchmarks
The default embedding model (nomic-ai/CodeRankEmbed) requires trust_remote_code=True when loading via SentenceTransformers. This flag allows execution of custom Python code bundled with the model.
Why it's required:
- The model uses a custom Nomic BERT architecture that isn't part of the standard HuggingFace model library
- Custom files:
modeling_hf_nomic_bert.py(model architecture),configuration_hf_nomic_bert.py(config)
Security audit: The custom code has been reviewed and contains:
- Standard PyTorch neural network definitions
- No
exec(),eval(), or dynamic code execution - No subprocess or shell commands
- No network requests beyond HuggingFace's standard model download APIs
- Only imports from trusted libraries (torch, transformers, einops, safetensors)
For maximum security:
- Review the model code yourself: nomic-ai/CodeRankEmbed on HuggingFace
- Pin to a specific model revision in production deployments
- Consider using Microsoft CodeBERT (
microsoft/codebert-base) as an alternative that doesn't requiretrust_remote_code(with potential quality trade-offs)
# Clone
git clone https://github.com/rdondeti/CodeGrok_mcp.git
cd CodeGrok_mcp
# Run setup script
./setup.sh # Linux/macOS (includes dev dependencies)
.\setup.ps1 # Windows PowerShell
# For clean reinstall:
./setup.sh --clean# Run all tests
pytest
# Run with coverage
pytest --cov=src/codegrok_mcp --cov-report=term-missing
# Run specific test categories
pytest tests/unit/ -v # Fast unit tests
pytest tests/integration/ -v # Integration tests (uses real embeddings)
pytest tests/mcp/ -v # MCP protocol simulation tests# Format code
black src/
# Type checking
mypy src/
# Linting
flake8 src/Server won't start
# Check installation
pip show codegrok-mcp
# Check Python version (need 3.10+)
python --version
# Reinstall
pip install -e .Indexing is slow
- Large codebases (>10k files) take longer on first index
- Use
learnagain after first index for incremental updates (auto mode) - Close other heavy applications
- Consider indexing a subdirectory first
Search returns irrelevant results
- Be more specific in queries (e.g., "JWT token validation" instead of "auth")
- Re-index if codebase changed significantly
- Check that the code type you're searching exists
Out of memory
- Index smaller portions of the codebase
- The default
coderankembedmodel uses ~500MB-2GB RAM - Close other applications
"No index loaded" error
Use learn tool first:
"Learn my codebase at /path/to/project"
| Feature | CodeGrok MCP | grep/ripgrep | GitHub Search | Sourcegraph |
|---|---|---|---|---|
| Semantic Search | ✅ | ❌ | Partial | ✅ |
| Local/Private | ✅ | ✅ | ❌ | ❌ |
| MCP Support | ✅ | ❌ | ❌ | ❌ |
| No API Keys | ✅ | ✅ | ❌ | ❌ |
| Multi-language | ✅ | ✅ | ✅ | ✅ |
| Code Structure Aware | ✅ | ❌ | Partial | ✅ |
| Offline | ✅ | ✅ | ❌ | ❌ |
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Make your changes
- Run tests (
pytest) - Format code (
black src/) - Submit a Pull Request
- Follow Black formatting (line length 100)
- Add type hints to all functions
- Write tests for new features
- Update documentation
MIT License - see LICENSE for details.
- Model Context Protocol - The protocol that powers this integration
- Tree-sitter - Fast, accurate code parsing
- ChromaDB - Vector database for embeddings
- Sentence Transformers - State-of-the-art embeddings
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with ❤️ for developers who want AI that truly understands their code