OpenLore
Local code graph that gives coding agents task context and checks changes before they land
Code knowledge graph for coding agents: symbol context, change impact, call paths and renames.
By Abhigyan Patwari (individual) TypeScript Local · stdio Developer toolsKnowledge and memory
86 popularity score ★ 48k ↓ 53k/wk
Opens the app, which asks before it adds the server.
npx gitnexus analyzeclaude mcp add gitnexus -- npx -y gitnexus@latest mcp{
"mcpServers": {
"gitnexus": {
"command": "npx",
"args": [
"-y",
"gitnexus@latest",
"mcp"
]
}
}
}{
"mcpServers": {
"gitnexus": {
"command": "npx",
"args": [
"-y",
"gitnexus@latest",
"mcp"
]
}
}
}{
"servers": {
"gitnexus": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"gitnexus@latest",
"mcp"
]
}
}
}[mcp_servers.gitnexus]
command = "npx"
args = ["-y", "gitnexus@latest", "mcp"]gemini mcp add --scope user gitnexus npx -- -y gitnexus@latest mcpGITNEXUS_MCP_READ_ONLY |
Optional: Set to 1 to hide rename, cypher, group_list and group_sync and refuse group routing; any value other than 0 or 1 stops the server. |
|---|---|
GITNEXUS_MCP_DEFAULT_MAX_TOKENS |
Optional: Default cap on the estimated tokens in one tool response; a maxTokens argument overrides it. |
GitNexus turns a code repository into a graph of symbols, references, call chains, clusters and execution flows, and gives a coding agent MCP tools, resources and prompts over that graph. The agent can search code by keyword and meaning, pull up everything about one symbol, see what a change would break before making it, trace the path between two functions, map changed git lines to affected flows, run Cypher queries and preview or apply a rename across files. Groups of indexed repositories can be synced to check API contracts across them.
You index a repository with `npx gitnexus analyze` from its root; the graph is stored locally in LadybugDB under `.gitnexus/`. `npx gitnexus setup` writes the MCP entry for the editors it finds (Claude Code, Cursor, Codex, Windsurf, OpenCode and others), and the server itself is started with `npx -y gitnexus@latest mcp` over stdio. Besides the MCP server, `analyze` installs agent skills, registers Claude Code hooks and writes AGENTS.md and CLAUDE.md files; a web UI backend (`gitnexus serve`) and opt-in local embeddings are also offered.
The released version 1.6.12 registers 17 tools in its source (`src/mcp/tools.ts`). The `read_file` and `grep` tools, a shared HTTP transport (`gitnexus mcp --http`, with a required auth token for non-loopback binds) and a `plan_token` step for applying renames appear in the main-branch README and 1.6.13 release candidates, not in 1.6.12. Not in the README: setting `GITNEXUS_MCP_READ_ONLY=1` hides `rename`, `cypher`, `group_list` and `group_sync` and refuses group routing (`src/mcp/read-only-policy.ts`).
The package is licensed PolyForm Noncommercial 1.0.0, which does not permit commercial use without other terms.
| Runtime | Node.js 22.18+ |
|---|---|
| Runs on | macOS, Windows, Linux |
Node must be ^22.18.0 or 24.11.0 and later (package engines). Each repository must be indexed with `npx gitnexus analyze` before the tools return anything. On npm 11, `npx` can crash during install; the README gives a `pnpm dlx` form instead. The install builds native tree-sitter grammars; set GITNEXUS_SKIP_OPTIONAL_GRAMMARS=1 to skip the optional ones on hosts without a C/C++ toolchain.
Suits developers who want an agent to check callers, blast radius and execution flows before editing a codebase, and who are fine running a local Node process over a local index. Reads stay on your machine and a read-only switch removes the editing and raw-query tools. Pick something else for commercial work unless you get other licence terms, or if you need a hosted endpoint: 1.6.12 has none and no shared HTTP mode.
15 only read, 1 changes things, 1 can delete or overwrite. A ? marks an optional parameter.
list_reposlimit?: integeroffset?: integerquerysearch_query: stringtask_context?: stringgoal?: stringlimit?: numbermax_symbols?: numberinclude_content?: booleanmaxTokens?: integerrepo?: stringservice?: stringcontextname?: stringuid?: stringfile_path?: stringfile?: stringkind?: stringinclude_content?: booleanmaxTokens?: integerrepo?: stringservice?: stringimpacttarget?: stringdirection: stringtarget_uid?: stringmode?: stringline?: integerfile_path?: stringkind?: stringmaxDepth?: numberrelationTypes?: arrayincludeTests?: booleanminConfidence?: numberrepo?: stringlimit?: integeroffset?: integersummaryOnly?: booleanmaxTokens?: integertimeoutMs?: numbertracefrom?: stringfrom_uid?: stringfrom_file?: stringto?: stringto_uid?: stringto_file?: stringmaxDepth?: numberincludeTests?: booleanpdg?: booleandetect_changesscope?: stringbase_ref?: stringworktree?: stringrepo?: stringcheckcycles?: booleanrepo?: stringrename deletesnew_name: stringsymbol_name?: stringsymbol_uid?: stringfile_path?: stringdry_run?: booleanrepo?: stringcypherstatement: stringparams?: objectrepo?: stringroute_maproute?: stringrepo?: stringtool_maptool?: stringrepo?: stringshape_checkroute?: stringrepo?: stringapi_impactroute?: stringfile?: stringmethod?: stringrepo?: stringexplaintarget?: stringlimit?: integerrepo?: stringpdg_querymode: stringtarget: stringvariable?: stringlimit?: integerrepo?: stringgroup_listname?: stringgroup_sync changesname: stringexactOnly?: booleangitnexus://reposgitnexus://setupgitnexus://repo/{name}/contextgitnexus://repo/{name}/clustersgitnexus://repo/{name}/cluster/{name}gitnexus://repo/{name}/processesgitnexus://repo/{name}/process/{name}gitnexus://repo/{name}/schemagitnexus://group/{name}/contractsgitnexus://group/{name}/statusdetect_impactgenerate_map