Skip to main content
Glama

Malong LiuHe(码龙·六合工具)

LLM-Native Code Operations Toolkit — Code tooling reinvented for the LLM that has no hands, no eyes, and no memory.

English | 简体中文 | Docs | GitHub

wulun811/LiuHe MCP server tests tools languages read write memory concurrency throughput token license version commits

Malong LiuHe is a toolkit built for LLMs rather than humans. It ships two components:

  • malong/ — an MCP toolset whose default tier is the Six-He line (13 tools: code_task → code_read → code_patch / code_batch → code_check → code_control, with task state, evidence and structured next_action hand-back built in); the classic full catalog (44) and the diagnostic tier (18) are one env away — MALONG_INTERFACE=classic / MALONG_INTERFACE=diagnostic. The catalog spans symbol read/write, indexing, impact analysis, reference tracing, call graphs, dead-code detection, code review, security scanning, atomic batch editing, test orchestration, pipeline verification, plus capability discovery (code_query mode=capabilities/capability) and the ADR-018 full-call outlet (invoke_capability) — served to the LLM over MCP (JSON-RPC over stdio). Since 0.5.24 the Six-He line is the default; classic remains the full catalog.

  • malong-parse/ — a Rust parsing service: a tree-sitter-based multi-language symbol extraction engine (JavaScript/TypeScript/TSX/Python/Go/Rust/C/C++/Java/Bash), talking to the toolset over a Unix socket, with an LRU tree cache and batched parallel extraction.

Core Idea

Traditional tools (git, sed, IDE) assume a user with hands, eyes, and memory. An LLM has none of these. Malong LiuHe is redesigned around that fact:

Missing

Design Consequence

No hands

Operations must be atomic, undoable, retryable (edit_transaction with rollback and undo journal)

No eyes

Output must be structured and self-explanatory (JSON for direct consumption; errors carry suggestion/next_action)

No memory

Every call is self-contained (takes workspace_dir); optimistic concurrency with version anchors (read_symbol → write_symbol(base_version) conflict state machine)

Related MCP server: mcp-reposkein

Performance (Measured)

Metric

Value

Note

Small-file read P95

1ms

50 runs, warmed

Small-file write P95

7ms

30 runs, incl. post-write re-index

repo_map

98ms

down from tens of seconds (SQLite index + Rust parsing)

Memory

RSS 134MB / 26%

under a real docker --memory=512m cgroup limit

Concurrency

128 concurrent / 256 in-flight requests, zero OOM

32-way mixed read+write on one hot file, no tearing, DB integrity_check PASS

Throughput

~588 calls/s

single-threaded ceiling — 60–600× real LLM demand

Token estimate (fixed-path)

↓65.3%

scripted measure-trail.js: 6-step legacy chain → 3-call primitives, 7673 → 2662 chars/4 est. Fixed editor path only — not a host-vs-malong nor an agentic-conversation result.

Call reduction (fixed-path)

↓50.0%

6 calls (legacy chain) → 3 calls (primitives); same scripted path

Tool-description compression

44 classic tools ≈ 1.33k tokens

tiered: core kept, low-freq ≤70 chars, verbose ≤230; detail flows via next_step hints

Default-tier catalog tax (per turn)

13 tools = 16.5 KB ≈ 4.86k tokens

descriptions 2.0 KB (≈0.60k) + inputSchema 14.5 KB (≈4.26k) — the schema is 88% of it; to shrink the catalog, cut the parameter surface, not the prose

Index throughput

538 files / 7s

scoped reindex, measured

dry_run fidelity

47/47

golden-hash comparison across 3 languages, 100%

Concurrent writes to same symbol

16/16

exactly one winner + one conflict, zero silent overwrites

Language Support

Language

Symbol Extraction

Reference Extraction

JavaScript / TypeScript / TSX / JSX / MTS / CTS

✓

✓

Python

✓

✓

Go

✓

✓

Rust (impl blocks / trait / enum semantics)

✓

✓

C / C++ (incl. headers)

✓

✓

Java

✓

✓

Bash

✓

✓

Tool Overview

Category

Tools

Six-He line (graph + stateful — recommended daily entry)

code_task (resolve + plan) → code_read (materials + read_ref) → code_patch / code_batch / code_maintain (journaled writes) → code_check (evidence) → code_control (status / resume / expand / reopen / job); plus code_status, code_query, code_audit, code_worktree, invoke_capability, edit_transaction — 13 tools, env-gated

I/O primitives

read_symbol (symbol read + version), write_symbol / write_symbols (safe write: conflict state machine + atomic write + undo)

Index & search

reindex, symbol_search, code_search (keyword + regex intent patterns — NOT semantic search), repo_map (98ms file map; skeleton pagination: page/page_size/prefix — truncated output always carries the full top-level skeleton with page numbers)

Analysis

impact_analysis (blast radius + risk), call_chain, references, dep_graph, inspect (outline + refs + call chain in one), trace_symbol (constant tracing + hardcoded copies)

Editing

edit_batch, edit_transaction (atomic txn + rollback + cross-session lock + dry-run preview + create), edit_collision_guard (write conflict detection), sandbox_validate (pre-write validation), diff_facts (symbol changes + test sync), rename_symbol (atomic cross-file rename), git_worktree (isolated branch + verify + merge)

Quality gates

code_review, security_review (regex security patterns), code_quality (5-dim probe), style_sniffer, guard_patterns, naming_consistency, exception_guard, config_drift, dependency_gatekeeper, fix_imports, sweep_dead_code, mock_sync — all pure regex/AST, zero LLM calls, deterministic

Engineering

test_bridge (run/suggest/discover), find_tests, verify_pipeline (lint/test/typecheck stages), debug_runner (error analysis), patch_parser (SEARCH/REPLACE), tsc_check, spec_gen, active_todos

System

health, gc, feedback

Long test suites must run in the background. The MCP request has a hard 120s ceiling and a foreground stage is capped at 110s, so a suite that takes minutes is reported as failed — that is a request-budget truncation, not a code defect. Run it as a background job instead: code_check with run: true, async: true (600s cap), then poll with code_control(action="job").

Architecture

┌─────────────────────────┐     ┌──────────────────────────────┐
│  LLM Client (MCP)       │     │  malong-parse (Rust daemon)  │
│  malong/ 13 six-he      │◄───►│  tree-sitter, 10 languages   │
│  (+44/18 gated)         │     │  LRU tree cache 50MB / batch │
│  Unix socket client     │     │  catch_unwind crash recovery │
└─────────────────────────┘     └──────────────────────────────┘
  • All parsing is done by the Rust service (zero tree-sitter bindings on the Node side)

  • Index is SQLite (WAL mode, multi-process safe), isolated per workspace

  • LRU tree cache (50MB / 5min TTL), batched extraction 50 files/batch

  • Daemon multi-session safety: circuit breaker + liveness probe + cross-session coordinated restart (O_EXCL lock) — a slow request in one session never stalls others

Self-Hosting (Dogfooding)

30+ rounds of "Malong reviews Malong": the toolset audits and fixes its own code, with dozens of real bugs fixed and locked by tests — including directory-scope filtering gaps, false dead-code reports for registration patterns, lost constant read-sites, and SQL parameterization cleanup. Every round grew the suite (now 166 JS test files, full chain 0 failures). Latest round (r5): cross-file reference resolution is now import-aware — member calls such as path.join no longer bind to same-named local symbols (216 false bindings in this repo alone), cross-language (Python↔JS) links are blocked by a language-family filter, and aliases resolve through the import graph (ESM specifier scanning added on the JS side) — locked by test-crossfile-resolve (14 assertions, red→green); the DSH bridge also now pins MALONG_STATE_DIR when spawning the server, locked by test-dsh-bridge.

Scan Boundaries (limits acknowledged; committed within)

Deterministic scanners only — regex pattern matching and reference graphs. No control-flow, data-flow, or cross-module semantic coverage. 0 findings ≠ clean; high scores ≠ healthy.

  • security_review scans: injection (eval/Function-ctor, exec/spawn string building, template ${}, $() substitution, SQL concat), XSS, hardcoded secrets, CORS *, timing/insecure compare, dotenv. Not scanned: SSRF, XXE, deserialization, auth/logic flaws, control-flow defects.

  • sweep_dead_code reference scope: import graph + fixed text-ref fallback (.sh/.json/.md etc.); CLI-string references count as alive (miss-over-delete). Not scanned: dynamic/reflection wiring.

  • Commitment: issues in scope get fixed; covered patterns are test-locked; new rules must stay within committed categories.

Quick Start

npm ci installs better-sqlite3 (the full SQLite backend); this is the default recommended path:

# 1) Get the parsing daemon — download a prebuilt binary from releases/, or build:
cd malong-parse && cargo build --release && cp target/release/malong-parse ~/.local/bin
malong-parse &                                   # start the daemon (Unix socket)

# 2) Install the toolset (npm ci installs the full better-sqlite3 backend)
cd ../malong && npm ci

# 3) Register the MCP server (works with any MCP client, e.g. opencode / Claude Desktop)
#    opencode (project-root opencode.json; Windows paths use double backslashes, Linux/macOS forward slashes):
#    {
#      "mcp": {                                    # opencode V2 native: servers grouping (V1 used direct mcp.<name>)
#        "servers": {
#          "malong": {
#            "type": "local",
#            "command": ["node", "--max-old-space-size=512", "N:\\repo\\liuhe\\malong\\mcp-server.js", "--workspace", "N:\\repo\\liuhe"],
#            # default since 0.5.24 = Six-He line (13 tools); this block is optional now — delete it for the classic 44 catalog
#            "environment": { "MALONG_INTERFACE": "graph", "MALONG_ENTRY_STATE": "1" }
#          }
#        }
#      }
#    }
#    Claude Desktop (verified on Windows: %APPDATA%\Claude\claude_desktop_config.json):
#    {
#      "mcpServers": {
#        "malong": { "command": "node", "args": ["/path/to/malong/mcp-server.js"], "env": { "MALONG_INTERFACE": "graph", "MALONG_ENTRY_STATE": "1" } }
#      }
#    }

# 4) Ask your LLM: "search for the symbol 'handle' in my workspace"

#    DeepSeek Harness (dsh web) — auto session-workspace convenience (extra, optional):
#    Run once on the dsh host (Linux/macOS):
#      Option A (npm, one line — full backend + platform binary included):
#        dsh plugin --profile web add @jieai/dsh-malong-bridge
#        pkill -f "dsh web"; dsh web --port 3456 --host 0.0.0.0 --trusted-host <LAN IP>
#      Option B (script, points at a checkout of this repo):
#        bash malong/dsh/install-dsh.sh         # idempotent; edits ~/.dsh/profiles/web/cordis.patch.yml with backup
#    The bridge exposes the Six-He line (13 tools: code_task/code_read/code_patch/...) as malong__* and auto-fills workspace_dir from the
#    current conversation's workspace (no per-call path needed; explicit paths still win).
#    Need the classic full catalog (44) or the diagnostic tier (18)? export MALONG_INTERFACE=classic|diagnostic on the dsh host.
#    Full guide incl. index rules: malong/dsh/DSH-INTEGRATION.md
#    Troubleshooting: if EVERY malong__* call hangs until timeout, the bridge's
#    mcp-server subprocess is gone. The bridge now auto-restarts it (exponential
#    backoff, pending calls fail fast with "restarting — retry shortly"); if that
#    keeps failing, restart dsh web: kill <dsh web pid> && dsh web --port 3456 ...

SQL backend note: the default is the full better-sqlite3 backend. If npm install fails (offline / no build toolchain / Node < 20), the server automatically degrades to the vendored sql.js WASM sandbox backend (malong/vendor/, zero-dependency, no network) — the startup log shows which backend is active and the upgrade command. Data files are fully compatible between backends (both are SQLite).

Zero-build deployment (degraded path: sandbox / offline environments)

For environments with Node >= 20 and no npm access (no npm ci, no native compilation), everything runs from the repo files as-is (Linux/Windows — the prebuilt binaries are linux-x86_64 and windows-x86_64). On this path SQLite runs on the sql.js sandbox backend (degraded):

# 0) Clone, then enter the toolset directory:
git clone <repo-url> liuhe && cd liuhe/malong

# 1) Parse daemon — prebuilt binary from releases/ (no cargo needed):
mkdir -p ~/.local/bin
tar -xzf ../releases/malong-liuhe-0.5.29-linux-x86_64.tar.gz
cp malong-parse/target/release/malong-parse ~/.local/bin
malong-parse &                                   # start the daemon (socket: /tmp/malong-parse-$UID.sock)

# 2) Run the toolset — zero npm install:
node --max-old-space-size=4096 mcp-server.js --workspace /path/to/project
# vendored SQLite (sql.js WASM) auto-enabled when better-sqlite3 is unavailable

# 3) Self-check (30s, optional):
node tests/test-db-adapter.js   # 22 assertions: sql.js backend + persistence
node tests/test-mcp-server.js   # 37 assertions: MCP stdio + daemon round-trip

Windows users: use malong-liuhe-0.5.29-windows-x86_64.tar.gz from GitHub Releases (contains malong-parse.exe), extract and put it on PATH; the MCP server auto-starts the daemon, so step 1's malong-parse & is not required. The mkdir -p/tar -xzf above are Unix syntax — on Windows use any extractor (tar -xzf works on Win10+).

Note: if the daemon is not running, parse-dependent tools (symbol extraction etc.) degrade; the SQLite-backed tools (repo-map / code-index / health-check) still work.

  • See THIRD_PARTY_NOTICES.md for the vendored component.

What the LLM sees back:

{
  "results": [
    { "name": "handle", "type": "function", "start_line": 6, "end_line": 12, "file": "app.js" },
    { "name": "handle_login", "type": "function", "start_line": 5, "end_line": 9, "file": "src/auth.py" }
  ],
  "count": 2,
  "next_step": "Before modifying found symbols, check blast radius: impact_analysis(...)"
}

Build the Rust parsing service

cd malong-parse
cargo build --release
cp target/release/malong-parse ~/.local/bin/   # or add to PATH
malong-parse &                                   # daemon (Unix socket: /tmp/malong-parse-$(id -u).sock)

Prebuilt binaries for Linux x86_64 are committed under releases/ (with .sha256 checksums) — pick one up instead of building if you prefer.

Platforms: Linux and macOS use the Unix socket; on Windows the daemon listens on TCP 127.0.0.1:31001 (set MALONG_PORT to override) — the MCP server probes and auto-starts malong-parse.exe on startup, so no manual launch is needed (if you use the parse-client API directly outside MCP, start it manually). Set MALONG_SOCKET to override the Unix socket path.

Install the toolset

cd malong
npm ci
npm test          # 166 test files (daemon must be running)

Start the MCP server

cd malong
node --max-old-space-size=512 mcp-server.js --workspace /path/to/project

Register the MCP server with any MCP-capable LLM client and the tools become available. For opencode, register in the project root opencode.json (the environment block is optional since 0.5.24 — the default tier already is the Six-He line, 13 tools; set MALONG_INTERFACE=classic for the classic 44-tool catalog):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "malong": {
        "type": "local",
        "command": ["node", "--max-old-space-size=512", "malong/mcp-server.js", "--workspace", "."],
        "environment": { "MALONG_INTERFACE": "graph", "MALONG_ENTRY_STATE": "1" }
      }
    }
  }
}

Windows note: relative paths in --workspace and malong/mcp-server.js resolve against the directory where opencode is launched; pass absolute paths (escape backslashes as \\ in JSON) if you start it elsewhere. The daemon is auto-started by the MCP server — no need to launch malong-parse.exe manually.

For opencode V2 details — config shape, tool visibility (codemode), and troubleshooting — see malong/opencode/OPENCODE-V2.md.

Configuration (environment variables)

All optional — sensible defaults apply when unset.

Variable

Default

Purpose

MALONG_STATE_DIR

~/.config/malong

Root of MCP state since 0.5.0: workspace indexes (workspaces/<hash>/code-index.db) plus usage / feedback / edit-stats. Legacy per-repo data/malong-mcp (seeded via --workspace) is migrated on first launch in an isolated child process (copy→verify→delete; fail-soft, source kept on failure); pre-0.3.37 ~/.config/opencode/ reads still fall back.

MALONG_SKIP_STATE_MIGRATION

unset

Set to 1 to skip legacy-state migration at startup (emergency escape; old directory left untouched).

MALONG_SOCKET

/tmp/malong-parse-$(id -u).sock

Unix socket path to the parse daemon (Linux / macOS).

MALONG_PORT

31001

TCP port for the parse daemon (Windows).

MALONG_PARSE_BIN

npm platform pkg / ~/.local/bin

Binary used when the client auto-starts the daemon. Resolution order: this env → @jieai/malong-parse-<os>-<arch> npm platform package (installed as an optional dependency of @jieai/dsh-malong-bridge) → ~/.local/bin/malong-parse → malong-parse/target/release (dev tree).

MALONG_PARSE_MODE

rust-service

Parse transport. Only rust-service is supported (builtin / shadow are rejected).

MALONG_WS_GC_DAYS

14

Days a workspace index cache may sit untouched before health cleanup prunes it; 0 disables.

MALONG_INTERFACE

graph

Tool tier. Default (unset) = the Six-He line (13 tools: code_task/code_read/code_status/code_query + 8 stateful entries + edit_transaction). classic = the full 44-tool catalog; diagnostic = 18 (Six-He line + 5 analyzers).

MALONG_ENTRY_STATE

on

The state layer (S1–S5 task state machine + ADR-018 invoke_capability) is allowed by default; set 0 for the read-only 5-tool tier.

MALONG_PYTHON

unset

Explicit interpreter for Python test runs (test_bridge / verify_pipeline); overrides the auto-detected project venv (.venv/venv/env next to the project root).

Suppressing security false positives

security_review is deliberately conservative, so benign patterns (a hash used as a cache key, process.exit in a CLI entry) can trip it. Two explicit, auditable suppression mechanisms exist — neither ever auto-suppresses injection rules.

Inline — append malong-ignore to a line to suppress all findings on it, or malong-ignore[eval,exec-cmd] for specific rules (a reason after : is encouraged):

const id = crypto.createHash('md5').update(p).digest('hex') // malong-ignore: cache-dir name, not security

Config — add a securityIgnore array to .ai-patterns.json (the same file guard_patterns reads). Each entry takes files (* / ** globs) and/or rules; omit one side to match all:

{ "securityIgnore": [ { "files": ["**/mcp-server.js"], "rules": ["process-exit"] } ] }

Suppressed findings are dropped from the score but counted in the summary's suppressed field, so nothing is hidden silently. Injection rules (eval / exec / SQL / spawn) are only ever suppressed by an explicit marker or entry you authored — never heuristically.

Journal auto-cleanup

Every safe write (write_symbol / write_symbols / edit_batch) leaves an undo journal under .malong/journal/. Terminal transactions (committed / rolled_back / abandoned / failed) older than a TTL (default 24h, configurable) are pruned automatically — throttled to at most one scan per hour per workspace, so it costs nothing. In-flight (created / staged) and needs_review (external change awaiting human review) journals are never auto-deleted. This only ever touches the tool's own rollback backups — never your source files.

Using with Claude Code

Verified end-to-end with Claude Code 2.x. The MCP layer is standard JSON-RPC over stdio, so any MCP client (Claude Code, codex, opencode, Claude Desktop…) connects the same way.

1) Prerequisites — Node >= 20 and the parsing daemon running (see the Zero-build deployment or Build the Rust parsing service sections above).

2) Install Claude Code

npm install -g @anthropic-ai/claude-code

3) Point Claude Code at an Anthropic-compatible provider

Claude Code needs an LLM backend. Any Anthropic-compatible endpoint works — set the variables below (or manage them with cc-switch):

export ANTHROPIC_BASE_URL="https://your-provider/anthropic"   # any Anthropic-compatible endpoint
export ANTHROPIC_AUTH_TOKEN="your-api-key"                     # never commit this
export ANTHROPIC_MODEL="your-model"                            # a model your provider serves

With cc-switch: npm i -g @cc-switch/cli, cc-switch new my-provider (fill in the same ANTHROPIC_* keys under env), cc-switch switch my-provider, then eval $(cc-switch export).

4) Register the MCP server

claude mcp add liuhe -- node /path/to/malong/mcp-server.js --workspace /path/to/project
claude mcp list        # → "liuhe … ✔ Connected"

5) Use it — start claude in your project and ask, or run headless:

claude -p "index the workspace with reindex, then find createDb with symbol_search" \
  --allowedTools "mcp__liuhe__reindex" "mcp__liuhe__symbol_search"

Tools are exposed as mcp__liuhe__<tool> (e.g. mcp__liuhe__health, mcp__liuhe__symbol_search, mcp__liuhe__repo_map). Run reindex (optionally blocking=true) once per workspace first, so symbol search / impact analysis have an index to query.

Using with codex

Verified end-to-end with codex (same JSON-RPC-over-stdio MCP layer).

Version note: recent codex releases force the OpenAI Responses API (wire_api = "responses"). Use a version that still supports wire_api = "chat" together with MCP — verified with 0.50.0: npm install -g @openai/codex@0.50.0.

1) Prerequisites — Node >= 20 and the parsing daemon running (see above).

2) Configure ~/.codex/config.toml — point codex at any OpenAI-compatible provider (example below: OpenCode Zen) and register the MCP server:

model = "deepseek-v4-flash"
model_provider = "opencode-zen"

[model_providers.opencode-zen]
name = "OpenCode Zen"
base_url = "https://opencode.ai/zen/go/v1"   # any OpenAI-compatible endpoint
wire_api = "chat"
env_key = "OPENCODE_ZEN_API_KEY"             # codex reads the API key from this env var

[mcp_servers.liuhe]
command = "node"
args = ["/path/to/malong/mcp-server.js", "--workspace", "/path/to/project"]

3) Run — export the API key, then start codex:

export OPENCODE_ZEN_API_KEY="your-api-key"   # never commit this
codex exec "index the workspace with reindex, then find createDb with symbol_search"

Tools are exposed by the malong-mcp server; the prefix follows the name you register it under — opencode malong_<tool> (e.g. malong_health, malong_symbol_search), Claude Code mcp__liuhe__<tool>, the DSH bridge malong__<tool>. Run reindex once per workspace first so symbol search has an index to query.

Testing

  • Rust: cargo test (97 assertions: per-language extraction + protocol framing/decoding + cache LFU + server dispatch/priority queue + batch_extract + deep-nesting guards + hello handshake)

  • JS: 166 test files (authoritative list: scripts.test in package.json; includes primitives / tool-registry / manifest-quality / write-runtime / edit-transaction-ext / verify-pipeline, the dogfood r12–r30 end-to-end series, plus G0/G1 capability-contract / capability-catalog / invoke-capability / invoke-stdio suites)

  • Total: 166 JS test files, full chain 0 failures (plus cargo test: 97 assertions)

  • One-shot: ./scripts/ci.sh (self-contained: cargo test + npm test + dogfood; reuses or auto-starts the daemon)

License

MIT

Changelog

See CHANGELOG.md for the full release history.

Available Tools

13 tools
code_auditA

Read-only review pass (code review, security, dead code…) on files you touched or any scope — reports findings via checks, changes nothing. Zero findings is not proof.

NameRequiredDescriptionDefault
filesNoScope; default task materials.
scopeNoSubdir (workspace checks).
actionNorun default; accept/ledger.
checksNoDefault first two.
reasonNoaccept: why.
optionsNoPer-check passthrough to the original analyzer: code_review: source/diff/max_issues; security_review: source; guard_patterns: ruleset; dead_code: include_files. Full schema via code_query mode=capability.
task_idYesTask id.
fingerprintNoaccept: from prior run.
max_findingsNoDefault 50.
workspace_dirYesProject root (abs).
expected_state_revisionNoGuard.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that the audit is read-only, changes nothing, reports findings via checks, and that zero findings is not proof; however, it leaves the accept/ledger actions and their state implications unclear, which matters for an 11-parameter tool with no annotation safety profile.

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 with no wasted text. It efficiently communicates the core operation, immutability, and a key caution.

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

Completeness3/5

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

For a complex tool with 11 parameters, nested options, and no output schema, the description covers the high-level purpose but does not explain return format, action modes such as accept/ledger, or how findings are surfaced. The rich schema compensates for parameter documentation, but the description alone is only adequate.

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 all 11 parameters already have documented meaning in the schema. The description mentions checks and scoping in passing but adds no parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

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 states a specific action and resource: a read-only review pass over files that reports findings via checks and changes nothing. It clearly distinguishes audit behavior from mutating siblings by emphasizing read-only operation, but it does not name or contrast against any specific sibling tool.

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

Usage Guidelines3/5

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

It gives implied usage context by saying the pass can run on files you touched or any scope, and warns that zero findings is not proof. However, it does not explicitly state when to use this versus code_check, code_maintain, or other siblings, nor does it describe exclusions.

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

code_batchA

Apply edits to N files in ONE atomic call — all or nothing; single edit → code_patch. New: create:true + content + locator.file_path. dry_run default preview.

NameRequiredDescriptionDefault
policyNo{all_or_nothing: boolean} (default true).
safetyNoValidation gate: {profile: standard|strict|fast, block_on_validation_error: boolean}.
writesYesNon-empty; per entry: read_ref/locator + one edit payload.
dry_runNotrue = preview; false = apply.
task_idYesTask id.
read_refNoDefault base; same file only.
request_idNoIdempotency key.
workspace_dirYesProject root.
allow_unsafe_no_baseNoForce apply without prior file-level reads (default false; gate).
expected_state_revisionNoGuard.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses atomicity, that the default is a preview (dry_run), and the create-file recipe, but says nothing about failure/rollback reporting, validation-gate behavior, or the allow_unsafe_no_base gate — significant gaps for a destructive multi-file writer.

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

Conciseness4/5

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

Front-loads the atomic-write contract and the sibling routing in a single dense sentence; zero filler. The create-mode fragment is telegraphic but still parseable, and nothing is buried.

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

Completeness3/5

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

For a 10-parameter nested mutation tool with no annotations and no output schema, the description covers atomicity, preview default, and creation, but omits conflict/guard semantics and what a failed batch returns. The rich schema compensates for most parameter gaps, but behavioral completeness for a write tool is only adequate.

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 baseline is 3, and the description adds meaning on top: it maps create:true to content + locator.file_path and clarifies dry_run's default to preview. The policy, safety, guard, and idempotency params are left to the schema, which already documents them.

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?

Specific verb+resource+scale: 'Apply edits to N files in ONE atomic call' with the explicit constraint 'all or nothing'. It also names the sibling that handles single edits (code_patch) and flags the create path, so an agent can distinguish it from code_patch and edit_transaction without opening a schema.

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?

Gives an explicit routing rule: multi-file atomic edits here, 'single edit → code_patch', and states dry_run defaults to preview. It does not cover when to prefer edit_transaction or invoke_capability, but the primary alternative is clearly named.

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

code_checkA

Run test/typecheck/lint after editing — records commands + results as task evidence; better than raw shell. Previews exact commands first; async:true for long suites.

NameRequiredDescriptionDefault
runNotrue = execute.
asyncNoBackground; query code_control.
checksNoDefault [test].
task_idYesTask id.
timeoutNoPer-stage ms (30000).
workdirNoSubdir; verification stages run here (tsc-check dir equivalent).
verifierNoprotocol default; or exit.
request_idNoIdempotency key.
workspace_dirYesProject root (abs).
expected_state_revisionNoGuard.

TDQS

A3.8/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 meaningful work: it discloses the evidence side effect (commands + results recorded against a task), the preview-first safety behavior implying execution requires an explicit opt-in, and that async mode must be polled via code_control. It stops short of failure/exit semantics and any permission or rate considerations.

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

Conciseness4/5

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

Two compact clauses pack purpose, evidence recording, the shell alternative, preview behavior, and the async escape hatch with zero filler, and the core action is front-loaded. The telegraphic phrasing ('async:true for long suites') is efficient but slightly at the cost of readability.

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

Completeness3/5

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

For a 10-parameter execution tool with no annotations and no output schema, the description covers intent, safety preview, and async handling but leaves the response shape, failure semantics, and the verifier modes entirely unexplained. Enough to call it correctly in the common case, not enough to call it confidently in edge cases.

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 coverage is 100%, so the schema already documents all ten parameters, making 3 the baseline. The description adds only scattered meaning (async ties to code_control, checks defaulting) and says nothing about verifier, timeout, workdir, or expected_state_revision, all of which are terse one-word schema descriptions.

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?

States a concrete verb+resource: run test/typecheck/lint, scoped to 'after editing', plus two differentiators (records evidence, precedes execution with a preview). It positions itself against raw shell and points to code_control for background results, but never names the read/audit siblings it might be confused with.

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?

'Run ... after editing' gives a clear trigger, and 'async:true for long suites' gives an explicit conditional for switching modes. It also advises preferring this over raw shell. Missing is any explicit when-not guidance (e.g., when to use code_audit or code_query instead of re-running checks).

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

code_controlC

Manage task lifecycle: cancel a running task, resume a dropped one (returns a self-contained brief), reopen a finished one, check a background job.

NameRequiredDescriptionDefault
refNoexpand: id or candidates.
goalNoswitch_route goal.
routeNoswitch_route.
actionYesAction.
job_idNojob/cancel_job id.
reasonNocancel/reopen: why.
task_idYesTask id.
wait_msNocancel_job: ms (5000).
workspace_dirYesProject root (abs).
expected_state_revisionNoGuard.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full disclosure burden. It notes that resume 'returns a self-contained brief', which is useful, but says nothing about whether cancel/reopen are destructive, what happens to an interrupted job, permission requirements, or the role of the expected_state_revision guard. For a lifecycle-mutation tool this is a significant gap.

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

Conciseness4/5

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

A single front-loaded sentence listing operations with no filler. The one parenthetical adds real value. It is compact, though the enumeration is incomplete relative to the action enum.

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

Completeness2/5

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

For a 10-parameter, 8-action, unannotated mutation tool with no output schema, the description covers only half the actions and one return value. An agent still lacks enough to select the right action safely or predict effects of cancel/reopen/switch_route.

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 baseline already documents all ten parameters, including the enums. The description only adds meaning for resume's return value; it does not explain ref, goal, route, or how expected_state_revision interacts with the actions, so it stays at baseline.

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?

Opens with a specific verb+resource phrase ('Manage task lifecycle') and names four concrete operations (cancel, resume, reopen, check job). However, it omits three of the eight enum actions (switch_route, expand, cancel_job) and gives no hint of how it differs from siblings like code_task or code_status.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance is present, and no alternatives are named. An agent cannot tell from the description why it would call code_control rather than code_task or code_status, nor which of the unlisted actions apply.

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

code_maintainB

Clean up imports in files you touched (missing/unused). plan = preview by default; dead code is never removed automatically, only flagged.

NameRequiredDescriptionDefault
filesNoScope; default task materials.
actionNoplan default; apply writes.
dry_runNotrue = preview.
task_idYesTask id.
proposalsNoFingerprints (default all safe).
request_idNoIdempotency key.
max_per_fileNoDefault 20.
workspace_dirYesProject root (abs).
max_candidatesNofix_imports candidates per file (default 10, 1-100).
expected_state_revisionNoOptimistic guard.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden. It usefully discloses that plan is the default and that dead code is only flagged, never removed — real safety context. However it omits that apply mutates files on disk, says nothing about idempotency (request_id) or the optimistic guard (expected_state_revision), leaving meaningful behavioral gaps for a 10-param write tool.

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

Conciseness4/5

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

Two tight clauses, front-loaded with the action, zero filler. It could be marginally clearer about what happens on apply, but nothing is wasted.

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

Completeness3/5

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

No output schema and no annotations mean the description must carry safety and return semantics, yet it only covers the preview-flag and dead-code policy. For a 10-parameter mutation tool with fingerprints and revision guards, that is adequate but not complete.

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 every parameter is already documented and the baseline is 3. The description reinforces the plan/apply duality but adds no syntax beyond the schema (e.g. fingerprint semantics for proposals are left to the schema).

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?

States a specific verb and resource ('Clean up imports in files you touched') with the scope qualifier 'files you touched', which distinguishes it from a general patcher like code_patch. It stops short of naming a sibling, so 4 rather than 5.

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

Usage Guidelines3/5

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

'plan = preview by default' implies the safe-first workflow, and 'dead code is never removed automatically' implies a boundary. But there is no explicit statement of when to choose this over code_patch or edit_transaction, and no prerequisites given.

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

code_patchA

Edit any text file (code, md, config) — a reversible alternative to Edit/Write: patch text you already read (pass its read_ref), or create:true + content + locator.file_path. dry_run default: preview; false applies.

NameRequiredDescriptionDefault
patchNoFor patch {old_string, new_string}; old_string exact, unique.
createNoNew file: content + locator.file_path.
safetyNoValidation gate: {profile: standard|strict|fast, block_on_validation_error: boolean}.
contentNoFor replace_symbol.
dry_runNotrue = preview; false = apply.
locatorNoAnchor {file_path, name}/{symbol_id}.
task_idYesTask id.
boundaryNoreplace_symbol: full (default, includes signature) or body (body only).
read_refNoPreferred; supplies base_version.
edit_modeNopatch default; replace_symbol: content.
request_idNoIdempotency key.
workspace_dirYesProject root (abs).
preserve_decoratorsNoreplace_symbol: keep decorators (default true).
allow_unsafe_no_baseNoForce write without a prior file-level read (default false; gate).
expected_state_revisionNoOptimistic guard.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden and usefully discloses reversibility, `dry_run` preview default, and read-before-write via `read_ref`. However, for a 15-parameter mutation tool it omits validation-gate behavior, unsafe-write override, idempotency, and what happens when `dry_run:false` applies changes.

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 dense and front-loaded: purpose, modes, and the important `dry_run` default are all stated without wasted words. Every sentence earns its place.

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

Completeness3/5

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

The schema fully covers parameters, and the description gives the core workflow for patch/create and preview/apply. But with no annotations and no output schema, it should say more about validation behavior, idempotency, and return/result semantics for a complex mutation tool.

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 parameters. The description adds some context for `read_ref`, `create`, `content`, and `dry_run`, but leaves many parameters such as `safety`, `boundary`, `preserve_decorators`, and `expected_state_revision` to the schema.

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?

States a specific verb, 'Edit', and a clear resource, 'any text file (code, md, config)', plus two operation modes. It positions itself as a reversible alternative to Edit/Write, but does not explicitly differentiate from sibling `edit_transaction`.

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?

Explains when to use patch mode with `read_ref` for text already read, and when to use `create:true` with `content` and `locator.file_path`. It also states the `dry_run` default behavior, though it gives no explicit when-not guidance or sibling comparison.

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

code_queryB

Look things up fast, no task needed: where is X, who calls it, what's in this file. mode: outline|symbols|body|map|search|impact|references|callers|callees|tests|validate|capabilities. Read-only.

NameRequiredDescriptionDefault
dirNomap only: subdir inside workspace_dir (escapes rejected).
fileNoRequired for outline/callers/callees/impact/tests/validate; optional with symbol for references.
kindNoreferences only: filter by kind (call,import,use,assign,extends,implements; comma-separated).
lineNocallers/callees: disambiguate a line.
modeYesmap=compact paged overview (+dir drill); body=read file/symbol content without a task; search=code_search intent search; tests=find_tests candidates; validate=sandbox_validate content; capabilities=list; capability=describe by name.
nameNocapability mode: exact original tool name.
pageNomap only: page number (default 1; pass next_page).
richNobody only: include rich projection (outline).
depthNocallers/callees/impact: traversal depth.
limitNoMax rows (symbols, references).
queryNoRequired for symbols (substring); capabilities: optional name/summary filter.
cursorNocapabilities mode: pagination offset (from next_cursor).
symbolNoRequired for references; optional with file for callers/callees/impact.
optionsNoAdvanced per-mode passthrough to the original tool (e.g. callers: max_callers; impact: symbols/change_type; body: locators/context_lines). Protected keys rejected; full schema via mode=capability.
categoryNocapabilities mode: filter by category (e.g. query/audit/maintain).
page_sizeNomap only: entries per page (default 12; packing hint).
max_tokensNomap only: map token budget (default 700).
budget_hintNobody only: max chars (default 1200; 0 = full, hard-capped).
new_contentNovalidate only: candidate full content to check (no write).
workspace_dirYesRoot (abs). Any workspace path works — a fresh one is indexed automatically on first read.

TDQS

B3.3/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 full behavioral burden. It discloses 'Read-only' and 'no task needed', which are useful traits, but it does not explain mode-specific effects, output behavior, or the workspace indexing side effect mentioned in the schema.

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

Conciseness4/5

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

The description is compact and front-loads the core purpose before listing modes. The mode list is long but necessary; it omits 'capability' even though the schema enum includes it, which slightly reduces precision.

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

Completeness2/5

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

This is a complex 20-parameter, multi-mode tool with no output schema and no annotations. The description does not explain return values, mode selection, pagination, or the auto-indexing behavior, leaving significant gaps for an agent to infer from the schema alone.

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 20 parameters in detail. The description lists the mode names and gives high-level lookup examples but does not add parameter meaning beyond what the schema provides.

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 states a clear lookup purpose and gives concrete examples: 'where is X, who calls it, what's in this file.' It lists the available modes, making the tool's scope distinguishable from task-oriented siblings. It stops short of naming a sibling, so it is clear but not fully differentiated.

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

Usage Guidelines3/5

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

The phrase 'no task needed' implies when to use this instead of task-based tools, and 'Read-only' clarifies the safety posture. However, it does not explicitly compare against siblings like code_read, code_task, or code_search, nor does it explain when each mode should be selected.

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

code_readA

Read a file or one symbol before editing; returns content + a read_ref to pass back when editing. budget_hint=0 → full file.

NameRequiredDescriptionDefault
modeNocore default; rich adds outline.
locatorNoAnchor {symbol_id}/{file_path+name}; line_range = degraded.
task_idYesTask id.
read_refNoRe-read by read_ref.
budget_hintNoMax chars; 0 = full.
workspace_dirYesProject root (abs).
expected_state_revisionNoGuard.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that the tool returns content plus a read_ref to pass back during editing and that budget_hint=0 returns the full file, but it does not cover permissions, error behavior, or broader read-only guarantees.

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 compact sentences, front-loads the primary purpose, then adds the return and budget details. Every clause earns its place with no wasted text.

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

Completeness3/5

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

For a tool with seven parameters, a nested locator object, and no output schema, the description is minimal. It covers the core action and return artifact but leaves locator formats, required workspace/task context, and expected_state_revision guard behavior to the schema.

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 parameters. The description restates budget_hint=0 and the read_ref lifecycle but adds no extra syntax or anchor detail beyond what the schema provides.

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 states a specific verb and resource: reads a file or one symbol. It also names the timing (before editing) and the return artifact (content plus read_ref). It does not distinguish itself from siblings such as code_query, so it falls short of a 5.

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 phrase 'before editing' gives clear usage context, and the read_ref return value explains the follow-up workflow. It does not name alternatives or when-not-to-use cases, so it is not a 5.

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

code_statusA

See what a task changed so far: state, files, evidence. Omit task_id → list active tasks.

NameRequiredDescriptionDefault
task_idNoTask id; omit = list.
workspace_dirYesProject root (abs).

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the shape of the returned payload (state, files, evidence) and the listing fallback behavior, which implies a read-only inspection, but it never states that explicitly, nor any permission or scope requirements. Useful but incomplete for a zero-annotation 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?

Two compact clauses, the primary purpose front-loaded and the mode switch second. Every fragment carries information; nothing is padded.

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 2-parameter tool with full schema coverage and no output schema, the description says what is reported and how to get a list instead of a single task. The main remaining gap is not saying what 'active' means or what happens when a task_id is unknown.

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%: task_id already says 'omit = list' and workspace_dir says 'Project root (abs).' The description restates the omit-to-list behavior and adds 'active' as a qualifier on the listing, but adds no real semantics about what a task_id accepts or what workspace_dir scoping means. Baseline 3 is appropriate.

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?

Specific verb and resource: reports what a task changed so far, naming the returned facets (state, files, evidence). It also covers the dual mode (single task vs. list). It does not distinguish itself from siblings like code_audit, code_query, or code_check, so it stops short of a 5.

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

Usage Guidelines3/5

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

'Omit task_id → list active tasks' gives explicit mode-selection guidance, which is genuinely useful. However there is no guidance on when to prefer this over sibling status/audit tools (code_audit, code_query, code_check) and no stated exclusions, leaving usage implied rather than specified.

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

code_taskA

Start here for any change: describe the goal, get candidates + structure + impact in one call. Planning only — does not itself edit or check; then code_read → code_patch / code_batch → code_check.

NameRequiredDescriptionDefault
goalYesCoding goal.
routeNoInferred when omitted.
targetNoAnchor {file, symbol, line}.
request_idNoCorrelation id.
search_termsNoExtra terms (≤8).
workspace_dirYesProject root (abs).

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the critical trait: this tool does not mutate or verify anything. It also names the three payload kinds (candidates, structure, impact). It says nothing about cost, whether prior indexing/workspace state is required, or determinism of the returned candidates, which matters for a planning call intended as the first step.

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

Conciseness4/5

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

Two short sentences, front-loaded with the call-to-action and closed with the follow-on chain; nothing is padded. The arrow-chain notation is dense to the point of being telegraphic, which costs a little readability against the otherwise tight structure.

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 6-parameter, nested-object, no-output-schema tool, the description covers the two things an agent most needs: when to call it and what happens next. Parameter-level detail is delegated entirely to a fully-covered schema, and return shape is only named, not characterized — acceptable given no output schema exists but not exhaustive.

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 goal, route, target, request_id, search_terms, and workspace_dir are already documented in the schema, making 3 the baseline. The description mentions only 'describe the goal' and adds no guidance beyond the schema — notably it never explains when to override route or how target anchors steering, even though route inference ('Inferred when omitted') is a meaningful behavioral lever.

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 states a concrete purpose: a planning call that takes a goal and returns candidates, structure, and impact in one shot. It differentiates from siblings by naming the read/patch/check sequence that follows. What it lacks is a crisp verb+resource label (e.g. 'plan a code change'), leaving 'start here for any change' slightly open-ended about the artifact produced.

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 gives an explicit trigger ('Start here for any change'), an explicit exclusion ('Planning only — does not itself edit or check'), and names the alternatives plus their order (code_read → code_patch / code_batch → code_check). An agent can route correctly without inspecting any other tool.

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

code_worktreeA

Land a risky change safely: apply runs edits in a temp git worktree, your verify command gates it, and only on pass does the commit fast-forward into the CURRENT branch.

NameRequiredDescriptionDefault
actionNopreview default; apply: dry_run=false; status: list.
changesNoRequired for preview/apply: [{path, new_content, delete}].
dry_runNotrue = preview.
messageNoCommit message.
task_idYesTask id.
timeoutNoverify_cmd timeout ms.
request_idNoIdempotency key.
verify_cmdNoNon-zero = abort + rollback.
workspace_dirYesProject root (abs, git repo).
expected_state_revisionNoOptimistic guard.

TDQS

A3.6/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 disclose meaningful behavior: edits happen in an isolated temp worktree, the verify command gates the outcome, and the commit only fast-forwards to the current branch on pass. It omits auth/permission requirements, idempotency semantics (despite a request_id param), and the rollback-on-preview distinction, keeping it short of a 5.

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

Conciseness4/5

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

A single well-formed sentence that front-loads the value proposition and uses a colon to unpack the mechanism. Dense but zero filler; it does not waste space on restating the name.

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

Completeness3/5

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

For a 10-parameter tool with three actions (preview/apply/status) and no output schema, the description addresses only the apply path. Preview and status modes — and what a caller should expect from them — are left entirely to the schema, leaving the multi-mode behavior under-explained.

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 every parameter is already documented, establishing a baseline of 3. The description reinforces the gating role of the verify command but adds no format or usage detail beyond what the schema states.

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 names a concrete mechanism (temp git worktree + verify gate + fast-forward commit into the CURRENT branch), which tells an agent exactly what the tool accomplishes. The verb is somewhat implicit ('apply runs edits') and it never names or contrasts with siblings like edit_transaction or code_patch, so differentiation falls short of a 5.

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

Usage Guidelines3/5

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

The phrase 'Land a risky change safely' implies the intended scenario (high-risk edits needing verification), which is useful implied guidance. However, there is no explicit when/when-not, and no routing to the alternative transaction/edit tools that occupy the same space.

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

edit_transactionA

Multi-file edit with rollback/undo (begin->edit->commit); single-file edits don't need one.

NameRequiredDescriptionDefault
seqNoChunk seq.
fileNoPath (edit).
nameNoTxn name (begin).
editsNoArray of {old_string,new_string} | {line_span,new_lines}; line_span {start_line,end_line,expect_sha}, end_line null=EOF.
filesNoBroadcast to all.
linesNoChunk lines.
totalNoChunk count.
actionYesAction.
atomicNoDefault true.
createNoNew file (needs content).
txn_idNoTxn id.
contentNoFile content (create).
dry_runNoedit/edit_multi: validate only.
expect_shaNoassemble sha256.
file_editsNoedit_multi: [{file, edits}] (same edit objects).
workspace_dirYesProject root (abs).

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the transactional rollback/undo model and workflow, but omits mutation risks, atomicity semantics, action-specific side effects, and error/concurrency behavior.

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?

A single sentence, front-loaded with the core capability and workflow. Every clause earns its place and there is no redundant text.

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

Completeness2/5

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

This is a 16-parameter, 9-action mutation tool with no annotations and no output schema. One sentence does not adequately explain actions like edit_chunk, assemble, undo_commit, info, or the roles of atomic, dry_run, create, and txn_id; the schema descriptions are too terse to fill those gaps.

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 16 parameters, establishing a baseline of 3. The description adds little parameter-level meaning beyond the begin->edit->commit sequence and relies on the schema's terse field descriptions.

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?

States a specific capability: multi-file edit with rollback/undo via begin->edit->commit. It also distinguishes itself from single-file edits, though it does not name a specific sibling 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?

Gives explicit when-to-use guidance (multi-file edits needing rollback/undo) and when-not-to-use guidance (single-file edits don't need one). It does not name the preferred tool for single-file edits.

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

invoke_capabilityA

Escape hatch: call a tool not listed above, by exact name; delegates once per call — no retries. Prefer listed tools; read-only unless the target itself writes.

NameRequiredDescriptionDefault
argsNoOriginal tool arguments per its schema; nested workspace_dir/task_id are ignored.
nameYesExact original tool name (see code_query mode=capabilities).
task_idNoOptional task to associate (must belong to workspace_dir).
request_idNoOptional idempotency key consumed by the outlet for side-effect calls: same id + same payload → deduplicated replay (no re-execution); different payload → request_conflict.
workspace_dirYesRoot (abs); top-level boundary.

TDQS

A4.2/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 discloses the single-shot delegation model ('once per call — no retries') and the mutation risk ('read-only unless the target itself writes'). It leaves failure handling and auth prerequisites unstated, but the key behavioral traits an agent needs are 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?

A single dense line that front-loads the purpose, then the delegation semantics, then the selection guidance. Every clause earns its place with zero padding.

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?

Given a nested-args escape hatch with a fully-described schema and no output schema, the description covers purpose, delegation model, retry behavior, and write risk adequately. Only error/response handling is left implicit, a minor gap against the rich schema.

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 name, args, workspace_dir, task_id, and request_id thoroughly. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 applies.

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 'Escape hatch: call a tool not listed above, by exact name' — a specific verb, resource, and mechanism. It distinguishes itself from the listing-focused siblings by making clear it is the fallback for tools not surfaced elsewhere.

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?

Explicitly states when to reach for it ('call a tool not listed above') and when not to ('Prefer listed tools'), which routes the agent away from it by default. It stops short of naming a concrete sibling alternative, but the guidance is clear and actionable.

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. 1 tool updatev0.5.29
    • Changedcode_query1 field changed
      • changedInput schema / properties / workspace_dir / description
        Previous value: -"Root (abs)."New value: +"Root (abs). Any workspace path works — a fresh one is indexed automatically on first read."
  2. 56 tool updatesv0.5.28
    • Removedactive_todos
    • Removedcall_chain
    • Addedcode_audit
    • Addedcode_batch
    • Addedcode_check
    • Addedcode_control
    • Addedcode_maintain
    • Addedcode_patch
    • Removedcode_quality
    • Addedcode_query
    • Addedcode_read
    • Removedcode_review
    • Removedcode_search
    • Addedcode_status
    • Addedcode_task
    • Addedcode_worktree
    • Removedconfig_drift
    • Removeddebug_runner
    • Removeddep_graph
    • Removeddependency_gatekeeper
    • Removeddiff_facts
    • Removededit_batch
    • Removededit_collision_guard
    • Changededit_transaction22 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Transaction action to perform."New value: +"Action."
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "begin",
        -  "edit",
        -  "edit_multi",
        -  "commit",
        -  "undo_commit",
        -  "rollback",
        -  "info"
        -]New value: +[
        +  "begin",
        +  "edit",
        +  "edit_multi",
        +  "edit_chunk",
        +  "assemble",
        +  "commit",
        +  "undo_commit",
        +  "rollback",
        +  "info"
        +]
      • changedInput schema / properties / atomic / description
        Previous value: -"For edit_multi: all-or-nothing (default: true)."New value: +"Default true."
      • addedInput schema / properties / content
        Added value: +{
        +  "description": "File content (create).",
        +  "type": "string"
        +}
      • addedInput schema / properties / create
        Added value: +{
        +  "description": "New file (needs content).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "edit/edit_multi: validate only.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / edits / description
        Previous value: -"Array of {old_string,new_string}. Required for edit."New value: +"Array of {old_string,new_string} | {line_span,new_lines}; line_span {start_line,end_line,expect_sha}, end_line null=EOF."
      • addedInput schema / properties / edits / items / properties / line_span
        Added value: +{
        +  "type": "object"
        +}
      • addedInput schema / properties / edits / items / properties / new_lines
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / edits / items / properties / replace_all
        Removed value: -{
        -  "type": "boolean"
        -}
      • removedInput schema / properties / edits / items / required
        Removed value: -[
        -  "old_string"
        -]
      • addedInput schema / properties / expect_sha
        Added value: +{
        +  "description": "assemble sha256.",
        +  "type": "string"
        +}
      • changedInput schema / properties / file / description
        Previous value: -"Single file path relative to workspace_dir (required for action=edit)."New value: +"Path (edit)."
      • changedInput schema / properties / file_edits / description
        Previous value: -"Per-file edits for edit_multi: [{file, edits}]. Overrides files+edits."New value: +"edit_multi: [{file, edits}] (same edit objects)."
      • removedInput schema / properties / file_edits / items
        Removed value: -{
        -  "properties": {
        -    "edits": {
        -      "description": "Array of edits for this file",
        -      "items": {
        -        "properties": {
        -          "new_string": {
        -            "type": "string"
        -          },
        -          "old_string": {
        -            "type": "string"
        -          },
        -          "replace_all": {
        -            "type": "boolean"
        -          }
        -        },
        -        "required": [
        -          "old_string"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "file": {
        -      "description": "File path relative to workspace_dir",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "file",
        -    "edits"
        -  ],
        -  "type": "object"
        -}
      • changedInput schema / properties / files / description
        Previous value: -"Multiple file paths relative to workspace_dir. Same edits applied to all (broadcast mode)."New value: +"Broadcast to all."
      • addedInput schema / properties / lines
        Added value: +{
        +  "description": "Chunk lines.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Transaction name (required for action=begin)."New value: +"Txn name (begin)."
      • addedInput schema / properties / seq
        Added value: +{
        +  "description": "Chunk seq.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / total
        Added value: +{
        +  "description": "Chunk count.",
        +  "type": "integer"
        +}
      • changedInput schema / properties / txn_id / description
        Previous value: -"Transaction ID (required for edit, edit_multi, commit, undo_commit, rollback, info)."New value: +"Txn id."
      • changedInput schema / properties / workspace_dir / description
        Previous value: -"REQUIRED: project root (abs). reindex first if new."New value: +"Project root (abs)."
    • Removedexception_guard
    • Removedfeedback
    • Removedfind_tests
    • Removedfix_imports
    • Removedgc
    • Removedgit_worktree
    • Removedguard_patterns
    • Removedhealth
    • Removedimpact_analysis
    • Removedinspect
    • Addedinvoke_capability
    • Removedmock_sync
    • Removednaming_consistency
    • Removedpatch_parser
    • Removedread_outline
    • Removedread_symbol
    • Removedreferences
    • Removedreindex
    • Removedrename_symbol
    • Removedrepo_map
    • Removedsandbox_validate
    • Removedsecurity_review
    • Removedspec_gen
    • Removedstyle_sniffer
    • Removedsweep_dead_code
    • Removedsymbol_search
    • Removedtest_bridge
    • Removedtrace_symbol
    • Removedtsc_check
    • Removedverify_pipeline
    • Removedwrite_symbol
    • Removedwrite_symbols
  3. 9 tool updatesv0.4.5-post9
    • Changedcode_quality2 fields changed
      • addedInput schema / properties / file / description
        Added value: +"File to probe, relative to workspace_dir"
      • addedInput schema / properties / workspace_dir / description
        Added value: +"REQUIRED: project root (abs)."
    • Changedcode_search2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Max results (default 30)"
      • addedInput schema / properties / workspace_dir / description
        Added value: +"REQUIRED: project root (abs). reindex first if new."
    • Changedpatch_parser2 fields changed
      • addedInput schema / properties / file / description
        Added value: +"File path relative to workspace_dir"
      • addedInput schema / properties / workspace_dir / description
        Added value: +"REQUIRED: project root (abs). reindex first if new."
    • Changedread_symbol1 field changed
      • addedInput schema / properties / locator / description
        Added value: +"Symbol anchor: {symbol_id} or {file_path}+{name} (single read)"
    • Changedspec_gen2 fields changed
      • addedInput schema / properties / file / description
        Added value: +"Source file (relative to workspace_dir) to generate spec for"
      • addedInput schema / properties / workspace_dir / description
        Added value: +"REQUIRED: project root (abs). reindex first if new."
    • Changedtsc_check2 fields changed
      • addedInput schema / properties / timeout / description
        Added value: +"tsc run timeout in ms (default 60000)"
      • addedInput schema / properties / workspace_dir / description
        Added value: +"REQUIRED: project root (abs)."
    • Changedverify_pipeline4 fields changed
      • addedInput schema / properties / stages / description
        Added value: +"Comma-separated: lint|test|typecheck (default all)"
      • addedInput schema / properties / timeout / description
        Added value: +"Per-stage timeout in ms (default 30000)"
      • addedInput schema / properties / workdir / description
        Added value: +"Optional subdir to run in (default workspace_dir)"
      • addedInput schema / properties / workspace_dir / description
        Added value: +"REQUIRED: project root (abs). reindex first if new."
    • Changedwrite_symbol1 field changed
      • addedInput schema / properties / locator / description
        Added value: +"Symbol anchor: {symbol_id} or {file_path}+{name}. Read first via read_symbol."
    • Changedwrite_symbols2 fields changed
      • addedInput schema / properties / policy / description
        Added value: +"{all_or_nothing: true} (default) | {false} best-effort"
      • addedInput schema / properties / safety / description
        Added value: +"Safety profile: fast|standard|strict (default standard)"
  4. 44 tool updates
    • First observedactive_todos
    • First observedcall_chain
    • First observedcode_quality
    • First observedcode_review
    • First observedcode_search
    • First observedconfig_drift
    • First observeddebug_runner
    • First observeddep_graph
    • First observeddependency_gatekeeper
    • First observeddiff_facts
    • First observededit_batch
    • First observededit_collision_guard
    • First observededit_transaction
    • First observedexception_guard
    • First observedfeedback
    • First observedfind_tests
    • First observedfix_imports
    • First observedgc
    • First observedgit_worktree
    • First observedguard_patterns
    • First observedhealth
    • First observedimpact_analysis
    • First observedinspect
    • First observedmock_sync
    • First observednaming_consistency
    • First observedpatch_parser
    • First observedread_outline
    • First observedread_symbol
    • First observedreferences
    • First observedreindex
    • First observedrename_symbol
    • First observedrepo_map
    • First observedsandbox_validate
    • First observedsecurity_review
    • First observedspec_gen
    • First observedstyle_sniffer
    • First observedsweep_dead_code
    • First observedsymbol_search
    • First observedtest_bridge
    • First observedtrace_symbol
    • First observedtsc_check
    • First observedverify_pipeline
    • First observedwrite_symbol
    • First observedwrite_symbols

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation3/5

The editing surface is crowded: code_patch, code_batch, edit_transaction, and code_worktree all mutate files, and the boundary between code_batch's atomic multi-file apply and edit_transaction's multi-file rollback/undo is not sharp. code_read and code_query also overlap on reading file contents, though descriptions provide some guidance.

Naming Consistency4/5

All tools use snake_case and ten of thirteen share a code_ prefix; edit_transaction and invoke_capability are exceptions but remain readable. The mix of verb and noun suffixes (code_read vs code_task/code_worktree) is a minor inconsistency.

Tool Count5/5

13 tools is within the well-scoped 3–15 range for a code-editing workflow. Each tool maps to a planning, reading, editing, verification, maintenance, or lifecycle concern.

Completeness4/5

The surface covers planning, querying, reading, single/multi-file edits, transactions, worktrees, checks, audits, maintenance, and task control. Minor gaps remain around explicit file deletion/rename and first-class diff/undo of applied patches.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Standalone MCP server for code structure analysis using tree-sitter. Directory trees, symbol definitions, and call graphs without reading raw source files. Supports Rust, Python, Go, Java, TypeScript, Fortran, JavaScript, C/C++, and C#. Benchmarked up to 68% fewer tokens vs native tools.
    7
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Deterministic code-graph (GraphRAG) over your repo for LLM agents — local-first, git-native, zero-infra, served via MCP. Python, TS/JS, Rust, Go, Java, C#.
    8
    13
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables coding agents to perform deterministic, model-free repository analysis and patch operations—tree-sitter repo maps, symbol/reference lookup, and SEARCH/REPLACE parsing/validation—via a CLI or MCP stdio server, without ever calling a language model.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding agents to query code structure efficiently through 16 MCP tools, including symbol lookup, full-text search, dependency analysis, and refactor planning, powered by tree-sitter parsing and index-backed code intelligence.
    3
    MIT