Skip to main content
Glama
demixid

MCP Local Codebase Search

by demixid
README.md
# MCP Local Codebase Search

This project is a simple MCP (Model Context Protocol) server for local Python codebase search.

It provides tools to:
- index Python files into a SQLite database,
- search symbols (functions/classes),
- find files importing specific modules,
- read file contents.

## Features

- `index_project()`
  - Scans the current working directory and indexes `.py` files.
  - Stores symbol and dependency data in `db/code_index.db`.
- `find_symbol(name)`
  - Searches function/class names using `LIKE` matching.
  - Returns symbol name, type, file path, and line number.
- `find_import(module)`
  - Finds files that import a specific module.
- `read_file(path)`
  - Reads and returns full file content with encoding fallback (`utf8`, `latin-1`).

## Project Structure

- `server.py`: MCP server entrypoint and tool definitions.
- `indexer.py`: Indexing logic to SQLite.
- `parser.py`: Symbol extraction (`FunctionDef`, `ClassDef`) using `ast`.
- `dependency.py`: Import extraction using `ast`.
- `search.py`: Search queries against the database.
- `db/`: Index database location (`code_index.db`).

## Prerequisites

- Python 3.10+ (recommended)
- `pip`

## Installation

1. Clone this repository.
2. Go to the project folder.
3. Create a virtual environment.
4. Activate the virtual environment.
5. Install dependencies.

Windows PowerShell example:

```powershell
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
```

## Run Locally

Start the MCP server:

```powershell
python server.py
```

Available tools:
- `index_project`
- `find_symbol`
- `find_import`
- `read_file`

## MCP Configuration

Add this to your MCP client configuration so it runs as an MCP server:

```json
{
  "mcpServers": {
    "code-intelligence": {
      "command": "python",
      "args": [
        "path-to-your-server"
      ]
    }
  }
}
```

## Recommended Usage Flow

1. Run `index_project` once to build the initial index.
2. Use `find_symbol` to locate functions/classes.
3. Use `find_import` to trace module usage.
4. Re-run `index_project` after major code changes.

## Notes

- Non-Python files are not indexed.
- Ignored directories during indexing: `.git`, `node_modules`, `__pycache__`, `dist`, `build`.
- The index database is local and should not be committed (already covered by `.gitignore`).