Skip to main content
Glama

Your AI agent reads UserController.php and sees a class. trace-mcp reads it and sees a route → controller → FormRequest → Eloquent model → Inertia render → Vue page → child components — in one graph.


What trace-mcp does for you

You ask

trace-mcp answers

How

"What breaks if I change this model?"

Blast radius across languages + risk score + linked architectural decisions

get_change_impact — reverse dependency graph + decision memory

"Why was auth implemented this way?"

The actual decision record with reasoning and tradeoffs

query_decisions — searches the decision knowledge graph linked to code

"I'm starting a new task"

Optimal code subgraph + relevant past decisions + dead-end warnings

plan_turn — opening-move router with decision enrichment

"What did we discuss about GraphQL last month?"

Verbatim conversation fragments with file references

search_sessions — FTS5 search across all past session content

"Show me the request flow from URL to rendered page"

Route → Middleware → Controller → Service → View with prop mapping

get_request_flow — framework-aware edge traversal

"Find all untested code in this module"

Symbols classified as "unreached" or "imported but never called in tests"

get_untested_symbols — test-to-source mapping

"What's the impact of this API change on other services?"

Cross-subproject client calls with confidence scores

get_subproject_impact — topology graph traversal

"Orient me — I just opened this project"

Project identity + active decisions + memory stats in ~300 tokens

get_wake_up — layered context assembly

Three things no other tool does:

  1. Framework-aware edges — trace-mcp understands that Inertia::render('Users/Show') connects PHP to Vue, that @Injectable() creates a DI dependency, that $user->posts() means a posts table from migrations. 53 integrations across 14 frameworks, 7 ORMs, 12 UI libraries.

  2. Code-linked decision memory — when you record "chose PostgreSQL for JSONB support", it's linked to src/db/connection.ts::Pool#class. When someone runs get_change_impact on that symbol, they see the decision. MemPalace stores decisions as text; trace-mcp ties them to the dependency graph.

  3. Cross-session intelligence — past sessions are mined for decisions and indexed for search. When you start a new session, get_wake_up gives you orientation in ~300 tokens; plan_turn shows relevant past decisions for your task; get_session_resume carries over structural context from previous sessions.


Related MCP server: LiLBrain

The problem

AI coding agents are language-aware but framework-blind.

They don't know that Inertia::render('Users/Show', $data) connects a Laravel controller to resources/js/Pages/Users/Show.vue. They don't know that $user->posts() means the posts table defined three migrations ago. They can't trace a request from URL to rendered pixel.

So they brute-read files, guess at relationships, and miss cross-language edges entirely. The bigger the project, the worse it gets.

The solution

trace-mcp builds a cross-language dependency graph from your source code and exposes it through the Model Context Protocol. Any MCP-compatible agent (Claude Code, Cursor, Windsurf, etc.) gets framework-level understanding out of the box.

Without trace-mcp

With trace-mcp

Agent reads 15 files to understand a feature

get_task_context — optimal code subgraph in one shot

Agent doesn't know which Vue page a controller renders

routes_to → renders_component → uses_prop edges

"What breaks if I change this model?" — agent guesses

get_change_impact traverses reverse dependencies across languages

Schema? Agent needs a running database

Migrations parsed — schema reconstructed from code

Prop mismatch between PHP and Vue? Discovered in production

Detected at index time — PHP data vs. defineProps


How trace-mcp compares

trace-mcp is not just a code intelligence server — it combines code graph navigation, cross-session memory, and real-time code understanding in a single tool. Other projects solve one of these; trace-mcp unifies all three.

Last updated: April 2026. Based on public documentation and GitHub repos. If you maintain one of these projects and see an inaccuracy, open an issue.

vs. token-efficient code exploration

Tools that help AI agents read code with fewer tokens — AST parsing, outlines, context packing.

Capability

trace-mcp

Repomix

Context Mode

code-review-graph

jCodeMunch

codebase-memory-mcp

cymbal

GitHub stars

23K

6.6K

5.1K

1.5K

1.3K

137

Tree-sitter AST parsing

✅ 68 languages

✅ compress only (~20)

❌ no code parsing

✅ ~40 languages

✅ 66 languages

✅ 22 languages

Token-efficient symbol lookup

✅ outlines, symbols, bundles

❌ packs entire files

✅ sandboxed output

✅ core focus

✅ outline/show/context

Cross-file dependency graph

✅ directed edge graph

✅ knowledge graph

✅ import graph

✅ knowledge graph

✅ refs/importers

Framework-aware edges

✅ 53 integrations (14 frameworks, 7 ORMs, 12 UI libs)

✅ 21 frameworks (route/middleware)

partial (REST routes)

Impact analysis

✅ reverse dep traversal + decorator filter

✅ blast radius + decorator filter

✅ detect_changes

✅ impact command

Call graph

✅ bidirectional, graph-based

✅ AST-based, bidirectional

✅ trace_call_path

✅ refs/importers

Refactoring tools

✅ rename, extract, dead code, codemod

❌ (dead code detect only)

Security scanning

✅ OWASP Top-10, taint

✅ Secretlint

Multi-repo subprojects

✅ cross-repo API linking

✅ remote repos

✅ GitHub repos

Session memory

✅ built-in

✅ SQLite journal

✅ index persistence

✅ persistent graph

Written in

TypeScript

TypeScript

TypeScript

Python

Python

C

Go

vs. AI session memory

Tools that persist context across AI agent sessions — activity logs, knowledge graphs, memory compression.

Capability

trace-mcp

MemPalace

claude-mem

OpenMemory

engram

ConPort

GitHub stars

43K

45.7K

3.9K

2.3K

761

Cross-session context carryover

get_session_resume + decisions

✅ wings/rooms

✅ core focus

Cross-session content search

search_sessions FTS5

✅ ChromaDB semantic

Decision knowledge graph

✅ temporal, code-linked

✅ temporal (text-only)

✅ temporal

✅ project-level

Code-graph-aware memory

✅ decisions → symbols & files

❌ text-only

❌ text-only

❌ text-only

❌ text-only

❌ text-only

Auto-extraction from sessions

✅ pattern-based (0 LLM calls)

✅ via hooks

✅ AI-compressed

Wake-up context

✅ ~300 tok (code-linked decisions)

✅ ~170 tok (AAAK)

Decision enrichment in tools

✅ impact/plan_turn/resume

❌ standalone

Service/subproject scoping

✅ decisions per service

✅ wings per project

Token usage analytics

✅ per-tool cost breakdown

partial

Code intelligence included

✅ 130+ tools

Works as standalone memory

❌ code-focused

✅ general-purpose

❌ Claude-specific

✅ agent-agnostic

✅ agent-agnostic

✅ project-scoped

Written in

TypeScript

Python

TypeScript

TS + Python

Go

Python

Key difference: MemPalace stores "decided to use PostgreSQL" as text in ChromaDB. trace-mcp stores the same decision linked to src/db/connection.ts::Pool#class — and when you run get_change_impact on that symbol, the decision shows up in linked_decisions. General-purpose memory tools remember what you said. trace-mcp remembers what you said AND which code it's about.

vs. documentation generation & RAG

Tools that generate docs from code or provide embedding-based code search for AI retrieval.

Capability

trace-mcp

Repomix

DeepContext

smart-coding-mcp

mcp-local-rag¹

knowledge-rag¹

GitHub stars

23K

274

193

204

44

Real-time code understanding

✅ live graph, always current

❌ snapshot at pack time

❌ manual reindex

partial (opt-in watcher)

partial (file watcher)

Auto-generated project docs

generate_docs from graph

❌ raw file dump

Semantic code search

search + query_by_intent

❌ no search

✅ Jina embeddings

✅ nomic embeddings

✅ vector search

✅ hybrid + reranking

Framework-aware context

✅ routes, models, components

Task-focused context

get_task_context — code subgraph

❌ packs everything

No doc maintenance needed

✅ derived from code

✅ repacks on demand

❌ manual reindex

partial (auto on startup)

❌ manual ingest

partial (auto-reindex)

Works offline, no API keys

✅ graph + FTS5 + bundled ONNX embeddings

❌ requires cloud API

❌ requires local embeddings

❌ requires local embeddings

❌ requires local embeddings

Incremental updates

✅ file watcher, content hash

❌ full repack

✅ SHA-256 hashing

✅ file hash + opt-in watcher

✅ mtime + dedup

Written in

TypeScript

TypeScript

TypeScript

JavaScript

TypeScript

Python

¹ mcp-local-rag and knowledge-rag are document RAG tools (PDF, DOCX, Markdown) — not code-specific. Included for comparison as they occupy adjacent mindshare.

Key difference: RAG tools answer "find code similar to this query." trace-mcp answers "show me the execution path, the dependencies, and the tests for this feature." Graph traversal finds structurally relevant code that embedding similarity misses — and never returns stale results because the graph updates incrementally with every file save.

vs. code graph MCP servers

Capability

trace-mcp

Serena

code-review-graph

codebase-memory-mcp

SocratiCode

Narsil-MCP

Roam-Code

GitHub stars

22.6K

5.1K

1.3K

Languages

68

~20 (via LSP)

~10

66

~15

32

~10

Framework integrations

53 (14 fw + 7 ORM + 12 UI + 20 other)

Cross-language edges

MCP tools

120+

~35

~15

~20

~25

90

139

Session memory

CI/PR reports

Multi-repo subprojects

Security scanning

Refactoring tools

✅ rename, symbol editing

Architecture governance

Token savings tracking

Written in

TypeScript

Python

Python

C

TypeScript

Rust

Python

Why framework awareness matters: A graph that knows UserController exists but doesn't know it renders Users/Show.vue via Inertia is missing the edges that matter most. Framework integrations turn a syntax graph into a semantic graph — the agent sees the same connections a developer sees.


Up to 99% token reduction — real-world benchmark

AI agents burn tokens reading files they don't need. trace-mcp returns precision context — only the symbols, edges, and signatures relevant to the query.

Benchmark: trace-mcp's own codebase (694 files, 3,831 symbols):

Task                  Without trace-mcp    With trace-mcp    Reduction
─────────────────────────────────────────────────────────────────────
Symbol lookup              42,518 tokens     7,353 tokens      82.7%
File exploration           27,486 tokens       548 tokens      98.0%
Search                     22,860 tokens     8,000 tokens      65.0%
Find usages                11,430 tokens     1,720 tokens      85.0%
Context bundle             12,847 tokens     4,164 tokens      67.6%
Batch overhead             16,831 tokens     9,031 tokens      46.3%
Impact analysis            49,141 tokens     2,461 tokens      95.0%
Call graph                178,345 tokens    10,704 tokens      94.0%
Type hierarchy             94,762 tokens     1,030 tokens      98.9%
Tests for                  22,590 tokens     1,150 tokens      94.9%
Composite task             93,634 tokens     3,836 tokens      95.9%
─────────────────────────────────────────────────────────────────────
Total                     572,444 tokens    49,997 tokens      91.3%

91% fewer tokens to accomplish the same code understanding tasks. That's ~522K tokens saved per exploration session — more headroom for actual coding, fewer context window evictions, lower API costs.

Savings scale with project size. On a 650-file project, trace-mcp saves ~522K tokens. On a 5,000-file enterprise codebase, savings grow non-linearly — without trace-mcp, the agent reads more wrong files before finding the right one. With trace-mcp, graph traversal stays O(relevant edges), not O(total files).

Composite tasks deliver the biggest wins. A single get_task_context call replaces a chain of ~10 sequential operations (search → get_symbol × 5 → Read × 3 → Grep × 2). That's one round-trip instead of ten, with 90%+ token reduction.

Per-task breakdown — what it actually costs to answer common questions:

Question

Naive approach

trace-mcp tool

Tokens (naive)

Tokens (trace-mcp)

Reduction

"Where is registerTool defined?"

Grep all .ts files

search

~12,400

~800

93%

"What calls getDeadCodeV2?"

Grep + Read 8 files

get_call_graph

~18,200

~1,100

94%

"What breaks if I rename Store?"

Manual trace across 40+ files

get_change_impact

~62,000

~2,400

96%

"Find all tests for extractOpenAPI"

Glob + Read 12 test files

get_tests_for

~14,800

~650

96%

"Understand the indexing pipeline"

Read 15 source files

get_task_context

~89,000

~7,200

92%

"Unused exports in src/tools/"

Read + Grep all files

get_dead_code

~38,000

~1,800

95%

"All OpenAPI endpoints in the project"

Find + Read all .yaml/.json

search (kind=function, yamlKind=endpoint)

~22,000

~900

96%

Measured using benchmark_project — runs eleven real task categories (symbol lookup, file exploration, text search, find usages, context bundle, batch overhead, impact analysis, call graph traversal, type hierarchy, tests-for, composite task context) against the indexed project. "Without trace-mcp" = estimated tokens from equivalent Read/Grep/Glob operations (full file reads, grep output). "With trace-mcp" = actual tokens returned by trace-mcp tools (targeted symbols, outlines, graph results). Token counts estimated using trace-mcp's built-in savings tracker.

Reproduce it yourself:

# Via MCP tool
benchmark_project  # runs against the current project

# Or via CLI
trace-mcp benchmark /path/to/project

Key capabilities

  • Request flow tracing — URL → Route → Middleware → Controller → Service, across 18 backend frameworks

  • Component trees — render hierarchy with props / emits / slots (Vue, React, Blade)

  • Schema from migrations — no DB connection needed

  • Event chains — Event → Listener → Job fan-out (Laravel, Django, NestJS, Celery, Socket.io)

  • Change impact analysis — reverse dependency traversal across languages, enriched with linked architectural decisions

  • Decision memory — mine sessions for decisions, link them to code symbols/files, query with temporal validity. Decisions auto-surface in get_change_impact, plan_turn, and get_session_resume

  • Cross-session search — "what did we discuss about auth?" — FTS5 search across all past session content

  • Graph-aware task context — describe a dev task → get the optimal code subgraph (execution paths, tests, types) + relevant past decisions, adapted to bugfix/feature/refactor intent

  • CI/PR change impact reports — automated blast radius, risk scoring, test gap detection, architecture violation checks on every PR

  • Call graph & DI tree — bidirectional call graphs with 4-tier resolution confidence, optional LSP enrichment for compiler-grade accuracy, NestJS dependency injection

  • ORM model context — relationships, schema, metadata for 7 ORMs

  • Dead code & test gap detection — find untested exports/symbols (with "unreached" vs "imported_not_called" classification), dead code, per-symbol test reach in impact analysis

  • Security scanning & MCP server analysis — OWASP Top-10 pattern scanning, taint analysis (source→sink data flow), MCP security context export for skill-scan enrichment (tool annotations verification, capability classification, sensitive data flows)

  • Multi-service subprojects — link graphs across services via API contracts; cross-service impact analysis; service-scoped decisions

  • AI-powered analysis — semantic search with zero-config local ONNX embeddings (no API keys needed), plus optional LLM summarization via Ollama/OpenAI

Supported stack

Languages (68): PHP, TypeScript/JavaScript, Python, Go, Java, Kotlin, Ruby, Rust, C, C++, C#, Swift, Objective-C, Dart, Scala, Groovy, Elixir, Erlang, Haskell, Gleam, Bash, Lua, Perl, GDScript, R, Julia, Nix, SQL, HCL/Terraform, Protocol Buffers, Vue SFC, HTML, CSS/SCSS/SASS/LESS, XML/XUL/XSD, YAML, JSON, TOML, Assembly, Fortran, AutoHotkey, Verse, AL, Blade, EJS, Zig, OCaml, Clojure, F#, Elm, CUDA, COBOL, Verilog/SystemVerilog, GLSL, Meson, Vim Script, Common Lisp, Emacs Lisp, Dockerfile, Makefile, CMake, INI, Svelte, Markdown, MATLAB, Lean 4, FORM, Magma, Wolfram/Mathematica

Frameworks: Laravel (+ Livewire, Nova, Filament, Pennant), Django (+ DRF), FastAPI, Flask, Express, NestJS, Fastify, Hono, Next.js, Nuxt, Rails, Spring, tRPC

ORMs: Eloquent, Prisma, TypeORM, Drizzle, Sequelize, Mongoose, SQLAlchemy

Frontend: Vue, React, React Native, Blade, Inertia, shadcn/ui, Nuxt UI, MUI, Ant Design, Headless UI

Other: GraphQL, Socket.io, Celery, Zustand, Pydantic, Zod, n8n, React Query/SWR, Playwright/Cypress/Jest/Vitest/Mocha

Full details: Supported frameworks · All tools


Quick start

npm install -g trace-mcp
trace-mcp init        # one-time global setup (MCP clients, hooks, CLAUDE.md)
trace-mcp add         # register current project for indexing

Step 1: init — one-time global setup. Configures your MCP client (Claude Code, Cursor, Windsurf, or Claude Desktop), installs the guard hook, and adds a tool routing guide to ~/.claude/CLAUDE.md.

Step 2: add — registers a project. Detects frameworks and languages, creates the index database, and adds the project to the global registry. Run this in each project you want trace-mcp to understand.

All state lives in ~/.trace-mcp/ — nothing is stored in your project directory (unless you add a .traceignore or .trace-mcp/.config.json).

Start your MCP client and use:

> get_project_map to see what frameworks are detected
> get_task_context("fix the login bug") to get full execution context for a task
> get_change_impact on app/Models/User.php to see what depends on it

Adding more projects

cd /path/to/another/project
trace-mcp add

Or specify a path directly:

trace-mcp add /path/to/project

List all registered projects:

trace-mcp list

Upgrading

After updating trace-mcp (npm update -g trace-mcp), re-run init in your project directory:

trace-mcp init

This runs database migrations, updates MCP client configuration, and reindexes the project with the latest plugins.

Manual setup

If you prefer manual control, see Configuration for all options. You can skip specific init steps:

trace-mcp init --skip-hooks --skip-claude-md --skip-mcp-client

Semantic search works out of the box — just enable AI in your config:

// ~/.trace-mcp/.config.json or project/.trace-mcp/.config.json
{ "ai": { "enabled": true } }

The default provider (onnx) uses a bundled local model (Xenova/all-MiniLM-L6-v2, ~23 MB) — no API keys, no external services, fully offline after first model download. Run embed_repo once or just use search with semantic: "on" and embeddings will be computed on demand.

For LLM-powered summarization, switch to ollama or openai provider — see AI configuration.

Indexing details

Automatic: trace-mcp serve starts background indexing immediately and launches a file watcher. The server is ready for tool calls right away — results improve as indexing progresses. If the project isn't registered yet, serve auto-registers it.

Manual: index a project without starting the server:

trace-mcp index /path/to/project          # incremental (skips unchanged files)
trace-mcp index /path/to/project --force   # full reindex

Files are content-hashed (MD5). On re-index, unchanged files are skipped. Both serve and serve-http start a file watcher that debounces rapid changes (300ms) and processes deletions immediately.

Global directory structure

All trace-mcp state is centralized:

~/.trace-mcp/
  .config.json              # global config + per-project settings
  registry.json             # registered projects
  topology.db               # cross-service topology + subproject graph
  decisions.db              # decision memory + session content (cross-session knowledge graph)
  index/
    my-app-a1b2c3d4e5f6.db  # per-project databases (named by project + hash)

Excluding files from indexing (.traceignore)

Place a .traceignore file in the project root to skip files/directories from indexing entirely (gitignore syntax):

# Skip generated code
generated/
*.generated.ts

# Skip protobuf output
*_pb2.py
*.pb.go

# Negation — re-include a specific path
!generated/keep-this.ts

Common directories (node_modules, .git, dist, build, vendor, etc.) are skipped automatically.

You can also configure ignore rules in ~/.trace-mcp/.config.json (global) or project/.trace-mcp/.config.json (per-project):

{
  "ignore": {
    "directories": ["proto", "generated"],
    "patterns": ["**/fixtures/**"]
  }
}

Details: Configuration — .traceignore


Getting the most out of trace-mcp

trace-mcp works on three levels to make AI agents use its tools instead of raw file reading:

Level 1: Automatic (works out of the box)

The MCP server provides instructions and tool descriptions with routing hints that tell AI agents when to prefer trace-mcp over native Read/Grep/Glob. This works with any MCP-compatible client — no configuration needed.

Add this block to your project's CLAUDE.md (or ~/.claude/CLAUDE.md for global use) to reinforce tool routing:

## Code Navigation Policy

Use trace-mcp tools for code intelligence — they understand framework relationships, not just text.

| Task | trace-mcp tool | Instead of |
|------|---------------|------------|
| Find a function/class/method | `search` | Grep |
| Understand a file before editing | `get_outline` | Read (full file) |
| Read one symbol's source | `get_symbol` | Read (full file) |
| What breaks if I change X | `get_change_impact` | guessing |
| All usages of a symbol | `find_usages` | Grep |
| Starting work on a task | `get_task_context` | reading 15 files |
| Quick keyword context | `get_feature_context` | reading 15 files |
| Tests for a symbol | `get_tests_for` | Glob + Grep |
| HTTP request flow | `get_request_flow` | reading route files |
| DB model relationships | `get_model_context` | reading model + migrations |

Use Read/Grep/Glob for non-code files (.md, .json, .yaml, config).
Start sessions with `get_project_map` (summary_only=true).

Level 3: Hook enforcement (Claude Code only)

For hard enforcement, install the PreToolUse guard hook that blocks Read/Grep/Glob on source code files and redirects the agent to trace-mcp tools with specific suggestions. The hook is installed globally by trace-mcp init, or manually:

trace-mcp setup-hooks --global    # install
trace-mcp setup-hooks --uninstall # remove

This copies the guard script to ~/.claude/hooks/ and adds the hook to your Claude Code settings.

What the hook does:

  • Blocks Read/Grep/Glob/Bash on source code files (.ts, .py, .php, .go, .java, .rb, etc.)

  • Allows non-code files (.md, .json, .yaml, .env, config)

  • Allows Read before Edit — first Read is blocked with a suggestion, retry on the same file is allowed (the agent needs full content for editing)

  • Allows safe Bash commands (git, npm, build, test, docker, etc.)

  • Redirects with specific trace-mcp tool suggestions in the denial message


How it works

Source files (PHP, TS, Vue, Python, Go, Java, Kotlin, Ruby, HTML, CSS, Blade)
    │
    ▼
┌──────────────────────────────────────────┐
│  Pass 1 — Per-file extraction            │
│  tree-sitter → symbols                   │
│  integration plugins → routes,           │
│    components, migrations, events,       │
│    models, schemas, variants, tests      │
└────────────────────┬─────────────────────┘
                     │
                     ▼
┌──────────────────────────────────────────┐
│  Pass 2 — Cross-file resolution          │
│  PSR-4 · ES modules · Python modules    │
│  Vue components · Inertia bridge         │
│  Blade inheritance · ORM relations       │
│  → unified directed edge graph           │
└────────────────────┬─────────────────────┘
                     │
                     ▼
┌──────────────────────────────────────────┐
│  Pass 3 — LSP enrichment (opt-in)       │
│  tsserver · pyright · gopls ·           │
│  rust-analyzer → compiler-grade         │
│  call resolution, 4-tier confidence     │
└────────────────────┬─────────────────────┘
                     │
                     ▼
┌──────────────────────────────────────────┐
│  SQLite (WAL mode) + FTS5               │
│  nodes · edges · symbols · routes       │
│  + embeddings (local ONNX by default)   │
│  + optional: LLM summaries              │
└────────────────────┬─────────────────────┘
                     │
                     ▼
┌──────────────────────────────────────────┐
│  Decision Memory (decisions.db)         │
│  decisions · session chunks · FTS5      │
│  temporal validity · code linkage       │
│  auto-mined from session logs           │
└────────────────────┬─────────────────────┘
                     │
                     ▼
         MCP server (stdio or HTTP/SSE)
         130+ tools · 2 resources

Incremental by default — files are content-hashed; unchanged files are skipped on re-index.

Plugin architecture — language plugins (symbol extraction) and integration plugins (semantic edges) are loaded based on project detection, organized into categories: framework, ORM, view, API, validation, state, realtime, testing, tooling.

Details: Architecture & plugin system


Documentation

Document

Description

Supported frameworks

Complete list of languages, frameworks, ORMs, UI libraries, and what each extracts

Tools reference

All 130+ MCP tools with descriptions and usage examples

Configuration

Config options, AI setup, environment variables, security settings

Architecture

How indexing works, plugin system, project structure, tech stack

Decision memory

Decision knowledge graph, session mining, cross-session search, wake-up context

Analytics

Session analytics, token savings tracking, optimization reports, benchmarks

System prompt routing

Optional tweakcc integration for maximum tool routing enforcement

Development

Building, testing, contributing, adding new plugins


Decision memory

Every conversation with an AI agent produces decisions, discoveries, and preferences that disappear when the session ends. trace-mcp's decision memory captures them and links them to the code they're about.

How it works

  1. Minemine_sessions scans Claude Code / Claw Code JSONL logs and extracts decisions using pattern matching (no LLM calls). Detects architecture decisions, tech choices, bug root causes, preferences, tradeoffs, discoveries, and conventions.

  2. Link — each decision can be linked to a code symbol (src/auth/provider.ts::AuthProvider#class) or file. When you run get_change_impact on that symbol, the decision shows up automatically.

  3. Searchquery_decisions supports FTS5 full-text search, filtering by type/service/symbol/file/tag, and temporal queries ("what was true in January?"). search_sessions searches raw conversation content across all past sessions.

  4. Surface — decisions auto-enrich code intelligence tools:

    • get_change_impactlinked_decisions on the target + affected files

    • plan_turnrelated_decisions matched by task description + target files

    • get_session_resumeactive_decisions for project orientation

Decision memory MCP tools

Tool

What it does

mine_sessions

Extract decisions from session logs (pattern-based, 0 LLM calls)

add_decision

Manually record a decision with code linkage + service scoping

query_decisions

Query by type/service/symbol/file/tag + FTS5 search

invalidate_decision

Mark a decision as superseded (preserved for history)

get_decision_timeline

Chronological history of decisions for a symbol/file

get_decision_stats

Knowledge graph overview

index_sessions

Index session content for cross-session search

search_sessions

FTS5 search: "what did we discuss about auth?"

get_wake_up

Compact orientation (~300 tokens): project + decisions + stats

Decision memory CLI

trace-mcp memory mine                           # mine sessions for decisions
trace-mcp memory index                          # index session content for search
trace-mcp memory search "GraphQL migration"     # search past conversations
trace-mcp memory decisions --type tech_choice   # list decisions
trace-mcp memory stats                          # knowledge graph overview
trace-mcp memory timeline --file src/auth.ts    # decision history for a file

Temporal validity

Decisions have valid_from / valid_until timestamps. When a decision is superseded, invalidate_decision preserves it for historical queries while excluding it from active results:

query_decisions()                              → only active decisions
query_decisions(as_of="2025-01-15")            → what was true on Jan 15
query_decisions(include_invalidated=true)       → full history

Service scoping

In projects with multiple services (subprojects), decisions can be scoped:

add_decision(title="Use JWT", service_name="auth-api")
query_decisions(service_name="auth-api")       → only auth-api decisions
query_decisions()                              → all project decisions

Details: Decision memory


Subprojects

A subproject is any working repository that is part of your project's ecosystem: microservices, frontends, backends, shared libraries, CLI tools, etc.

Each directory with its own root marker (package.json, composer.json, go.mod, etc.) is a subproject. A project contains one or more subprojects; the project itself is not a subproject.

trace-mcp links dependency graphs across subprojects — if subproject A calls an API endpoint in subproject B, trace-mcp knows that changing that endpoint in B breaks clients in A. Subprojects can live inside the project directory or be added from outside.

How it works

Subproject discovery is automatic by default. Every time a project is indexed (serve, serve-http, or index), trace-mcp:

  1. Detects subprojects within the project root:

    • Docker Compose — parses docker-compose.yml / compose.yml

    • Flat workspace — first-level subdirs with root markers (e.g. project/frontend/ + project/backend/)

    • Grouped workspace — two-level structure (e.g. project/org/service-a/)

    • Monolith fallback — treats root as a single subproject

  2. Registers each subproject bound to the project in ~/.trace-mcp/topology.db

  3. Parses API contracts — OpenAPI/Swagger, GraphQL SDL, Protobuf/gRPC

  4. Scans code for HTTP client calls (fetch, axios, Http::, requests, http.Get, gRPC stubs, GraphQL operations)

  5. Links discovered calls to known endpoints from other subprojects

  6. Creates cross-subproject dependency edges

Example

# Index a project — subprojects are auto-detected
cd ~/projects/my-app && trace-mcp add
# → auto-detects: my-app/user-service (has openapi.yaml)
# →               my-app/order-service (has axios.get('/api/users/{id}'))
# → links order-service → user-service via /api/users/{id}

# Or add an external subproject manually
trace-mcp subproject add --repo=~/projects/external-auth --project=~/projects/my-app

# Check cross-subproject impact
trace-mcp subproject impact --endpoint=/api/users
# → "GET /api/users/{id} is called by 2 client(s) in 1 subproject(s)"
#   [order-service] src/services/user-client.ts:42 (axios, confidence: 85%)

Subproject CLI

# Add a subproject (inside or outside project dir)
trace-mcp subproject add --repo=../service-b --project=. [--contract=openapi.yaml] [--name=my-service]
trace-mcp subproject remove <name-or-path>
trace-mcp subproject list [--project=.] [--json]
trace-mcp subproject sync           # re-scan all subprojects
trace-mcp subproject impact --endpoint=/api/users [--method=GET] [--service=user-svc]

MCP tools

Tool

What it does

get_subproject_graph

All subprojects, their connections, and stats

get_subproject_impact

Cross-subproject impact: what breaks if endpoint X changes (resolves to symbol level)

get_subproject_clients

Find all client calls across subprojects that call a specific endpoint

subproject_add_repo

Add a subproject via MCP (bound to current project, or specify project)

subproject_sync

Re-scan all subprojects

Subproject management builds on top of the topology system. See Configuration for options.


CI/PR change impact reports

trace-mcp can generate automated change impact reports for pull requests — blast radius, risk scoring, test coverage gaps, architecture violations, and dead code detection.

CLI usage

# Generate a markdown report for changes between main and HEAD
trace-mcp ci-report --base main --head HEAD

# Output to file
trace-mcp ci-report --base main --head HEAD --format markdown --output report.md

# JSON output
trace-mcp ci-report --base main --head HEAD --format json

# Fail CI if risk level >= high
trace-mcp ci-report --base main --head HEAD --fail-on high

# Index before generating (for CI environments without pre-built index)
trace-mcp ci-report --base main --head HEAD --index

GitHub Action

Add this workflow to get automatic impact reports on every PR:

# .github/workflows/ci.yml (impact-report job runs after build-and-test)
- name: Index project
  run: node dist/cli.js index . --force

- name: Generate impact report
  run: |
    node dist/cli.js ci-report \
      --base ${{ github.event.pull_request.base.sha }} \
      --head ${{ github.event.pull_request.head.sha }} \
      --format markdown \
      --output report.md

- name: Post PR comment
  uses: marocchino/sticky-pull-request-comment@v2
  with:
    path: report.md

The full workflow is in .github/workflows/ci.yml — it runs build → test → impact-report on every PR.

Report sections

Section

What it shows

Summary

Changed files, affected files count, risk level, gap counts

Blast Radius

Files transitively affected by changes (depth-2 reverse dependency traversal)

Test Coverage Gaps

Affected symbols with no matching test file. Per-symbol hasTestReach shows whether tests actually reference each specific symbol

Risk Analysis

Per-file composite score: 30% complexity + 25% churn + 25% coupling + 20% blast radius

Architecture Violations

Layer rule violations involving changed files (auto-detects clean architecture / hexagonal presets)

Dead Code

New exports in changed files that nothing imports


Best for

  • Full-stack projects in any supported framework combination

  • Teams using AI agents (Claude, Cursor, Windsurf) for day-to-day development

  • Multi-language codebases where PHP ↔ JavaScript ↔ Python boundaries create blind spots

  • Monorepos with multiple services and shared libraries

  • Microservice architectures where API changes ripple across repos

  • Large codebases where agents waste tokens re-reading files


License

MIT


Built by Nikolai Vysotskyi

Available Tools

28 tools
batchA
Read-onlyIdempotent

Execute multiple trace-mcp tools in a single MCP request. Returns results for all calls. Use to reduce round-trips when you need several independent queries (e.g., get_outline for 3 files, or search + get_symbol together). Read-only (delegates to other tools). Returns JSON: { batch_results: [{ tool, result }], total }.

ParametersJSON Schema
NameRequiredDescriptionDefault
callsYesArray of tool calls to execute (max 10)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already signal readOnly and non-destructive. The description adds useful behavioral context beyond that: it delegates to other tools, is read-only, and returns a JSON structure of batch_results. This informs the agent of the delegation behavior and output shape without contradicting the annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: purpose, when to use, and return format. It is front-loaded and avoids fluf or redundant schema repetition.

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

Completeness4/5

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

For a tool with no output schema, the return JSON is described well, and the read-only/delegation behavior is stated. The description could also cover per-call error propagation or ordering guarantees, but these are minor given the tools's simple batch semantics and strong annotations.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is satisfied; the description goes further by showing what kinds of calls to batch with examples like 'get_outline for 3 files' and 'search + get_symbol together.' This makes the calls parameter more tangible without repeating the schema details.

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

Purpose5/5

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

The description states a specific verb and resource: 'execute multiple trace-mcp tools in a single MCP request.' It clearly identifies the tool as a batching/composite operation, distinguishing it from the individual sibling tools by its aggregation behavior.

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

Usage Guidelines4/5

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

The description explicitly states when to use it: 'reduce round-trips when you need several independent queries' and gives concrete examles such as 'get_outline for 3 files, or search + get_symbol together.' It does not explicitly mention when not to use it, so it stops short of a 5, but the context is clear.

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

find_usagesA
Read-onlyIdempotent

Find all places that reference a symbol or file (imports, calls, renders, dispatches). Use instead of Grep for symbol usages — understands semantic relationships, not just text matches. For bidirectional call graph use get_call_graph instead. By default, weakly-grounded text_matched edges into a target whose simple name collides with many other symbols are dropped (phantom god-node filter). Pass include_ambiguous_text_matched: true to keep them. Read-only. Returns JSON: { references: [{ file, line, kind, context }], total, ambiguous_filtered? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqnYesFully qualified name to find references for
file_pathYesFile path to find references for
symbol_idYesSymbol ID to find references for
detail_levelNoOutput verbosity. "minimal" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: "default".
include_ambiguous_text_matchedNoKeep text_matched edges whose target name collides with >=3 other symbols (default false — they produce phantom god-nodes).

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent behavior, and the description adds meaningful operational detail: the default dropping of weakly-grounded text_matched edges with the phantom god-node rationale, plus the exact JSON return shape. This goes well beyond what annotations alone provide.

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 compact yet information-dense, front-loading the core purpose and usage guidance before behavioral details and return format. Every sentence adds operational value; there is no filler or repetition of schema content.

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

Completeness5/5

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

For a complex reference-finding tool with no output schema, the description supplies the return JSON shape, keys, optional ambiguity filter, and clear sibling differentiation. All five parameters are covered in the schema, and the description fills the remaining behavioral gaps needed for correct invocation.

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. The description adds semantic context for include_ambiguous_text_matched ('weakly-grounded', 'phantom god-node filter') beyond what the schema states, and clarifies the intent of the return fields. It does not need to restate every parameter.

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

Purpose5/5

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

The description names a specific verb and resource ('Find all places that reference a symbol or file') and enumerates reference kinds ('imports, calls, renders, dispatches'). It distinguishes itself from sibling tools like Grep and get_call_graph without requiring schema inspection.

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

Usage Guidelines5/5

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

It explicitly says to use this tool instead of Grep for semantic symbol usages and directs users to get_call_graph for bidirectional call graphs. It also explains when to pass include_ambiguous_text_matched, leaving no ambiguity about tool selection.

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

get_call_graphA
Read-onlyIdempotent

Build a bidirectional call graph centered on a symbol (who calls it + what it calls). Use to understand control flow through a function. For flat list of all references use find_usages instead. Read-only. Returns JSON: { root: { symbol_id, name, calls: [...], called_by: [...] } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqnYesFully qualified name to center the graph on
depthNoTraversal depth on each side (default 2)
symbol_idYesSymbol ID to center the graph on

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior, so the description's 'Read-only' is redundant but not harmful. The description adds genuine value by disclosing the bidirectional nature of the graph and the exact JSON return shape, which the annotations and schema do not convey. It does not go further to mention traversal cost or default depth behavior, but the schema already documents depth limits.

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

Conciseness5/5

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

Three sentences with no fluff: the first states the core function, the second gives the use case and alternative tool, and the third confirms read-only status and return format. Every sentence carries useful information and the key distinction from find_usages is front-loaded.

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

Completeness4/5

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

The tool has moderate complexity (two required identifiers, one optional depth parameter, no output schema), and the description provides the missing return format while the schema documents depth. The only notable gap is not explaining why both symbol_id and fqn are required or how they interact, which could leave an agent uncertain about how to populate both parameters. Overall, enough is present for confident invocation, but this small ambiguity prevents a perfect score.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides for symbol_id and fqn. It implies the result centers on a symbol, but the relationship between symbol_id and fqn (both required) is not clarified in either the description or the schema, so it neither improves nor worsens the baseline.

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 uses a specific verb ('Build') and resource ('bidirectional call graph centered on a symbol'), and immediately clarifies semantics with the parenthetical 'who calls it + what it calls'. It also distinguishes itself from the sibling find_usages by describing the alternative as a flat list of all references, so an agent can tell them apart without opening schemas.

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 states a clear purpose ('Use to understand control flow through a function') and gives an explicit when-not-to-use instruction with the named alternative ('For flat list of all references use find_usages instead'). This is direct routing guidance that leaves no ambiguity about tool selection.

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

get_change_impactA
Read-onlyIdempotent

Full change impact report: risk score + mitigations, breaking change detection, enriched dependents (complexity, coverage, exports), module groups, affected tests, co-change hidden couplings. Supports diff-aware mode via symbol_ids to scope analysis to only changed symbols. Use before modifying code to understand blast radius. For quick risk assessment without full report, use assess_change_risk instead. Read-only. Returns JSON: { risk, dependents, affectedTests, breakingChanges, totalAffected }.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqnNoFully qualified name to analyze (alternative to symbol_id)
depthNoMax traversal depth (default 3)
file_pathYesRelative file path to analyze
symbol_idYesSymbol ID to analyze
symbol_idsNoDiff-aware: only analyze impact of these specific symbols (e.g. from get_changed_symbols)
max_dependentsNoCap on returned dependents (default 200)
decorator_filterNoFilter dependents to only those with this decorator/annotation/attribute (e.g. "Route", "Transactional", "csrf_protect")

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description reinforces this with 'Read-only.' It adds behavioral value by describing diff-aware mode via symbol_ids and the top-level JSON return shape, helping the agent anticipate output and scope.

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 compact and front-loaded, opening with 'Full change impact report' and then listing concrete outputs. Every sentence carries distinct signal: purpose, mode, usage timing, alternative, safety, and return shape, with no filler.

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 complex analysis tool, the description covers purpose, when to use, alternative, read-only behavior, diff-aware mode, and a summary of the JSON response. It doesn't document every returned field, but the listed keys plus full schema coverage give enough context for correct invocation and interpretation.

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?

Input schema coverage is 100%, so the schema already documents all 7 parameters. The description's mention of symbol_ids for diff-aware analysis adds slight context, but the schema already describes this behavior, so the description does not significantly elevate parameter understanding.

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 clearly states the tool produces a full change impact report, enumerating risk score, mitigations, breaking changes, enriched dependents, module groups, affected tests, and hidden couplings. It also explicitly distinguishes itself from assess_change_risk, making its purpose unmistakable even among sibling tools.

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 usage directive: 'Use before modifying code to understand blast radius.' It also names a lighter alternative, assess_change_risk, for quick risk assessment, so an agent can decide when this heavier tool is warranted.

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

get_context_bundleA
Read-onlyIdempotent

Get a symbol's source code + its import dependencies + optional callers, packed within a token budget. Supports batch queries with shared-import deduplication. Use instead of chaining get_symbol calls — deduplicates shared imports across symbols. For a single symbol without imports, get_symbol is lighter. Read-only. Returns JSON: { primary: [{ symbol_id, file, source }], imports: [{ file, source }], token_usage }.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqnYesAlternative: look up by FQN
symbol_idYesSingle symbol ID
symbol_idsNoBatch: multiple symbol IDs
token_budgetNoMax tokens (default 8000)
output_formatNoOutput format (default json).
include_callersNoInclude who calls these symbols (default false)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior; the description reinforces 'Read-only' and adds useful context about shared-import deduplication, token-budget packing, and the JSON shape. It does not explain truncation or error behavior when the token budget is exceeded, but this is a minor gap given the annotation coverage.

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 compact, front-loaded with the core function, and every sentence earns its place—covering scope, batch behavior, sibling routing, safety, and return format without filler.

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?

With no output schema, the description provides a useful JSON skeleton and clear invocation guidance. It leaves some edge behavior implicit, such as how include_callers alters the response shape and what happens when the token budget is insufficient, but the schema and annotations cover most invocation details.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining why batch queries and token_budget matter: they enable shared-import deduplication within a packed token budget.

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?

States a specific operation (get) and resource (a symbol's source code, imports, and optional callers packed within a token budget). It also clearly distinguishes itself from get_symbol, naming the sibling and the difference in scope.

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?

Explicitly says to use this instead of chaining get_symbol calls and gives the lighter-alternative condition: for a single symbol without imports, get_symbol is better. This is concrete, actionable routing guidance.

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

get_coverage_reportA
Read-onlyIdempotent

Technology profile of the project: detected frameworks/ORMs/UI libs from manifests (package.json, composer.json, etc.), which are covered by trace-mcp plugins, and coverage gaps. Read-only. Returns JSON: { detected, covered, gaps }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior; the description adds value by specifying the data source (manifests), the read-only nature, and the exact return shape { detected, covered, gaps }. This goes beyond the structured annotations without contradicting them.

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 compact and front-loaded with the core purpose, followed by the read-only trait and return shape. Every sentence earns its place, with no redundant elaboration.

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

Completeness5/5

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

For a zero-parameter, read-only report with no output schema, the description is complete: it explains what data is gathered, from where, and what the JSON response contains. An agent has enough information to invoke and interpret the tool correctly.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4. The description provides enough context about the returned fields to make the no-argument call understandable, and there is no parameter documentation gap.

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

Purpose4/5

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

The description clearly identifies the tool as producing a technology profile with detected frameworks/ORMs/UI libs and coverage gaps, which is specific and not a tautology. It distinguishes the report's focus on plugin coverage from siblings like get_optimization_report or get_usage_trends, though it does not explicitly name any sibling.

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?

Usage context is implied rather than stated: an agent can infer this tool is for inspecting project technology coverage and gaps, but there is no explicit 'use when' guidance or mention of alternatives. No exclusion criteria are provided.

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

get_feature_contextA
Read-onlyIdempotent

Search code by keyword/topic → returns ranked source snippets within a token budget. Use when you need to READ actual code for a concept or feature. For structured task context with tests and entry points use get_task_context instead; for symbol metadata without source use search. Read-only. Returns JSON (default) or Markdown: { items: [{ symbol_id, name, file, source, score }], token_usage } | { content: "...markdown..." }. Supports output_format: "toon". Capped by memory.recall.timeoutMs (default 5000ms); on timeout returns { items: [], token_usage, degraded: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYesNatural language description of the feature to find context for
detail_levelNoOutput verbosity. "minimal" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: "default".
token_budgetNoMax tokens for assembled context (default 4000)
output_formatNo"json" (default, structured items), "markdown" (fenced code blocks, ~15-20% cheaper), or "toon" (lossless, 30-60% fewer tokens).

TDQS

A4.6/5.0
Behavior5/5

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

Despite strong annotations (readOnly, idempotent, non-destructive), the description adds meaningful behavioral detail: token budget behavior, output format variants, timeout cap with default value, and a degraded response shape on timeout. It also confirms the read-only nature, aligning with annotations. No contradiction.

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 dense and front-loaded, with the core purpose and usage guidance first. It packs output shapes, timeout behavior, and alternatives into a compact block. Minor redundancy exists ('Read-only' repeats the annotation) and the toon reference is slightly tacked on, but overall every sentence earns its place.

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

Completeness5/5

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

With no output schema, the description properly explains return formats and the degraded timeout case. It covers tool selection, read-only semantics, token budget, and output options. Given the tool's moderate complexity and annotations already handling safety, nothing critical is missing for an agent to call it correctly.

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% and the schema already documents all four parameters, including defaults, enums, and constraints. The description reinforces token budget and output format behavior but does not add substantive per-parameter meaning beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Search code by keyword/topic'), a precise result ('ranked source snippets'), and an explicit constraint ('within a token budget'). It also distinguishes the tool from siblings by naming get_task_context and search as alternatives, so an agent can tell them apart immediately.

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

Usage Guidelines5/5

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

It gives an explicit when-to-use condition ('when you need to READ actual code for a concept or feature') and clear routing instructions: use get_task_context for structured task context with tests and entry points, and search for symbol metadata without source. This is exactly the kind of differentiation agents need.

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

get_index_healthA
Read-onlyIdempotent

Get index status, statistics, health information, and pipeline progress (indexing, summarization, embedding). Read-only, no side effects. Use to verify the index is ready before running queries. Returns JSON: { totalFiles, totalSymbols, languages, frameworks, pipelineProgress }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces this with 'Read-only, no side effects.' It adds valuable context beyond annotations by describing the return format explicitly and mentioning pipeline progress (indexing, summarization, embedding). No contradictions with annotations exist.

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 compact (four sentences) and front-loads the core purpose. Every sentence adds useful information: purpose, safety, usage context, and return format. There is no fluff or redundancy.

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

Completeness5/5

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

For a parameterless, read-only health-check tool, the description is fully complete. It states what the tool does, when to use it, that it is safe, and exactly what JSON it returns. An agent has everything needed to decide whether to call it and interpret the result.

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

Parameters4/5

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

The tool has zero parameters, so the schema is empty. Per calibration, a baseline of 4 applies when there are no parameters, as there is nothing to document. The description does not need to add parameter detail.

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

Purpose5/5

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

The description states a specific verb ('Get'), a clear resource ('index status, statistics, health information, and pipeline progress'), and explicitly mentions the readiness check ('verify the index is ready before running queries'). This clearly distinguishes it from sibling tools like get_project_map or get_context_bundle, which serve different purposes.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Use to verify the index is ready before running queries.' This tells the agent when to invoke it. However, it does not explicitly mention alternatives or when not to use it, though the purpose is narrow enough that this is not a major gap.

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

get_optimization_reportA
Read-onlyIdempotent

Detect token waste patterns in AI agent sessions: repeated file reads, Bash grep instead of search, large file reads, unused trace-mcp tools. Provides savings estimates. Read-only. For usage/cost overview use get_session_analytics; for A/B savings comparison use get_real_savings. Returns JSON: { patterns: [{ type, description, savings_estimate }], total_waste }.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime period (default: week)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety type is covered. The description adds value beyond annotations by describing the JSON return format ({ patterns: [{ type, description, savings_estimate }], total_waste }) and stating it 'Provides savings estimates.' No contradiction with annotations.

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

Conciseness5/5

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

Three sentences, each earning its place: the first names specific waste patterns, the second covers read-only safety and savings estimates, the third gives the return shape and sibling routing. No filler or repetition.

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

Completeness5/5

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

For a simple one-optional-parameter tool with no output schema, the description provides the return JSON structure, the tool's scope, and explicit sibling alternatives. Nothing needed to invoke it correctly is missing.

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?

The input schema covers 100% of the single parameter, including enum values and default. The description does not add any parameter-level detail, so the schema carries the full burden. Baseline 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 a specific verb and resource: 'Detect token waste patterns in AI agent sessions,' then lists concrete pattern types (repeated file reads, Bash grep instead of search, large file reads, unused trace-mcp tools). It also provides the return shape and distinguishes itself from siblings by naming their use cases.

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?

Explicitly routes to alternatives with conditions: 'For usage/cost overview use get_session_analytics; for A/B savings comparison use get_real_savings.' This tells the agent when not to use this tool and which sibling to pick instead.

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

get_outlineA
Read-onlyIdempotent

Get all symbols for a file (signatures only, no bodies) — cheaper than Read for understanding a file before editing. Follow up with get_symbol to read one symbol's source. nested: true expands large top-level symbols (default ≥100 LOC) into inner declarations, each carrying parentId + depth (max 3). Read-only. Returns JSON: { path, language, symbols: [{ symbolId, name, kind, signature, lineStart, lineEnd, parentId?, depth? }] }. Supports output_format: "toon".

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative file path
nestedNoWalk the body of each top-level symbol past min_loc_for_nesting and emit inner declarations as extra rows carrying `parentId` + `depth`. Default false.
detail_levelNoOutput verbosity. "minimal" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: "default".
output_formatNo"json" (default) or "toon" (lossless, 30-60% fewer tokens). "markdown" is unsupported here and behaves as json.
min_loc_for_nestingNoMinimum (line_end - line_start) for a top-level symbol to be expanded when nested=true. Default 100.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description adds meaningful behavioral detail: it is signatures-only, cheaper than Read, expands nested declarations with parentId+depth up to max 3, and specifies the exact JSON return shape. No contradiction with annotations.

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 compact and front-loaded: purpose, use case, follow-up, nested behavior, read-only flag, return shape, and format note appear in a logical order. Every sentence earns its place; there is no filler or repetition of schema details.

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

Completeness5/5

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

Despite having no output schema, the description provides the full JSON return shape and all key behavioral constraints. Parameter semantics are covered by high schema coverage, and usage vs. alternatives is explicit. For a read-only listing tool this is complete enough to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the nested=true effect (expands large top-level symbols, default ≥100 LOC, max depth 3) and noting output_format 'toon' support, which goes slightly beyond the schema's per-parameter text.

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

Purpose5/5

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

The description states a specific verb+resource ('Get all symbols for a file') and immediately clarifies scope ('signatures only, no bodies'). It also distinguishes itself from the sibling get_symbol and from Read by noting it is cheaper for understanding a file before editing, which is strong differentiation.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool ('before editing' to understand a file, 'cheaper than Read') and names the follow-up alternative ('get_symbol') for reading a symbol's source. It also explains when nested expansion applies, giving clear practical usage direction.

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

get_preset_infoA
Read-onlyIdempotent

Show active tool preset, available presets, which tools are registered in this session, and which are deferred (loadable via load_tools). Read-only. Returns JSON: { active_preset, registered_tools, tool_names, available_presets, deferred_tools }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description reinforces this with 'Read-only' and adds the return JSON shape (active_preset, registered_tools, etc.), disclosing what the agent will receive. This extra context goes beyond the annotations.

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 concise sentences, front-loaded with the core purpose and followed by a compact JSON key listing. Every sentence adds value; no filler or repetition.

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

Completeness5/5

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

For a zero-parameter read-only introspection tool, the description is complete: it states what the tool reports, the read-only nature, and the exact response fields. There is no output schema, so the description carries the burden of return-value disclosure and does so adequately.

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

Parameters4/5

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

The tool has zero parameters, so schema coverage is trivially 100%. Baseline for zero-parameter tools is 4; the description need not document parameter semantics because there are none.

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

Purpose5/5

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

The description opens with a specific verb ('Show') and enumerates the exact resources: active tool preset, available presets, registered tools, and deferred tools. It clearly differentiates this introspection tool from the many sibling get_* tools and explicitly connects deferred tools to load_tools.

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

Usage Guidelines4/5

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

The description makes the tool's context clear: use it to inspect tool registration and preset state. It mentions that deferred tools are loadable via load_tools, providing adjacent guidance, though it does not explicitly state when not to use it or name a directly competing alternative.

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

get_project_mapA
Read-onlyIdempotent

Get project overview: detected frameworks, languages, file counts, structure. Read-only, no side effects. Call with summary_only=true at session start to orient yourself before diving into code. Use instead of manual ls/find. Returns JSON: { frameworks, languages, fileCount, symbolCount, structure }.

ParametersJSON Schema
NameRequiredDescriptionDefault
summary_onlyNoReturn only framework list + counts (default false)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful behavioral context beyond that: it confirms 'no side effects', suggests a cheap orientation call pattern, and specifies the return shape. This exceeds the annotation baseline without contradicting it.

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?

Four concise sentences front-load the core behavior and return shape. The 'Read-only, no side effects' clause is slightly redundant with annotations, but the rest earns its place by adding usage guidance and output fields.

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

Completeness4/5

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

The description is complete for a simple, optional-parameter read-only tool. It names the return JSON fields, gives a recommended invocation, and explains the tool's role. It could mention symbolCount semantics or potential costs, but nothing an agent needs to call it correctly is missing.

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 the only parameter. The description adds the session-start use case for summary_only=true, which is helpful, but it does not add meaning beyond what the parameter description already conveys.

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 ('Get') and resource ('project map') and enumerates contents (frameworks, languages, file counts, structure). It does not explicitly distinguish itself from sibling tools like get_outline or get_context_bundle, but the term 'project map' combined with the described fields is clear enough for an agent to understand what it returns.

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?

Provides clear usage context: call at session start with summary_only=true to orient before diving into code, and use instead of manual ls/find. It does not discuss when not to use it or name alternative tools, but the intended scenario is explicit and actionable.

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

get_real_savingsA
Read-onlyIdempotent

A/B comparison: how many tokens could be saved by using trace-mcp instead of raw Read/Bash file reads. Per-file breakdown. Read-only. For pattern-based waste detection use get_optimization_report instead. Returns JSON: { files: [{ file, raw_tokens, compact_tokens, savings }], total_savings }.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime period (default: week)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive hints, so the description does not need to repeat safety traits. It adds useful behavioral context by describing the exact return shape: files with raw_tokens, compact_tokens, savings, and total_savings. This is valuable because there is no output schema.

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 compact and front-loaded with the core purpose, then clearly differentiates the tool from a sibling, and finishes with the return JSON shape. Every sentence earns its place with no filler.

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

Completeness5/5

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

For a simple read-only tool with one optional parameter, the description is complete: it explains what the tool does, when to use it, what it returns, and how it differs from the closest sibling. No important context is missing.

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%, and the only parameter, period, is fully documented in the schema with an enum and default of 'week'. The description does not add parameter-level meaning beyond the schema, which is expected given high coverage.

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 clearly states the tool's purpose with a specific verb and resource: 'A/B comparison: how many tokens could be saved by using trace-mcp instead of raw Read/Bash file reads.' It also specifies the per-file breakdown, making it easy to distinguish from other reporting tools like get_optimization_report.

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

Usage Guidelines5/5

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

The description explicitly directs when to use this tool versus an alternative: 'For pattern-based waste detection use get_optimization_report instead.' This provides a clear exclusion and alternative, so an agent can route correctly without opening the schema.

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

get_session_analyticsA
Read-onlyIdempotent

Analyze AI agent session logs: token usage, cost breakdown by tool/server, top files, models used. Parses Claude Code JSONL logs automatically. Read-only. For waste detection use get_optimization_report; for cost trends use get_usage_trends. Returns JSON: { sessions, tokens, cost_usd, tools, models, topFiles }.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime period (default: week)
session_idYesSpecific session ID to analyze

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only and idempotent behavior, and the description reinforces that with 'Read-only.' It adds context beyond the annotations by disclosing that it parses Claude Code JSONL logs automatically and by specifying the exact returned JSON keys, which is useful since there is no output schema.

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 compact and well-organized: purpose, input-format behavior, safety clarification, routing to siblings, and return shape. Each sentence earns its place, and the most important scope is front-loaded before the routing and return details.

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

Completeness5/5

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

For a read-only, two-parameter tool with a fully documented schema and helpful annotations, the description supplies all remaining contextual essentials: JSON output shape, automatic log parsing, and sibling routing. Nothing needed for correct invocation is missing.

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 parameter meaning is fully documented in the input schema for both session_id and period. The description mentions analysis dimensions and output fields but does not add parameter-specific semantics beyond what the schema already 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 a specific verb and resource: 'Analyze AI agent session logs' and then lists concrete outputs (token usage, cost breakdown by tool/server, top files, models). It also distinguishes itself from sibling tools by directing waste detection to get_optimization_report and cost trends to get_usage_trends.

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?

Explicitly names alternatives and when they should be preferred over this tool: 'For waste detection use get_optimization_report; for cost trends use get_usage_trends.' This gives an agent routing guidance rather than leaving the choice to inference.

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

get_session_statsA
Read-onlyIdempotent

Token savings stats for this session: per-tool call counts, estimated token savings, reduction percentage, dedup savings, and per-tool latency (p50/p95/max/error_rate). Read-only. Returns JSON: { session: { ..., latency_per_tool }, cumulative, dedup_saved_tokens }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description only needs to add non-safety behavior. It adds the return shape and key metrics (latency percentiles, cumulative, dedup_saved_tokens), which is meaningful since no output schema is present. No contradiction exists.

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. The metric list is dense but informative, and the return shape is summarized efficiently. The 'Read-only' phrase is redundant with annotations but does not meaningfully hurt conciseness.

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 parameterless read-only stats tool, the description covers scope, metric contents, and return structure. The '...' inside the session object leaves some schema detail unspecified, but the description is still sufficient for an agent to call it correctly and understand what it returns.

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?

This tool takes zero parameters, so the description cannot add parameter-level meaning beyond the schema. The baseline of 4 applies because there are no parameters to document and no ambiguity for an agent.

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

Purpose4/5

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

The description clearly states the tool provides token savings stats for the current session, including per-tool call counts, savings, reduction percentage, dedup savings, and latency metrics. This is specific and not a tautology, though it does not explicitly distinguish itself from sibling tools like get_session_analytics or get_usage_trends.

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 'for this session' provides useful context, implying use when current-session token savings statistics are needed. However, there is no explicit guidance about when not to use this tool or which sibling alternative to choose, especially given overlapping siblings like get_real_savings and get_session_analytics.

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

get_symbolA
Read-onlyIdempotent

Look up a symbol by symbol_id or FQN and return its source code. Use instead of Read when you need one specific function/class/method — returns only the symbol, not the whole file. For multiple symbols at once, prefer get_context_bundle. Read-only. Returns JSON: { symbol_id, name, kind, fqn, signature, file, line_start, line_end, source }.

ParametersJSON Schema
NameRequiredDescriptionDefault
fqnYesThe fully qualified name to look up
max_linesNoTruncate source to this many lines (omit for full source)
symbol_idYesThe symbol_id to look up
verify_against_gitNoCompare the indexed source against the current git HEAD slice; mismatches set `git_mismatch: true` in the response (index may be stale). Read-only. Silently skipped when git is unavailable or the file is untracked.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only/idempotent/non-destructive behavior. The description adds useful context by specifying that only the symbol is returned (not the whole file) and by enumerating the JSON response fields. It does not detail the git verification behavior, but that is disclosed 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.

Conciseness5/5

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

Three sentences carry the core purpose, usage routing, safety hint, and return shape with no filler. Key information is front-loaded.

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

Completeness4/5

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

For a read-only 4-parameter tool without an output schema, the description gives a good overall contract: what is returned, which sibling to use, and that it is read-only. The only meaningful omission is resolving the symbol_id/FQN requirement conflict and noting the optional git mismatch behavior, though the latter is present in the input schema.

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

Parameters2/5

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

The schema covers 100% of parameters, so the baseline is 3; however, the description's 'by symbol_id or FQN' conflicts with the schema's required array listing both symbol_id and fqn. This can mislead an agent into supplying only one of them. The optional max_lines and verify_against_git behaviors are left entirely to the schema.

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

Purpose5/5

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

The description names a specific verb and resource ('look up a symbol ... return its source code') and immediately distinguishes itself from Read and get_context_bundle. An agent can infer exactly which operation this tool performs.

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

Usage Guidelines5/5

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

It explicitly says when to prefer this over Read (one specific function/class/method) and when to prefer get_context_bundle instead (multiple symbols). No ambiguity remains about selection.

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

get_task_contextA
Read-onlyIdempotent

All-in-one context for starting a dev task: execution paths, tests, entry points, adapted by task type. Use as your FIRST call when beginning any new task — replaces manual chaining of search → get_symbol → Read. For narrower feature-code lookup use get_feature_context instead. Read-only. Returns JSON (default) or Markdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesNatural language description of the task
focusNoContext strategy: minimal (fast, essential only), broad (default, wide net), deep (follow full execution chains)
detail_levelNoOutput verbosity. "minimal" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: "default".
token_budgetNoMax tokens (default 8000)
include_testsNoInclude relevant test files (default true)
output_formatNo"json" (default, structured fields) or "markdown" (single LLM-optimized document with code fences, ~15-20% cheaper).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces these with 'Read-only.' It adds value by disclosing the output formats (JSON default or Markdown) and the adaptive-by-task-type behavior. No contradiction with annotations is present, and the extra output-format detail goes beyond what annotations provide.

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 compact and front-loaded: the first sentence states the core purpose, the second gives direct usage guidance, and the third handles sibling differentiation. Every sentence earns its place with no redundant filler.

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 six parameters, a rich schema, and no output schema, the description covers the essential call-or-not decision and high-level output shape. It names the context contents (execution paths, tests, entry points) and output formats, though it does not enumerate the exact JSON fields returned; this is a minor gap for an all-in-one context tool but not blocking.

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 explains all six parameters, including task, focus, detail_level, token_budget, include_tests, and output_format. The description does not need to compensate for parameter gaps and adds only general context about output format, which is already reflected in the schema. Baseline 3 is appropriate.

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 clearly identifies the tool as the all-in-one context for starting a dev task, listing concrete contents (execution paths, tests, entry points) and how it adapts by task type. It also explicitly distinguishes itself from the sibling get_feature_context, so an agent can tell them apart without inspecting schemas.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Use as your FIRST call when beginning any new task' and frames it as a replacement for manually chaining search → get_symbol → Read. It also directs narrower feature-code lookups to get_feature_context, providing a clear alternative and exclusion condition.

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

invalidate_decisionA
Idempotent

Mark a decision as no longer valid. The decision remains in the knowledge graph for historical queries but is excluded from active queries. Use when a decision is superseded or reversed. Mutates the decision store; idempotent. Returns JSON: { invalidated: { id, title, valid_until } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDecision ID to invalidate
valid_untilNoISO timestamp when decision became invalid (default: now)

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses key behavioral traits beyond annotations: the decision remains for historical queries, is excluded from active queries, mutates the decision store, and is idempotent. It also specifies the return shape. This adds meaningful context beyond the annotations.

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?

Four short sentences, each carrying useful information: the action, the historical/active distinction, the usage condition, and the return format. No filler or redundancy; the most important purpose is front-loaded.

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

Completeness5/5

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

Given the absence of an output schema, the returned JSON is explicitly stated. The mutation, idempotency, and retention behavior are all covered. The tool's effect on the knowledge graph and query behavior is clear, making it complete for the agent to invoke correctly.

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 both id and valid_until are documented there. The description itself does not add much parameter-level meaning beyond the schema, but it correctly implies valid_until is part of the return object. Baseline of 3 is appropriate.

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 uses a specific verb ('Mark as no longer valid'), names the resource ('decision'), and clearly defines the outcome: the decision stays in the knowledge graph for historical queries but is excluded from active queries. This differentiates it from siblings like remember_decision and query_decisions.

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 use the tool: 'Use when a decision is superseded or reversed.' It does not name alternative tools or give when-not-to-use guidance, but the usage context is clear enough for an agent to select it correctly.

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

load_toolsA
Read-onlyIdempotent

Load tools this session's preset deferred, by preset name and/or explicit tool names. Call with no arguments to list what is deferred. Emits notifications/tools/list_changed and returns the loaded tools' schemas, so they are usable even if your client ignores that notification (call them through batch). Returns JSON: { loaded, already_loaded, unknown, blocked, tools, hint }.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolsNoExplicit tool names to load. Unions with `preset` when both are given.
presetYesPreset whose members to load (minimal, standard, review, architecture, full). "full" loads everything deferred.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it emits notifications/tools/list_changed, returns the loaded tools' schemas, and explains that the tools are usable even if the client ignores the notification (via batch). It also discloses the response JSON shape (loaded, already_loaded, unknown, blocked, tools, hint), which is not otherwise specified.

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

Conciseness5/5

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

Two sentences, tightly packed with essential information, and the core action is front-loaded. Every clause adds value: the loading modes, the no-args list behavior, the notification side-effect, the batch fallback, and the return format. No redundancy or fluff.

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

Completeness5/5

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

Given a simple 2-parameter schema with no output schema, the description is remarkably complete. It explains the exact behavior, the notification, the return shape (including fields like 'unknown' and 'blocked'), and how to use the returned tools through batch. There is no missing information an agent would need to invoke this tool correctly.

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% for both parameters (preset and tools), so the schema already describes each parameter adequately. The description adds minimal parameter-specific meaning beyond the schema—only the hint to call with no arguments to list deferred tools, which is more usage guidance than parameter semantics. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Load') and resource ('this session's preset deferred'), and clarifies the two modes (preset and/or explicit tool names, or no args to list). It is clearly distinct from sibling tools like get_preset_info and batch, so an agent can immediately tell which tool to invoke.

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?

Provides explicit usage context: call with no arguments to list deferred tools, and use the `batch` tool to call the loaded tools (since schemas are returned). It does not explicitly list when not to use this tool or name alternatives, but the batch reference and the 'list' mode give sufficient guidance for typical use cases.

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

mine_sessionsA
Idempotent

Mine Claude Code / Claw Code session logs for architectural decisions, tech choices, bug root causes, and preferences. Strategies: "regex" (default, free, ~20-40% recall), "llm" (higher recall, costs tokens), "hybrid" (regex + LLM safety net). Skips already-mined sessions unless force=true. Mutates the decision store; idempotent. Returns JSON: { mined, decisions_extracted, sessions_processed, strategy?, llm_sessions?, llm_decisions_extracted? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoRe-mine already processed sessions (default: false)
strategyNoExtraction strategy: regex (default, free/fast/low recall), llm (AI provider, costs tokens, higher recall), hybrid (regex + LLM safety net). Falls back to regex with a warning if no AI provider is configured.
project_rootNoOnly mine sessions for this project path (default: all projects)
min_confidenceNoLegacy reject floor — drops decisions below this. Superseded by reject_threshold; kept for back-compat.
reject_thresholdNoReject floor (default: config decisions.reject_threshold, fallback 0.45). Decisions in [reject_threshold, review_threshold) queue for review; below it, dropped.
review_thresholdNoAuto-approve cutoff (default: config decisions.review_threshold, fallback 0.75). Decisions ≥ this enter the active graph immediately.
incremental_cursorNoPer-call override for `memory.mining.incrementalCursor`. true (default) reuses byte-offset cursors for appended turns; false falls back to legacy mined/unmined semantics.

TDQS

A4.5/5.0
Behavior5/5

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

The description explicitly states "Mutates the decision store; idempotent," and "Skips already-mined sessions unless force=true." This adds meaningful behavioral context beyond the annotations, specifying exactly what side effect occurs, the idempotency guarantee, and the skip behavior. It aligns with idempotentHint=true and readOnlyHint=false, with no contradictions.

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 compact and dense: two sentences carrying purpose, strategy tradeoffs, behavioral notes, and return shape. It front-loads the core purpose, uses structured lists for strategies, and contains no filler. Every clause earns its place.

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

Completeness5/5

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

For a tool with 7 optional parameters, no output schema, and moderate complexity, the description supplies the return JSON structure, strategy cost/recall tradeoffs, mutation behavior, and skip logic. Combined with 100% schema coverage, an agent has everything needed to select and invoke the tool correctly.

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%, and the schema already documents all 7 parameters with detailed descriptions, including enum choices, thresholds, and the incremental_cursor override. The description merely summarizes strategy and force, adding no new semantic information beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: "Mine Claude Code / Claw Code session logs for architectural decisions, tech choices, bug root causes, and preferences." This clearly distinguishes it from sibling read/query tools like search and query_decisions by stating it processes session logs and mutates the decision store. The purpose is unambiguous.

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

Usage Guidelines4/5

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

The description gives concrete guidance on strategy selection (regex vs llm vs hybrid) and explains the skip-already-mined behavior with force=true. However, it never explicitly names alternatives or states when NOT to use this tool (e.g., "use query_decisions instead to read stored decisions"). Context is clear but exclusions are absent.

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

plan_turnA
Read-onlyIdempotent

Opening-move router for new tasks. Combines BM25/PageRank search + session journal (negative evidence + focus signals) + framework-aware insertion-point suggestions + change-risk + turn-budget advisor into ONE call. Returns verdict (exists/partial/missing/ambiguous), confidence, ranked targets with provenance, scaffold hints when missing, and recommended next tool calls. Call this FIRST on a new task to break the empty-result hallucination chain. Read-only. For broader task context with source code use get_task_context instead. Returns JSON: { verdict, confidence, targets, scaffoldHints, nextSteps }.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesNatural-language task description (e.g. "add a webhook endpoint for stripe payments")
intentNoOptional intent hint; auto-classified from task if omitted
skip_riskNoSkip change-risk assessment for the top target (default false)
max_targetsNoCap on returned targets (default 5)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark this read-only, idempotent, and non-destructive, and the description reinforces this with 'Read-only.' It adds behavioral context by explaining the tool's combined search/journal/risk mechanism and its role in preventing empty-result hallucinations, going beyond what annotations alone convey.

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 information-dense and mostly front-loaded, starting with the primary purpose and usage call-to-action. The long enumeration of combined capabilities and the slight redundancy between 'Returns...' and 'Returns JSON: {...}' keep it from being perfectly concise, but every sentence contributes needed context.

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

Completeness5/5

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

Despite the absence of an output schema, the description states the JSON shape, the verdict values, the provenance of ranked targets, scaffold hints, and recommended next steps. Combined with the explicit usage instruction and alternative tool pointer, an agent has what it needs to invoke the tool correctly on a new task.

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%, and each parameter already has a clear description with defaults and constraints. The tool description does not meaningfully add parameter-level guidance, so it meets the baseline but does not exceed it.

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

Purpose5/5

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

The description opens with 'Opening-move router for new tasks' and lists a concrete deliverable set: verdict, confidence, ranked targets with provenance, scaffold hints, and recommended next tool calls. It also explicitly distinguishes itself from get_task_context, so an agent can select it correctly among siblings.

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

Usage Guidelines5/5

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

The description states exactly when to use it: 'Call this FIRST on a new task to break the empty-result hallucination chain.' It also names the alternative, get_task_context, and the condition for preferring that instead ('broader task context with source code'), giving clear, actionable routing guidance.

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

query_decisionsA
Read-onlyIdempotent

Query the decision knowledge graph. Filter by type, subproject, code symbol, file path, tag, or time — answers "why was this architecture chosen?" with the actual decision record. Use service_name to scope to a subproject. Defaults to auto+human-approved decisions; use include_pending or review_status for other tiers. Rows carry cluster_ids when part of a topical cluster (see clusters_summary). Read-only. Returns JSON: { decisions: [{ id, title, type, content, tags, review_status, cluster_ids? }], clusters_summary?, total_results }. Supports output_format: "toon". Capped by memory.recall.timeoutMs (default 5000ms); on timeout returns { decisions: [], total_results: 0, degraded: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesFilter by tag
typeNoFilter by decision type
as_ofYesOnly decisions active at this ISO timestamp
limitNoMax results (default: 50)
searchNoFull-text search query (FTS5 with porter stemming)
verifyNoStaleness verification (default true). Checks each `symbol_id`-linked decision against the live index + git history; deleted/renamed/materially-changed code is flagged `verification` + `stale: true`. false skips the check.
order_byNoResult ordering: "recency" (default, valid_from DESC), "created_at" DESC, or "heat" (time-decay favoring frequently-recalled + fresh; degrades to recency if disabled in config).
file_pathYesFilter by linked file path
symbol_idYesFilter by linked symbol FQN
git_branchNoBranch filter: "current" (default) = current branch + branch-agnostic; "all" = every branch; any other value = that branch + branch-agnostic.
index_onlyNoProgressive disclosure (default false). true omits full `content` — just id, title, type, anchors, tags, ~1-line `summary`. Pick ids cheaply, then pull full content with `get_decision`.
service_nameNoFilter by subproject name (e.g., "auth-api")
verificationNoFilter by verification verdict (implies verify=true). "stale" = any flagged row; "ok" = verified-fresh only. Omit to return all rows annotated in place.
output_formatNoOutput format. "json" (default) returns JSON, "markdown" returns LLM-friendly fenced markdown (tool-specific), "toon" returns Token-Oriented Object Notation — 30-60% fewer tokens on tabular data, fully lossless.
review_statusNoRestrict to a single review tier (overrides default + include_pending). Use "pending" to fetch the review queue.
include_pendingNoAlso return decisions in the review queue (review_status="pending"). Default: false — only auto-approved and approved rows are returned.
include_invalidatedNoInclude invalidated decisions (default: false)

TDQS

A4.4/5.0
Behavior5/5

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

Goes far beyond the readOnly/idempotent annotations by disclosing the default approval tier, conditional cluster_ids, exact JSON return shape, support for the 'toon' output format, and the timeout/degraded response behavior. There is no conflict with annotations.

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 dense and front-loaded: purpose and filters come first, followed by return format and edge behavior. Minor redundancy such as 'Read-only' (already in annotations) prevents a perfect score.

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

Completeness5/5

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

Given 17 parameters, no output schema, and no external return documentation, the description is unusually complete: it specifies the response object, optional clusters_summary, total_results, default tier behavior, and degraded timeout behavior. An agent has enough information to invoke and interpret the result correctly.

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?

All 17 parameters already have schema descriptions, so the baseline is 3; the description mostly restates what those descriptions say (service_name scoping, review tiers, output format). It also leaves a mismatch: the input schema marks symbol_id, file_path, tag, and as_of as required while the description presents them as optional filters.

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?

Opens with a specific verb and resource: 'Query the decision knowledge graph.' It then lists the filter dimensions and ties the tool to the concrete question 'why was this architecture chosen?', which clearly distinguishes it from generic siblings like search_text or search.

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?

Provides clear operational guidance: use service_name to scope to a subproject, and use include_pending or review_status to select decision tiers beyond the default. It does not explicitly name alternative tools or state when not to use this tool, so it stops short of a 5.

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

register_editA
Idempotent

Notify trace-mcp that a file was edited. Reindexes the single file and invalidates search caches. Call after Edit/Write to keep index fresh — much lighter than full reindex. Also checks for duplicate symbols — if _duplication_warnings appears in the response, you may be recreating existing logic; review the referenced symbols before continuing. Mutates the index; idempotent. Returns JSON: { status, file, totalFiles, indexed, _duplication_warnings? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesRelative path to the edited file

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing that it mutates the index, is idempotent, invalidates search caches, checks for duplicate symbols, and returns a specific JSON shape. This aligns with annotations (idempotentHint=true, readOnlyHint=false) and adds valuable behavioral context.

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?

Four tightly packed sentences: purpose, effect, usage timing, warning behavior, idempotence, and response format. Every sentence earns its place and the most important information is front-loaded.

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

Completeness5/5

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

For a single-parameter mutation tool with no output schema, the description is complete: it covers when to call, side effects, idempotency, response format, and how to interpret the duplication warning. An agent has everything needed to invoke it correctly.

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 defines file_path as 'Relative path to the edited file'. The description reinforces this by referencing 'the single file', but it adds no new parameter-level detail beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Notify trace-mcp that a file was edited' and explains the concrete effect ('Reindexes the single file and invalidates search caches'). This clearly separates register_edit from the many read-oriented sibling tools like get_index_health and search.

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

Usage Guidelines4/5

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

It explicitly says 'Call after Edit/Write to keep index fresh' and contrasts itself with 'much lighter than full reindex', giving clear timing and relative cost guidance. It does not name an exact sibling alternative, but the usage context is unambiguous.

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

remember_decisionA
Read-onlyIdempotent

Live agent write into the decision knowledge graph. Confidence-scores the input and routes it through the memoir review queue: high-confidence rows enter the active graph immediately, mid-confidence rows queue for human approval, low-confidence rows are dropped without persistence. Per-session dedup + rate-limit. Use during a session to capture decisions in real time. For manual high-confidence writes use add_decision; for post-hoc extraction from session logs use mine_sessions. Returns JSON: { id, review_status, confidence, deduplicated? }.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags for categorization (e.g., ["auth", "security"])
typeYesDecision type
titleYesShort summary of the decision
contentYesFull decision text — reasoning, context, tradeoffs
file_pathYesFile path this decision is about
symbol_idNoSymbol FQN this decision is about (e.g., "src/auth/provider.ts::AuthProvider#class")
git_branchNoGit branch this decision belongs to. Omit to auto-detect, or pass null to make it branch-agnostic.
session_idNoSession identifier for dedup/rate-limit (default: "_default")
service_nameNoSubproject name this decision is about (e.g., "auth-api", "user-service")

TDQS

A3.8/5.0
Behavior1/5

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

Annotation Contradiction: annotations declare readOnlyHint=true, while the description explicitly says 'Live agent write', routes rows through a review queue, drops low-confidence rows, and persists data. This is a direct contradiction that makes the tool's behavioral contract untrustworthy.

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 but every clause earns its place: core behavior, routing rules, dedup/rate-limit, usage timing, sibling alternatives, and return shape. It is front-loaded and avoids filler.

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?

Despite the annotation contradiction, the description itself provides the routing behavior, persistence semantics, return JSON shape, and usage context, while the schema covers all parameters. With no output schema, the explicit return shape is a strong addition. The conflicting readOnly annotation prevents a perfect score.

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 fully documents all 9 parameters. The description adds little parameter-level meaning beyond confirming session-based dedup and rate-limit behavior, which the schema already mentions for session_id. Baseline 3 is appropriate.

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 identifies a specific action ('write into the decision knowledge graph'), the confidence-routing behavior, and explicitly contrasts itself with add_decision and mine_sessions. An agent can distinguish this tool from its siblings without inspecting schemas.

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?

States exactly when to use it ('capture decisions in real time') and names the alternatives for other scenarios: add_decision for manual high-confidence writes and mine_sessions for post-hoc extraction from session logs.

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

search_textA
Read-onlyIdempotent

Full-text search across all indexed files. Supports regex, glob file patterns, language filter. Use for finding strings, comments, TODOs, config values, error messages — anything not captured as a symbol. For symbol search (functions, classes) use search instead. Read-only. Returns JSON: { matches: [{ file, line, text, context }], total_matches }. Set grouping: "by_file" to deduplicate file paths in results with many hits.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch string or regex pattern
groupingNoPayload shape. "flat" (default) is a single matches[] array; "by_file" groups hits per file — saves tokens on long paths with many hits.flat
is_regexNoTreat query as regex (default false)
languageNoFilter by language (e.g. "typescript", "python")
timeout_msNoWall-clock budget in ms — caps a catastrophic-backtracking regex. Default 2000; 0 disables.
max_resultsNoMax matches to return (default 50)
file_patternYesGlob filter, e.g. "src/**/*.ts"
context_linesNoLines of context before/after each match (default 0 — set higher if you need surrounding code)
case_sensitiveNoCase-sensitive search (default false)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so no contradiction exists. The description adds meaningful behavioral detail beyond annotations: it discloses the exact JSON return shape, the existence of total_matches, and the grouping option to deduplicate file paths — useful operational context. It doesn't fully describe all edge behaviors (e.g., timeout semantics), but given the annotation coverage, the added context earns a 4.

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 three sentences with no fluff. It front-loads the core purpose, follows with explicit usage guidance and sibling routing, then closes with return-format and grouping behavior. Every sentence adds distinct agent-relevant information; nothing is redundant or wasted.

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

Completeness5/5

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

Despite having nine parameters and no output schema, the description provides the crucial context an agent needs: the scope ('all indexed files'), the intended use cases, the sibling distinction, the return payload shape, and a practical tip for handling many hits. The remaining param details are fully covered by the rich schem, so this description is complete enough for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description does add a little extra parameter meaning — notably the grouping by_file tip to deduplicate file paths — but this largely mirrors the schema's own grouping description ('saves tokens on long paths with many hits'). The description adds no significant new parameter semantics beyond the schema's comprehensive coverage.

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 uses a specific verb and resource: 'Full-text search across all indexed files.' It enumerates supported features (regex, glob, language filter) and concrete use cases (strings, comments, TODOs, config values, error messages), while explicitly distinguishing itself from the symbol-search sibling 'search.' This makes the tool's purpose unmistakable and differentiates it clearly from siblings.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: 'Use for finding strings, comments, TODOs, config values, error messages — anything not captured as a symbol.' It also names the alternative: 'For symbol. search (functions, classes) use search instead.' This is a clear when/when-not routing with an explicit alternative, requiring no inference from the agent.

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

suggest_queriesA
Read-onlyIdempotent

Onboarding helper: shows top imported files, most connected symbols (PageRank), language stats, and example tool calls. Call this first when exploring an unfamiliar project. For a structured project map use get_project_map instead. Read-only. Returns JSON: { topFiles, topSymbols, languageStats, exampleQueries }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

The description confirms read-only behavior, consistent with the readOnlyHint/idempotentHint annotations, and adds a concrete response shape even without an output schema. It does not mention edge cases like rate limits or authentication, but these are less critical for a read-only onboarding helper.

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

Conciseness5/5

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

Every sentence earns its place: the onboarder identity is front-loaded, usage timing is clear, the alternative is named, and the JSON return shape is compactly listed. There is no filler or redundant schema repetition.

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

Completeness5/5

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

For a zero-parameter read-only tool with no output schema, the description covers purpose, output fields, usage timing, and the relevant sibling. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

The tool has zero parameters, so schema coverage is trivially 100% and the baseline is 4. The description adds no parameter details because there are none; instead it clarifies what the no-input call returns, which is sufficient.

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 uses a specific verb ('shows') and names the resource types it exposes: top imported files, connected symbols, language stats, and example tool calls. It also explicitly differentiates from get_project_map, so an agent can distinguish it from siblings without opening schemas.

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 states the exact condition for use — 'Call this first when exploring an unfamiliar project' — and names the alternative, get_project_map, for a structured project map. This gives clear when-to-use and when-not-to-use guidance with an explicit replacement.

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. Dates show when Glama detected each change.

  1. 56 tool updatesv3.3.0
    • Removedapply_codemod
    • Removedassess_change_risk
    • Changedbatch1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedcheck_duplication
    • Removedcheck_quality_gates
    • Removedcheck_rename
    • Removeddetect_antipatterns
    • Changedfind_usages1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_call_graph1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_change_impact1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedget_changed_symbols
    • Removedget_circular_imports
    • Removedget_complexity_report
    • Removedget_complexity_trend
    • Changedget_context_bundle1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedget_control_flow
    • Removedget_coupling
    • Removedget_coupling_trend
    • Changedget_coverage_report1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedget_dead_code
    • Removedget_dead_exports
    • Removedget_env_vars
    • Changedget_feature_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / detail_level
        Added value: +{
        +  "description": "Output verbosity. \"minimal\" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: \"default\".",
        +  "enum": [
        +    "minimal",
        +    "default",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / output_format / description
        Previous value: -"Output format. \"json\" (default) returns structured items; \"markdown\" returns LLM-friendly fenced code blocks (~15-20% token savings, easier for the model to read); \"toon\" returns Token-Oriented Object Notation — 30-60% fewer tokens, lossless."New value: +"\"json\" (default, structured items), \"markdown\" (fenced code blocks, ~15-20% cheaper), or \"toon\" (lossless, 30-60% fewer tokens)."
    • Removedget_implementations
    • Changedget_index_health1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_optimization_report1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_outline3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / nested / description
        Previous value: -"When true, walks the body of each top-level symbol whose LOC exceeds min_loc_for_nesting and emits inner function-like declarations as additional rows carrying `parentId` + `depth`. Default false — fully backward compatible."New value: +"Walk the body of each top-level symbol past min_loc_for_nesting and emit inner declarations as extra rows carrying `parentId` + `depth`. Default false."
      • changedInput schema / properties / output_format / description
        Previous value: -"Output format. \"json\" (default) returns JSON; \"toon\" returns Token-Oriented Object Notation — 30-60% fewer tokens, lossless. \"markdown\" is unsupported here and behaves as json."New value: +"\"json\" (default) or \"toon\" (lossless, 30-60% fewer tokens). \"markdown\" is unsupported here and behaves as json."
    • Changedget_preset_info1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_project_map1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_real_savings1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedget_related_symbols
    • Changedget_session_analytics1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedget_session_resume
    • Changedget_session_stats1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_symbol2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / verify_against_git / description
        Previous value: -"When true, compare the indexed source against the current git HEAD slice for that file and line range. If they differ, the response includes `git_mismatch: true` indicating the index may be stale. Read-only — never writes. Silently skipped when git is unavailable or the file is not tracked."New value: +"Compare the indexed source against the current git HEAD slice; mismatches set `git_mismatch: true` in the response (index may be stale). Read-only. Silently skipped when git is unavailable or the file is untracked."
    • Removedget_symbol_complexity_trend
    • Changedget_task_context3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / detail_level
        Added value: +{
        +  "description": "Output verbosity. \"minimal\" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: \"default\".",
        +  "enum": [
        +    "minimal",
        +    "default",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / output_format / description
        Previous value: -"Output format. \"json\" (default) returns structured fields; \"markdown\" returns a single LLM-optimized document with code fences (~15-20% token savings)."New value: +"\"json\" (default, structured fields) or \"markdown\" (single LLM-optimized document with code fences, ~15-20% cheaper)."
    • Removedget_tech_debt
    • Removedget_tests_for
    • Changedget_usage_trends1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedget_workspace_map
    • Changedinvalidate_decision1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Addedload_tools
    • Changedmine_sessions5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / incremental_cursor / description
        Previous value: -"Per-call override for `memory.mining.incrementalCursor`. When true (default), reuse byte-offset cursors so appended turns get re-processed; when false, fall back to legacy binary mined/unmined semantics."New value: +"Per-call override for `memory.mining.incrementalCursor`. true (default) reuses byte-offset cursors for appended turns; false falls back to legacy mined/unmined semantics."
      • changedInput schema / properties / reject_threshold / description
        Previous value: -"Memoir reject floor (default: decisions.reject_threshold from config, fallback 0.45). Decisions in [reject_threshold, review_threshold) go into the review queue; below reject_threshold they are dropped."New value: +"Reject floor (default: config decisions.reject_threshold, fallback 0.45). Decisions in [reject_threshold, review_threshold) queue for review; below it, dropped."
      • changedInput schema / properties / review_threshold / description
        Previous value: -"Memoir auto-approve cutoff (default: decisions.review_threshold from config, fallback 0.75). Decisions ≥ this enter the active knowledge graph immediately."New value: +"Auto-approve cutoff (default: config decisions.review_threshold, fallback 0.75). Decisions ≥ this enter the active graph immediately."
      • changedInput schema / properties / strategy / description
        Previous value: -"Extraction strategy. regex (default): free, fast, low recall. llm: uses AI provider, costs tokens, higher recall. hybrid: regex + LLM safety net (recommended when AI configured). Falls back to regex with a warning if llm/hybrid is requested but no AI provider is configured."New value: +"Extraction strategy: regex (default, free/fast/low recall), llm (AI provider, costs tokens, higher recall), hybrid (regex + LLM safety net). Falls back to regex with a warning if no AI provider is configured."
    • Changedplan_turn1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedpredict_bugs
    • Changedquery_decisions6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / git_branch / description
        Previous value: -"Branch filter. \"current\" (default) → current branch + branch-agnostic decisions. \"all\" → every branch. Any other value → that specific branch + branch-agnostic decisions."New value: +"Branch filter: \"current\" (default) = current branch + branch-agnostic; \"all\" = every branch; any other value = that branch + branch-agnostic."
      • changedInput schema / properties / index_only / description
        Previous value: -"Progressive disclosure (default: false). When true, each decision is returned WITHOUT its full `content` — just id, title, type, code anchors, tags, and a ~1-line `summary`. Pick the relevant ids cheaply, then pull full content with `get_decision`. Pure token-saver."New value: +"Progressive disclosure (default false). true omits full `content` — just id, title, type, anchors, tags, ~1-line `summary`. Pick ids cheaply, then pull full content with `get_decision`."
      • changedInput schema / properties / order_by / description
        Previous value: -"Result ordering. \"recency\" (default): valid_from DESC. \"created_at\": created_at DESC. \"heat\": time-decay scoring biased toward frequently-recalled + fresh decisions. When heat is disabled in config, \"heat\" gracefully degrades to \"recency\"."New value: +"Result ordering: \"recency\" (default, valid_from DESC), \"created_at\" DESC, or \"heat\" (time-decay favoring frequently-recalled + fresh; degrades to recency if disabled in config)."
      • changedInput schema / properties / verification / description
        Previous value: -"Filter by verification verdict (implies verify). \"stale\" returns any flagged row (symbol_missing OR code_changed); \"ok\" returns only verified-fresh rows. Omit to return all rows annotated in place."New value: +"Filter by verification verdict (implies verify=true). \"stale\" = any flagged row; \"ok\" = verified-fresh only. Omit to return all rows annotated in place."
      • changedInput schema / properties / verify / description
        Previous value: -"Staleness verification (default: true). When true, each decision linked to a `symbol_id` is checked against the live index + git history; rows whose code was deleted/renamed or materially changed since `created_at` are flagged with `verification` (\"symbol_missing\" | \"code_changed\") and `stale: true`. Pass false to skip the check entirely."New value: +"Staleness verification (default true). Checks each `symbol_id`-linked decision against the live index + git history; deleted/renamed/materially-changed code is flagged `verification` + `stale: true`. false skips the check."
    • Changedregister_edit1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedreindex
    • Changedremember_decision1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Removedremove_dead_code
    • Removedscan_security
    • Changedsearch14 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / decorator / description
        Previous value: -"Filter to symbols with this decorator/annotation/attribute (e.g. \"Injectable\", \"Route\", \"Transactional\")"New value: +"Filter to symbols carrying this decorator/annotation/attribute"
      • changedInput schema / properties / drill_from / description
        Previous value: -"Drill scope for mode=\"drill\" — a file path or symbol_id. Results are restricted to the subtree rooted here."New value: +"[mode=\"drill\"] File path or symbol_id to restrict results to."
      • changedInput schema / properties / fusion / description
        Previous value: -"Enable Signal Fusion Pipeline — multi-channel WRR ranking across lexical (BM25), structural (PageRank), similarity (embeddings), and identity (exact/prefix/segment match). Produces better results than single-channel search."New value: +"Enable Signal Fusion — multi-channel WRR ranking across lexical (BM25), structural (PageRank), similarity (embeddings), and identity match. Weights come from `tune_weights`."
      • removedInput schema / properties / fusion_debug
        Removed value: -{
        -  "description": "Include per-channel rank contributions in fusion results.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / fusion_weights
        Removed value: -{
        -  "description": "Per-channel weights for fusion (auto-normalized). Defaults: lexical=0.4, structural=0.25, similarity=0.2, identity=0.15.",
        -  "properties": {
        -    "identity": {
        -      "maximum": 1,
        -      "minimum": 0,
        -      "type": "number"
        -    },
        -    "lexical": {
        -      "maximum": 1,
        -      "minimum": 0,
        -      "type": "number"
        -    },
        -    "similarity": {
        -      "maximum": 1,
        -      "minimum": 0,
        -      "type": "number"
        -    },
        -    "structural": {
        -      "maximum": 1,
        -      "minimum": 0,
        -      "type": "number"
        -    }
        -  },
        -  "type": "object"
        -}
      • changedInput schema / properties / fuzzy / description
        Previous value: -"Enable fuzzy search (trigram + Levenshtein). Auto-enabled when exact search returns 0 results."New value: +"Typo-tolerant search. Auto-enabled when exact search returns 0 results."
      • changedInput schema / properties / fuzzy_threshold / description
        Previous value: -"Minimum Jaccard trigram similarity (default 0.3)"New value: +"[fuzzy] Min trigram similarity (default 0.3)"
      • changedInput schema / properties / max_edit_distance / description
        Previous value: -"Maximum Levenshtein edit distance (default 3)"New value: +"[fuzzy] Max edit distance (default 3)"
      • changedInput schema / properties / mode / description
        Previous value: -"Memoir-style retrieval mode: single (default — top-K), tiered (high/medium/low buckets), drill (scoped to drill_from), flat (raw FTS, no PageRank), get (exact lookup). Omit to auto-pick (path-shaped query → get, otherwise → single)."New value: +"single (default): top-K. tiered: high/medium/low buckets. drill: scoped to drill_from. flat: raw FTS, no PageRank. get: exact lookup. Omit to auto-pick."
      • changedInput schema / properties / output_format / description
        Previous value: -"Output format. \"json\" (default) returns JSON; \"toon\" returns Token-Oriented Object Notation — 30-60% fewer tokens, lossless. \"markdown\" is unsupported here and behaves as json."New value: +"\"json\" (default) or \"toon\" (lossless, 30-60% fewer tokens). \"markdown\" behaves as json here."
      • addedInput schema / properties / retriever
        Added value: +{
        +  "description": "Run one named retrieval algorithm instead of the mode dispatcher. Ignores mode/filters/fuzzy/fusion; returns { retriever, items, total }.",
        +  "enum": [
        +    "lexical",
        +    "semantic",
        +    "hybrid",
        +    "summary",
        +    "feeling_lucky",
        +    "graph_completion"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / semantic / description
        Previous value: -"Semantic mode: auto (default — hybrid if AI available), on (force hybrid), off (lexical-only), only (pure vector). Requires AI provider + embed_repo for non-\"off\" modes."New value: +"auto (default): hybrid if AI available. on: force hybrid. off: lexical-only. only: pure vector. Non-\"off\" needs an AI provider + one embed_repo run."
      • changedInput schema / properties / semantic_weight / description
        Previous value: -"Hybrid fusion weight in [0,1]. 0 = lexical only, 0.5 = balanced (default), 1 = semantic only."New value: +"[semantic] 0 = lexical only, 0.5 = balanced (default), 1 = vector only."
    • Changedsearch_text3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / grouping / description
        Previous value: -"Payload shape. \"flat\" returns a single matches[] array (default). \"by_file\" groups hits under each file — saves tokens on long paths with many hits."New value: +"Payload shape. \"flat\" (default) is a single matches[] array; \"by_file\" groups hits per file — saves tokens on long paths with many hits."
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Wall-clock budget in milliseconds. Catastrophic-backtracking regex cannot pin a worker beyond this. Default 2000. Set 0 to disable."New value: +"Wall-clock budget in ms — caps a catastrophic-backtracking regex. Default 2000; 0 disables."
    • Removedself_audit
    • Changedsuggest_queries1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
  2. 99 tool updatesv1.47.1
    • Removedadd_decision
    • Removedanalyze_perf
    • Removedapply_move
    • Removedapply_rename
    • Removedapprove_decision
    • Removedaudit_config
    • Removedbenchmark_project
    • Removedbuild_corpus
    • Removedbuild_decision_clusters
    • Removedchange_signature
    • Removedcheck_architecture
    • Removedcheck_claudemd_drift
    • Removedcheck_edit_safe
    • Removedcheck_embedding_drift
    • Removedcompare_branches
    • Removedconsolidate_decisions
    • Removeddelete_corpus
    • Removeddetect_ast_clones
    • Removeddetect_communities
    • Removeddetect_drift
    • Removeddiff_graph_snapshots
    • Removeddiscover_hermes_sessions
    • Removedembed_repo
    • Removedexport_decisions
    • Removedexport_graph
    • Removedexport_security_context
    • Removedextract_function
    • Removedgenerate_docs
    • Removedgenerate_insights_report
    • Removedgenerate_sbom
    • Removedget_api_surface
    • Removedget_artifacts
    • Removedget_cluster_decisions
    • Removedget_co_changes
    • Removedget_code_owners
    • Removedget_communities
    • Removedget_community
    • Removedget_cross_domain_deps
    • Removedget_cross_workspace_impact
    • Removedget_dataflow
    • Removedget_decision
    • Removedget_decision_clusters
    • Removedget_decision_stats
    • Removedget_decision_timeline
    • Removedget_dependency_diagram
    • Removedget_domain_context
    • Removedget_domain_map
    • Removedget_edge_bottlenecks
    • Removedget_file_health_timeline
    • Removedget_git_churn
    • Removedget_graph_timeline
    • Removedget_health_trends
    • Removedget_import_graph
    • Removedget_minimal_context
    • Removedget_package_deps
    • Removedget_pagerank
    • Removedget_plugin_registry
    • Removedget_project_health
    • Removedget_project_memo
    • Removedget_refactor_candidates
    • Removedget_risk_hotspots
    • Removedget_session_journal
    • Removedget_session_snapshot
    • Removedget_suggested_questions
    • Removedget_surprises
    • Removedget_symbol_owners
    • Removedget_type_hierarchy
    • Removedget_untested_exports
    • Removedget_untested_symbols
    • Removedget_wake_up
    • Removedgraph_query
    • Removedindex_sessions
    • Removedlist_bundles
    • Removedlist_corpora
    • Removedlist_graph_snapshots
    • Removedlist_pins
    • Removedpack_context
    • Removedpin_file
    • Removedpin_symbol
    • Removedplan_batch_change
    • Removedplan_refactoring
    • Removedquery_by_intent
    • Removedquery_corpus
    • Removedrefresh_co_changes
    • Removedregenerate_project_memo
    • Removedreject_decision
    • Removedrepair_index
    • Removedscan_code_smells
    • Removedsearch_bundles
    • Removedsearch_sessions
    • Removedsearch_with_mode
    • Removedsnapshot_graph
    • Removedtaint_analysis
    • Removedtraverse_graph
    • Removedtune_decision_weights
    • Removedtune_weights
    • Removedunpin
    • Removedverify_index
    • Removedvisualize_graph
  3. 1 tool updatev1.46.0
    • Changedconsolidate_decisions1 field changed
      • addedInput schema / properties / purge_low_quality
        Added value: +{
        +  "description": "Maintenance mode (no AI required). When true, invalidate active MINED/AUTO decisions that fail the quality gate — truncated mid-sentence titles, single-word or broken-encoding summaries, non-English fragments. Respects dry_run (default true → preview only). Manual decisions are never touched. Use this to clean legacy garbage produced before the extraction gate shipped.",
        +  "type": "boolean"
        +}
  4. 8 tool updatesv1.43.3
    • Changedapply_codemod4 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "description": "Engine: \"auto\" (default — AST for ast-grep patterns on supported code files, else regex), \"ast\" (force ast-grep), \"regex\" (force text regex).",
        +  "enum": [
        +    "auto",
        +    "ast",
        +    "regex"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / multiline / description
        Previous value: -"Enable multiline mode (dot matches newlines, patterns span lines)"New value: +"Regex engine only: multiline mode (dot matches newlines, patterns span lines)"
      • changedInput schema / properties / pattern / description
        Previous value: -"Regex pattern to match (JavaScript regex syntax)"New value: +"Pattern to match. ast-grep pattern (e.g. \"foo($$$ARGS)\", \"console.log($A)\") for the AST engine, or a JavaScript regex for the text engine."
      • changedInput schema / properties / replacement / description
        Previous value: -"Replacement string ($1, $2 for capture groups)"New value: +"Replacement template. AST engine: substitute captured metavariables ($A, $$$ARGS, or positional $1/$2). Regex engine: $1, $2 capture groups."
    • Changedcheck_quality_gates1 field changed
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Output format. \"json\" (default) returns the native gate report; \"sarif\" emits a SARIF 2.1.0 log (only warning/error gates become results) for code-scanning ingestion.",
        +  "enum": [
        +    "json",
        +    "sarif"
        +  ],
        +  "type": "string"
        +}
    • Changeddetect_antipatterns1 field changed
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Output format. \"json\" (default) returns the native finding shape; \"sarif\" emits a SARIF 2.1.0 log for code-scanning ingestion.",
        +  "enum": [
        +    "json",
        +    "sarif"
        +  ],
        +  "type": "string"
        +}
    • Addedget_decision
    • Addedget_file_health_timeline
    • Addedget_graph_timeline
    • Changedquery_decisions3 fields changed
      • addedInput schema / properties / index_only
        Added value: +{
        +  "description": "Progressive disclosure (default: false). When true, each decision is returned WITHOUT its full `content` — just id, title, type, code anchors, tags, and a ~1-line `summary`. Pick the relevant ids cheaply, then pull full content with `get_decision`. Pure token-saver.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / verification
        Added value: +{
        +  "description": "Filter by verification verdict (implies verify). \"stale\" returns any flagged row (symbol_missing OR code_changed); \"ok\" returns only verified-fresh rows. Omit to return all rows annotated in place.",
        +  "enum": [
        +    "ok",
        +    "symbol_missing",
        +    "code_changed",
        +    "stale"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / verify
        Added value: +{
        +  "description": "Staleness verification (default: true). When true, each decision linked to a `symbol_id` is checked against the live index + git history; rows whose code was deleted/renamed or materially changed since `created_at` are flagged with `verification` (\"symbol_missing\" | \"code_changed\") and `stale: true`. Pass false to skip the check entirely.",
        +  "type": "boolean"
        +}
    • Changedscan_security1 field changed
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Output format. \"json\" (default) returns the native finding shape; \"sarif\" emits a SARIF 2.1.0 log for GitHub/GitLab/Azure code-scanning ingestion.",
        +  "enum": [
        +    "json",
        +    "sarif"
        +  ],
        +  "type": "string"
        +}
  5. 2 tool updatesv1.43.2
    • Addedcheck_edit_safe
    • Changedget_symbol1 field changed
      • addedInput schema / properties / verify_against_git
        Added value: +{
        +  "description": "When true, compare the indexed source against the current git HEAD slice for that file and line range. If they differ, the response includes `git_mismatch: true` indicating the index may be stale. Read-only — never writes. Silently skipped when git is unavailable or the file is not tracked.",
        +  "type": "boolean"
        +}
  6. 106 tool updatesv1.41.0
    • Addedadd_decision
    • Addedanalyze_perf
    • Addedapply_codemod
    • Addedapply_move
    • Addedapply_rename
    • Addedapprove_decision
    • Addedassess_change_risk
    • Addedaudit_config
    • Addedbatch
    • Addedbenchmark_project
    • Addedbuild_corpus
    • Addedbuild_decision_clusters
    • Addedchange_signature
    • Addedcheck_claudemd_drift
    • Addedcheck_embedding_drift
    • Addedcheck_quality_gates
    • Addedcheck_rename
    • Addedcompare_branches
    • Addedconsolidate_decisions
    • Addeddelete_corpus
    • Addeddetect_antipatterns
    • Addeddetect_ast_clones
    • Addeddetect_communities
    • Addeddetect_drift
    • Addeddiff_graph_snapshots
    • Addeddiscover_hermes_sessions
    • Addedexport_decisions
    • Addedexport_graph
    • Addedexport_security_context
    • Addedextract_function
    • Addedgenerate_docs
    • Addedgenerate_sbom
    • Addedget_artifacts
    • Addedget_changed_symbols
    • Addedget_cluster_decisions
    • Addedget_co_changes
    • Addedget_communities
    • Addedget_community
    • Addedget_complexity_report
    • Addedget_control_flow
    • Addedget_coverage_report
    • Addedget_cross_domain_deps
    • Addedget_cross_workspace_impact
    • Addedget_dataflow
    • Addedget_dead_code
    • Addedget_decision_clusters
    • Addedget_decision_stats
    • Addedget_decision_timeline
    • Addedget_dependency_diagram
    • Addedget_domain_context
    • Addedget_domain_map
    • Addedget_git_churn
    • Addedget_health_trends
    • Addedget_optimization_report
    • Addedget_package_deps
    • Addedget_preset_info
    • Addedget_project_memo
    • Addedget_real_savings
    • Addedget_risk_hotspots
    • Addedget_session_analytics
    • Addedget_session_journal
    • Addedget_session_resume
    • Addedget_session_snapshot
    • Addedget_session_stats
    • Addedget_suggested_questions
    • Addedget_surprises
    • Addedget_tech_debt
    • Addedget_usage_trends
    • Addedget_wake_up
    • Addedget_workspace_map
    • Addedgraph_query
    • Addedindex_sessions
    • Addedinvalidate_decision
    • Addedlist_bundles
    • Addedlist_corpora
    • Addedlist_graph_snapshots
    • Addedlist_pins
    • Addedmine_sessions
    • Addedpack_context
    • Addedpin_file
    • Addedpin_symbol
    • Addedplan_batch_change
    • Addedplan_refactoring
    • Addedplan_turn
    • Addedpredict_bugs
    • Addedquery_by_intent
    • Addedquery_corpus
    • Addedquery_decisions
    • Addedrefresh_co_changes
    • Addedregenerate_project_memo
    • Addedreject_decision
    • Addedremember_decision
    • Addedremove_dead_code
    • Addedscan_code_smells
    • Addedscan_security
    • Addedsearch_bundles
    • Addedsearch_sessions
    • Addedsearch_text
    • Addedsearch_with_mode
    • Addedsnapshot_graph
    • Addedtaint_analysis
    • Addedtraverse_graph
    • Addedtune_decision_weights
    • Addedtune_weights
    • Addedunpin
    • Addedvisualize_graph
  7. 44 tool updates
    • Addedcheck_architecture
    • Addedcheck_duplication
    • Addedembed_repo
    • Addedfind_usages
    • Addedgenerate_insights_report
    • Addedget_api_surface
    • Addedget_call_graph
    • Addedget_change_impact
    • Addedget_circular_imports
    • Addedget_code_owners
    • Addedget_complexity_trend
    • Addedget_context_bundle
    • Addedget_coupling
    • Addedget_coupling_trend
    • Addedget_dead_exports
    • Addedget_edge_bottlenecks
    • Addedget_env_vars
    • Addedget_feature_context
    • Addedget_implementations
    • Addedget_import_graph
    • Addedget_index_health
    • Addedget_minimal_context
    • Addedget_outline
    • Addedget_pagerank
    • Addedget_plugin_registry
    • Addedget_project_health
    • Addedget_project_map
    • Addedget_refactor_candidates
    • Addedget_related_symbols
    • Addedget_symbol
    • Addedget_symbol_complexity_trend
    • Addedget_symbol_owners
    • Addedget_task_context
    • Addedget_tests_for
    • Addedget_type_hierarchy
    • Addedget_untested_exports
    • Addedget_untested_symbols
    • Addedregister_edit
    • Addedreindex
    • Addedrepair_index
    • Addedsearch
    • Addedself_audit
    • Addedsuggest_queries
    • Addedverify_index
  8. 142 tool updatesv1.38.0
    • Removedadd_decision
    • Removedanalyze_perf
    • Removedapply_codemod
    • Removedapply_move
    • Removedapply_rename
    • Removedapprove_decision
    • Removedassess_change_risk
    • Removedaudit_config
    • Removedbatch
    • Removedbenchmark_project
    • Removedbuild_corpus
    • Removedchange_signature
    • Removedcheck_architecture
    • Removedcheck_claudemd_drift
    • Removedcheck_duplication
    • Removedcheck_embedding_drift
    • Removedcheck_quality_gates
    • Removedcheck_rename
    • Removedcompare_branches
    • Removeddelete_corpus
    • Removeddetect_antipatterns
    • Removeddetect_ast_clones
    • Removeddetect_communities
    • Removeddetect_drift
    • Removeddiff_graph_snapshots
    • Removeddiscover_hermes_sessions
    • Removedembed_repo
    • Removedexport_graph
    • Removedexport_security_context
    • Removedextract_function
    • Removedfind_usages
    • Removedgenerate_docs
    • Removedgenerate_insights_report
    • Removedgenerate_sbom
    • Removedget_api_surface
    • Removedget_artifacts
    • Removedget_call_graph
    • Removedget_change_impact
    • Removedget_changed_symbols
    • Removedget_circular_imports
    • Removedget_co_changes
    • Removedget_code_owners
    • Removedget_communities
    • Removedget_community
    • Removedget_complexity_report
    • Removedget_complexity_trend
    • Removedget_context_bundle
    • Removedget_control_flow
    • Removedget_coupling
    • Removedget_coupling_trend
    • Removedget_coverage_report
    • Removedget_cross_domain_deps
    • Removedget_cross_workspace_impact
    • Removedget_dataflow
    • Removedget_dead_code
    • Removedget_dead_exports
    • Removedget_decision_stats
    • Removedget_decision_timeline
    • Removedget_dependency_diagram
    • Removedget_domain_context
    • Removedget_domain_map
    • Removedget_edge_bottlenecks
    • Removedget_env_vars
    • Removedget_feature_context
    • Removedget_git_churn
    • Removedget_health_trends
    • Removedget_implementations
    • Removedget_import_graph
    • Removedget_index_health
    • Removedget_minimal_context
    • Removedget_optimization_report
    • Removedget_outline
    • Removedget_package_deps
    • Removedget_pagerank
    • Removedget_plugin_registry
    • Removedget_preset_info
    • Removedget_project_health
    • Removedget_project_map
    • Removedget_real_savings
    • Removedget_refactor_candidates
    • Removedget_related_symbols
    • Removedget_risk_hotspots
    • Removedget_session_analytics
    • Removedget_session_journal
    • Removedget_session_resume
    • Removedget_session_snapshot
    • Removedget_session_stats
    • Removedget_suggested_questions
    • Removedget_surprises
    • Removedget_symbol
    • Removedget_symbol_complexity_trend
    • Removedget_symbol_owners
    • Removedget_task_context
    • Removedget_tech_debt
    • Removedget_tests_for
    • Removedget_type_hierarchy
    • Removedget_untested_exports
    • Removedget_untested_symbols
    • Removedget_usage_trends
    • Removedget_wake_up
    • Removedget_workspace_map
    • Removedgraph_query
    • Removedindex_sessions
    • Removedinvalidate_decision
    • Removedlist_bundles
    • Removedlist_corpora
    • Removedlist_graph_snapshots
    • Removedlist_pins
    • Removedmine_sessions
    • Removedpack_context
    • Removedpin_file
    • Removedpin_symbol
    • Removedplan_batch_change
    • Removedplan_refactoring
    • Removedplan_turn
    • Removedpredict_bugs
    • Removedquery_by_intent
    • Removedquery_corpus
    • Removedquery_decisions
    • Removedrefresh_co_changes
    • Removedregister_edit
    • Removedreindex
    • Removedreject_decision
    • Removedremember_decision
    • Removedremove_dead_code
    • Removedrepair_index
    • Removedscan_code_smells
    • Removedscan_security
    • Removedsearch
    • Removedsearch_bundles
    • Removedsearch_sessions
    • Removedsearch_text
    • Removedsearch_with_mode
    • Removedself_audit
    • Removedsnapshot_graph
    • Removedsuggest_queries
    • Removedtaint_analysis
    • Removedtraverse_graph
    • Removedtune_weights
    • Removedunpin
    • Removedverify_index
    • Removedvisualize_graph
  9. 8 tool updatesv1.36.1
    • Changedaudit_config2 fields changed
      • addedInput schema / properties / drift_only
        Added value: +{
        +  "description": "E14 — restrict output to drift-class categories only (dead_path + dead_*_ref + oversized_section). Implies include_drift. Use when you only care about agent-config drift.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_drift
        Added value: +{
        +  "description": "E14 — add CLAUDE.md drift detection (dead_tool_ref, dead_skill_ref, dead_command_ref, oversized_section). Default false for back-compat.",
        +  "type": "boolean"
        +}
    • Addedcheck_claudemd_drift
    • Addedlist_pins
    • Addedpin_file
    • Addedpin_symbol
    • Addedremember_decision
    • Addedsearch_with_mode
    • Addedunpin
  10. 135 tool updatesv1.35.1
    • Changedadd_decision3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / git_branch
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 256,
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Git branch this decision belongs to. Omit to auto-detect from the project root, or pass null to make the decision branch-agnostic (visible from every branch)."
        +}
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "content",
        -  "type"
        -]New value: +[
        +  "title",
        +  "content",
        +  "type",
        +  "file_path"
        +]
    • Addedanalyze_perf
    • Changedapply_codemod1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedapply_move2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "source_file",
        +  "new_path"
        +]
    • Changedapply_rename1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedapprove_decision
    • Changedassess_change_risk2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "file_path",
        +  "symbol_id"
        +]
    • Changedaudit_config1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedbatch3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / calls / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / calls / items / properties / args / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedbenchmark_project3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / seed / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / seed / minimum
        Added value: +-9007199254740991
    • Addedbuild_corpus
    • Changedchange_signature7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / items / properties / add_param / additionalProperties
        Removed value: -false
      • addedInput schema / properties / changes / items / properties / add_param / properties / position / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / changes / items / properties / add_param / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "type",
        +  "default_value"
        +]
      • removedInput schema / properties / changes / items / properties / remove_param / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / items / properties / rename_param / additionalProperties
        Removed value: -false
    • Changedcheck_architecture2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / layers / items / additionalProperties
        Removed value: -false
    • Changedcheck_duplication1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedcheck_embedding_drift
    • Changedcheck_quality_gates7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / config / additionalProperties
        Removed value: -false
      • removedInput schema / properties / config / properties / rules / additionalProperties / additionalProperties
        Removed value: -false
      • addedInput schema / properties / config / properties / rules / additionalProperties / properties / threshold / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / config / properties / rules / additionalProperties / properties / threshold / type
        Removed value: -[
        -  "number",
        -  "string"
        -]
      • addedInput schema / properties / config / properties / rules / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "since"
        +]
    • Changedcheck_rename1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcompare_branches2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / required
        Previous value: -[
        -  "branch"
        -]New value: +[
        +  "branch",
        +  "base"
        +]
    • Addeddelete_corpus
    • Changeddetect_antipatterns2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / category / items / enum
        Previous value: -[
        -  "n_plus_one_risk",
        -  "missing_eager_load",
        -  "unbounded_query",
        -  "event_listener_leak",
        -  "circular_dependency",
        -  "missing_index",
        -  "memory_leak"
        -]New value: +[
        +  "n_plus_one_risk",
        +  "missing_eager_load",
        +  "unbounded_query",
        +  "event_listener_leak",
        +  "circular_dependency",
        +  "missing_index",
        +  "memory_leak",
        +  "god_class",
        +  "long_method",
        +  "long_parameter_list",
        +  "deep_nesting"
        +]
    • Addeddetect_ast_clones
    • Changeddetect_communities2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / seed
        Added value: +{
        +  "description": "PRNG seed for the Leiden node-shuffle. Same seed reproduces identical community IDs across runs. Default 0.",
        +  "maximum": 4294967295,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changeddetect_drift2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / since_days / maximum
        Added value: +9007199254740991
    • Addeddiff_graph_snapshots
    • Removeddiscover_claude_sessions
    • Addeddiscover_hermes_sessions
    • Changedembed_repo1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedexport_graph
    • Addedexport_security_context
    • Changedextract_function3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / end_line / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / start_line / maximum
        Added value: +9007199254740991
    • Changedfind_usages4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / detail_level
        Added value: +{
        +  "description": "Output verbosity. \"minimal\" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: \"default\".",
        +  "enum": [
        +    "minimal",
        +    "default",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / include_ambiguous_text_matched
        Added value: +{
        +  "description": "Keep text_matched edges whose target name collides with >=3 other symbols (default false — they produce phantom god-nodes).",
        +  "type": "boolean"
        +}
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "fqn",
        +  "file_path"
        +]
    • Changedgenerate_docs2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "path"
        +]
    • Addedgenerate_insights_report
    • Changedgenerate_sbom1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Removedget_api_contract
    • Changedget_api_surface1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_artifacts2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "query"
        +]
    • Changedget_call_graph2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "fqn"
        +]
    • Changedget_change_impact2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "file_path",
        +  "symbol_id"
        +]
    • Changedget_changed_symbols2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "until"
        +]
    • Changedget_co_changes2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / min_count / maximum
        Added value: +9007199254740991
    • Changedget_code_owners1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_community2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
    • Changedget_complexity_report2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / min_cyclomatic / maximum
        Added value: +9007199254740991
    • Changedget_complexity_trend1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_context_bundle2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "fqn"
        +]
    • Removedget_contract_drift
    • Removedget_contract_versions
    • Changedget_control_flow2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "fqn"
        +]
    • Changedget_coupling1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_coupling_trend2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / since_days / maximum
        Added value: +9007199254740991
    • Changedget_cross_domain_deps2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "domain"
        +]
    • Removedget_cross_service_impact
    • Changedget_cross_workspace_impact1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_dataflow2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "fqn"
        +]
    • Changedget_dead_code1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_dead_exports1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_decision_timeline1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_dependency_diagram1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_domain_context1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_domain_map1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedget_edge_bottlenecks
    • Changedget_env_vars2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "file"
        +]
    • Changedget_feature_context2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Output format. \"json\" (default) returns structured items; \"markdown\" returns LLM-friendly fenced code blocks (~15-20% token savings, easier for the model to read).",
        +  "enum": [
        +    "json",
        +    "markdown"
        +  ],
        +  "type": "string"
        +}
    • Changedget_git_churn2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / since_days / maximum
        Added value: +9007199254740991
    • Changedget_health_trends2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "file_path",
        +  "module"
        +]
    • Changedget_implementations1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_import_graph1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedget_minimal_context
    • Changedget_optimization_report1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_outline2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / detail_level
        Added value: +{
        +  "description": "Output verbosity. \"minimal\" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: \"default\".",
        +  "enum": [
        +    "minimal",
        +    "default",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedget_package_deps1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_pagerank1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_project_map1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_real_savings1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_refactor_candidates3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / min_callers / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / min_cyclomatic / maximum
        Added value: +9007199254740991
    • Changedget_related_symbols1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_risk_hotspots3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / min_cyclomatic / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / since_days / maximum
        Added value: +9007199254740991
    • Removedget_service_deps
    • Removedget_service_map
    • Changedget_session_analytics2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "session_id"
        +]
    • Changedget_session_resume1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_session_snapshot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Removedget_subproject_clients
    • Removedget_subproject_graph
    • Removedget_subproject_impact
    • Addedget_suggested_questions
    • Addedget_surprises
    • Changedget_symbol2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "fqn"
        +]
    • Changedget_symbol_complexity_trend2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / since_days / maximum
        Added value: +9007199254740991
    • Changedget_symbol_owners1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_task_context2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / output_format
        Added value: +{
        +  "description": "Output format. \"json\" (default) returns structured fields; \"markdown\" returns a single LLM-optimized document with code fences (~15-20% token savings).",
        +  "enum": [
        +    "json",
        +    "markdown"
        +  ],
        +  "type": "string"
        +}
    • Changedget_tech_debt1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_tests_for2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "fqn",
        +  "file_path"
        +]
    • Changedget_type_hierarchy1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_untested_exports1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_untested_symbols1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_usage_trends1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_wake_up1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_workspace_map1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedgraph_query1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedindex_sessions1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedinvalidate_decision2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / id / maximum
        Added value: +9007199254740991
    • Addedlist_corpora
    • Addedlist_graph_snapshots
    • Changedmine_sessions4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / min_confidence / description
        Previous value: -"Minimum confidence threshold for extracted decisions (default: 0.6)"New value: +"Legacy reject floor — drops decisions below this. Superseded by reject_threshold; kept for back-compat."
      • addedInput schema / properties / reject_threshold
        Added value: +{
        +  "description": "Memoir reject floor (default: decisions.reject_threshold from config, fallback 0.45). Decisions in [reject_threshold, review_threshold) go into the review queue; below reject_threshold they are dropped.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / review_threshold
        Added value: +{
        +  "description": "Memoir auto-approve cutoff (default: decisions.review_threshold from config, fallback 0.75). Decisions ≥ this enter the active knowledge graph immediately.",
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedpack_context2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / required
        Previous value: -[
        -  "scope"
        -]New value: +[
        +  "scope",
        +  "path",
        +  "query"
        +]
    • Changedplan_batch_change2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / required
        Previous value: -[
        -  "package"
        -]New value: +[
        +  "package",
        +  "from_version",
        +  "to_version"
        +]
    • Changedplan_refactoring10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / items / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / items / properties / add_param / additionalProperties
        Removed value: -false
      • addedInput schema / properties / changes / items / properties / add_param / properties / position / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / changes / items / properties / add_param / required
        Previous value: -[
        -  "name"
        -]New value: +[
        +  "name",
        +  "type",
        +  "default_value"
        +]
      • removedInput schema / properties / changes / items / properties / remove_param / additionalProperties
        Removed value: -false
      • removedInput schema / properties / changes / items / properties / rename_param / additionalProperties
        Removed value: -false
      • addedInput schema / properties / end_line / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / start_line / maximum
        Added value: +9007199254740991
      • changedInput schema / required
        Previous value: -[
        -  "type"
        -]New value: +[
        +  "type",
        +  "new_name",
        +  "target_file",
        +  "source_file",
        +  "new_path",
        +  "file_path",
        +  "function_name"
        +]
    • Changedplan_turn1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedpredict_bugs1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedquery_by_intent1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedquery_corpus
    • Changedquery_decisions5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / git_branch
        Added value: +{
        +  "description": "Branch filter. \"current\" (default) → current branch + branch-agnostic decisions. \"all\" → every branch. Any other value → that specific branch + branch-agnostic decisions.",
        +  "maxLength": 256,
        +  "type": "string"
        +}
      • addedInput schema / properties / include_pending
        Added value: +{
        +  "description": "Also return decisions in the review queue (review_status=\"pending\"). Default: false — only auto-approved and approved rows are returned.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / review_status
        Added value: +{
        +  "description": "Restrict to a single review tier (overrides default + include_pending). Use \"pending\" to fetch the review queue.",
        +  "enum": [
        +    "pending",
        +    "approved",
        +    "rejected"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / required
        Added value: +[
        +  "symbol_id",
        +  "file_path",
        +  "tag",
        +  "as_of"
        +]
    • Changedrefresh_co_changes1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedregister_edit1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedreindex2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / postprocess
        Added value: +{
        +  "description": "Postprocess level. full = everything (default). minimal = skips LSP/env/snapshots. none = also skips edge resolution.",
        +  "enum": [
        +    "full",
        +    "minimal",
        +    "none"
        +  ],
        +  "type": "string"
        +}
    • Addedreject_decision
    • Changedremove_dead_code1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedrepair_index
    • Changedscan_code_smells3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / category / items / enum
        Previous value: -[
        -  "todo_comment",
        -  "empty_function",
        -  "hardcoded_value"
        -]New value: +[
        +  "todo_comment",
        +  "empty_function",
        +  "hardcoded_value",
        +  "debug_artifact"
        +]
      • addedInput schema / required
        Added value: +[
        +  "scope"
        +]
    • Changedscan_security2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / required
        Previous value: -[
        -  "rules"
        -]New value: +[
        +  "scope",
        +  "rules"
        +]
    • Changedsearch6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / detail_level
        Added value: +{
        +  "description": "Output verbosity. \"minimal\" returns ~40-60% fewer tokens (drops scores, fqn, signatures, summaries — keeps name/file/line). Use when you only need to pick a candidate before drilling in with get_symbol. Default: \"default\".",
        +  "enum": [
        +    "minimal",
        +    "default",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / drill_from
        Added value: +{
        +  "description": "Drill scope for mode=\"drill\" — a file path or symbol_id. Results are restricted to the subtree rooted here.",
        +  "maxLength": 512,
        +  "type": "string"
        +}
      • removedInput schema / properties / fusion_weights / additionalProperties
        Removed value: -false
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Memoir-style retrieval mode: single (default — top-K), tiered (high/medium/low buckets), drill (scoped to drill_from), flat (raw FTS, no PageRank), get (exact lookup). Omit to auto-pick (path-shaped query → get, otherwise → single).",
        +  "enum": [
        +    "single",
        +    "tiered",
        +    "drill",
        +    "flat",
        +    "get"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "query"
        -]New value: +[
        +  "query",
        +  "language",
        +  "file_pattern"
        +]
    • Changedsearch_bundles1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsearch_sessions1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsearch_text3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / timeout_ms
        Added value: +{
        +  "description": "Wall-clock budget in milliseconds. Catastrophic-backtracking regex cannot pin a worker beyond this. Default 2000. Set 0 to disable.",
        +  "maximum": 30000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "query"
        -]New value: +[
        +  "query",
        +  "file_pattern"
        +]
    • Addedsnapshot_graph
    • Removedsubproject_add_repo
    • Removedsubproject_sync
    • Changedtaint_analysis2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / required
        Added value: +[
        +  "scope"
        +]
    • Addedtraverse_graph
    • Addedtune_weights
    • Addedverify_index
    • Changedvisualize_graph2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / include_bottlenecks
        Added value: +{
        +  "description": "Annotate edges with bottleneckScore/isBridge and nodes with isArticulation (file granularity only). Default false.",
        +  "type": "boolean"
        +}
    • Removedvisualize_subproject_topology
  11. 124 tool updatesv0.1.0
    • First observedadd_decision
    • First observedapply_codemod
    • First observedapply_move
    • First observedapply_rename
    • First observedassess_change_risk
    • First observedaudit_config
    • First observedbatch
    • First observedbenchmark_project
    • First observedchange_signature
    • First observedcheck_architecture
    • First observedcheck_duplication
    • First observedcheck_quality_gates
    • First observedcheck_rename
    • First observedcompare_branches
    • First observeddetect_antipatterns
    • First observeddetect_communities
    • First observeddetect_drift
    • First observeddiscover_claude_sessions
    • First observedembed_repo
    • First observedextract_function
    • First observedfind_usages
    • First observedgenerate_docs
    • First observedgenerate_sbom
    • First observedget_api_contract
    • First observedget_api_surface
    • First observedget_artifacts
    • First observedget_call_graph
    • First observedget_change_impact
    • First observedget_changed_symbols
    • First observedget_circular_imports
    • First observedget_co_changes
    • First observedget_code_owners
    • First observedget_communities
    • First observedget_community
    • First observedget_complexity_report
    • First observedget_complexity_trend
    • First observedget_context_bundle
    • First observedget_contract_drift
    • First observedget_contract_versions
    • First observedget_control_flow
    • First observedget_coupling
    • First observedget_coupling_trend
    • First observedget_coverage_report
    • First observedget_cross_domain_deps
    • First observedget_cross_service_impact
    • First observedget_cross_workspace_impact
    • First observedget_dataflow
    • First observedget_dead_code
    • First observedget_dead_exports
    • First observedget_decision_stats
    • First observedget_decision_timeline
    • First observedget_dependency_diagram
    • First observedget_domain_context
    • First observedget_domain_map
    • First observedget_env_vars
    • First observedget_feature_context
    • First observedget_git_churn
    • First observedget_health_trends
    • First observedget_implementations
    • First observedget_import_graph
    • First observedget_index_health
    • First observedget_optimization_report
    • First observedget_outline
    • First observedget_package_deps
    • First observedget_pagerank
    • First observedget_plugin_registry
    • First observedget_preset_info
    • First observedget_project_health
    • First observedget_project_map
    • First observedget_real_savings
    • First observedget_refactor_candidates
    • First observedget_related_symbols
    • First observedget_risk_hotspots
    • First observedget_service_deps
    • First observedget_service_map
    • First observedget_session_analytics
    • First observedget_session_journal
    • First observedget_session_resume
    • First observedget_session_snapshot
    • First observedget_session_stats
    • First observedget_subproject_clients
    • First observedget_subproject_graph
    • First observedget_subproject_impact
    • First observedget_symbol
    • First observedget_symbol_complexity_trend
    • First observedget_symbol_owners
    • First observedget_task_context
    • First observedget_tech_debt
    • First observedget_tests_for
    • First observedget_type_hierarchy
    • First observedget_untested_exports
    • First observedget_untested_symbols
    • First observedget_usage_trends
    • First observedget_wake_up
    • First observedget_workspace_map
    • First observedgraph_query
    • First observedindex_sessions
    • First observedinvalidate_decision
    • First observedlist_bundles
    • First observedmine_sessions
    • First observedpack_context
    • First observedplan_batch_change
    • First observedplan_refactoring
    • First observedplan_turn
    • First observedpredict_bugs
    • First observedquery_by_intent
    • First observedquery_decisions
    • First observedrefresh_co_changes
    • First observedregister_edit
    • First observedreindex
    • First observedremove_dead_code
    • First observedscan_code_smells
    • First observedscan_security
    • First observedsearch
    • First observedsearch_bundles
    • First observedsearch_sessions
    • First observedsearch_text
    • First observedself_audit
    • First observedsubproject_add_repo
    • First observedsubproject_sync
    • First observedsuggest_queries
    • First observedtaint_analysis
    • First observedvisualize_graph
    • First observedvisualize_subproject_topology

TDQS

A3.9/5.0
Disambiguation3/5

Many tools have distinct purposes, but several overlap subtly: search/search_text/get_feature_context all handle text vs symbol lookup, and plan_turn, get_task_context, and suggest_queries each claim to be the 'first call' for different scenarios, creating potential misselection. Detailed cross-references help, but the boundaries are fine-grained enough that an agent could easily choose the wrong one.

Naming Consistency4/5

The dominant get_* prefix for read-only tools is consistent, and mutating tools use concise verb_* names (register_edit, invalidate_decision, load_tools). A few outliers like search, search_text, plan_turn, and batch break the pattern, but naming is still predictable and readable overall.

Tool Count2/5

28 tools is above the 25 threshold, and the surface spans three distinct domains: code intelligence, decision memory, and session analytics. Several analytics tools (get_session_analytics, get_optimization_report, get_real_savings, get_usage_trends, get_session_stats) could likely be consolidated, making the set feel larger than necessary for a focused server.

Completeness4/5

The decision store lifecycle is well-covered with remember, query, and invalidate, though an explicit update or add_decision tool is missing (add_decision is mentioned but not exposed). Code exploration is thoroughly covered with symbol lookup, outline, search, usages, call graphs, and context bundles, leaving only minor gaps like direct file-content retrieval by path.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Cross-repository code knowledge graph MCP server for Java, Kotlin, JavaScript, and TypeScript. Indexes source code into embedded KuzuDB via tree-sitter and exposes 30+ tools for call-flow tracing, multi-hop taint analysis (OWASP/CWE/PCI/STIG), entry-point reachability filtering, performance hotspot detection, and license compliance — without reading source files. 95% fewer tokens vs source-read
    33
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A persistent code-intelligence MCP server that builds a queryable knowledge graph of your codebase, enabling AI assistants to perform cross-file structural reasoning, dependency analysis, and blast radius detection.
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Multi-language code intelligence MCP server providing structured code analysis including symbol search, references, hierarchies, and change impact. Supports 25 languages with persistent indexing and LSP integration.
    71
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nikolai-vysotskyi/trace-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server