Local-first semantic search for AI agents. Give Claude Code, Cursor, Codex, and other MCP-compatible agents deep context over your codebase, docs, Jira, and Confluence.
Key Features:
- Privacy-first — all processing and storage happens locally, no data sent to third parties
- Semantic search — understands meaning, not just keywords, using dense vector embeddings
- Multiple sources — index local files (25+ formats), Jira, and Confluence (Cloud & Server)
- MCP integration — works with Claude Code, Cursor, Windsurf, Cline, and other MCP-compatible agents
- Incremental updates — keep your index fresh with git-based change tracking
Quick Start
# 1. Install indexed globally
uv tool install indexed-sh
# 2. Create a collection from local files
indexed index create files --collection my-project --path ./src
# 3. Search your collection
indexed index search "your query"
Why Indexed?
AI agents search your codebase on demand with grep — fast for small repos, but expensive on large ones. Every file read costs tokens. Every broad search burns context window.
Indexed pre-computes a semantic search index over your code, docs, and project tools, then exposes it via MCP. The result: instant, relevant context retrieval without the token overhead.
- Not just code. Index Markdown, PDFs, DOCX, PPTX, images, and 25+ formats via Docling. AST-aware code chunking via tree-sitter.
- Not just local files. Native Jira and Confluence connectors pull tickets, pages, and metadata into your index.
- Not cloud-dependent. Runs entirely on your machine. Local embedding models, FAISS for vector storage. No API keys required.
- Not one-shot. Incremental updates via
indexed index updatekeep your index fresh as your codebase evolves.
MCP Integration
Indexed exposes a Model Context Protocol server for AI agent integration.
Claude Code (CLI, VS Code, JetBrains)
Works across all Claude Code surfaces — CLI, VS Code extension, and JetBrains plugin:
claude mcp add indexed -- indexed mcp run
This adds indexed to your project's .mcp.json. You can also manage servers via /mcp in the VS Code chat panel.
To add manually, create or edit .mcp.json in your project root:
{
"mcpServers": {
"indexed": {
"command": "indexed",
"args": ["mcp", "run"]
}
}
}
Cursor / Windsurf / Other Agents
Add to your agent's MCP configuration file:
{
"mcpServers": {
"indexed": {
"command": "indexed",
"args": ["mcp", "run"]
}
}
}
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"indexed": {
"command": "indexed",
"args": ["mcp", "run"]
}
}
}
Server Mode
# HTTP server mode
indexed mcp run --transport http --port 8000
Supported Sources
| Source | Description |
|---|---|
| Local Files | .pdf, .docx, .pptx, .md, code files, images, and 25+ formats |
| Jira | Cloud and Server/Data Center with JQL filtering |
| Confluence | Cloud and Server/Data Center with CQL filtering |
Installation
Requires Python 3.11+ and uv.
uv tool install indexed-sh
This installs indexed as a global CLI tool from PyPI.
Alternative: run without installing
uvx indexed-sh index search "your query"
Alternative: install from source
git clone https://github.com/LennardZuendorf/indexed.git
cd indexed
uv sync
uv run indexed --help
Usage
# Create collections
indexed index create files --collection my-project --path ./src
indexed index create jiraCloud --collection jira-issues
indexed index create confluenceCloud --collection wiki
# Search
indexed index search "authentication flow"
indexed index search "bug reports" --collection jira-issues
# Manage collections
indexed index inspect # list all collections
indexed index inspect my-project # inspect specific collection
indexed index update my-project # update a collection
indexed index remove my-project # delete a collection
# Configuration
indexed config inspect # view config
indexed config set search.max_docs 20 # set a value
For the full CLI reference and configuration guide, see the documentation.
Documentation
- Full Documentation — CLI reference, configuration, and guides
- Blog & Guides — tutorials and use cases
- Issue Tracker — report bugs or request features
Contributing
git clone https://github.com/LennardZuendorf/indexed.git
cd indexed
uv sync --all-groups
uv run pytest -q
Performance benchmarks (tests/benchmarks/, tests/system/) run in CI via
pytest-bench-action
— see .github/workflows/python-benchmark.yml. Run them locally with:
uv run pytest tests/system tests/benchmarks --benchmark-only
See the internal package docs and CLAUDE.md for architecture details.
License
See LICENSE file for details.
Credits
The Core v1 implementation is based on documents-vector-search by shnax0210, licensed under MIT and modified extensively.
indexed.sh · Star the repo if you find it useful!
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 indexed_sh-0.0.8.tar.gz.
File metadata
- Download URL: indexed_sh-0.0.8.tar.gz
- Upload date:
- Size: 204.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a6d60062005612457899347133c158c88248d86951b485bf3abd48273a70fb0
|
|
| MD5 |
ea434f0f0c7705e87ee055cb0edb64e5
|
|
| BLAKE2b-256 |
efd25326781f606cd17aa16920c21d9c65da82ac8f6fdfb7dfba3b194db65b80
|
Provenance
The following attestation bundles were made for indexed_sh-0.0.8.tar.gz:
Publisher:
python-release-ci.yml on LennardZuendorf/indexed
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
indexed_sh-0.0.8.tar.gz -
Subject digest:
0a6d60062005612457899347133c158c88248d86951b485bf3abd48273a70fb0 - Sigstore transparency entry: 2455761232
- Sigstore integration time:
-
Permalink:
LennardZuendorf/indexed@9ad936f2907412bb66df47eeb34ffb95dbeff43a -
Branch / Tag:
refs/tags/v0.0.8 - Owner: https://github.com/LennardZuendorf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-release-ci.yml@9ad936f2907412bb66df47eeb34ffb95dbeff43a -
Trigger Event:
release
-
Statement type:
File details
Details for the file indexed_sh-0.0.8-py3-none-any.whl.
File metadata
- Download URL: indexed_sh-0.0.8-py3-none-any.whl
- Upload date:
- Size: 273.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8de9c83f949694b5897f461131166c7c6095d7976f961c449e05237846056315
|
|
| MD5 |
89ddd98d3cabe3053010171ab4daac1c
|
|
| BLAKE2b-256 |
7fcff0a42190caf12a923c886767cff3f687ade1630130fe183ae5daee3654f6
|
Provenance
The following attestation bundles were made for indexed_sh-0.0.8-py3-none-any.whl:
Publisher:
python-release-ci.yml on LennardZuendorf/indexed
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
indexed_sh-0.0.8-py3-none-any.whl -
Subject digest:
8de9c83f949694b5897f461131166c7c6095d7976f961c449e05237846056315 - Sigstore transparency entry: 2455761308
- Sigstore integration time:
-
Permalink:
LennardZuendorf/indexed@9ad936f2907412bb66df47eeb34ffb95dbeff43a -
Branch / Tag:
refs/tags/v0.0.8 - Owner: https://github.com/LennardZuendorf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-release-ci.yml@9ad936f2907412bb66df47eeb34ffb95dbeff43a -
Trigger Event:
release
-
Statement type: