
NervaPack
io.github.ramdhavepreetamPublished by GitHub account ramdhavepreetamv0.5.8Updated Oct 24, 2026
Offline codebase knowledge graph: 91% token reduction vs naive RAG, plus cross-session agent memory.
Overview
Offline codebase knowledge graph MCP server that answers code questions with focused, token-efficient context and keeps cross-session agent memory.
- What you can do
- Query the indexed codebase: vector search plus K-Hop graph traversal returns a focused Markdown context block with token-savings figures
- Inspect the graph: node and edge counts, language breakdown, unsynced-file warnings, and browsing of indexed classes, functions, imports and docs
- Analyze impact: reverse dependency lookup showing what depends on a given entity
- Manage agent memory: open and close sessions, store facts, decisions, procedures and preferences, recall them within a token budget, and get entity dossiers, decision rationale and timelines
- Maintain memory: verify or refute entries, forget or purge nodes, list and clear sessions, switch namespaces, bulk import, and flag memories…
- When to use it
- Useful when an assistant works repeatedly in a local git repository and you want code questions answered from a compact structural context instead of dumping whole files, or when you want decisions and conventions to persist across chat sessions without pasting context each time.
- Requirements
- Runs locally over stdio as a Python package (Python 3.10+) launched with uvx; the project must be a git repository. The graph must be built first with the ingest command. Optional semantic doc-to-code binding needs an LLM: local Ollama by default, or the ANTHROPIC_API_KEY or OPENAI_API_KEY variables for cloud providers. First run downloads a roughly 30 MB ONNX embedding model.
Installation
In SourceWeft
- Open NervaPack in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
NervaPack
[PyPI version] [Python Versions] [License: MIT] [Token Reduction] [Verified] [MCP Registry]
NervaPack is a privacy-first, offline knowledge graph for your codebase. It solves two fundamental problems with standard Vector RAG:
- Token waste — chunk-based RAG retrieves blobs of text that may only tangentially relate to your query, bloating your context window.
- Privacy risk — sending code to cloud embedding APIs leaks your proprietary logic.
NervaPack runs 100% on your machine. It uses tree-sitter to parse your codebase into a deterministic Abstract Syntax Tree graph, then uses a local Ollama model to draw hard semantic edges between your documentation and your code. Queries traverse this graph with a K-Hop BFS, returning a hyper-targeted, token-efficient context window — no cloud required.
Verified Performance
91.2% Average Token Reduction — independently verified on real-world codebases.
Cost Savings: $181–$724 per developer per year (GPT-4o to Claude Sonnet)
📊 View Full Benchmarks · 🧪 Messy Code Performance
Code quality impact: 90–99% reduction on clean code, 50–75% on legacy/messy code. Even poorly structured codebases benefit significantly.
Why NervaPack vs. standard Vector RAG
Prerequisites
- Python 3.10+
- Git — your project must be a git repository (
git initif not)
(Optional for semantic code-doc binding) — an LLM provider. Structural graph indexing and basic queries work out-of-the-box with zero configuration and no cloud connection.
Installation
On first run, ChromaDB downloads an ONNX embedding model (~30 MB) to
~/.cache/chroma/. This is a one-time download.
Quick Start
Command Reference
nervapack ingest [PATH] — Build the graph
Scans PATH (default: .) and builds the full knowledge graph.
What happens:
- Walks the directory tree with tree-sitter, skipping
dist/,build/,node_modules/,venv/,site/,.tox/, and dozens of other build directories automatically. - Parses source files into exact AST nodes: classes, functions, imports.
- Chunks all
.mdfiles by header hierarchy. - Embeds every entity into a local ChromaDB vector store (ONNX by default, Ollama optional).
- Optionally binds doc chunks to code nodes via an LLM, adding
EXPLAINSedges. - Saves the graph once to
.nervapack/graph.graphml.
Re-ingesting is safe — upsert is used throughout, so running ingest twice does not duplicate data.
Supported languages (bundled): Python, JavaScript, JSX, TypeScript, TSX
Additional languages:
Exclude directories — create .nervapackignore in your project root (gitignore syntax):
nervapack query PROMPT — Query the graph
Retrieves focused context for a natural-language prompt and prints a token savings dashboard.
What happens:
- Intent detection — "what breaks if I change X" routes to impact analysis (reverse BFS); exact symbol names bypass vector search.
- ChromaDB returns the top-3 most semantically similar nodes.
- Those nodes seed a K-Hop BFS through the NetworkX graph (default: 1 hop, both directions).
- Adjacent nodes — including any markdown docs via
EXPLAINSedges and memory notes viaTOUCHESedges — are collected. - A focused Markdown context block is printed, ready to paste into an LLM prompt.
- Token efficiency panel shows savings vs. naive "dump the whole file" RAG.
Example output:
nervapack sync [PATH] — Incremental update
Updates only the files that changed since the last ingest. Uses GitPython to diff the working tree.
A full ingest on a large project can take minutes. sync turns that into a 2–5 second surgical update per file. Re-parses changed files, batch-upserts new vectors, and saves the graph once at the end.
nervapack clean [OPTIONS] — Remove ingested data
Wipe graph data and start fresh. Use this when you have duplicate vectors, ingested the wrong directory, or need to reduce disk usage.
Never deleted by clean: memory.db — your agent memory is always safe.
Typical workflow after a bad ingest:
nervapack enrich [PATH] — Add semantic edges
Runs LLM doc-to-code binding on an already-ingested graph. Use this if you:
- Ran
ingestwithout an LLM and want to addEXPLAINSedges now. - Added new documentation and want to bind it without a full re-ingest.
nervapack status [--detailed] — Graph health
Health score (0–100) factors in documentation coverage, node connectivity, graph density, and edge diversity. A structural-only graph typically scores 30–40; after enrich it rises to 70–90.
nervapack visualize [OPTIONS] — Interactive HTML graph
Produces a standalone HTML file with no external dependencies — drag, zoom, search, find shortest paths between nodes.
nervapack explore TARGET [--hops N] — Focused subgraph
Extract and visualize the N-hop neighbourhood of a specific file, class, or function.
nervapack dependencies [FILE] — Import dependency analysis
Analyze file-level import chains, detect circular dependencies, and visualize the dependency graph.
nervapack hotspots [OPTIONS] — Change frequency analysis
Show which files change most often in git history — prime targets for documentation and review.
nervapack history [OPTIONS] — Query history
nervapack serve [--port N] — Web dashboard
Requires nervapack[dashboard]. Shows graph overview, language distribution, analytics, query history trends, and an interactive graph explorer.
nervapack doctor — Environment check
Verifies Python version, tree-sitter grammars, embedding backend, Ollama connectivity, and MCP config. Run this after installation or when troubleshooting.
Storage Layout
Everything lives in .nervapack/ inside your project root:
Add .nervapack/ to .gitignore to keep it out of version control.
Disk usage guide:
chroma_db/— typically 10–100 MB depending on project size. Runnervapack clean --vectors && nervapack ingest .if it grows unexpectedly.graph.graphml— typically 0.5–5 MB.memory.db— grows with agent usage; rarely exceeds a few MB.
MCP Integration (Claude Code, Cursor, Windsurf)
NervaPack ships two MCP servers in the same package. Drop this .mcp.json in your project root:
Knowledge Graph MCP tools (nervapack-mcp)
Agent Memory MCP tools (nervapack-memory-mcp) — 17 tools
CLAUDE.md template
Add to your CLAUDE.md to wire NervaPack into every Claude Code session:
Architecture
Key source modules:
nervapack.memory — Agent Memory
Stop re-pasting project context into every new chat.
Token efficiency:
CLI:
Data model: 8 node kinds, 7 edge kinds, bi-temporal (valid_from/valid_until), never hard-deletes by default.
Privacy
NervaPack is 100% offline by default:
- Embeddings use ChromaDB's built-in ONNX model (runs on CPU, no cloud).
- LLM calls (when using Ollama) go to
localhost:11434only. - All graph and vector data lives in
.nervapack/inside your project. - No telemetry, no analytics, no network calls at runtime.
Only if you explicitly pass --llm claude or --llm openai does any code leave your machine.
Contributing
- Fork the repo and create a branch.
- Run tests:
python3 -m pytest tests/memory/ -q - Run docs check:
python3 -m mkdocs build --strict - Open a pull request against
master.
Bug reports and feature requests: issue tracker.
License
MIT — see LICENSE.
Source: README.md at commit a3a0548
Tools
0Version history
1- v0.5.8LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts