Skip to main content
Glama
timohaa

Scopewalker MCP

by timohaa

Scopewalker MCP

Buy Me A Coffee

AI agents will happily create 1000+ line source files and add a 20th parameter to a function call, even if there's a rule file telling them not to. Scopewalker exists to enforce stricter codebase standards.

It's a local MCP server (open source, runs over stdio, makes no network calls) that exposes 9 read-only tools:

  • get_line_counts - per-file line counts (total, code, blank, comment) with sorting, extension filters, and project-wide totals

  • get_functions - function and method detection; per-file counts, or per-function line metrics via detail=lines with a min_lines filter for hunting oversized functions

  • get_complexity_metrics - max/average nesting depth and parameter counts (JSX props included), import counts, a per-file cognitive-complexity score, and per-function cyclomatic complexity with high/extreme severity bands, plus hotspots flagged for deeply nested or over-parameterized functions

  • check_thresholds - flags files and functions exceeding size thresholds (defaults: 300 lines per file, 100 per function)

  • get_code_inventory - classes with their methods, functions, interfaces/types, enums, and constants, each marked exported or not; private symbols hidden by default

  • get_documentation_coverage - coverage percentage plus every function, class, or method missing a doc comment (JSDoc, Python docstrings, Rust ///, and other per-language formats)

  • get_code_smells - TODO/FIXME/HACK/XXX/BUG/UNUSED/DEPRECATED markers found by scanning actual comments via the AST (no false positives from string literals), plus as unknown as / as any as double casts in TypeScript

  • get_prop_drilling - parameter names threaded through many functions and files, with forwarding evidence and a high/medium/low risk rating

  • find_dead_code - unreferenced top-level symbols and private methods, split into certain dead_code and human-judgment unreferenced_exports

It's tree-sitter (parsing) + tokei (line counting) + fast-glob (file discovery) under the hood; nothing is custom-parsed. Tested on macOS with Claude Code, but should work with Cursor, VS Code, Windsurf, Antigravity CLI, Codex, or anything else that speaks MCP.

See TOOLS.md for the quick reference, docs/ for per-tool parameters and example responses, and docs/usage-examples.md for a guide to wiring Scopewalker into skills, subagents, and AGENTS.md.

Safety Defaults

  • No network access: All analysis runs locally over stdio: no data leaves your machine, no API keys or external services involved.

  • Path scoping: All tools only operate inside allowed roots. SCOPEWALKER_ALLOWED_ROOTS=/abs/path1,/abs/path2 takes precedence when set. Otherwise the server uses the workspace roots your MCP client shares, and falls back to the current working directory and system temp when the client shares none.

  • Large file guard: AST-based tools skip files larger than 1 MB to avoid excessive memory/CPU use. Tokei-based line counts do not enforce this limit.

  • Input ceilings: max_files caps at 10000, max_depth at 64, limit at 5000.

  • Symlinks: Directory scans do not follow symbolic links.

  • Output limits: Tools default to returning 20 files/items unless limit is set.

  • Comment redaction: get_code_smells redacts comment text by default; pass include_text: true to return snippets explicitly.

Related MCP server: flyto-indexer

Requirements

  • Node.js 22+

  • tokei - Install via brew install tokei or cargo install tokei

Installation

Scopewalker is published to npm as scopewalker-mcp; no clone or build needed. Configure your MCP client to run it via npx (examples below), or install it globally with npm install -g scopewalker-mcp.

To build from source instead, see Development.

Configuration

Claude Code

claude mcp add --scope user scopewalker-mcp -- npx -y scopewalker-mcp

Or add to ~/.claude.json:

{
  "mcpServers": {
    "scopewalker-mcp": {
      "command": "npx",
      "args": ["-y", "scopewalker-mcp"]
    }
  }
}

See Claude Code MCP documentation for details.

Claude Desktop

Download scopewalker-mcp.mcpb from the latest release and open it with Claude Desktop (or drag it into Settings > Extensions) for one-click installation.

Cursor

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

{
  "mcpServers": {
    "scopewalker-mcp": {
      "command": "npx",
      "args": ["-y", "scopewalker-mcp"]
    }
  }
}

Or configure via File > Preferences > Cursor Settings > MCP.

See Cursor MCP documentation for details.

VS Code (GitHub Copilot)

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "scopewalker-mcp": {
      "command": "npx",
      "args": ["-y", "scopewalker-mcp"]
    }
  }
}

Requires VS Code 1.102+ with Agent Mode enabled.

See VS Code MCP documentation for details.

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "scopewalker-mcp": {
      "command": "npx",
      "args": ["-y", "scopewalker-mcp"]
    }
  }
}

Or configure via Windsurf Settings > Cascade > Manage MCPs.

See Windsurf MCP documentation for details.

Antigravity CLI

Add to ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (per project):

{
  "mcpServers": {
    "scopewalker-mcp": {
      "command": "npx",
      "args": ["-y", "scopewalker-mcp"]
    }
  }
}

Use /mcp inside the prompt panel to check server status and reload the config.

See Antigravity CLI MCP documentation for details.

For Gemini CLI, add the same mcpServers configuration to ~/.gemini/settings.json. See Gemini CLI MCP documentation.

OpenAI Codex CLI

Add to ~/.codex/config.toml:

[mcp_servers.scopewalker-mcp]
command = "npx"
args = ["-y", "scopewalker-mcp"]

Or use the CLI:

codex mcp add scopewalker-mcp -- npx -y scopewalker-mcp

See Codex MCP documentation for details.

Usage

Once configured, the assistant calls Scopewalker's tools on its own; no special syntax needed. Ask things like:

  • "Check this repo against our size thresholds before I commit"

  • "Which functions in src/ have the highest cognitive complexity?"

  • "Find undocumented exports in src/auth"

  • "Are there any TODO/FIXME/HACK markers left in this module?"

  • "Show me functions that take more than 5 parameters"

It picks the right tool and parameters for the request.

This repo enforces shared quality requirements through its skills and agents:

Development

To run from source instead of npm:

git clone https://github.com/timohaa/scopewalker-mcp.git
cd scopewalker-mcp
npm install
npm run build

Then point your MCP client at the build output, e.g. claude mcp add --scope user scopewalker-mcp -- node /path/to/scopewalker-mcp/dist/index.js.

npm run build          # Build the project
npm run check          # Version sync + lint + typecheck
npm run test           # Run tests
npm run test:coverage  # Run tests with coverage

See CONTRIBUTING.md for contribution guidelines and docs/patterns.md for tool registration, error handling, and testing patterns.

Supported Languages

The AST-based tools (everything except get_line_counts) parse:

  • TypeScript/JavaScript (.ts, .tsx, .js, .jsx, .mjs, .cjs)

  • Python (.py)

  • Go (.go)

  • Rust (.rs)

  • Java (.java)

  • C/C++ (.c, .h, .cpp, .cc, .cxx, .hpp)

  • Ruby (.rb)

get_line_counts runs through tokei, so it reports on every language tokei recognizes. See docs/tools-overview.md for what is detected per language.

License

MIT

Available Tools

9 tools
check_thresholdsSize ThresholdsB
Read-onlyIdempotent

Finds files/functions exceeding size thresholds. Use limit to control output.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax violations returned per list (default 20)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
include_hiddenNoInclude dotfiles and dot-directories (default false)
max_file_linesNoFlag files longer than this many lines (default 300)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path
max_function_linesNoFlag functions longer than this many lines (default 100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
summaryYes
thresholdsYes
violationsYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is well covered. The description adds that it detects violations and that limit controls output size, but does not describe scanning scope defaults or output ordering.

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 short sentences, purpose front-loaded, with no wasted wording. The limit sentence is brief and does not distract from the main purpose.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the schema richly documents all parameters. However, with nine parameters and many sibling tools, the description lacks routing guidance about when to choose this tool over alternatives.

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%, with every parameter documented including defaults and bounds. The description only restates 'Use limit to control output,' adding no meaning beyond the schema.

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

Purpose4/5

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

States a specific verb and resource: finds files/functions exceeding size thresholds. This is clear enough to distinguish from counting tools like get_line_counts, but it does not explicitly name or contrast any sibling tool.

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

Usage Guidelines2/5

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

The only guidance is 'Use limit to control output,' which is a parameter-level instruction rather than when/when-not to use this tool. There is no mention of alternatives such as get_line_counts or get_complexity_metrics.

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

find_dead_codeDead CodeA
Read-onlyIdempotent

Finds declared symbols that nothing references. dead_code is proven unreachable within the scan; unreferenced_exports may be used outside it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax items returned per result list (default 20)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
summaryYes
dead_codeYes
is_directoryYes
unreferenced_exportsYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is low. The description still adds real value by distinguishing 'dead_code' (proven unreachable in the scan) from 'unreferenced_exports' (may be used outside it), which warns the agent off false positives. It does not mention scan cost or truncation behavior, but that is minor here.

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, zero filler, and the core purpose is front-loaded ahead of the interpretive caveat. Nothing could be trimmed without losing information.

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 an output schema present, the description need not explain return values, and the parameter schema is fully documented. The one gap is that it says nothing about where the tool fits relative to the other code-analysis siblings, which the surrounding toolset makes relevant.

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%, with defaults, ranges, and examples already present for path, limit, max_depth, extensions, and ignore_patterns. The description adds no parameter-level detail, so baseline 3 is appropriate.

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

Purpose4/5

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

The description names a specific verb and resource ('Finds declared symbols that nothing references') and quantifies scope with the 'within the scan' qualifier. It is clearly distinct from siblings like get_code_smells or get_code_inventory, though it never names an alternative explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. The second sentence explains how to interpret results rather than when to reach for this tool, leaving selection between it and get_code_inventory/get_code_smells to inference.

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

get_code_inventoryCode InventoryC
Read-onlyIdempotent

Lists classes, functions, methods, and exports. Use extensions to filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoKeep files or symbols whose path or name contains this text (case-insensitive)
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax files returned (default 20)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path
include_privateNoInclude private and unexported symbols (default false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
summaryYes
inventoryYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds no behavioral context of its own: no scan/recursion behavior, no note about default limits or hidden-file handling, and no output shape beyond the resource list.

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

Conciseness4/5

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

Two short sentences with the core purpose front-loaded and no filler. The second sentence is largely duplicative of the extensions schema description, keeping it just below a 5.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and the schema documents every parameter. However, for a 9-parameter scanning tool sitting among closely related siblings, the description omits the guidance needed to pick it correctly and says nothing about scanning defaults or scope limits.

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% across all nine parameters, including the extensions filter the description mentions, so the schema already does the heavy lifting. The one sentence about extensions is redundant with the structured field rather than additive, which lands this at the baseline 3.

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 gives a concrete verb ('Lists') plus the resource set (classes, functions, methods, exports), so an agent immediately knows what comes back. It does not distinguish itself from the sibling get_functions, which the same agent may also consider, so it stops short of a 5.

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

Usage Guidelines2/5

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

The only guidance is 'Use extensions to filter,' which is a parameter tip rather than a when-to-use rule. Nothing says when this tool is preferable to get_functions or the other inventory-style siblings, and no prerequisites or exclusions are stated.

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

get_code_smellsCode SmellsB
Read-onlyIdempotent

Finds TODO/FIXME/HACK/BUG markers and unsafe casts in code.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax files returned (default 20)
typesNoSmell types to detect (default all)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
include_textNoInclude each marker's comment text (default false)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
filesYes
summaryYes
is_directoryYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds that it finds specific marker types and unsafe casts, which is useful content context. It does not add behavioral details beyond the schema and annotations, such as default hidden-file handling or output shape, but with annotations covering the safety profile a 3 is appropriate.

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

Conciseness5/5

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

The description is a single front-loaded sentence with zero filler. It states the core purpose immediately without unnecessary elaboration.

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

Completeness3/5

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

The tool has nine parameters, an output schema, and rich annotations, so the description need not explain returns or safety. However, for a scanning tool with several siblings, the description is thin on usage context and does not help an agent choose between this and find_dead_code or get_code_inventory. It is minimally adequate but leaves clear selection gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all nine parameters are fully documented in the schema. The description mentions only a subset of the detectable types (TODO/FIXME/HACK/BUG and unsafe casts), adding no syntax or format details beyond what the schema provides. Baseline 3 applies when the schema does the heavy lifting.

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 uses a specific verb ('Finds') and names the target artifacts: TODO/FIXME/HACK/BUG markers and unsafe casts. This distinguishes it from many siblings such as get_line_counts or get_complexity_metrics. However, it does not explicitly differentiate from the closest sibling, find_dead_code, leaving a small ambiguity.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. Sibling tools like find_dead_code and get_code_inventory overlap in static analysis scope, but the description offers no conditions, exclusions, or routing advice.

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

get_complexity_metricsComplexity MetricsB
Read-onlyIdempotent

Returns complexity metrics (nesting, params, cognitive, per-function cyclomatic). Use limit/summary_only to control output.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax files returned, most complex first (default 20)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
summary_onlyNoReturn summary totals without per-item details (default false)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
filesYes
summaryYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered and the description does not contradict it. The description adds useful domain content by naming the metric families computed, but says nothing about scan cost, timeout behavior, or ordering semantics beyond what the schema already documents.

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

Conciseness4/5

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

Two tight sentences with the core purpose front-loaded and no filler. The second sentence trades some terseness for usefulness, though it would earn its place better if it addressed when to use the tool rather than only how to shrink output.

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

Completeness3/5

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

With an output schema available and annotations carrying the safety profile, the definition is not required to explain return values, and it correctly lists computed metrics. However, for a tool among nine analysis siblings with no usage routing, the description leaves the agent guessing about when this is the right choice and what the metric values mean in practice.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including path, max_depth, max_files, extensions and ignore_patterns is already documented in the schema. The description's mention of limit/summary_only repeats schema information without adding format, default, or interaction details, so the baseline 3 applies.

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 ('Returns') and resource ('complexity metrics') and enumerates the metric kinds (nesting, params, cognitive, per-function cyclomatic), which meaningfully separates it from siblings like get_line_counts and get_code_smells. It stops short of naming a sibling explicitly, so differentiation is inferential rather than stated.

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

Usage Guidelines2/5

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

The only guidance is 'Use limit/summary_only to control output,' which is parameter advice, not when-to-use guidance. There is no indication of when to reach for this tool over check_thresholds or get_code_smells, nor any stated prerequisites despite the path being constrained to allowed roots.

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

get_documentation_coverageDocumentation CoverageC
Read-onlyIdempotent

Finds undocumented functions/classes. Use limit/summary_only to control output.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax undocumented items returned (default 20)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
min_linesNoIgnore functions shorter than this many lines (default 1)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
summary_onlyNoReturn summary totals without per-item details (default false)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
by_fileYes
summaryYes
coverageYes
truncatedNo
undocumented_itemsYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds only a vague "control output" hint and never discloses that scanning is bounded by allowed roots or that unlimited max_files/max_depth defaults could be expensive. Beyond the annotations it contributes very little 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.

Conciseness4/5

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

Two short sentences with the purpose front-loaded and no filler. It is efficiently sized, though the second sentence is arguably redundant with the schema and the terseness leaves gaps.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the 100% schema coverage plus annotations cover most mechanics. However, for a 9-parameter analysis tool with many siblings, the absence of any usage or scoping guidance leaves the description only minimally complete.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including limit and summary_only is already documented with types, defaults and bounds. The description's mention of limit/summary_only merely restates schema content and adds no syntax or format detail. Baseline 3 applies when the schema carries the full load.

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

Purpose4/5

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

The description names a specific verb and resource: "Finds undocumented functions/classes." This clearly separates it from data-gathering siblings like get_functions or get_line_counts, though it does not explicitly name an alternative tool. The purpose is unambiguous without opening the schema.

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

Usage Guidelines2/5

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

There is no when-to-use/when-not guidance and no mention of alternatives or prerequisites despite eight sibling tools. "Use limit/summary_only to control output" is parameter advice, not usage context, so an agent gets no help deciding when this tool beats get_code_smells or get_code_inventory.

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

get_functionsFunctionsC
Read-onlyIdempotent

Returns function/method info. Use detail=lines for line counts per function.

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoKeep files or functions whose path or name contains this text (case-insensitive)
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax files returned (default 20)
detailNocounts: functions per file; lines: lines per function (default counts)
sort_byNoSort order (default count_desc for counts, lines_desc for lines)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
min_linesNoLines mode only: skip functions shorter than this many lines
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
filesYes
summaryYes
is_directoryYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond that — nothing about scan cost, depth/file traversal limits, or what 'info' is produced — so it does little work the agent couldn't infer.

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

Conciseness4/5

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

Two short sentences, no padding, and the core capability leads. It is efficient, though the terseness edges toward under-specification rather than disciplined brevity.

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

Completeness3/5

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

An output schema exists and the input schema is fully documented, so the agent can call it, but for an 11-parameter analyzer the description omits operating scope (allowed roots), result granularity, and any relation to sibling analysis tools. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all 11 parameters, both enums, and defaults are already documented in the schema. The description's only addition is restating the detail=lines mode, which the schema already explains; baseline 3 is appropriate.

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

Purpose3/5

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

It names the resource (functions/methods) but the verb is the generic 'Returns ... info', which doesn't say what kind of info or what analysis is performed. Nothing in the text distinguishes it from siblings like get_line_counts, get_complexity_metrics, or get_code_inventory, which are the closest overlaps.

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

Usage Guidelines2/5

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

The only guidance is a parameter hint ('Use detail=lines for line counts per function'), which points at behavior rather than when to pick this tool over get_line_counts or get_complexity_metrics. There is no stated context, no exclusions, and no alternative named.

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

get_line_countsLine CountsB
Read-onlyIdempotent

Returns file line counts (code/blank/comment). Use extensions to filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoKeep files whose path contains this text (case-insensitive)
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax files returned (default 20)
sort_byNoSort by total lines or path (default lines_desc)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
filesYes
summaryYes
is_directoryYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and a closed-world scope, so the safety profile is covered. The description adds the count categories and the extension-filtering hint, but says nothing about the allowed-roots constraint, sort/default behavior, or scan cost on large trees.

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

Conciseness4/5

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

Two compact sentences with no filler, front-loading the return semantics before the filtering hint. Slightly under-specified rather than padded, which costs little here.

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

Completeness3/5

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

An output schema exists, so return-value details are rightly omitted, and annotations cover safety. However, for a 7-parameter tool with path scoping, ignore patterns, and limits, the description leaves the agent to infer filtering and scope behavior entirely from the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description only echoes the extensions filter and adds no format or interaction details beyond it, so baseline 3 applies.

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+resource ('Returns file line counts') and adds the useful breakdown of code/blank/comment. It is distinct enough from metric-oriented siblings like get_complexity_metrics, but does not explicitly name what it is not or how it differs from them.

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

Usage Guidelines2/5

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

The only guidance is 'Use extensions to filter,' which points at a parameter rather than saying when this tool is the right choice. There is no when-to-use, when-not-to-use, or reference to alternatives among the many sibling analysis tools.

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

get_prop_drillingProp DrillingB
Read-onlyIdempotent

Detects parameter threading (prop drilling) by finding parameter names passed through chains of functions. Use limit/summary_only to control output.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile or directory to analyze; must be inside the allowed roots
limitNoMax parameters returned (default 20)
max_depthNoMax directory depth to descend (default unlimited)
max_filesNoStop after scanning this many files (default unlimited)
extensionsNoOnly scan these extensions, e.g. [".ts", ".py"] (default all supported)
summary_onlyNoReturn summary totals without per-item details (default false)
exclude_commonNoExclude common parameter names like id, key, className (default false)
include_hiddenNoInclude dotfiles and dot-directories (default false)
ignore_patternsNoExtra gitignore-style patterns to exclude, relative to path
min_occurrencesNoMinimum function occurrences to flag (default 3)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
_metaNo
summaryYes
is_directoryYes
threaded_parametersYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description need not restate it. It adds the analysis semantics (chains of functions, parameter names) but nothing about scope of scanning, cost, or what the findings look like. Adequate but thin for a static-analysis tool.

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

Conciseness4/5

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

Two short sentences, front-loaded with the definition and followed by a brief output-control hint. Nothing is padded, though the second sentence largely echoes schema defaults rather than earning much new information.

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

Completeness3/5

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

Safety is covered by annotations, return shape by the output schema, and all 10 parameters by a fully documented schema, so the structural gaps are small. The remaining hole is usage framing: an agent learns what the tool detects but not when to reach for it over the other eight code-analysis siblings.

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%, covering path, limit, max_depth, max_files, extensions, summary_only, exclude_common, include_hidden, ignore_patterns, and min_occurrences with defaults and bounds. The description mentions only limit and summary_only and adds no syntax, default, or interaction detail beyond the schema, so the baseline 3 applies.

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 detection target (parameter threading / prop drilling) and the mechanism (parameter names passed through chains of functions), which separates it from siblings like get_code_smells or get_complexity_metrics. It stops short of naming any sibling explicitly, so differentiation is conceptual rather than direct.

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

Usage Guidelines2/5

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

The only guidance is 'Use limit/summary_only to control output', which is a parameter hint rather than a when-to-use rule. It never says when this analysis is preferable to get_code_smells or get_functions, nor any prerequisite or exclusion conditions.

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

Tool Schema Changelog

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

  1. 9 tool updatesv1.4.0
    • Changedcheck_thresholds11 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max violations"New value: +"Max violations returned per list (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_file_lines / description
        Previous value: -"File line threshold"New value: +"Flag files longer than this many lines (default 300)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / max_function_lines / description
        Previous value: -"Function line threshold"New value: +"Flag functions longer than this many lines (default 100)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "file_violations": {
        +          "type": "number"
        +        },
        +        "files_checked": {
        +          "type": "number"
        +        },
        +        "files_skipped": {
        +          "type": "number"
        +        },
        +        "function_violations": {
        +          "type": "number"
        +        },
        +        "functions_checked": {
        +          "type": "number"
        +        },
        +        "scan_complete": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "files_checked",
        +        "functions_checked",
        +        "file_violations",
        +        "function_violations",
        +        "files_skipped",
        +        "scan_complete"
        +      ],
        +      "type": "object"
        +    },
        +    "thresholds": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "max_file_lines": {
        +          "type": "number"
        +        },
        +        "max_function_lines": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "max_file_lines",
        +        "max_function_lines"
        +      ],
        +      "type": "object"
        +    },
        +    "violations": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "oversized_files": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "exceeds_by": {
        +                "type": "number"
        +              },
        +              "lines": {
        +                "type": "number"
        +              },
        +              "path": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "lines",
        +              "exceeds_by"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "oversized_functions": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "exceeds_by": {
        +                "type": "number"
        +              },
        +              "function_name": {
        +                "type": "string"
        +              },
        +              "lines": {
        +                "type": "number"
        +              },
        +              "path": {
        +                "type": "string"
        +              },
        +              "start_line": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "function_name",
        +              "lines",
        +              "exceeds_by",
        +              "start_line"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "oversized_files",
        +        "oversized_functions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "thresholds",
        +    "violations",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedfind_dead_code9 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results per list"New value: +"Max items returned per result list (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "dead_code": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "file": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "class",
        +                  "function",
        +                  "interface",
        +                  "enum",
        +                  "constant"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "const": "method",
        +                "type": "string"
        +              }
        +            ]
        +          }
        +        },
        +        "required": [
        +          "file",
        +          "name",
        +          "type",
        +          "line"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "is_directory": {
        +      "type": "boolean"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "dead_code_found": {
        +          "type": "number"
        +        },
        +        "files_scanned": {
        +          "type": "number"
        +        },
        +        "files_skipped": {
        +          "type": "number"
        +        },
        +        "scan_complete": {
        +          "type": "boolean"
        +        },
        +        "symbols_checked": {
        +          "type": "number"
        +        },
        +        "unreferenced_exports_found": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "files_scanned",
        +        "files_skipped",
        +        "scan_complete",
        +        "symbols_checked",
        +        "dead_code_found",
        +        "unreferenced_exports_found"
        +      ],
        +      "type": "object"
        +    },
        +    "unreferenced_exports": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "file": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "class",
        +                  "function",
        +                  "interface",
        +                  "enum",
        +                  "constant"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "const": "method",
        +                "type": "string"
        +              }
        +            ]
        +          }
        +        },
        +        "required": [
        +          "file",
        +          "name",
        +          "type",
        +          "line"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "is_directory",
        +    "dead_code",
        +    "unreferenced_exports",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_code_inventory11 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / grep / description
        Previous value: -"Filter by keyword"New value: +"Keep files or symbols whose path or name contains this text (case-insensitive)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / include_private / description
        Previous value: -"Include private symbols"New value: +"Include private and unexported symbols (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max files returned (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "inventory": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "file": {
        +            "type": "string"
        +          },
        +          "items": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "exported": {
        +                  "type": "boolean"
        +                },
        +                "line": {
        +                  "type": "number"
        +                },
        +                "methods": {
        +                  "items": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "line": {
        +                        "type": "number"
        +                      },
        +                      "name": {
        +                        "type": "string"
        +                      },
        +                      "visibility": {
        +                        "enum": [
        +                          "public",
        +                          "private",
        +                          "protected"
        +                        ],
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "name",
        +                      "line",
        +                      "visibility"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "type": {
        +                  "enum": [
        +                    "class",
        +                    "function",
        +                    "interface",
        +                    "enum",
        +                    "constant"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "name",
        +                "type",
        +                "line",
        +                "exported"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "file",
        +          "items"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "exported_symbols": {
        +          "type": "number"
        +        },
        +        "total_classes": {
        +          "type": "number"
        +        },
        +        "total_files": {
        +          "type": "number"
        +        },
        +        "total_functions": {
        +          "type": "number"
        +        },
        +        "total_methods": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "total_files",
        +        "total_classes",
        +        "total_functions",
        +        "total_methods",
        +        "exported_symbols"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "inventory",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_code_smells11 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / include_text / description
        Previous value: -"Include comment text"New value: +"Include each marker's comment text (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max files returned (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedInput schema / properties / types / description
        Previous value: -"Smell types to detect"New value: +"Smell types to detect (default all)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "files": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "path": {
        +            "type": "string"
        +          },
        +          "smells": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "line": {
        +                  "type": "number"
        +                },
        +                "path": {
        +                  "type": "string"
        +                },
        +                "text": {
        +                  "type": "string"
        +                },
        +                "type": {
        +                  "enum": [
        +                    "todo",
        +                    "fixme",
        +                    "hack",
        +                    "xxx",
        +                    "bug",
        +                    "unused",
        +                    "deprecated",
        +                    "unsafe_cast"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "path",
        +                "line",
        +                "type",
        +                "text"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "smells"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "is_directory": {
        +      "type": "boolean"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "by_type": {
        +          "additionalProperties": {
        +            "type": "number"
        +          },
        +          "propertyNames": {
        +            "enum": [
        +              "todo",
        +              "fixme",
        +              "hack",
        +              "xxx",
        +              "bug",
        +              "unused",
        +              "deprecated",
        +              "unsafe_cast"
        +            ],
        +            "type": "string"
        +          },
        +          "required": [
        +            "todo",
        +            "fixme",
        +            "hack",
        +            "xxx",
        +            "bug",
        +            "unused",
        +            "deprecated",
        +            "unsafe_cast"
        +          ],
        +          "type": "object"
        +        },
        +        "files_with_smells": {
        +          "type": "number"
        +        },
        +        "total_files_scanned": {
        +          "type": "number"
        +        },
        +        "total_smells": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "total_files_scanned",
        +        "files_with_smells",
        +        "total_smells",
        +        "by_type"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "is_directory",
        +    "files",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_complexity_metrics10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max files returned, most complex first (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedInput schema / properties / summary_only / description
        Previous value: -"Summary only"New value: +"Return summary totals without per-item details (default false)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "files": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "functions": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "cognitive_complexity": {
        +                  "type": "number"
        +                },
        +                "cyclomatic_complexity": {
        +                  "type": "number"
        +                },
        +                "line": {
        +                  "type": "number"
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "nesting_depth": {
        +                  "type": "number"
        +                },
        +                "severity": {
        +                  "enum": [
        +                    "high",
        +                    "extreme"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "name",
        +                "line",
        +                "cyclomatic_complexity",
        +                "cognitive_complexity",
        +                "nesting_depth",
        +                "severity"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "hotspots": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "function": {
        +                  "type": "string"
        +                },
        +                "issue": {
        +                  "type": "string"
        +                },
        +                "line": {
        +                  "type": "number"
        +                },
        +                "recommendation": {
        +                  "type": "string"
        +                },
        +                "value": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "function",
        +                "line",
        +                "issue",
        +                "value",
        +                "recommendation"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "metrics": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "avg_cyclomatic_complexity": {
        +                "type": "number"
        +              },
        +              "avg_nesting_depth": {
        +                "type": "number"
        +              },
        +              "avg_parameters": {
        +                "type": "number"
        +              },
        +              "cognitive_complexity": {
        +                "type": "number"
        +              },
        +              "dependency_count": {
        +                "type": "number"
        +              },
        +              "function_count": {
        +                "type": "number"
        +              },
        +              "max_cognitive_complexity": {
        +                "type": "number"
        +              },
        +              "max_cyclomatic_complexity": {
        +                "type": "number"
        +              },
        +              "max_nesting_depth": {
        +                "type": "number"
        +              },
        +              "max_parameters": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "max_nesting_depth",
        +              "avg_nesting_depth",
        +              "max_parameters",
        +              "avg_parameters",
        +              "dependency_count",
        +              "cognitive_complexity",
        +              "function_count",
        +              "max_cyclomatic_complexity",
        +              "avg_cyclomatic_complexity",
        +              "max_cognitive_complexity"
        +            ],
        +            "type": "object"
        +          },
        +          "path": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "metrics",
        +          "functions",
        +          "hotspots"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "files_analyzed": {
        +          "type": "number"
        +        },
        +        "high_complexity_files": {
        +          "type": "number"
        +        },
        +        "high_complexity_functions": {
        +          "type": "number"
        +        },
        +        "most_complex_file": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "cognitive_complexity": {
        +                  "type": "number"
        +                },
        +                "path": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "path",
        +                "cognitive_complexity"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "most_complex_function": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "cyclomatic_complexity": {
        +                  "type": "number"
        +                },
        +                "function": {
        +                  "type": "string"
        +                },
        +                "line": {
        +                  "type": "number"
        +                },
        +                "path": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "path",
        +                "function",
        +                "line",
        +                "cyclomatic_complexity"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "total_hotspots": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "files_analyzed",
        +        "high_complexity_files",
        +        "high_complexity_functions",
        +        "total_hotspots",
        +        "most_complex_file",
        +        "most_complex_function"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "files",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_documentation_coverage11 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max undocumented items returned (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / min_lines / description
        Previous value: -"Min function lines"New value: +"Ignore functions shorter than this many lines (default 1)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedInput schema / properties / summary_only / description
        Previous value: -"Summary only"New value: +"Return summary totals without per-item details (default false)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "by_file": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "documented": {
        +            "type": "number"
        +          },
        +          "path": {
        +            "type": "string"
        +          },
        +          "percentage": {
        +            "type": "number"
        +          },
        +          "undocumented": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "documented",
        +          "undocumented",
        +          "percentage"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "coverage": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "documented": {
        +          "type": "number"
        +        },
        +        "percentage": {
        +          "type": "number"
        +        },
        +        "undocumented": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "documented",
        +        "undocumented",
        +        "percentage"
        +      ],
        +      "type": "object"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "files_analyzed": {
        +          "type": "number"
        +        },
        +        "files_skipped": {
        +          "type": "number"
        +        },
        +        "fully_documented_files": {
        +          "type": "number"
        +        },
        +        "scan_complete": {
        +          "type": "boolean"
        +        },
        +        "total_symbols": {
        +          "type": "number"
        +        },
        +        "zero_documentation_files": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "files_analyzed",
        +        "files_skipped",
        +        "scan_complete",
        +        "total_symbols",
        +        "fully_documented_files",
        +        "zero_documentation_files"
        +      ],
        +      "type": "object"
        +    },
        +    "truncated": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "items": {
        +          "type": "number"
        +        },
        +        "total": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "items",
        +        "total"
        +      ],
        +      "type": "object"
        +    },
        +    "undocumented_items": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "line": {
        +            "type": "number"
        +          },
        +          "lines": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "path": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "enum": [
        +              "function",
        +              "class",
        +              "method"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "name",
        +          "type",
        +          "line"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "coverage",
        +    "undocumented_items",
        +    "by_file",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_functions13 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / detail / description
        Previous value: -"Detail level"New value: +"counts: functions per file; lines: lines per function (default counts)"
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / grep / description
        Previous value: -"Filter by keyword"New value: +"Keep files or functions whose path or name contains this text (case-insensitive)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max files returned (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / min_lines / description
        Previous value: -"Min lines (lines mode)"New value: +"Lines mode only: skip functions shorter than this many lines"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedInput schema / properties / sort_by / description
        Previous value: -"Sort order"New value: +"Sort order (default count_desc for counts, lines_desc for lines)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "files": {
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "function_count": {
        +                "type": "number"
        +              },
        +              "functions": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "line": {
        +                      "type": "number"
        +                    },
        +                    "name": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "name",
        +                    "line"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "language": {
        +                "type": "string"
        +              },
        +              "path": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "language",
        +              "function_count",
        +              "functions"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "functions": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "end_line": {
        +                      "type": "number"
        +                    },
        +                    "lines": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "blank": {
        +                          "type": "number"
        +                        },
        +                        "code": {
        +                          "type": "number"
        +                        },
        +                        "comment": {
        +                          "type": "number"
        +                        },
        +                        "total": {
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "total",
        +                        "code",
        +                        "blank",
        +                        "comment"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "name": {
        +                      "type": "string"
        +                    },
        +                    "start_line": {
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "name",
        +                    "start_line",
        +                    "end_line",
        +                    "lines"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "language": {
        +                "type": "string"
        +              },
        +              "path": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "language",
        +              "functions"
        +            ],
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    },
        +    "is_directory": {
        +      "type": "boolean"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "files_with_no_functions": {
        +              "type": "number"
        +            },
        +            "total_files_analyzed": {
        +              "type": "number"
        +            },
        +            "total_functions": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "total_files_analyzed",
        +            "total_functions",
        +            "files_with_no_functions"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "average_lines_per_function": {
        +              "type": "number"
        +            },
        +            "functions_over_50_lines": {
        +              "type": "number"
        +            },
        +            "largest_function": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "file": {
        +                      "type": "string"
        +                    },
        +                    "lines": {
        +                      "type": "number"
        +                    },
        +                    "name": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "name",
        +                    "file",
        +                    "lines"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "total_functions": {
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "total_functions",
        +            "average_lines_per_function",
        +            "largest_function",
        +            "functions_over_50_lines"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "is_directory",
        +    "files",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_line_counts9 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / grep / description
        Previous value: -"Filter by keyword"New value: +"Keep files whose path contains this text (case-insensitive)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max files returned (default 20)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedInput schema / properties / sort_by / description
        Previous value: -"Sort order"New value: +"Sort by total lines or path (default lines_desc)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "files": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "lines": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "blank": {
        +                "type": "number"
        +              },
        +              "code": {
        +                "type": "number"
        +              },
        +              "comment": {
        +                "type": "number"
        +              },
        +              "total": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "total",
        +              "code",
        +              "blank",
        +              "comment"
        +            ],
        +            "type": "object"
        +          },
        +          "path": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "lines"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "is_directory": {
        +      "type": "boolean"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "total_blank_lines": {
        +          "type": "number"
        +        },
        +        "total_code_lines": {
        +          "type": "number"
        +        },
        +        "total_comment_lines": {
        +          "type": "number"
        +        },
        +        "total_files": {
        +          "type": "number"
        +        },
        +        "total_lines": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "total_files",
        +        "total_lines",
        +        "total_code_lines",
        +        "total_blank_lines",
        +        "total_comment_lines"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "is_directory",
        +    "files",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedget_prop_drilling10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / extensions / description
        Previous value: -"Filter by extensions"New value: +"Only scan these extensions, e.g. [\".ts\", \".py\"] (default all supported)"
      • changedInput schema / properties / ignore_patterns / description
        Previous value: -"Exclude patterns"New value: +"Extra gitignore-style patterns to exclude, relative to path"
      • changedInput schema / properties / include_hidden / description
        Previous value: -"Include hidden"New value: +"Include dotfiles and dot-directories (default false)"
      • changedInput schema / properties / limit / description
        Previous value: -"Max results"New value: +"Max parameters returned (default 20)"
      • changedInput schema / properties / max_depth / description
        Previous value: -"Max depth"New value: +"Max directory depth to descend (default unlimited)"
      • changedInput schema / properties / max_files / description
        Previous value: -"Max files to scan"New value: +"Stop after scanning this many files (default unlimited)"
      • changedInput schema / properties / path / description
        Previous value: -"Target path"New value: +"File or directory to analyze; must be inside the allowed roots"
      • changedInput schema / properties / summary_only / description
        Previous value: -"Return only summary without per-parameter details (default false)"New value: +"Return summary totals without per-item details (default false)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "_meta": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "funding": {
        +          "type": "string"
        +        },
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "response_size_chars": {
        +          "type": "number"
        +        },
        +        "warning": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "item_count",
        +        "response_size_chars",
        +        "funding"
        +      ],
        +      "type": "object"
        +    },
        +    "is_directory": {
        +      "type": "boolean"
        +    },
        +    "path": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "files_analyzed": {
        +          "type": "number"
        +        },
        +        "highest_occurrence": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "count": {
        +                  "type": "number"
        +                },
        +                "name": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "name",
        +                "count"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "threaded_parameters_found": {
        +          "type": "number"
        +        },
        +        "total_parameters_scanned": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "files_analyzed",
        +        "total_parameters_scanned",
        +        "threaded_parameters_found",
        +        "highest_occurrence"
        +      ],
        +      "type": "object"
        +    },
        +    "threaded_parameters": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "files": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "forwarding_evidence": {
        +            "type": "number"
        +          },
        +          "functions": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "occurrences": {
        +            "type": "number"
        +          },
        +          "risk": {
        +            "enum": [
        +              "high",
        +              "medium",
        +              "low"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "occurrences",
        +          "files",
        +          "functions",
        +          "forwarding_evidence",
        +          "risk"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "is_directory",
        +    "threaded_parameters",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
  2. 9 tool updatesv1.3.0
    • Changedcheck_thresholds10 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_file_lines / maximum
        Previous value: -9007199254740991New value: +10000
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
      • changedInput schema / properties / max_function_lines / maximum
        Previous value: -9007199254740991New value: +10000
    • Addedfind_dead_code
    • Changedget_code_inventory8 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
    • Changedget_code_smells8 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
    • Changedget_complexity_metrics8 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
    • Changedget_documentation_coverage9 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
      • changedInput schema / properties / min_lines / maximum
        Previous value: -9007199254740991New value: +10000
    • Changedget_functions9 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
      • changedInput schema / properties / min_lines / maximum
        Previous value: -9007199254740991New value: +10000
    • Changedget_line_counts6 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
    • Changedget_prop_drilling9 fields changed
      • addedInput schema / properties / extensions / items / maxLength
        Added value: +32
      • addedInput schema / properties / extensions / items / pattern
        Added value: +"^\\.?[A-Za-z0-9_+-]+$"
      • addedInput schema / properties / extensions / maxItems
        Added value: +100
      • addedInput schema / properties / ignore_patterns / items / maxLength
        Added value: +512
      • addedInput schema / properties / ignore_patterns / maxItems
        Added value: +100
      • changedInput schema / properties / limit / maximum
        Previous value: -9007199254740991New value: +5000
      • changedInput schema / properties / max_depth / maximum
        Previous value: -9007199254740991New value: +64
      • changedInput schema / properties / max_files / maximum
        Previous value: -9007199254740991New value: +10000
      • changedInput schema / properties / min_occurrences / maximum
        Previous value: -9007199254740991New value: +1000
  3. 3 tool updatesv1.0.5
    • Changedget_code_inventory1 field changed
      • removedInput schema / properties / group_by
        Removed value: -{
        -  "description": "Grouping method",
        -  "enum": [
        -    "file",
        -    "type",
        -    "directory"
        -  ],
        -  "type": "string"
        -}
    • Changedget_complexity_metrics1 field changed
      • removedInput schema / properties / metrics
        Removed value: -{
        -  "description": "Metrics to calculate",
        -  "items": {
        -    "enum": [
        -      "nesting_depth",
        -      "parameters",
        -      "dependencies",
        -      "cognitive"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
    • Changedget_documentation_coverage2 fields changed
      • removedInput schema / properties / require_param_docs
        Removed value: -{
        -  "description": "Require param docs",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / require_return_docs
        Removed value: -{
        -  "description": "Require return docs",
        -  "type": "boolean"
        -}
  4. 8 tool updatesv1.0.4
    • First observedcheck_thresholds
    • First observedget_code_inventory
    • First observedget_code_smells
    • First observedget_complexity_metrics
    • First observedget_documentation_coverage
    • First observedget_functions
    • First observedget_line_counts
    • First observedget_prop_drilling

TDQS

B3.3/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target a distinct analysis concern, but get_functions and get_code_inventory both enumerate functions/methods, and check_thresholds overlaps with get_line_counts and get_complexity_metrics since it operates on the same size/complexity data. Descriptions provide enough nuance to pick correctly in most cases, but the boundaries are not perfectly crisp.

Naming Consistency4/5

Seven of nine tools follow a clean get_noun pattern, with only check_thresholds and find_dead_code deviating. The verb choice is semantically sensible (check for threshold comparison, find for searching), so the deviation is minor and readable rather than chaotic.

Tool Count5/5

Nine tools is well-scoped for a code-analysis server, with each tool covering a distinct metric or scan type. No tool feels redundant padding or trivially thin.

Completeness4/5

The surface covers a broad set of static-analysis concerns: inventory, size, complexity, documentation, smells, dead code, and prop drilling. Minor gaps remain (e.g. cross-file dependency/import-cycle analysis or a raw symbol-reference lookup), but core codebase auditing workflows are well supported.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers