Skip to main content
Glama
di5rupt0r

MCP Codebase RAG Server

by di5rupt0r

MCP Codebase RAG Server

Self-hosted MCP server that adds semantic vector search over your local codebases to any MCP-capable client (GitHub Copilot, Cline, Claude Desktop, etc.).
Goal: Robust RAG for Copilot (or any MCP client) without paying for Cursor/Windsurf.
Zero cost. Zero limits. Full control.


๐Ÿ“‹ Overview

Problem Solved

  • GitHub Copilot Pro has an excellent model but limited codebase RAG

  • Cursor/Windsurf have good RAG but cost $15โ€“20/month

  • Continue.dev has RAG but doesn't integrate natively with MCP-aware agents

Solution

This MCP server provides:

  1. Indexing of local codebases using vector embeddings

  2. Hybrid semantic search via search_codebase tool โ€” combines dense (embeddings) + sparse (BM25) + RRF fusion

  3. Multi-project support with isolated ChromaDB collections

  4. Universal integration with any MCP client

Tech Stack

Component

Technology

Why

Embeddings

sentence-transformers (all-MiniLM-L6-v2)

Fast, lightweight, 384-dim

Code embeddings

microsoft/unixcoder-base (optional)

Code-specific model, activated via EMBEDDING_MODEL

Vector DB

ChromaDB

Simple, persistent, zero config

Code parsing

Tree-sitter + BM25 + RRF

Universal language-agnostic chunking and hybrid search

MCP SDK

modelcontextprotocol/python-sdk

Official standard

Runtime

Python 3.11+

โ€”


Related MCP server: ragi

๐Ÿš€ Installation

Prerequisites

  • Python 3.11+

  • pip or uv

Install

git clone https://github.com/di5rupt0r/codebase-rag.git
cd codebase-rag

# Install as a package (adds the `codebase-rag` command to ~/.local/bin)
pip install -e .

Health Check

python scripts/health_check.py

Expected output:

๐Ÿ” MCP Codebase RAG Server Health Check
==================================================
Checking Embedding Provider... โœ“ OK (3.03s)
Checking ChromaDB Connection... โœ“ OK (0.14s)
Checking Search Functionality... โœ“ OK (2.36s)
Checking Data Directory... โœ“ OK (0.00s)
==================================================
Health Check Summary: 4/4 checks passed
๐ŸŽ‰ All systems operational!

๐Ÿ“– Quick Start

1. Index a Project

# Index the current directory
python scripts/index_project.py . --name my-project

# Index a specific path
python scripts/index_project.py ~/projects/api --name api-backend

# Force full reindex
python scripts/index_project.py . --name my-project --force

# Dry run to preview what will be indexed
python scripts/index_project.py . --name my-project --dry-run

2. Start the MCP Server

stdio (default โ€” for local clients)

codebase-rag

HTTP (for remote clients or always-on service)

MCP_TRANSPORT=streamable-http MCP_PORT=8080 codebase-rag

3. Configure Your MCP Client

VS Code (GitHub Copilot / Cline) โ€” stdio mode

Add to your VS Code mcp.json:

{
  "servers": {
    "codebase-rag": {
      "type": "stdio",
      "command": "codebase-rag"
    }
  }
}

VS Code โ€” HTTP mode (when running as a service)

{
  "servers": {
    "codebase-rag": {
      "type": "http",
      "url": "http://127.0.0.1:8080/mcp"
    }
  }
}

Claude Desktop

{
  "mcpServers": {
    "codebase-rag": {
      "command": "codebase-rag"
    }
  }
}

๏ฟฝ Search Capabilities

Hybrid Search Architecture

The server implements a hybrid search system that combines:

  1. Dense Search (Vector Embeddings)

    • Semantic similarity using sentence-transformers

    • Finds conceptually similar code

    • Base: ChromaDB vector similarity

  2. Sparse Search (BM25)

    • Exact lexical term matching

    • Finds precise identifiers and keywords

    • Base: rank-bm25 with regex tokenization

  3. Reciprocal Rank Fusion (RRF)

    • Intelligent fusion of dense + sparse results

    • k=60 (standard literature value)

    • Improves both precision and recall

Search Results

{
  "results": [
    {
      "path": "src/auth.py",
      "content": "def authenticate_user(user, password): ...",
      "score": 0.0325,
      "type": "function",
      "name": "authenticate_user", 
      "line_start": 15,
      "line_end": 25
    }
  ],
  "total_indexed_chunks": 1247,
  "query_time_ms": 23.4,
  "search_type": "hybrid_rrf"
}

Performance Characteristics

Metric

Target

Description

Tree-sitter parsing

< 50ms/file

Universal language parsing

BM25 indexing

< 10ms/query

In-memory reconstruction

RRF fusion

< 1ms

In-memory score calculation

Total query time

< 100ms

End-to-end hybrid search

Memory overhead

< 50MB

For 5k chunks

Fallback Behavior

  • Tree-sitter unavailable โ†’ Line-based chunking

  • BM25 unavailable โ†’ Dense-only search

  • Both unavailable โ†’ Original dense search with keyword reranking

๏ฟฝ๏ธ MCP Tools

search_codebase

Hybrid semantic search over an indexed project using vector embeddings + BM25 + RRF fusion.

Input:

{
  "query": "where is the authentication logic?",
  "top_k": 5,
  "project": "my-project",
  "file_types": [".py", ".js"]
}

Output:

{
  "results": [
    {
      "path": "src/auth.py",
      "content": "def authenticate_user(user, password):\n    ...",
      "score": 0.89
    }
  ],
  "total_indexed_chunks": 1247,
  "query_time_ms": 23
}

reindex_project

Re-index a project after large changes.

Input:

{
  "project_path": "/path/to/your/project",
  "project_name": "my-project",
  "force": false
}

list_indexed_projects

List all indexed projects.

get_files

List indexed files in a project.

Input: { "project": "my-project" }

get_file_content

Return the full content of an indexed file.

Input: { "path": "src/main.py" }


โš™๏ธ Configuration

Environment Variables

# ChromaDB path (default: ./data/chroma_db relative to install dir)
export CHROMA_DB_PATH="/custom/path/to/chroma"

# Embedding model (default: all-MiniLM-L6-v2)
# Use microsoft/unixcoder-base for better code-specific embeddings (~2GB, requires torch)
export EMBEDDING_MODEL="microsoft/unixcoder-base"

# HTTP transport settings (only needed in HTTP/service mode)
export MCP_TRANSPORT="streamable-http"
export MCP_HOST="127.0.0.1"
export MCP_PORT="8080"
# Set this when exposing via reverse proxy or Tailscale Funnel
export MCP_ALLOWED_HOST="your-hostname.example.com"

# Log level (default: INFO)
export LOG_LEVEL="DEBUG"

Chunking (Advanced)

Edit src/codebase_rag/config.py:

CHUNK_SIZE = 500          # characters per chunk
CHUNK_OVERLAP = 50        # overlap between chunks
DEFAULT_TOP_K = 5         # default results per search

Supported File Types

Python, JavaScript, TypeScript, JSX, TSX, Java, C, C++, Go, Rust, Ruby, PHP, C#, Shell, YAML, JSON.

Ignored Patterns

*.pyc, __pycache__, .git, node_modules, .venv, venv, *.egg-info, .pytest_cache


๐Ÿ“Š Benchmarks

Operation

Expected Time

Notes

Index 20 .py files (~5k LOC)

~5โ€“8s

First run; incremental is much faster

Vector search (top_k=5)

~20โ€“50ms

ChromaDB in-process

Query embedding

~10โ€“20ms

sentence-transformers, CPU

Server cold start

~2โ€“3s

Model loaded into memory


๐Ÿค– Automation Scripts

Auto-discovery

Scan a directory for Git repositories and index them all automatically:

python scripts/auto_index.py ~/projects

Watch Mode

Watch a project for file changes and reindex incrementally (debounced, 5s):

python scripts/watch.py /path/to/project --name my-project

Git Hook (post-commit reindex)

Install a post-commit hook so changed files are reindexed automatically after every commit:

python scripts/setup_git_hook.py /path/to/your/repo my-project

๐Ÿงช Tests

# All tests (116 passing)
pytest -v

# Specific modules
pytest tests/test_config.py -v
pytest tests/test_embeddings.py -v
pytest tests/test_indexer.py -v
pytest tests/test_server.py -v

# With coverage
pytest --cov=codebase_rag --cov-report=html

๐Ÿ”ง Deploy as a systemd Service (Linux)

A template service file is provided at systemd/codebase-rag-server.service.
Replace YOUR_USERNAME with your actual Linux username before installing:

# Substitute your username in-place
sed -i "s/YOUR_USERNAME/$USER/g" systemd/codebase-rag-server.service

# Install and start
sudo cp systemd/codebase-rag-server.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable codebase-rag-server
sudo systemctl start codebase-rag-server

# Check
sudo systemctl status codebase-rag-server
sudo journalctl -u codebase-rag-server -f

Exposing Remotely via Tailscale Funnel (optional)

To use the server from a remote machine (Codespaces, company laptop, etc.):

# Expose port 8080 via Tailscale Funnel
tailscale funnel 8080

# Add to your service file:
# Environment="MCP_ALLOWED_HOST=your-machine.your-tailnet.ts.net"

# Then in your remote mcp.json:
# "url": "https://your-machine.your-tailnet.ts.net/mcp"

๐Ÿ› Troubleshooting

Slow first start: The embedding model (~100MB) is downloaded on first use. Run health_check.py to pre-load it.

High memory usage: The default model uses ~500MB RAM. If needed, use an even smaller model via EMBEDDING_MODEL.

Permission errors: Ensure the running user has write access to data/chroma_db/.

Debug mode:

LOG_LEVEL=DEBUG codebase-rag

๐Ÿ“ Contributing

  1. Fork the project

  2. Create a feature branch: git checkout -b feature/your-feature

  3. Follow strict TDD: RED โ†’ GREEN โ†’ REFACTOR

  4. Atomic, descriptive commits

  5. Open a pull request with tests

# Dev setup
pip install -e ".[dev]"
pytest -v --cov=codebase_rag

๐Ÿ“„ License

MIT License โ€” see LICENSE.


๐Ÿ”— References


Available Tools

5 tools
get_file_contentA

Return the full content of a given file path.

Args:
    path: File path to read
    project: When supplied, validates that the path belongs to this project
             before reading. Raises an error if the path is not indexed.
    
Returns:
    File content as string
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It transparently describes the validation behavior, error condition for non-indexed paths, and return type as a string. It does not address edge cases like binary files or encoding, but this is a simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with Args and Returns sections. Every sentence is informative with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two parameters and an output schema present. The description covers purpose, parameter behavior, and error handling, making it complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for parameters (0% coverage), so the description fully compensates. It explains path as the file to read and project as an optional validation parameter that raises an error if the path is not indexed, adding significant semantic meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the full content of a given file path. This specific verb+resource phrasing distinguishes it from sibling tools like search_codebase or list_indexed_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to use the project parameter but does not explicitly state when to use this tool versus alternatives. Usage is implied by the read operation, but no exclusions or alternative tool mentions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_filesA

List all files that have been indexed for a project.

Args:
    project: Project name to list files for (required). Use
             list_indexed_projects() to discover available project names.

Returns:
    List of file metadata dicts, or an error dict when project is omitted.
ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses return type ('List of file metadata dicts') and error behavior ('error dict when project is omitted'), which is helpful. However, it does not mention side effects, permissions, or pagination, and it incorrectly states project is required when the schema allows null.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args and Returns sections, and each line adds value. The 'required' note is slightly redundant given the schema, but overall it is concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool, the description covers purpose, parameter semantics, return type, and error case. The absence of an output schema is partly mitigated by describing the return as metadata dicts, though it does not detail the dict structure or distinguish from get_file_content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the project parameter meaning and suggests using list_indexed_projects() to discover valid values. Yet it claims the parameter is required, contradicting the schema's default null and non-required status, which undermines the value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'List' and resource 'files that have been indexed for a project', clearly distinguishing it from siblings like get_file_content (content retrieval) and search_codebase (search). The scope is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description points to list_indexed_projects() for discovering project names, providing clear context and a prerequisite. However, it does not explicitly contrast with alternatives or state when to prefer this tool over siblings like search_codebase or get_file_content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_indexed_projectsA

List all projects that have been indexed.

Returns:
    Dictionary with list of indexed projects and their metadata
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must reveal behavioral traits itself. It only states that it returns a dictionary of indexed projects, with no mention of performance, pagination, ordering, permissions, or side effects. This is minimal for a read-only operation, though not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with the main purpose stated first and a brief return-type note second. No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter list operation with an output schema, the description covers the core purpose and return type. However, it lacks usage guidance and behavioral details (e.g., what 'indexed' means, potential performance implications), making it adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so the description does not need to explain parameter semantics. It adds no extra info beyond the schema, but this is acceptable given the zero-parameter design.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (List) and the resource (projects that have been indexed), and the 'indexed' qualifier distinguishes it from sibling tools like search_codebase or get_files. The return type is also mentioned, adding context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives is provided. The name and description imply it is for enumerating indexed projects, but there is no mention of alternative tools or exclusion scenarios, leaving usage context implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reindex_projectA

Re-index a project (useful after major code changes).

Args:
    project_path: Absolute path to the project directory
    project_name: Name to use for the collection
    force: If True, deletes existing index before reindexing

Returns:
    Dictionary with indexing status and statistics
ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
project_nameYes
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries the burden. It discloses that force deletes existing index, but does not explicitly state that reindexing modifies the shared index or any prerequisites/permissions. Some behavioral detail provided, but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise purpose line followed by structured Args/Returns sections. Every sentence adds value with no repetition of schema types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, parameters, return value, and a usage cue. Since no annotations and no sibling differentiation beyond purpose, it could explicitly state side effects ('modifies stored index') but this is implied by the verb. Mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description's Args section explains each parameter beyond the schema: project_path is an absolute path, project_name names the collection, and force deletes existing index before reindexing. Schema itself has no descriptions (0% coverage), so this fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb 'Re-index' with a clear resource 'project', and explicitly notes usefulness after major code changes. This distinguishes it from sibling read/search tools like search_codebase and get_files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States context for use ('useful after major code changes'), which implies when to use it. Does not explicitly mention alternatives or when not to use, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_codebaseA

Search the indexed codebase for relevant code snippets.

Args:
    query: Search query text
    top_k: Number of results to return (default: 5)
    project: Project name to search within (optional)
    file_types: List of file extensions to filter (e.g., [".py", ".js"])

Returns:
    Dictionary with search results, metadata, and timing info
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
projectNo
file_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the return format (dictionary with results, metadata, timing) and that the search operates on an indexed codebase. However, with no annotations, it does not explicitly state read-only behavior, side effects, or any rate limits or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with dedicated Args and Returns sections, each parameter is concisely explained, and the primary purpose is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers query parameters and return structure well, but it omits the dependency on the codebase being indexed (likely via reindex_project). This is a meaningful gap given the sibling tools and the workflow context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides detailed explanations for every parameter, including default values and an example for file_types. Since the input schema has no descriptions (coverage 0%), this fully compensates and adds significant meaning beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches an indexed codebase for code snippets, a specific verb+resource combination. This distinguishes it from sibling tools like reindex_project or get_files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get_files or list_indexed_projects. It does not mention prerequisites such as the need to index the codebase first, nor does it offer exclusions or alternative tool suggestions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedget_file_content
    • First observedget_files
    • First observedlist_indexed_projects
    • First observedreindex_project
    • First observedsearch_codebase

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: search, reindex, list projects, list files, and get file content. There is no meaningful overlap; even the two 'get' tools are unambiguous because one returns metadata for files and the other returns the actual content.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: search_codebase, reindex_project, list_indexed_projects, get_files, get_file_content. The verbs are distinct and descriptive, and the pattern is uniformly applied without mixing styles.

Tool Count5/5

With 5 tools, the server is well-scoped for a codebase RAG system. Each tool addresses a core need (indexing, search, and file retrieval) without unnecessary bloat, fitting comfortably in the ideal range and making the surface easy to navigate.

Completeness4/5

The tool set covers the primary lifecycle: index (reindex), list indexed projects, search, list files, and fetch file content. Minor gaps exist, such as no explicit delete project or incremental update mechanism, but these are not critical for core RAG workflows and can be worked around.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Local MCP server that provides semantic search (RAG) over code repositories, enabling AI clients like Claude and Gemini to access project context without manual re-upload.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Local-first RAG indexing and semantic search MCP server. Enables document retrieval and context-aware queries using local embedding models.
    3
    16
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A local hybrid-search MCP server that enables coding agents to query files and folders using natural language, returning relevant code chunks with exact source paths. Everything runs on-device with no API keys or network calls.
    5
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/di5rupt0r/codebase-rag'

If you have feedback or need assistance with the MCP directory API, please join our Discord server