Every session starts from zero
Why did the team pick this queue? Which test is flaky? The agent does not know. You explain it again, every day.
Local MCP server · v2.1 · Python 3.10–3.12
Nexus-MCP gives AI coding agents the context they lose between sessions. It keeps project decisions in a searchable memory, draws a live map of your architecture, and returns the code your agent asks for in fewer calls. It runs on your machine. It needs no API keys.
pip install nexus-mcp-ci
# New session. The agent recalls last week's decision.
memory(action="search", query="retry policy for payments")
→ decision · 9 days ago · tags: file:billing/retry.py
"Use exponential backoff, max 5 tries. Never retry
card_declined. Agreed with @ops after the March outage."
# Where does that live? Ask by concept, not by name.
search("how failed charges are retried")
→ billing/retry.py:42 schedule_retry() 0.94
→ billing/webhooks.py:18 on_charge_failed() 0.88
# Read it before you touch it. No file tour.
find_symbol("schedule_retry, RetryJob")
→ billing/retry.py:42-61 def schedule_retry(charge, attempt)
code: whole function · callers: on_charge_failed()
→ billing/jobs.py:8 class RetryJob · outline, 4 methods
In one paragraph
Nexus-MCP is a local Model Context Protocol (MCP) server for AI coding agents. It adds three things an agent lacks by default: persistent project memory across sessions, a live map of your codebase, and the code of any function or class, with its callers, in one call. It works with Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Continue and Goose.
pip install nexus-mcp-ciThe problem
Why did the team pick this queue? Which test is flaky? The agent does not know. You explain it again, every day.
Architecture notes go stale after one refactor. The agent reads the old note and makes a confident, wrong change.
"How does checkout work?" has no single file to open. Grep needs the exact name, and you do not know it yet.
What Nexus-MCP adds
memory
The agent stores decisions, preferences, status and notes as it works. The next session recalls them by meaning, not by file name.
.nexus foldermemory(
action="store",
content="Auth tokens live 15 min. Refresh
tokens rotate on every use.",
tags="decision,file:auth/tokens.py",
)
→ stored · id m_7f3a
map · analyze
Ask for a map and get the layers, entry points, key classes and hub symbols of the code as it is now. A file watcher re-indexes after each change, so the map does not go stale.
map(detail="architecture")
→ layers
api/ → 14 files · entry: main.py
services/ → 22 files · hub: OrderService
storage/ → 9 files
entry points main.py, worker.py, cli.py
languages python 81% · typescript 19%
analyze("services/")
→ 2 functions over complexity 15
1 long parameter list · OrderService.create
search · find_symbol
Describe the behaviour in your own words. Hybrid search combines meaning and keywords to find the right functions, and its top results carry their whole code. Then find_symbol gives the code of several names in one call, with their callers and callees.
Class.methodsearch("where do we stop duplicate orders")
→ orders/idempotency.py:12 check_key() 0.93
→ api/middleware.py:57 dedupe() 0.86
find_symbol("check_key, dedupe")
→ code, file, line range,
direct callers and callees of each
Works with your agent, not against it
Your agent already has fast, exact file search. Keep it. Nexus-MCP does not replace it. Use native search for a name you can type. Call Nexus when the answer needs meaning, history or structure.
| You need… | Use |
|---|---|
| An exact name or string you can type | native grep |
| Code that matches an idea, not a name | search |
| Why a decision was made last month | memory |
| The shape of an unfamiliar repo | map |
| Hotspots before a refactor | analyze |
Measured, not estimated
Each turn of an agent reads the whole conversation again, so a saved turn is a saved cost. We ran 12 questions per project with Claude Sonnet, 3 runs each, against an agent with only Grep and Read. The saving is large on code the model does not know and small on code it knows. Run the benchmark on your own project before you rely on it.
| Nexus-MCP against Grep and Read | Result |
|---|---|
| Private 460-file Python project: turns | 55 → 35 |
| Private project: cost | −22% |
| Django, 3,000 files: turns | 93 → 71 |
| Django: cost | −3% |
| Correct answers: Nexus, then Grep and Read | 71 · 70 of 72 |
The tool surface
memoryStore, search and delete project knowledge across sessions.
mapProject summary and architecture: layers, entry points, hubs.
analyzeComplexity, code smells and dependency metrics for a path.
searchHybrid semantic + keyword search. Top results carry their code.
find_symbolThe code of one or more names, with callers and callees.
graphCallers, callees, change impact and every text reference.
indexIncremental, multi-folder indexing with an auto-watch.
statusIndex counts, memory use and a staleness flag.
Embeddings run locally. Your code never leaves the machine. It works offline and in air-gapped setups.
Disk-backed vectors and a lazy-loaded model keep it near 90 MB idle. With the embedding model loaded it uses about 460 MB.
Standard stdio transport. Config by NEXUS_* environment variables, not vendor files.
Input validation, read-only permission mode, audit logs with redaction, and optional rate limits.
Get started
pip install nexus-mcp-ciclaude mcp add nexus-mcp -- nexus-mcp-ci/plugin marketplace add jaggernaut007/Nexus-MCP
/plugin install nexus-mcp@nexus-mcp
The plugin registers the server and adds skills that teach the agent when to use each tool.
{
"mcpServers": {
"nexus-mcp": { "command": "nexus-mcp-ci", "args": [] }
}
}
Add this to claude_desktop_config.json.
{
"nexus-mcp": {
"command": "nexus-mcp-ci",
"transport": "stdio"
}
}
Any client that speaks MCP over stdio works the same way.
The agent calls index on first use. After that, it recalls memory, maps the repo and finds code for you. A file watcher keeps the index current.
Questions
Nexus-MCP is a local Model Context Protocol (MCP) server for AI coding agents. It gives an agent persistent project memory, a live map of the codebase, hybrid semantic and keyword code search, and the code of any symbol in one call. It runs on your machine and needs no API keys.
Install Nexus-MCP with pip install nexus-mcp-ci, then register it with claude mcp add nexus-mcp -- nexus-mcp-ci. The agent can then store decisions, notes and preferences with the memory tool and recall them by meaning in later sessions. The memory store is local and any MCP client can read it.
On the projects we measured, yes, through fewer turns. In 12 live questions per project with Claude Sonnet, Nexus-MCP cut turns from 55 to 35 on a private 460-file project and from 93 to 71 on django. Cost fell by 22% and 3%. Cost varies by about 20% over 3 runs, so the django result is about equal. docs/EVALS.md has every number.
Yes, for personal, research, education and other noncommercial use. The source is public on GitHub under the PolyForm Noncommercial 1.0.0 license. Commercial use needs a separate license from the maintainer.
No. Parsing, embeddings, the vector store and the memory store all run locally. Nexus-MCP sends no code to any service and needs no API keys. The embedding model downloads once, at first use.
Any MCP client that supports the stdio transport. That includes Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Continue and Goose.
Symbol extraction and search cover more than 25 languages through tree-sitter. Structural data for the map and graph tools is available for Python, JavaScript, TypeScript, Go, Java and Rust.
A debounced file watcher re-indexes changed files a few seconds after you save. The status and search tools also run a throttled staleness check and flag old results. Branch switches are detected by file modification time.
The graph tool uses static call edges, so it cannot see dynamic dispatch or callbacks and its results are a lower bound. The README lists all known limits.
Star the repo, open an issue, or send a pull request. Feedback from real projects shapes what ships next.