High-performance local search and indexing engine for large codebases
Project description
Sari – Local Code Search/Indexing MCP Server
Sari is a local code search/indexing MCP server designed for fast, local indexing and search across large codebases. It defaults to MCP stdio integration, supports multi-workspace collection, and keeps configuration and data paths clearly separated.
1. Overview
Sari indexes large codebases locally and provides fast search capabilities via the Model Context Protocol (MCP). It ensures your source code stays on your machine while providing powerful search, symbol navigation, and call graph analysis to LLMs.
2. Installation
2.1 Recommended: uv tool (Global-like Utility)
Since Sari is an MCP server utility used across multiple projects, we strongly recommend using uv tool. It keeps the environment isolated while providing a stable, single binary path for all your workspaces.
- Pros: Prevents redundant installations, stable
commandpath for MCP config, and easy CLI access.
uv tool install sari
After installation, find the absolute path for your MCP settings:
which sari
# Example: /Users/yourname/.local/bin/sari
2.2 Optional: venv install (Per-project Isolation)
Use this only if you want to lock Sari to a specific project. Note that you'll need to install it in every workspace, and you must update your MCP command path whenever you switch projects.
uv venv .venv
source .venv/bin/activate
uv pip install sari
3. Runtime Modes
3.1 stdio (MCP Recommended)
The stdio transport runs as a daemon proxy for high performance.
Start the daemon (required for stdio):
sari daemon start -d
Daemon lifecycle policy:
- Sari now enforces a strict single-daemon model by default.
- If a running daemon version differs from local CLI/package version, Sari replaces it at the same endpoint instead of spawning a new daemon on another port.
sari daemon stopwithout explicit--daemon-host/--daemon-portstops all live Sari daemons registered inserver.json.
3.2 HTTP API
Start the HTTP API server for access via browser or other HTTP clients.
sari --transport http --http-api-port 47777
Health check:
curl http://127.0.0.1:47777/health
4. MCP Client Setup
Configuration depends on your installation method and whether you want to manage workspaces globally or per-project.
4.1 Recommended: Global Configuration (Unified Search)
Use this if you want to search across multiple repositories from any workspace.
- Initialize Global Config:
mkdir -p ~/.config/sari echo '{"workspace_roots": []}' > ~/.config/sari/config.json
- Add Your Workspaces:
sari roots add /abs/path/to/repo1 sari roots add /abs/path/to/repo2
- Update MCP Settings: Keep MCP config minimal.
sariauto-resolves standard config paths.
A. Gemini CLI (~/.gemini/settings.json)
{
"mcpServers": {
"sari": {
"command": "sari",
"args": ["--transport", "stdio"]
}
}
}
B. Codex CLI (~/.codex/config.toml)
[mcp_servers.sari]
command = "sari"
args = ["--transport", "stdio"]
Note: Ensure that
sariis available in your systemPATH. If you installed viauv tool, this is usually handled automatically.
4.2 Optional: Per-project Configuration
Use this if you want isolated indexing for a specific workspace.
A. Gemini CLI
{
"mcpServers": {
"sari": {
"command": "/Users/yourname/.local/bin/sari",
"args": ["--transport", "stdio"]
}
}
}
B. Codex CLI
[mcp_servers.sari]
command = "/Users/yourname/.local/bin/sari"
args = ["--transport", "stdio"]
5. Data & Install Paths
- Global DB:
~/.local/share/sari/index.db - Global Registry:
~/.local/share/sari/server.json - Logs:
~/.local/share/sari/logs - Workspace Config:
<workspace>/.sari/config.jsonor<workspace>/sari.json - Global Config:
~/.config/sari/config.json
6. Multi-workspace
6.1 CLI
sari roots add /path/to/workspaceA
sari roots add /path/to/workspaceB
sari roots list
6.2 Config file
{
"workspace_roots": [
"/path/to/workspaceA",
"/path/to/workspaceB"
]
}
6.3 Collection Example
Register multiple workspaces in the global config and run.
# Register roots
sari roots add /Users/user/Repo1
sari roots add /Users/user/Repo2
# Run with global config
sari --transport stdio
7. Indexing Policy
Sari determines indexing roots in this order:
workspace_rootsfrom global/workspace configSARI_WORKSPACE_ROOTenvironment variablerootUri/rootPathfrom MCP initialization- Fallback to current working directory (CWD)
8. Configuration Reference
| Key | Description | Default |
|---|---|---|
workspace_roots |
Multi-workspace roots | [CWD] |
include_ext |
File extensions to index | .py, .js, .ts, .java, ... |
exclude_dirs |
Excluded directories | .git, node_modules, .venv, ... |
max_depth |
Max directory depth | 20 |
scan_interval_seconds |
Auto-scan interval (sec) | 180 |
9. Call Graph Options
call_graph becomes more stable when you provide explicit scope:
repo: force repository scopedepth: search depth (default: 2)include_paths/exclude_paths: glob filters
10. Troubleshooting
Please see docs/TROUBLESHOOTING.md when issues occur.
11. Maintenance
Update
-
Force update from local source:
uv tool install . --force
-
Upgrade to the latest version via PyPI:
uv tool upgrade sari
Uninstall
uv tool uninstall sari
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sari-0.6.12.tar.gz.
File metadata
- Download URL: sari-0.6.12.tar.gz
- Upload date:
- Size: 317.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb4ae62baa7441f26210a8155bc05aa3b3a60b334ba2d873516fb66dd4136237
|
|
| MD5 |
06bcd1d5cadcf5c38afba6b6263b7c82
|
|
| BLAKE2b-256 |
76756100f5ac539ae0808a212a9212192d5379e32f9f37fbf4b4250f082890a7
|
File details
Details for the file sari-0.6.12-py3-none-any.whl.
File metadata
- Download URL: sari-0.6.12-py3-none-any.whl
- Upload date:
- Size: 304.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d74c27840befda0ce4d34f587b8226fa438092f8403c03a9b25f6f0d0ac78f15
|
|
| MD5 |
5d1855dd35833c5939f86962e94d3160
|
|
| BLAKE2b-256 |
c0036641315456fdc75f5726663ab71672ce884845361f678eca41dac16c54d7
|