Dense embeddings find "where do we publish order events"; BM25 over camelCase and snake_case subwords finds `PlaceOrderRequest`. Running both and fusing them is why neither question fails. Indexing skips files whose git blob SHA is unchanged, and deletes symbols for files that vanished — but that same change detection means a newly added index field needs a forced reindex, which re-embeds everything. One `GITHUB_TOKEN` reads every repository you index, which the README flags directly.
An MCP server that indexes code and git history from GitHub repositories you list. It parses symbols with Tree-sitter, stores two vectors per symbol — a dense semantic one and a BM25 sparse one keyed on code identifier tokens — and fuses the results with Reciprocal Rank Fusion so both query styles land.
- Hybrid search by query, filterable by language, service and symbol type — `search_code`
- A symbol looked up by name, exact or by case-insensitive token match — `find_symbol`; and code referencing it, with the definition excluded — `find_usages`
- The full source of a file, or one symbol inside it, fetched straight from GitHub — `get_code_context`
- Git history indexed and searched in natural language, with full commit detail including changed files and diffs — `index_history`, `search_commits`, `get_commit`
- Indexing triggered for one service or all, incremental by default — `reindex`; plus `list_indexed_services` and `index_stats`
- Two prompts that walk a client through a write-up — `service_overview` for one service, `system_design_overview` for the whole system, with Mermaid diagrams
- Framework-aware parsing across Go, Java, Python, TypeScript/JavaScript, Rust, C#, C, C++, Ruby, PHP, Kotlin, Scala, Swift, Dart, Bash, SQL and more — Spring stereotypes and HTTP routes, FastAPI/Pydantic, ASP.NET, Rails, Laravel/Symfony, React/SwiftUI/Flutter widgets
Python 3.12+, Docker and a GitHub token — a fine-grained PAT with Contents: read on the target repositories is enough, though the README recommends an org-wide GitHub App if repositories self-register. `uv sync`, copy `.env.example` to `.env` and set `GITHUB_TOKEN`. Repositories go in `config.yaml` with an optional `github_ref`, `root` and `exclude`, or are registered on the fly through `POST /reindex`. Start with `make docker-up-jina` for local keyless Jina embeddings, or set `EMBEDDINGS_PROVIDER` to `voyage`, `openai` or `ollama` and use `make docker-up`. Connect with `claude mcp add --transport http semcode http://localhost:8090/mcp`, or over stdio. Package `semcode` 1.1.0, MIT licensed.
One command plus a key — claude mcp add --transport http semcode http://localhost:8090/mcp, then supply credentials
