Embgrep

Official registry Search and web

Local semantic search — embedding-powered grep for files, zero external services.

What can you do with Embgrep?

  • Local embeddings — Uses fastembed (ONNX Runtime), no API keys needed
  • SQLite storage — Single-file index, no external vector DB
  • Incremental indexing — Only re-indexes changed files (SHA-256 hash comparison)
  • Smart chunking — Function-level splitting for code, heading-level for docs
  • MCP native — 4-tool FastMCP server for LLM agent integration
  • 15+ file types — .py, .js, .ts, .java, .go, .rs, .md, .txt, .yaml, .json, .toml, and more

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

PYPI package embgrep
Claude Code
claude mcp add embgrep -- uvx embgrep==0.1.0
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "embgrep": {
            "command": "uvx",
            "args": [
                "embgrep==0.1.0"
            ]
        }
    }
}

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. embgrep
  2. Features
  3. Install
  4. Quick Start
  5. MCP Server
  6. How It Works
  7. Configuration
  8. QuartzUnit Ecosystem
  9. Used in
  10. License

embgrep

한국어 문서 · llms.txt

Local semantic search — embedding-powered grep for files, zero external services.

Search your codebase and documentation by meaning, not just keywords. embgrep indexes files into local embeddings and lets you run semantic queries — no API keys, no cloud services, no vector database servers.

Features

  • Local embeddings — Uses fastembed (ONNX Runtime), no API keys needed
  • SQLite storage — Single-file index, no external vector DB
  • Incremental indexing — Only re-indexes changed files (SHA-256 hash comparison)
  • Smart chunking — Function-level splitting for code, heading-level for docs
  • MCP native — 4-tool FastMCP server for LLM agent integration
  • 15+ file types — .py, .js, .ts, .java, .go, .rs, .md, .txt, .yaml, .json, .toml, and more

Install

pip install embgrep              # core (fastembed + numpy)
pip install embgrep[cli]         # + click/rich CLI
pip install embgrep[mcp]         # + FastMCP server
pip install embgrep[all]         # everything

Quick Start

Python API
from embgrep import EmbGrep

eg = EmbGrep()

# Index a directory
eg.index("./my-project", patterns=["*.py", "*.md"])

# Semantic search
results = eg.search("database connection pooling", top_k=5)
for r in results:
    print(f"{r.file_path}:{r.line_start}-{r.line_end} (score: {r.score:.4f})")
    print(f"  {r.chunk_text[:80]}...")

# Incremental update (only changed files)
eg.update()

# Index statistics
status = eg.status()
print(f"{status.total_files} files, {status.total_chunks} chunks, {status.index_size_mb} MB")

eg.close()
CLI
# Index a project
embgrep index ./my-project --patterns "*.py,*.md"

# Search
embgrep search "error handling patterns"

# Filter by file type
embgrep search "async database query" --path-filter "%.py"

# Check status
embgrep status

# Update changed files
embgrep update
Convenience functions
import embgrep

embgrep.index("./src")
results = embgrep.search("authentication middleware")
status = embgrep.status()
embgrep.update()

MCP Server

Add to your Claude Desktop / MCP client configuration:

{
  "mcpServers": {
    "embgrep": {
      "command": "embgrep-mcp"
    }
  }
}

Or with uvx:

{
  "mcpServers": {
    "embgrep": {
      "command": "uvx",
      "args": ["--from", "embgrep[mcp]", "embgrep-mcp"]
    }
  }
}
MCP Tools
ToolDescription
index_directoryIndex files in a directory for semantic search
semantic_searchSearch indexed files using natural language
index_statusGet current index statistics
update_indexIncremental update — re-index changed files only

How It Works

flowchart TD
    A["📁 Files"] --> B["Smart Chunking\ncode: function-level\ndocs: heading-level"]
    B --> C["fastembed\nlocal embeddings"]
    C --> D["SQLite\nvector index"]
    D --> E["🔍 Query"]
    E --> F["Cosine Similarity\nranked results"]
    F --> G["✅ Matches\nwith context"]
  1. Chunking — Files are split into semantically meaningful chunks:
    • Code files (.py, .js, .ts, etc.): split by function/class boundaries
    • Documents (.md, .txt): split by headings or paragraph breaks
    • Config files: fixed-size chunking
  2. Embedding — Each chunk is converted to a 384-dimensional vector using BGE-small-en-v1.5 via ONNX Runtime (no PyTorch needed)
  3. Storage — Embeddings are stored as BLOBs in a local SQLite database
  4. Search — Query text is embedded and compared against all chunks using cosine similarity

Configuration

ParameterDefaultDescription
db_path~/.local/share/embgrep/embgrep.dbSQLite database location
modelBAAI/bge-small-en-v1.5fastembed model name
max_chunk_size1000 charsMaximum chunk size for fixed-size splitting
top_k5Number of search results

QuartzUnit Ecosystem

PackageDescription
markgrabHTML/YouTube/PDF/DOCX to LLM-ready markdown
snapgrabURL to screenshot + metadata
docpickOCR + LLM document structure extraction
browsegrabLocal LLM browser agent
feedkitRSS feed collection + MCP
embgrepLocal semantic search for files

Used in

  • newswatch — RSS news monitoring pipeline (feedkit → markgrab → embgrep → diffgrab)

License

MIT


Part of the QuartzUnit ecosystem — composable Python libraries for data collection, extraction, search, and AI agent safety.

Frequently asked questions

What is Embgrep?

Local semantic search — embedding-powered grep for files, zero external services.

How do I install Embgrep?

It runs on your machine. In Claude Code: claude mcp add embgrep -- uvx embgrep==0.1.0. For other clients, paste the JSON configuration from this page into their MCP settings.

Does Embgrep need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is Embgrep open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains Embgrep?

It is published by QuartzUnit. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.