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
.pyfiles. - Stores symbol and dependency data in
db/code_index.db.
- Scans the current working directory and indexes
find_symbol(name)- Searches function/class names using
LIKEmatching. - Returns symbol name, type, file path, and line number.
- Searches function/class names using
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).
- Reads and returns full file content with encoding fallback (
Project Structure
server.py: MCP server entrypoint and tool definitions.indexer.py: Indexing logic to SQLite.parser.py: Symbol extraction (FunctionDef,ClassDef) usingast.dependency.py: Import extraction usingast.search.py: Search queries against the database.db/: Index database location (code_index.db).
Prerequisites
- Python 3.10+ (recommended)
pip
Installation
- Clone this repository.
- Go to the project folder.
- Create a virtual environment.
- Activate the virtual environment.
- Install dependencies.
Windows PowerShell example:
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
Run Locally
Start the MCP server:
python server.py
Available tools:
index_projectfind_symbolfind_importread_file
MCP Configuration
Add this to your MCP client configuration so it runs as an MCP server:
{
"mcpServers": {
"code-intelligence": {
"command": "python",
"args": [
"path-to-your-server"
]
}
}
}
Recommended Usage Flow
- Run
index_projectonce to build the initial index. - Use
find_symbolto locate functions/classes. - Use
find_importto trace module usage. - Re-run
index_projectafter 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).