Skip to main content
Glama

Nexus-MCP

jaggernaut007/Nexus-MCP MCP server jaggernaut007/Nexus-MCP MCP server

The only MCP server with hybrid search + code graph + semantic memory — fully local.

Nexus-MCP is a unified, local-first code intelligence server built for the Model Context Protocol. It combines vector search, BM25 keyword search, and structural graph analysis into a single process — giving AI agents precise, token-efficient code understanding without cloud dependencies.


Why Nexus-MCP?

AI coding agents waste tokens. A lot of them. Every time an agent reads full files to find a function, grep-searches for keywords that miss semantic intent, or makes multiple tool calls across disconnected servers — tokens burn. Nexus-MCP fixes this.

Token Efficiency: The Numbers

Scenario

Without Nexus

With Nexus

Savings

Find relevant code (agent reads 5-10 files manually)

5,000–15,000 tokens

500–2,000 tokens (summary mode)

70–90%

Understand a symbol (grep + read file + read callers)

3,000–8,000 tokens across 3-5 tool calls

800–2,000 tokens in 1 explain call

60–75%

Assess change impact (manual trace through codebase)

10,000–20,000 tokens

1,000–3,000 tokens via impact tool

80–85%

Tool descriptions in context (2 separate MCP servers)

~1,700 tokens (17 tools)

~1,000 tokens (15 consolidated)

40%

Search precision (keyword-only misses, needs retries)

2–3 searches × 2,000 tokens

1 hybrid search × 1,500 tokens

60–75%

Estimated savings per coding session: 15,000–40,000 tokens (30–60% reduction) compared to standalone agentic file browsing.

Three Verbosity Levels

Every tool respects a token budget — agents request only the detail they need:

Level

Budget

What's Returned

Use Case

summary

~500 tokens

Counts, scores, file:line pointers

Quick lookups, triage

detailed

~2,000 tokens

Signatures, types, line ranges, docstrings

Normal development

full

~8,000 tokens

Full code snippets, relationships, metadata

Deep analysis

vs. Standalone Agentic Development (No Code MCP)

Without a code intelligence server, AI agents must:

  • Read entire files to find one function (~500–2,000 tokens/file, often 5–10 files per query)

  • Grep for keywords that miss semantic intent ("auth" won't find "verify_credentials")

  • Manually trace call chains by reading file after file

  • Lose all context between sessions — no persistent memory

Nexus-MCP replaces this with targeted retrieval: semantic search returns the exact chunks needed, graph queries trace relationships instantly, and memory persists across sessions.

vs. Competitor MCP Servers

Feature

Nexus-MCP

Sourcegraph MCP

Greptile MCP

GitHub MCP

tree-sitter MCP

Local / private

Yes

No (infra required)

No (cloud)

No (cloud)

Yes

Semantic search

Yes (embeddings)

No (keyword)

Yes (LLM-based)

No (keyword)

No

Keyword search

Yes (BM25)

Yes

N/A

Yes

No

Hybrid fusion

Yes (RRF)

No

No

No

No

Code graph

Yes (rustworkx)

Yes (SCIP)

No

No

No

Re-ranking

Yes (FlashRank)

No

N/A

No

No

Semantic memory

Yes (6 types)

No

No

No

No

Change impact

Yes

Partial

No

No

No

Token budgeting

Yes (3 levels)

No

No

No

No

Languages

25+

30+

Many

Many

Many

Cost

Free

$$$

$40/mo

$10–39/mo

Free

API keys needed

No

Yes

Yes

Yes

No

vs. AI Code Tools (Cursor, Copilot, Cody, etc.)

Capability

Nexus-MCP

Cursor

Copilot @workspace

Sourcegraph Cody

Continue.dev

Aider

IDE-agnostic

Yes

No

No

No

No

Yes

MCP-native

Yes

Partial

No

No

Yes (client)

No

Fully local

Yes

Partial

No

Partial

Yes

Yes

Hybrid search

Yes

Unknown

Unknown

Keyword

Yes

No

Code graph

Yes

Unknown

Unknown

Yes (SCIP)

Basic

No

Semantic memory

Yes (persistent)

No

No

No

No

No

Token-budgeted responses

Yes

N/A

N/A

N/A

N/A

N/A

Open source

Yes (MIT)

No

No

Partial

Yes

Yes

Cost

Free

$20–40/mo

$10–39/mo

$0–49/mo

Free

Free

Nexus-MCP's unique combination: No other tool delivers hybrid search + code graph + semantic memory + token budgeting + full privacy in a single MCP server.


Related MCP server: embecode

Key Features

  • Hybrid search — Vector (semantic) + BM25 (keyword) + graph (structural) fused via Reciprocal Rank Fusion, then re-ranked with FlashRank

  • Code graph — Structural analysis via rustworkx: callers, callees, imports, inheritance, change impact

  • Dual parsing — tree-sitter (symbol extraction) + ast-grep (structural relationships), 25+ languages

  • Semantic memory — Persistent knowledge store with TTL expiration, 6 memory types, semantic recall

  • Explain & Impact — "What does this do?" and "What breaks if I change it?" in single tool calls

  • Token-budgeted responses — Three verbosity levels (summary/detailed/full) keep context windows lean

  • Multi-folder indexing — Index multiple directories in one call, processed folder-by-folder with shared engines

  • Incremental indexing — Only re-processes changed files; file watcher support

  • Multi-model embeddings — 2 models (jina-code default, bge-small-en), GPU/MPS auto-detection

  • Low memory — <350MB RAM target (ONNX Runtime ~50MB, mmap vectors, lazy model loading)

  • Fully local — Zero cloud dependencies, no API keys, all processing on your machine

  • 15 tools, one server — Consolidates what previously required 2 MCP servers (17 tools) into one

Prerequisites

  • Python 3.10 to 3.13

  • pip (comes with Python)

  • ripgrep (rg) (optional, for 100% search coverage fallback)

Install

pip install nexus-mcp-ci

With optional extras:

# With GPU (CUDA) support
pip install nexus-mcp-ci[gpu]

# With FlashRank reranker for better search quality
pip install nexus-mcp-ci[reranker]

# Both
pip install nexus-mcp-ci[gpu,reranker]

Option 2: From source (for development)

git clone https://github.com/jaggernaut007/Nexus-MCP.git
cd Nexus-MCP

# Setup script (creates venv, installs, verifies)
./setup.sh

# Or manual install with dev deps
pip install -e ".[dev]"

Note: The default embedding model (jina-code) requires ONNX Runtime. This is included automatically. If you see errors about missing ONNX/Optimum, run:

pip install "sentence-transformers[onnx]" "optimum[onnxruntime]>=1.19.0"

To use a lighter model that doesn't need trust_remote_code, set NEXUS_EMBEDDING_MODEL=bge-small-en.

See the full Installation Guide for all options, MCP client integration, and troubleshooting.

Run

nexus-mcp

The server starts on stdio (the default MCP transport). Point your MCP client at the nexus-mcp command.

Add to Your MCP Client

Claude Code

# Basic setup
claude mcp add nexus-mcp-ci -- nexus-mcp-ci

# With a specific embedding model
claude mcp add nexus-mcp-ci -e NEXUS_EMBEDDING_MODEL=bge-small-en -- nexus-mcp-ci

Tip: If you installed in a virtual environment, use the full path so the MCP client finds the right Python:

claude mcp add nexus-mcp-ci -- /path/to/Nexus-MCP/.venv/bin/nexus-mcp-ci

Claude Desktop

Add to your config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "nexus-mcp-ci": {
      "command": "nexus-mcp-ci",
      "args": []
    }
  }
}

Cursor / Windsurf / Cline / Other MCP Clients

Add to your MCP client's server config:

{
  "nexus-mcp-ci": {
    "command": "nexus-mcp-ci",
    "transport": "stdio"
  }
}

See the full Installation Guide for client-specific instructions.

MCP Tools (15)

Core

Tool

Description

status

Server status, indexing stats, memory usage, next-tool hints

health

Readiness/liveness probe (uptime, engine availability)

index

Index a codebase (full, incremental, or multi-folder)

search

Preferred over Grep/Glob. Semantic search returning code snippets, absolute paths, and scores

Graph Analysis

Tool

Description

find_symbol

Preferred over Grep for definitions — returns location, types, and call relationships

find_callers

Find all direct callers via call graph (more accurate than text search)

find_callees

Trace execution flow — all functions called by a given function

analyze

Code complexity, dependencies, smells, and quality metrics

impact

Use before refactoring. Transitive change impact analysis

explain

Preferred over Read for understanding symbols — graph + vector + analysis

overview

Preferred over Glob/ls. Project overview: files, languages, symbols, quality

architecture

Preferred over manual browsing. Layers, dependencies, entry points, hubs

Memory

Tool

Description

remember

Store a semantic memory with tags and TTL

recall

Search memories by semantic similarity

forget

Delete memories by ID, tags, or type

Configuration

All settings can be overridden via NEXUS_ environment variables:

Variable

Default

Description

NEXUS_STORAGE_DIR

.nexus

Storage directory for indexes

NEXUS_EMBEDDING_MODEL

jina-code

Embedding model (jina-code, bge-small-en)

NEXUS_EMBEDDING_DEVICE

auto

Device for embeddings: auto (CUDA > MPS > CPU), cuda, mps, cpu

NEXUS_MAX_FILE_SIZE_MB

10

Skip files larger than this

NEXUS_CHUNK_MAX_CHARS

4000

Max code snippet size per chunk

NEXUS_MAX_MEMORY_MB

350

Memory budget

NEXUS_SEARCH_MODE

hybrid

Search mode: hybrid, vector, or bm25

NEXUS_FUSION_WEIGHT_VECTOR

0.5

Vector engine weight in RRF

NEXUS_FUSION_WEIGHT_BM25

0.3

BM25 engine weight in RRF

NEXUS_FUSION_WEIGHT_GRAPH

0.2

Graph engine weight in RRF

NEXUS_LOG_LEVEL

INFO

Logging level

NEXUS_LOG_FORMAT

text

Log format: text or json

Self-Test Demo

Verify your installation by running the end-to-end demo that exercises all 15 tools:

python self_test/demo_mcp.py                  # Uses built-in sample project
python self_test/demo_mcp.py /path/to/project  # Or test against your own codebase

See self_test/README.md for details.

Development

pip install -e ".[dev]"     # Install with dev deps
pytest -v                   # Run tests (441 tests)
pytest -m "not slow"        # Skip performance benchmarks
ruff check .                # Lint
nexus-mcp-ci                # Run server

How It Works

search("how does auth work")
  |
  |-- vector_engine.search(query, n=30)    -- semantic similarity (embeddings)
  |-- bm25_engine.search(query, n=30)      -- keyword matching (exact terms)
  |-- graph_engine.boost(query, n=30)      -- structural relevance (callers/callees)
  |                                            |
  |              Reciprocal Rank Fusion (weights: 0.5 / 0.3 / 0.2)
  |                                            |
  |                        FlashRank re-ranking (top 20)
  |                                            |
  |                      Token budget truncation (summary/detailed/full)
  |                                            |
  v
  Top-N results, formatted to verbosity level

Architecture

Component

Technology

Why

Vector store

LanceDB

Disk-backed, mmap, ~20-50MB overhead, native FTS

Embeddings

ONNX Runtime + jina-code (default)

~50MB vs PyTorch ~500MB, GPU/MPS auto-detection, 3 models supported

Graph engine

rustworkx

Rust-backed, O(1) node/edge lookup, PageRank, centrality

Symbol parser

tree-sitter

25+ languages, AST-level symbol extraction

Graph parser

ast-grep

Structural pattern matching for calls/imports/inheritance

Chunking

Symbol-based

One chunk per function/class, deterministic IDs

Re-ranker

FlashRank (optional)

4MB ONNX model, <10ms for top-20

Persistence

SQLite + LanceDB

Graph in SQLite, vectors in Lance, zero-config

Documentation

  • Installation Guide — Prerequisites, install steps, MCP client integration, troubleshooting

  • Architecture — System design, data flow, components, memory budget

  • Usage Guide — Tool reference, configuration, best practices

  • Developer Guide — Setup, testing, contributing, adding tools/engines

  • ADRs — 11 Architecture Decision Records

  • Research Notes — Deep dives on libraries and technology choices

Acknowledgments

Nexus-MCP consolidates and extends two earlier projects:

  • CodeGrok MCP by rdondeti (Ravitez Dondeti) — Semantic code search with tree-sitter parsing, embedding service, parallel indexing, and memory retrieval. Core models, symbol extraction, and the embedding pipeline were ported from CodeGrok. Originally licensed under MIT.

  • code-graph-mcp by entrepeneur4lyf — Code graph analysis with ast-grep structural parsing, rustworkx graph engine, and complexity analysis. Graph models, relationship extraction, and code analysis were ported from code-graph-mcp.

Individual source files retain "Ported from" attribution in their module docstrings. See ADR-001 for the rationale behind the consolidation.

License

MIT — see LICENSE for details.

Available Tools

10 tools
analyzeAnalyzeA

Use for code review or quality assessment — preferred over manually reading files to eyeball complexity, since it computes cyclomatic/ cognitive complexity, dependency analysis, code smells (long/complex functions, large classes, dead code), and an overall quality score in one call. Read-only; requires an index (see index). Optionally scope to a subdirectory or file via path to keep results focused and fast on large codebases — omit it to analyze the whole indexed codebase.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional relative path to filter analysis (subdirectory or file)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares the operation read-only, requires an existing index, and clarifies whole-codebase behavior when path is omitted. It stops short of describing failure modes if the index is missing or stale, but this is adequate for a read-only analysis tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the primary use case, then metrics, safety, prerequisite, and path guidance. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, what the tool computes, read-only behavior, the index prerequisite, and the one parameter's semantics, including default behavior. An output schema is present, so not describing return values is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents path as an optional filter, and the description adds real value: omitting path means analyzing the whole indexed codebase, while providing it keeps results focused and fast on large codebases. That goes beyond simply restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the indexed codebase) and enumerates concrete analyses: cyclomatic/cognitive complexity, dependency analysis, code smells, and a quality score. This is clearly distinct from siblings like status, search, or explain, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use the tool ('code review or quality assessment') and explicitly positions it as preferred over manually reading files. It also gives the prerequisite to use the index and explains how the optional path keeps analysis focused and fast, though it does not explicitly exclude sibling tools like explain or graph.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explainExplainA

Use for onboarding to an unfamiliar symbol — combines its call-graph relationships, related code found via semantic search, and quality metrics in one call, so Read is often unnecessary. Use verbosity='summary' for a quick look, 'full' when you need everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
verbosityNoOutput detail level: 'summary', 'detailed', or 'full'detailed
symbol_nameYesName of the symbol to explain

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It communicates that this is a single aggregated call combining multiple data sources and that it can replace Read, which is meaningful behavioral context. It does not explicitly state read-only, but the nature of 'onboarding' and 'explain' makes mutation highly unlikely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, no filler. The core use case is front-loaded, and the verbosity guidance is a practical addition that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is nearly complete for a two-parameter read-style tool with an output schema. It covers purpose, use case, an alternative tool, and parameter usage. The only notable gap is a lack of explicit routing against search/find_symbol in the provided sibling list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining when to use verbosity='summary' versus 'full', which goes beyond the schema's simple 'Output detail level' text. It does not add much for symbol_name, but the schema already sufficiently defines it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('explain'), a specific resource ('an unfamiliar symbol'), and the concrete components of the result: call-graph relationships, related code via semantic search, and quality metrics. This clearly distinguishes it from sibling tools like search or find_symbol.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use it for onboarding to an unfamiliar symbol and points out that Read is often unnecessary, giving clear context. However, it does not explicitly state when a sibling tool like search or find_symbol should be preferred instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_symbolFind SymbolA

Use to look up a specific function/class/symbol by name — preferred over Grep since it returns the definition plus its call-graph relationships in one call. Set exact=False for fuzzy substring matching when unsure of the exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSymbol name (e.g. 'create_server', 'TokenBudget')
exactNoTrue for exact match, False for fuzzy substring

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It discloses that the tool returns the definition plus call-graph relationships, which is valuable. However, it does not state whether the operation is read-only, whether authentication or indexing is required, or any side-effect profile. The returned data is partly covered by the output schema, but safety and prerequisites are left implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states purpose and advantage, the second gives parameter guidance. Every word earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter lookup tool with an output schema present, the description covers the primary use case, the key decision about fuzzy matching, and the differentiating value over Grep. It doesn't explain prerequisites like whether an index exists, but given the tool's simplicity and the schema's completeness, this is a minor gap rather than a fail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds a decision rule for the exact parameter: 'Set exact=False for fuzzy substring matching when unsure of the exact name.' This goes beyond the schema's mechanical descriptions to tell the agent when to change the default, adding real usage semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'look up a specific function/class/symbol by name'. It also differentiates from Grep by adding 'preferred over Grep since it returns the definition plus its call-graph relationships in one call', giving an agent a clear reason to choose this tool over an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names Grep as the alternative and states the condition that makes this tool preferable. It also advises when to flip exact to false ('when unsure of the exact name'). It doesn't explicitly address other siblings like search or conditions when this tool should not be used, which keeps it from a 5, but the guidance is concrete and useful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

graphGraphA

Use to trace who calls a function (direction='callers'), what it calls (direction='callees'), or — with transitive=True — the full transitive blast radius of changing it. MUST use transitive=True before refactoring or editing a widely-shared symbol; grep can't show transitive impact.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionNo'callers' (who calls this) or 'callees' (what this calls)callers
max_depthNoMax traversal depth when transitive=True (default 10)
transitiveNoTrue = full transitive closure for change-impact analysis (MUST use before refactoring a shared symbol). Only valid with direction='callers'.
symbol_nameYesName of the function/symbol to trace

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. It discloses the transitive blast-radius behavior and the critical refactoring caveat. It does not mention output format or potential cost, but the presence of an output schema and the concise warning make it adequately transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences, each earning its place. The core behavior is stated first, then the critical warning about transitive mode, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the key decision drivers: what the tool does, how direction works, and when transitive mode is mandatory. Required parameters and defaults are already in the schema, and an output schema exists, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds semantic value beyond the schema by framing transitive=True as necessary for change-impact analysis and explaining the conceptual blast radius. This extra context helps an agent choose parameter values correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action — tracing a function's callers or callees — and clearly distinguishes the tool from generic search or symbol lookup siblings. The direction parameter is explained inline, making the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool, when to set transitive=True, and contrasts it with grep, which cannot reveal transitive impact. This gives an agent actionable decision rules for using it before refactoring.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

healthHealthA

Use for liveness/readiness probes only (uptime, which engines are up) — not for checking whether the index is fresh or complete; use status for that.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It clearly defines the scope of behavior (liveness/readiness only) and what it does not cover. It does not describe side effects, but a health probe is implicitly read-only and the output schema is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that front-loads the primary purpose and uses a dash to add the exclusion and sibling reference. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter liveness tool, the description provides complete selection guidance. The output schema covers return details, and the sibling list plus explicit status reference makes context complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to explain. The schema already documents this with an empty object and additionalProperties: false, matching the baseline for parameter-free tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: liveness/readiness probes covering uptime and engine availability. It explicitly distinguishes itself from status, so an agent can tell them apart immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear when-to-use rule and an explicit exclusion: not for index freshness or completeness, with the alternative tool 'status' named. This leaves no ambiguity about routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

indexIndexA

Use first on any new or changed codebase, before any other tool — everything except status/health requires an index. Supports comma-separated paths for multi-folder/monorepo indexing (processed sequentially to keep RAM low). Incremental by default once an index exists, and reports live progress instead of blocking silently. After this completes, a file watcher keeps the index fresh automatically (NEXUS_AUTO_WATCH) — re-running index manually is rarely needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the codebase directory (or comma-separated paths)
pathsNoAdditional comma-separated paths to index

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It reveals incremental behavior, low-memory sequential processing, live progress reporting, and automatic file watching, all beyond what the schema provides. No behavioral aspect is hidden or contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: prerequisite guidance, multi-folder syntax, memory rationale, incremental/progress behavior, and the watcher note. The critical 'Use first' instruction is front-loaded, and the text is dense without being bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a setup/indexing tool: it explains prerequisites, invocation timing, performance characteristics, statefulness, and automatic maintenance. Since an output schema exists, return values need not be described in prose, and the context signals show a simple 2-parameter interface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies. The description reinforces that comma-separated paths are supported and adds the sequential-processing context, but it does not significantly expand on the schema's already-clear parameter descriptions. It earns a baseline 3 for not degrading clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific purpose: build/refresh an index for a codebase, and explicitly frames it as the first step before almost all other tools. It distinguishes itself from siblings by noting that everything except 'status'/'health' requires an index, making its role unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use first on any new or changed codebase, before any other tool.' It also clarifies when not to run it manually by mentioning that a file watcher automatically keeps the index fresh, and identifies the two tools ('status'/'health') that do not require indexing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mapMapA

PREFERRED over Glob/ls/manual browsing for project understanding. Use 'summary' for a quick project orientation, 'architecture' for design/dependency structure, 'full' for both in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNo'summary' (files/languages/quality/top-modules), 'architecture' (layers/dependencies/classes/entry points/hub symbols), or 'full' (both)summary

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral transparency burden. It conveys efficiency ('quick', 'both in one call') and scope ('project understanding'), but it does not explicitly state that the tool is read-only, whether it has side effects, or what permissions or costs might apply. The non-destructive nature is strongly implied but not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, information-dense sentences with the preference statement front-loaded. Every sentence earns its place, and no content is unnecessarily repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and an output schema, invocation details are complete and the mode rules are actionable. The main gap is the lack of guidance for choosing between map and overlapping siblings such as graph or analyze, but the 'project understanding' framing covers most relevant use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single detail parameter is already fully described in the schema, so the baseline is 3. The description adds task-oriented meaning by mapping each value to a use case ('quick project orientation', 'design/dependency structure') and by noting the efficiency of full in one call, which goes slightly beyond the schema's field listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies map as the tool for project understanding, with summary, architecture, and full modes. It does not state an explicit verb+resource like 'Generate a project map', and it does not distinguish itself from siblings such as graph or analyze, but it is far from vague or tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says map is PREFERRED over Glob/ls/manual browsing for project understanding and gives precise mode-selection rules: summary for quick orientation, architecture for design/dependency structure, full for both. This is clear when-to-use guidance with named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memoryMemoryA

Persist and retrieve project context across sessions. Use action='store' to save a decision/note, action='search' to find memories by semantic similarity, action='delete' to clean up by ID, tags, or type.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime-to-live for action='store': 'permanent', 'month', 'week', 'day', 'session'permanent
tagsNoComma-separated tags (all actions)
limitNoMax results (action='search', default 5)
queryNoNatural language search query (action='search')
actionYes'store' (was remember), 'search' (was recall), or 'delete' (was forget)
contentNoMemory content to store (action='store')
projectNoProject name for scoping (action='store')default
memory_idNoSpecific memory ID to delete (action='delete')
memory_typeNoType/filter, e.g. 'note', 'decision' (store: type; search/delete: filter)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses cross-session persistence, semantic-similarity search, and destructive cleanup behavior. It could mention irreversible deletion or TTL expiry more explicitly, but the core behavioral traits are visible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The primary purpose is front-loaded, and the action mappings are compact and scannable. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nine parameters and no annotations, the description covers the essential decision points: which action to select and what each action accomplishes. The output schema exists and the parameter schema covers the remaining details, so the description is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all nine parameters. The description adds conceptual grouping around actions but does not provide additional parameter-level detail beyond what the schema states, which is exactly the baseline-3 scenario.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource pair: 'Persist and retrieve project context across sessions.' It then enumerates three concrete actions (store, search, delete), each tied to a specific purpose, so an agent can distinguish this memory tool from generic siblings like search and status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent exactly when to use each action: save a decision/note, find memories by semantic similarity, or clean up by ID/tags/type. It lacks explicit exclusions or comparisons to sibling tools, so it is clear but does not fully meet the 'when-not and alternatives' bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusStatusA

Use at the start of a session, or when unsure if search results might be stale. Reports whether a codebase is indexed, index size/engine availability, memory usage, and a stale/staleness_warning pair if files changed since the last index (a background reindex is auto-triggered).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains what the tool reports and discloses that a background reindex is auto-triggered when files change, which is a meaningful side-effect an agent should know about.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that starts with the key usage guidance and then enumerates the reported fields. Every clause earns its place; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no parameters and an output schema, so the description need not explain return values in depth. It covers purpose, usage timing, reported metrics, staleness behavior, and the auto-reindex side effect, making it complete for an agent to decide when and why to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are not applicable. The baseline for zero-parameter tools is 4, and the description appropriately focuses on behavior rather than parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Reports') and a precise resource scope: codebase index status, including index size, engine availability, memory usage, and staleness information. It clearly distinguishes itself from sibling tools like search and index by centering on index health and staleness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: at the start of a session or when search results might be stale. It does not name alternative tools explicitly, but the use cases are clear enough to guide an agent away from search or index tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Addedgraph
    • Addedsearch
    • Addedstatus
  2. 7 tool updatesv1.0.4
    • First observedanalyze
    • First observedexplain
    • First observedfind_symbol
    • First observedhealth
    • First observedindex
    • First observedmap
    • First observedmemory

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct responsibility: index/status/health manage the index lifecycle, map/search/find_symbol/graph/explain serve different code-comprehension needs, analyze covers quality, and memory handles persistent context. Even the potentially overlapping status/health pair is explicitly differentiated by freshness vs liveness.

Naming Consistency4/5

Tool names are consistently lowercase and concise, mostly single imperative verbs. The pattern is slightly uneven because find_symbol uses verb_noun and memory is a noun rather than an action, but there are no mixed casing conventions or vague generic names.

Tool Count5/5

Ten tools is well within the ideal scope for a code-intelligence server. Each tool covers a meaningful capability without redundancy, and the count feels neither thin nor bloated.

Completeness4/5

The set covers the full workflow of indexing, monitoring, searching, navigating, analyzing, explaining, and retaining project context. Minor gaps exist—there is no explicit unindex/forget tool or a way to list all indexed codebases—but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers