scplus-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@scplus-mcp show me the outline of the project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
scplus-mcp
Prepared-index code intelligence for agents and operators.
scplus-mcp is the repository and npm package for scplus, a local code-intelligence engine that serves structural, exact-query, related-search, and research workflows from a validated repo-local index. It ships three connected surfaces: the scplus-mcp MCP server for coding agents, a persistent local bridge for automation, and the scplus-cli Bubble Tea operator console for humans.
The project is built around one operating contract: build a prepared local index, read from one validated active generation at a time, and fail loudly when freshness or validation is broken instead of quietly answering from stale state.
Table of Contents
Related MCP server: codemap
Key Features
Prepared exact-query tools for deterministic lookups such as
symbol,word,outline,deps,status, andchangesRanked related search and broad research over persisted file, chunk, identifier, structure, cluster, and hub artifacts
One shared backend core for MCP and the human CLI, with the CLI connected over the persistent
bridge-serveJSON-line transportRepo-local SQLite machine state rooted at
.scplus/, with active/pending generation promotion and explicitfresh,dirty, andblockedfreshness statesLoud failure semantics for invalid prepared state instead of silent fallback behavior
Suggested hubs and semantic clusters generated from the prepared full index
Shadow restore points for reversible AI-authored edits without mutating git history
A separate Next.js landing/docs app under
landing/, wired to the local package during developmentCommitted real benchmark artifacts under
docs/benchmarks/
Naming And Product Surfaces
This repository uses a few names that matter in different contexts:
Surface | Current name |
Public npm package |
|
Public MCP command |
|
Public human CLI command |
|
Product/brand name |
|
Repo-local state directory used by current source |
|
Runtime env prefix used by current source |
|
Important context:
The current source code uses
.scplus/as the repo-local state root viasrc/core/project-layout.ts.The runtime environment prefix used by current code is
SCPLUS_.
If code and docs disagree, treat the code as authoritative.
Tech Stack
Primary language: TypeScript (ESM)
MCP transport:
@modelcontextprotocol/sdkover stdioPrepared state store: SQLite at
.scplus/state/index.sqliteParsing:
web-tree-sitterandtree-sitter-wasmsRetrieval: lexical plus embedding-backed retrieval persisted into SQLite vector collections
Embedding backends: Ollama by default, OpenAI-compatible embeddings optionally
Human CLI: Go + Bubble Tea
Go toolchain management: Pixi (
go = 1.24.*)Landing/docs app: Next.js 16, React 19, Tailwind CSS 4, OpenNext/Cloudflare tooling
Primary package manager: npm
Prerequisites
Install these before working on the repository:
Node.js
npm
Pixi
Git
Usually also needed for semantic indexing:
Ollama, unless you explicitly choose an OpenAI-compatible embedding backend
Optional:
Bun, if you prefer
bunxwhen generating MCP config instead ofnpx
Notes:
The repository does not currently ship a checked-in
.env.example.The canonical onboarding path for the core package is the install script, not manual npm and pixi commands typed from memory.
Getting Started
Canonical install path
For the main developer/operator workflow, start with the installer:
git clone https://github.com/Cesar514/scplus-mcp.git
cd scplus-mcp
./install-scplus.shTreat ./install-scplus.sh as the primary local setup path for the package and CLI. Manual build steps are documented below so you understand what the installer is doing, but the intended bootstrap flow is through the script.
What ./install-scplus.sh does
The installer:
verifies
nodeverifies
npmverifies
pixiruns
npm installruns
npm run buildruns
npm run build:cliruns
npm linkverifies that
scplus-mcppoints atbuild/index.jsverifies that
scplus-clipoints atbuild/cli-launcher.jsruns a lightweight
scplus-mcp tree "$ROOT_DIR"checkruns a lightweight
scplus-cli doctor --root "$ROOT_DIR"check
If any prerequisite is missing, the script exits fatally instead of guessing.
What you should have after install
After a successful run:
scplus-mcpshould be on yourPATHscplus-clishould be on yourPATHthe TypeScript build output should exist under
build/the Bubble Tea launcher should exist under
build/scplus-cli
Quick verification:
scplus-mcp doctor .
scplus-cli doctor --root .Rebuilding after edits
After editing the TypeScript or Go sources, rebuild both shipped entrypoints with:
npm run build:allThis updates the already linked scplus-mcp and scplus-cli commands in place because npm link points them at this checkout’s build output.
Bootstrapping prepared state for the repository
Once the commands are installed, create prepared repo-local state:
scplus-mcp index .Then validate it:
scplus-mcp validate-index .The strongest success signal is a valid prepared index with:
one active generation
no pending generation unless a rebuild is in progress
serving freshness reported as
fresh
Verifying the user-facing surfaces
Run these from the repository root:
scplus-mcp tree .
scplus-mcp status .
scplus-cli snapshot --root .
scplus-cli doctor --root .What these confirm:
the MCP entrypoint is runnable
the exact-query/git-aware surfaces are reachable
the shared backend can serve the Go operator console
the linked human CLI works against the same backend state
Working on the landing app
The landing/docs application under landing/ is a separate app with its own dependencies. Only do this if you are editing the site itself:
cd landing
npm install
npm run devThe landing app serves on http://localhost:6767.
MCP Client Setup
Supported client targets
The init command can generate MCP config for:
claudecursorvscodewindsurfopencodecodex
Generated config paths:
Target | Output path |
|
|
|
|
|
|
|
|
|
|
|
|
Generate config files automatically
Examples:
scplus-mcp init claude
scplus-mcp init cursor
scplus-mcp init vscode
scplus-mcp init windsurf
scplus-mcp init opencode
scplus-mcp init codexRunner selection:
by default, the command prefers
bunxwhen it detects Bun and otherwise falls back tonpxyou can force a runner with
--runner=npxor--runner=bunx
Examples:
scplus-mcp init codex --runner=npx
scplus-mcp init claude --runner=bunxManual Codex TOML configuration
If you want to configure Codex manually after using the local install script, add this to ~/.codex/config.toml:
[mcp_servers."scplus-mcp"]
command = "scplus-mcp"
args = []
[mcp_servers."scplus-mcp".env]
OLLAMA_EMBED_MODEL = "qwen3-embedding:0.6b-32k"
OLLAMA_CHAT_MODEL = "nemotron-3-nano:4b-128k"
OLLAMA_API_KEY = "YOUR_OLLAMA_API_KEY"
SCPLUS_EMBED_BATCH_SIZE = "8"If you prefer running through npx or bunx instead of the locally linked command, the generated Codex config follows the same structure but sets:
command = "npx"withargs = ["-y", "scplus-mcp"], orcommand = "bunx"withargs = ["scplus-mcp"]
Example JSON-style MCP config
For clients that use JSON config files, the generated config follows this general shape:
{
"mcpServers": {
"scplus-mcp": {
"command": "bunx",
"args": ["scplus-mcp"],
"env": {
"OLLAMA_EMBED_MODEL": "qwen3-embedding:0.6b-32k",
"OLLAMA_CHAT_MODEL": "nemotron-3-nano:4b-128k",
"OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY",
"SCPLUS_EMBED_BATCH_SIZE": "8"
}
}
}
}The exact top-level key differs by client:
mcpServersfor Claude/Cursor/Windsurf-style configsserversfor VS Code’s.vscode/mcp.jsonmcpforopencode.jsonTOML tables for Codex
Models And Embedding Providers
Important note on the Ollama model names in this repo
The model tags shown in this repository, especially:
qwen3-embedding:0.6b-32knemotron-3-nano:4b-128k
should be read as local Ollama variants used in the maintainer environment, not as a claim that these are wholly bespoke model families invented by the project.
Per the current maintainer workflow:
the base models were downloaded from official Ollama sources
the local setup then modified the context window configuration
So in practice, the README examples are documenting the project’s current local runtime tags and expectations, not asserting that the repository itself distributes new model architectures.
Provider overview
The code supports two embedding-provider modes:
Provider mode | Env value | Typical use |
Ollama |
| local/private embeddings |
OpenAI-compatible |
| API-backed embeddings through OpenAI-compatible endpoints |
Ollama path
The default code path is Ollama. A typical local setup looks like:
ollama pull qwen3-embedding:0.6b
ollama pull nemotron-3-nano:4b
ollama serveThen, if your local environment uses extended-context variants or custom local tags, configure the env values that scplus-mcp should actually use:
export OLLAMA_EMBED_MODEL=qwen3-embedding:0.6b-32k
export OLLAMA_CHAT_MODEL=nemotron-3-nano:4b-128kOpenAI-compatible path
For API-backed embeddings:
export SCPLUS_EMBED_PROVIDER=openai
export SCPLUS_OPENAI_API_KEY=YOUR_API_KEY
export SCPLUS_OPENAI_EMBED_MODEL=text-embedding-3-smallOptional custom base URL:
export SCPLUS_OPENAI_BASE_URL=https://your-proxy.example.com/v1Architecture
Directory Structure
.
├── src/ # TypeScript MCP server, backend core, indexing, retrieval, and tool implementations
│ ├── cli/ # Shared backend core, bridge commands, doctor/report formatting
│ ├── core/ # Project layout, embeddings, parser runtime, locks, lifecycle helpers
│ ├── git/ # Shadow restore-point logic
│ └── tools/ # Public indexing, query, lint, research, hub, and recovery tools
├── cli/ # Go Bubble Tea operator console
│ ├── cmd/scplus-cli/ # Go CLI entrypoint
│ └── internal/ # Backend client, hubs flow, watcher integration, UI rendering
├── landing/ # Separate Next.js marketing/docs application
├── docs/ # Architecture notes, benchmark artifacts, snapshots, and images
├── test/ # TypeScript tests, demos, and fixtures
├── .scplus/ # Generated repo-local prepared state
├── package.json # Root package metadata and Node build/test scripts
├── pixi.toml # Project-local Go toolchain and CLI tasks
└── install-scplus.sh # Canonical local install scriptRuntime Surfaces
The repository exposes three distinct but connected runtime surfaces:
Surface | Purpose | Backing implementation |
| Agent-facing MCP server and CLI-style local commands |
|
| Structured local automation interface over the shared backend core |
|
| Human operator console and a few direct Go subcommands |
|
Important constraint:
the Go CLI is not a second indexing engine
it is a client of the same backend core used by the MCP server
Request Lifecycle
For agent/MCP requests:
Agent or MCP client
-> scplus-mcp (src/index.ts)
-> shared backend core / tool implementation
-> prepared index in .scplus/state/index.sqlite
-> formatted MCP responseFor human operator requests:
scplus-cli
-> Go backend client
-> persistent bridge-serve session
-> shared backend core
-> prepared index in .scplus/state/index.sqlite
-> operator UI panes / plain-text outputServing And Generation Contract
The prepared-state contract documented by current code and architecture docs is:
one active generation is the serving source of truth
rebuilds and repairs can write a pending generation first
pending generations are promoted only after validation succeeds
serving freshness is explicit and can be
fresh,dirty, orblockedinvalid or blocked prepared state is supposed to fail loudly rather than degrade silently
The short authoritative architecture summary lives in architecture.md.
Query Model
The codebase implements a two-lane query model:
Exact lane:
symbol,word,outline,deps,status,changesRanked lane:
searchwithintent="related"Broad report lane:
research
The product contract is that exact lookups remain the cheapest deterministic path and broader retrieval only runs when exact lookup is insufficient.
Project State Layout
Current code uses this repo-local state root:
.scplus/
├── state/
│ └── index.sqlite
├── hubs/
│ └── suggested/
└── locks/Observed in the current checkout after indexing:
.scplus/state/index.sqlite.scplus/hubs/suggested/.scplus/locks/
Current source code uses .scplus/.
Core Component Map
src/core/
project-layout.tsdefines the.scplus/layoutembeddings.tsmanages provider-backed embeddings, SQLite vector namespaces, runtime options, and generation-aware cache invalidationtree-sitter.tsandparser.tsprovide structural parsingruntime-locks.tscoordinates cross-process ownershipprocess-lifecycle.tsmanages idle shutdown, parent monitoring, and cleanup
src/tools/
index-codebase.ts,index-stages.ts, andindex-reliability.tsdrive indexing, validation, and repairexact-query.tsimplements the fast exact-query substratequery-intent.ts,unified-ranking.ts,semantic-search.ts, andsemantic-identifiers.tsimplement ranked searchresearch.tsbuilds larger bounded subsystem reportsfeature-hub.ts,hub-suggestions.ts, andcluster-artifacts.tsimplement hub and cluster viewsstatic-analysis.tsandblast-radius.tsprovide diagnostics and usage tracingpropose-commit.tsandwrite-freshness.tsimplement guarded writes and synchronous freshness repair
cli/
cli/cmd/scplus-cli/main.gois the Go entrypointcli/internal/backend/is the bridge client layercli/internal/ui/renders the operator consolecli/internal/hubs/powers manual hub creation
Operator Console Behavior
The shipped human CLI is more than a thin wrapper. The previous README’s high-value description is still accurate enough to preserve at a high level:
it has a navigation pane, overview/content pane, detail pane, and jobs/logs area
it exposes operator health, serving state, queue state, history, and observability
it supports a command palette, filtering, export, and navigation history
it streams backend events over the persistent
bridge-servetransport
The committed plain snapshot is in cli-snapshot.txt.
Watcher And Scheduler Semantics
The backend, not the Go frontend, owns watcher behavior:
native recursive filesystem watchers are not used by default
a bounded backend scanner covers repositories in budgeted directory and file ticks
bursty path changes are deduped
the scheduler can queue or supersede stale pending work
ordinary edits can become refresh jobs
dependency/config changes can escalate to full index jobs
job, watch, and log events are streamed over
bridge-servediagnostics report scanner status, native watch count, scanner queue sizes, and last full coverage time
Environment Variables
The repository does not have a checked-in .env.example, so the source is the authority. The table below reflects variables verified in src/core/embeddings.ts, src/index.ts, and the generated config helpers.
Provider selection and model configuration
Variable | Required | Purpose | Default / source |
| No | Select embedding provider mode |
|
| No | Ollama embedding model tag |
|
| No | Chat model used in generated config examples |
|
| No | Override Ollama host | unset |
| Conditional | Required only if your Ollama setup needs auth | unset |
| Conditional | Preferred OpenAI-compatible API key when provider is | unset |
| Conditional | Fallback alias for API key | unset |
| No | Preferred OpenAI-compatible base URL |
|
| No | Fallback alias for base URL |
|
| No | Preferred OpenAI-compatible embedding model |
|
| No | Fallback alias for embedding model |
|
Indexing, chunking, and refresh behavior
Variable | Required | Purpose | Default / source |
| No | Embedding batch size, clamped in code |
|
| No | Chunk chars before vector merge, clamped in code |
|
| No | Max file size for embed-aware search paths | tool fallback in |
| No | Max directories scanned per bounded watcher tick |
|
| No | Max files fingerprinted per bounded watcher tick |
|
| No | Max scanner milliseconds per tick |
|
| No | Max concurrent file stat calls per scanner tick |
|
| No | Scanner tick interval cap used while watching |
|
| No | Max detailed pending paths before escalating to full rebuild |
|
| No | Max changed paths included in one streamed event payload |
|
| No | Idle shutdown timeout for MCP process | unset |
| No | Parent-process polling interval | unset |
Advanced Ollama runtime options
Variable | Required | Purpose |
| No | Pass |
| No | Pass |
| No | Pass |
| No | Pass |
| No | Pass |
| No | Pass |
Available Scripts
Root package scripts
Command | Description |
| Compile the TypeScript MCP server into |
| Use Pixi to build the Go Bubble Tea CLI |
| Build both the TypeScript server and the Go CLI |
| Run TypeScript in watch mode |
| Start the built Node entrypoint |
| Run the main TypeScript test suite |
| Run the Go CLI test suite through Pixi |
| Run the demo/test harness |
| Run all Node and Go test suites |
Landing app scripts
Run these from landing/:
Command | Description |
| Start the Next.js landing app on port |
| Build the landing app |
| Run the built landing app on port |
| Lint the landing app |
| Build the OpenNext/Cloudflare target |
| Build and run a Cloudflare preview |
| Build and deploy the Cloudflare target |
scplus-mcp local command surface
When you run scplus-mcp as a shell command after ./install-scplus.sh, it supports both CLI-style local commands and the MCP stdio server mode.
Command | Purpose | Important flags / forms |
| Generate client config for |
|
| Build or refresh prepared repo-local state |
|
| Render the structural tree |
|
| Render a file skeleton |
|
| Validate prepared state |
|
| Alias for | same flags as above |
| Repair prepared state |
|
| Alias for |
|
| Render a git-aware status summary |
|
| Render a git-aware changes summary |
|
| Render persisted semantic cluster output |
|
| Render hub output |
|
| Alias-style hub discovery entrypoint | same flags as |
| Render restore-point history |
|
| Alias for |
|
| Print a combined health/observability report |
|
| Run one-shot structured backend commands | see bridge table below |
| Start the persistent JSON-line bridge service | no flags |
| Start the MCP stdio server rooted at the given path or current directory | path only |
The shell-entry aliases currently implemented in src/cli/commands.ts are:
validate-indexandvalidate_indexrepair-indexandrepair_indexrestore-pointsandrestore_pointshubsandfind-hub
MCP Resource And Tool Catalog
Public MCP resource
The MCP server exposes one resource:
Resource | URI | Purpose |
|
| Fetch the current repo instruction markdown from the published instructions source URL |
Full public MCP tool list
Current public MCP tools registered in src/index.ts:
Index and navigation tools
Tool | Purpose | Key parameters |
| Create or refresh | `mode?: "core" |
| Validate the prepared index for consistency and version compatibility | `mode?: "core" |
| Repair a prepared index stage or full mode, then validate | `target: "core" |
| Render the structural repository tree |
|
| Show detailed signatures and type surfaces for one file |
|
| Render persisted semantic cluster and subsystem views |
|
| List, rank, inspect, or orphan-check manual/suggested hubs |
|
Exact-query tools
Tool | Purpose | Key parameters |
| Exact symbol lookup from the prepared fast-query substrate |
|
| Tiny indexed word/phrase lookup |
|
| Compact imports/exports/symbol outline for a known file |
|
| Direct and reverse dependency info for one indexed file |
|
| Tiny git worktree summary |
|
| Git change summary, optionally scoped to one file |
|
Search and research tools
Tool | Purpose | Key parameters |
| Intent-routed exact or related search over prepared artifacts |
|
| Broad bounded report combining retrieval, structure, clusters, and hubs |
|
| Run the built-in real benchmark harness | no parameters |
Analysis, write, and recovery tools
Tool | Purpose | Key parameters |
| Trace symbol usage before modification or deletion |
|
| Run native linter/compiler-backed analysis |
|
| Guarded write path with restore-point creation |
|
| List shadow restore points | no parameters |
| Restore files from a specific restore point |
|
Bridge And Automation Surface
The repository has two non-MCP local automation surfaces:
bridge <subcommand>for one-shot JSON outputbridge-servefor a persistent JSON-line session used byscplus-cliand local tooling
bridge subcommands
The one-shot bridge wrapper exposes these subcommands:
Subcommand | Purpose | Key flags / args |
| Return doctor output as JSON |
|
| Return tree output as JSON |
|
| Return worktree status as JSON |
|
| Return change summaries as JSON |
|
| Return restore points as JSON |
|
| Return validation report as JSON |
|
| Return cluster output as JSON |
|
| Return hub output as JSON |
|
| Return exact symbol results plus freshness header |
|
| Return word results plus freshness header |
|
| Return outline payload plus freshness header |
|
| Return dependency payload plus freshness header |
|
| Return search report plus freshness header |
|
| Return research report plus freshness header |
|
| Return lint/static-analysis report |
|
| Return blast-radius report |
|
| Return checkpoint report |
|
| Return restore payload |
|
| Return repair payload |
|
Persistent bridge-serve protocol
bridge-serve runs a long-lived JSON-line session with these frame shapes:
{"type":"request","id":1,"command":"doctor","args":{"root":"."}}
{"type":"response","id":1,"ok":true,"result":{...}}
{"type":"event","kind":"log","message":"..."}The persistent shared command executor supports everything listed above plus these backend-control commands:
Persistent command | Purpose |
| Trigger index or refresh work through the shared backend |
| Control queued work with |
| Enable or disable watching, optionally with debounce override |
| Ask the persistent bridge service to shut down |
Alias notes for the bridge layer:
find-hubandhubsnormalize onto the same implementationunderscore forms are normalized to hyphen forms where applicable
validate-indexandrepair-indexare the canonical bridge names
Persistent-only command arguments
Command | Key arguments |
|
|
|
|
|
|
| none |
Human CLI Surface
The Go operator console is exposed as scplus-cli.
Supported direct scplus-cli subcommands
Command | Purpose | Important args |
| Launch the interactive operator console | optional |
| Print a plain-text health report |
|
| Render a one-shot UI snapshot and exit |
|
`scplus-cli index --root . [auto | core | full]` |
| Print the prepared tree view |
|
| Print hub output |
|
| Print cluster output |
|
| Print restore-point history |
|
| Create a manual hub file |
|
scplus-cli only has the direct shell subcommands listed above. The much larger operator-facing command set lives inside the interactive UI and is routed over the persistent bridge-serve backend session.
Human CLI capabilities
Based on the current UI implementation and the previous README’s still-useful context:
animated/operator-branded top shell
typed navigation across overview, tree, hubs, restore points, clusters, dependencies, search, research, lint, blast-radius, checkpoint, status, and changes
detail views for selected items and export-ready content
jobs and log panes fed by backend events
command palette, filtering, history, and export actions
shared backend session over
bridge-servebackend-owned watcher/scheduler state surfaced in the operator experience
Interactive operator commands exposed inside scplus-cli
The Bubble Tea UI exposes a broader action catalog than the direct shell subcommands. These commands are available from the command palette and, where applicable, from the sidebar action list.
Operator command | What it does | Backing surface |
| Quit the operator console | local UI action |
| Return to the main operator surface | local UI action |
| Move backward through navigation history | local UI action |
| Move forward through navigation history | local UI action |
| Open the health and observability overview | local UI view |
| Open the prepared tree section |
|
| Open manual and suggested hubs |
|
| Open the current issue/detail view | local UI view |
| Open the backend log history pane | streamed |
| Open restore points and recovery state |
|
| Open persisted semantic clusters |
|
| Open the git worktree status table |
|
| Open changed-file stats and ranges |
|
| Open ranked search output |
|
| Open exact symbol output |
|
| Trigger indexing through the shared backend |
|
| Re-run the last sync strategy |
|
| Refresh visible backend-backed sections | repeated bridge refresh calls |
| Drop queued watch work before it starts |
|
| Replace stale queued work with the newest plan |
|
| Enable or disable watcher-driven refreshes |
|
| Start the manual hub-creation flow | local UI wizard plus hub creation |
| Export the active pane or detail content to | local UI action |
| Open keybinding and behavior help | local UI overlay |
| Rank hubs by natural-language query |
|
| Run exact mixed search |
|
| Run related ranked search |
|
| Build the broad explanation-backed report |
|
| Find an exact file/path hit and open it in Search |
|
| Find an exact symbol hit and open it in Search |
|
| Run exact symbol lookup directly |
|
| Run exact word lookup directly |
|
| Load the prepared outline for one file |
|
| Load direct and reverse dependencies for one file |
|
| Run native lint diagnostics |
|
| Trace symbol usage across the repo |
|
| Save the current detail pane to a repo file via checkpoint flow |
|
| Restore one shadow restore point by id |
|
Human CLI keybindings
The current UI wiring exposes these interaction patterns directly in the Go operator console:
:orCtrl+Popens the command palette./starts in-section filtering.bandfmove backward and forward through navigation history.eexports the current pane or detail content into.scplus/exports/.?opens the help overlay.TabandShift+Tabmove focus across panes and overlays.Arrow keys plus
j/kmove through lists and tables.Enteropens the selected row or confirms the active prompt action.Escexits overlays, prompts, or focus modes.Mouse wheel and pointer focus are supported across sidebar, content, detail, jobs, and logs panes.
Benchmarks
The committed benchmark artifacts are produced by the real evaluation harness under docs/benchmarks/.
Human-readable summary: latest.md
Machine-readable report: latest.json
Current committed numbers from the checked-in benchmark summary:
Lane | Samples | p50 ms | p95 ms | p99 ms |
Exact | 5 | 3.14 | 4.07 | 4.07 |
Related | 7 | 55.95 | 57.64 | 57.64 |
Research | 3 | 63.52 | 64.23 | 64.23 |
Quality category | Passed | Total |
Scenario coverage | 10 | 10 |
Exact lookup accuracy | 5 | 5 |
Related-search relevance | 4 | 4 |
Symbol resolution accuracy | 3 | 3 |
Dependency graph accuracy | 3 | 3 |
Hub suggestion quality | 4 | 4 |
Research quality | 3 | 3 |
The current committed run also records:
22golden operator questions0/4stale-after-write failures0/2restore failures251Tree-sitter parses247parser reuses
This matters because the benchmark suite is exercising not just indexing latency, but also validation quality, rename/write freshness, and broken-state behavior.
References
zilliztech/claude-context: prior art for codebase-context workflows, repository navigation patterns, and agent-facing context tooling that influenced the product direction.
License
This project is licensed under the MIT License. See LICENSE for the full text.
Available Tools
21 toolsblast_radiusA
Before deleting or modifying code, check the BLAST RADIUS. Traces every file and line where a specific symbol (function, class, variable) is imported or used. Prevents orphaned code. Also warns if usage count is low (candidate for inlining).
Inputs: symbol_name (required), file_context.
changesA
Return a tiny git change summary, optionally for one file. Use this for exact changed-file inspection and line-range summaries instead of broader repository search.
Inputs: path, limit.
checkpointA
The ONLY way to write code. Validates the code against strict rules before saving: 2-line header comments, FEATURE tags, max nesting depth, max file length. Creates a shadow restore point before writing. REJECTS code that violates formatting rules.
Inputs: file_path (required), new_content (required).
clusterA
Browse the codebase by MEANING, not directory structure. Renders persisted semantic clusters, subsystem summaries, and related-file neighborhoods from the full index instead of recomputing them on demand.
Inputs: max_depth, max_clusters.
depsA
Return compact direct and reverse dependency information for one indexed file. Use this for exact dependency tracing instead of broader related search.
Inputs: target (required).
evaluateA
Run the built-in real benchmark harness across small, medium, monorepo, polyglot, ignored-tree, broken-state, and rename-freshness scenarios. Reports golden-query accuracy, validation rates, freshness reliability, and p50/p95/p99 query latency.
Inputs: no named parameters.
find_hubA
Obsidian-style feature hub navigator. Hub files are .md files containing [[path/to/file]] wikilinks that act as a Map of Content. Modes: (1) No args = list all hubs plus persisted suggested hubs and feature-group candidates, (2) hub_path or feature_name = show hub with bundled skeletons of all linked files, (3) query = rank candidate hubs by keyword, semantic, or mixed retrieval, (4) show_orphans = find files not linked to any hub. Prevents orphaned code and enables graph-based codebase navigation.
Inputs: query, hub_path, feature_name, ranking_mode, +1 more.
indexA
Create or refresh the .scplus project state for this repo. Builds the repo-local scplus layout, writes project config plus a context-tree snapshot into the durable sqlite substrate at .scplus/state/index.sqlite, persists stage state, indexing status, embedding caches, restore points, and file/identifier indexes there, and in full mode also persists chunk and code-structure artifacts with explicit contract metadata and no JSON mirrors.
Inputs: mode.
lintA
Run the project's native linter/compiler to find unused variables, dead code, type errors, and syntax issues. Delegates detection to deterministic tools instead of LLM guessing. Supports TypeScript, Python, Rust, Go.
Inputs: target_path.
outlineA
Return a compact file outline from the prepared fast-query substrate. Use this when you know the file and want imports, exports, and symbols without broader search or full-body reads.
Inputs: file_path (required).
repair_indexA
Repair the prepared index by rerunning the full pipeline or a specific durable stage, then validate the repaired state.
Inputs: target (required).
researchA
Aggregate ranked code retrieval, structure-backed related files, subsystem summaries, and relevant hubs into one bounded report. Use this for broad subsystem understanding after exact lookup or related-item search is no longer enough.
Inputs: query (required).
restoreA
Restore files to their state before a specific AI change. Uses the shadow restore point system. Does NOT affect git history. Call restore_points first to find the point ID.
Inputs: point_id (required).
restore_pointsA
List all shadow restore points created by checkpoint. Each point captures the file state before the AI made changes. Use this to find a restore point ID for undoing a bad change.
Inputs: no named parameters.
searchA
Route repository search by explicit intent. Use intent='exact' for deterministic fast-substrate answers when you know the exact symbol or file target, and intent='related' for ranked related-item and pattern discovery over the prepared full-engine artifacts.
Inputs: query (required), intent (required), search_type (required), top_k, +2 more.
skeletonA
Get detailed function signatures, class methods, and type definitions of a specific file WITHOUT reading the full body. Shows the API surface: function names, parameters, return types, and line ranges. Perfect for understanding how to use code without loading it all.
Inputs: file_path (required).
statusA
Return a tiny git worktree status summary for the current repository. Use this for branch and dirty-file checks instead of reading broader change context.
Inputs: limit.
symbolA
Run a tiny exact symbol lookup over the prepared fast-query substrate. Use this when you already know the symbol name and want deterministic exact matches instead of ranked related search.
Inputs: query (required), top_k.
treeA
Get the structural tree of the project with file headers, function names, classes, enums, and line ranges. Automatically reads 2-line headers for file purpose. Dynamic token-aware pruning: Level 2 (deep symbols) -> Level 1 (headers only) -> Level 0 (file names only) based on project size.
Inputs: max_tokens, depth_limit, target_path, include_symbols.
validate_indexB
Validate that the prepared sqlite-backed index is present, version-compatible, and internally consistent for core or full mode.
Inputs: mode.
wordA
Run a tiny indexed word lookup over paths, headers, symbols, and content snippets. Use this for exact words or short phrases before escalating to broader ranked search.
Inputs: query (required), top_k.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Several tools have overlapping purposes, such as tree/skeleton/outline for file structure and symbol/word/search for lookup, making it easy for an agent to select the wrong one. Descriptions help but do not fully resolve the ambiguity, and groups like research/cluster/find_hub blur boundaries further.
Names are a mix of single words (status, tree, symbol, outline, lint) and verb_noun phrases (validate_index, repair_index, restore_points, find_hub, blast_radius) with no consistent pattern. This inconsistency makes it harder to predict related tool names or infer their function.
At 21 tools, the surface is borderline heavy, though the server covers a broad and complex domain. Some tools could be consolidated (e.g., skeleton vs outline), but the count is not extreme enough to be problematic.
The toolset covers the full lifecycle of indexing, validation, repair, retrieval, dependency tracing, linting, code writing, and restoration. The main gap is the absence of a raw file-content read tool, but this appears to be an intentional design to favor structural summaries over full-body reads.
Maintenance
Related MCP Connectors
Repository knowledge graph MCP server for codebase understanding and debugging.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseAqualityDmaintenanceA local-first MCP server that enables AI tools to safely inspect and search code repositories, providing indexing, deterministic BM25 search, code outlining, and context bundles without code modification.91MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.2MIT
- FlicenseNot gradedqualityCmaintenanceProvides a local-first code indexing and search engine for coding agents via MCP, enabling precise codebase queries, symbol lookup, and freshness-aware retrieval.-
- AlicenseNot gradedqualityBmaintenanceLocal-first code intelligence MCP server that enables coding agents to search code, inspect structure, read exact ranges, and explore Git history with explicit token budgets.158Apache 2.0