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 (defaults: current working directory and system temp). Override with SCOPEWALKER_ALLOWED_ROOTS=/abs/path1,/abs/path2.

  • 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_thresholdsC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesTarget path
limitNoMax violations
max_depthNoMax depth
max_filesNoMax files to scan
extensionsNoFilter by extensions
include_hiddenNoInclude hidden
max_file_linesNoFile line threshold
ignore_patternsNoExclude patterns
max_function_linesNoFunction line threshold

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the tool's purpose and does not describe side effects, whether it modifies anything, performance implications, or what 'size thresholds' means by default. For a read-only scanning tool, this is a notable gap.

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

Conciseness4/5

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

The description is concise, using two short sentences with no redundancy. It front-loads the core function and includes a brief usage tip. This is efficient, though it sacrifices depth for brevity.

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

Completeness2/5

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

Despite having 9 parameters and no output schema, the description fails to explain return formats, default thresholds, recursion behavior, or how filters interact. An agent would likely need to experiment or inspect sibling tools to fully understand the output. The lack of behavioral details makes it incomplete for a complex scanning tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 9 parameters. The description adds value by hinting at the 'limit' parameter's role in controlling output, but it does not elaborate on other parameters like max_depth, extensions, or ignore_patterns. The baseline of 3 is appropriate given the schema's thoroughness.

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

Purpose4/5

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

The description states a specific verb ('finds') and resource ('files/functions') with a condition ('exceeding size thresholds'), making the core purpose clear. However, it does not differentiate from sibling tools like get_line_counts or get_code_smells, which might also involve size or threshold analysis. The clarity is adequate but not exemplary.

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 description offers minimal usage guidance: 'Use limit to control output.' It does not explain when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. An agent would need to infer the intended use case from the tool name and schema alone.

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

find_dead_codeC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesTarget path
limitNoMax results per list
max_depthNoMax depth
max_filesNoMax files to scan
extensionsNoFilter by extensions
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses a meaningful behavioral nuance—that dead_code is proven unreachable while unreferenced_exports may be used outside the scan—but it does not address other aspects like read-only nature, side effects, performance, or result format. The coverage is minimal.

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

Conciseness5/5

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

Two sentences with zero wasted words. The core purpose is front-loaded, and the second sentence clarifies the output categories. Highly efficient and well-structured.

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

Completeness2/5

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

With no output schema and no annotations, the description leaves important context missing: what the results look like (e.g., file paths, symbol names), how limit and depth interact, and whether the scan is read-only. The description is too sparse for a 7-parameter tool without an output 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%, meaning all 7 parameters are documented in the schema. The description adds no parameter-specific details beyond that. Baseline 3 is appropriate because the schema handles parameter semantics.

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

Purpose4/5

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

The description clearly states the tool's purpose: finding declared symbols that nothing references. It specifies the resource (declared symbols) and the action (finds unreferenced ones). It also adds nuance by distinguishing dead_code from unreferenced_exports, but it does not explicitly differentiate from sibling tools like get_code_smells or get_code_inventory, so it falls short of a 5.

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

Usage 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 the alternative code-analysis siblings. The description does not mention any exclusions, alternatives, or context that would help an agent decide between find_dead_code and other similar tools. This is a clear gap.

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

get_code_inventoryC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoFilter by keyword
pathYesTarget path
limitNoMax results
max_depthNoMax depth
max_filesNoMax files to scan
extensionsNoFilter by extensions
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns
include_privateNoInclude private symbols

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Lists' implies a read-only operation, but the description does not state whether the operation is safe, how it handles large codebases, or what the response structure is. It also does not disclose potential performance implications or the meaning of 'extensions' beyond a vague filter hint.

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

Conciseness4/5

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

The description is two short sentences, front-loading the primary action and then giving a filtering hint. It is concise with no filler. However, it could be slightly more structured to include usage context, but as-is it is efficient.

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

Completeness2/5

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

With 9 parameters, no output schema, and no annotations, the description is insufficiently complete. It does not explain what the output looks like, how results are ordered, or any default behaviors. It also does not provide guidance on when to use this vs. more specific tools like get_functions, leaving an agent to infer the tool's role. This is a significant gap for a complex inventory tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters already have descriptions. The tool description adds only a minor hint about using extensions to filter, which slightly reinforces the extension parameter but does not add substantive meaning beyond the schema. The baseline of 3 is appropriate because the schema handles parameter semantics fully.

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

Purpose4/5

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

The description states a specific verb 'lists' and identifies the resource as classes, functions, methods, and exports. It clearly indicates the tool produces an inventory of code symbols. However, it does not explicitly distinguish from siblings like get_functions, which might lead to ambiguity, but the broad scope is reasonably clear.

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 description only says 'Use extensions to filter,' which is a usage hint for filtering but not guidance on when to choose this tool over alternatives. It does not mention when not to use it or compare to siblings like get_functions or get_code_smells. No context about the appropriate scenario is provided.

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

get_code_smellsB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesTarget path
limitNoMax results
typesNoSmell types to detect
max_depthNoMax depth
max_filesNoMax files to scan
extensionsNoFilter by extensions
include_textNoInclude comment text
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns

TDQS

B3.2/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It only says the tool 'Finds...' and gives no details on traversal, default scope, whether hidden/ignored files are included, or what the result shape is. 'Finds' weakly implies a read-only scan, but that is not made explicit.

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

Conciseness5/5

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

A single compact sentence with no filler; the core artifact types are front-loaded before the location phrase. It earns its place even though more behavioral detail is missing.

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

Completeness2/5

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

For a 9-parameter scan tool with no output schema and no annotations, the description is too thin: it omits return format, default limit/depth behavior, and guidance on selecting between this and find_dead_code or get_complexity_metrics. The schema documents parameters but nothing about result semantics.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter. The description's mention of TODO/FIXME markers doubles the 'types' enum, adding marginal semantic color but no new syntax, defaults, or constraints.

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

Purpose5/5

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

The description names a specific verb+resource ('Finds ... markers and unsafe casts in code') and enumerates concrete artifact types (TODO/FIXME/HACK/BUG, unsafe casts). This clearly differentiates it from sibling analysis tools like get_line_counts, find_dead_code, and get_complexity_metrics.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no mention of alternatives among the sibling tools. An agent must infer that this is for code-quality inspection rather than, say, dead code or complexity analysis.

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

get_complexity_metricsC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesTarget path
limitNoMax results
max_depthNoMax depth
max_filesNoMax files to scan
extensionsNoFilter by extensions
summary_onlyNoSummary only
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states that metrics are returned and lists the types, but does not mention read-only nature, directory scanning behavior, potential performance implications, or error handling. The agent gets no sense of side effects or constraints beyond the return value, which is insufficient for a complex 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?

The description is a single, compact sentence that front-loads the primary purpose and lists the metric types. There is no filler or repetition. It could be improved with a short usage note, but as is, it is efficiently written and easy to parse.

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 8 parameters but the description does not explain the return structure, default limits, or how the metrics are aggregated (per-function vs overall). The metric list helps, but without an output schema or explicit behavioral notes, an agent may not know whether results are a list, map, or include counts. The description covers the essentials but leaves gaps for a complex tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds a minor hint about using limit and summary_only to control output, which is slightly redundant with the schema's own descriptions ('Max results', 'Summary only'). It does not provide deeper semantics like default values or interaction between parameters, so it stays at baseline.

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

Purpose4/5

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

The description clearly states the tool returns complexity metrics and enumerates specific metric types (nesting, params, cognitive, per-function cyclomatic), which provides a clear verb+resource. However, it does not explicitly differentiate from sibling tools like get_code_smells or check_thresholds, so it misses the sibling-distinguishing element for 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 description includes a parameter tip ('Use limit/summary_only to control output') but offers no guidance on when to use this tool versus alternatives. There is no statement of conditions for use, no exclusions, and no mention of other tools. This falls short of even clear context, let alone explicit alternatives.

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

get_documentation_coverageC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesTarget path
limitNoMax results
max_depthNoMax depth
max_filesNoMax files to scan
min_linesNoMin function lines
extensionsNoFilter by extensions
summary_onlyNoSummary only
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. 'Finds' implies a read-only scan, but the description does not explain what counts as undocumented, what the output looks like, whether hidden files are included by default, or any side effects. This is a significant gap for a scanning tool with nine parameters.

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

Conciseness5/5

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

The description is two short sentences with no filler. It front-loads the core purpose and then directs attention to the most relevant output-control parameters, making it efficient and easy to parse.

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

Completeness2/5

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

Given the tool's complexity nine parameters, no output schema, and no annotations, the description is too sparse. An agent would not know what the result format is, what the default behavior is, which parameters are optional in practice, or what criteria define 'undocumented'. The description does not compensate for the missing structured metadata.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters, meeting the baseline of 3. The description adds minimal added value by pointing to limit and summary_only as output controls, but it does not explain their semantics beyond what the schema already provides.

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

Purpose4/5

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

The description states a specific action ('Finds undocumented functions/classes') and identifies the tool's core purpose, which is clear and distinct from siblings like get_functions or find_dead_code. However, it does not explicitly differentiate itself from sibling tools by naming alternatives or contrasting scopes, so it falls just 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 description provides no guidance on when to use this tool versus alternatives like get_documentation_coverage, get_code_inventory, or find_dead_code. It only mentions limit/summary_only for controlling output, which is parameter-level advice, not usage context.

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

get_functionsA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoFilter by keyword
pathYesTarget path
limitNoMax results
detailNoDetail level
sort_byNoSort order
max_depthNoMax depth
max_filesNoMax files to scan
min_linesNoMin lines (lines mode)
extensionsNoFilter by extensions
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. It conveys that this is a read-style operation ('Returns') and reveals one mode of behavior (detail=lines). However, it does not disclose scanning behavior, defaults, or what counts vs. lines actually means beyond the brief hint.

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, no filler. The main purpose is front-loaded and the parameter tip is direct. Every word earns its place.

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

Completeness3/5

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

For an 11-parameter tool with no output schema and no annotations, the description is minimally adequate. The schema documents all parameters, and the description adds one useful detail-mode hint. However, it does not clarify the default behavior, what 'info' includes, or how it relates to sibling tools like get_line_counts.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that detail=lines yields 'line counts per function,' which is more meaningful than the schema's bare 'Detail level.' That semantic clarification justifies above-baseline scoring.

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

Purpose4/5

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

The description states a clear verb and resource: it 'Returns function/method info,' which is genuinely informative. It does not explicitly differentiate from siblings like get_line_counts or get_code_inventory, so it misses the top score, but the core purpose is unambiguous.

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

Usage Guidelines3/5

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

'Use detail=lines for line counts per function' gives a concrete usage instruction for a parameter, implying a use case. However, it does not say when to choose this tool over the closely related sibling get_line_counts, nor does it mention any exclusions or alternatives.

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

get_line_countsB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoFilter by keyword
pathYesTarget path
limitNoMax results
sort_byNoSort order
extensionsNoFilter by extensions
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only states the return type (line counts) and a filtering hint. It does not disclose whether the operation is read-only, whether it scans recursively, how hidden files are handled by default, or any performance implications. For a tool with 7 parameters, this is a significant gap.

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

Conciseness4/5

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

The description is two short sentences with no wasted words. The core purpose is front-loaded. It is concise, though it could add a bit more behavioral context without becoming bloated.

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

Completeness2/5

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

Given 7 parameters, no annotations, and no output schema, the description is too thin. It does not explain return value structure, default behaviors (e.g., whether hidden files are included by default), or how filters interact. An agent would need to inspect the schema carefully and still might not know when to choose this over sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal value beyond the schema, only mentioning extensions as a filter. Baseline 3 is appropriate because the schema does the heavy lifting, but the description does not clarify relationships between parameters (e.g., grep vs ignore_patterns) or default behavior.

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

Purpose4/5

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

The description states a specific verb and resource: 'Returns file line counts (code/blank/comment).' This clearly identifies what the tool does. It does not explicitly differentiate from siblings, but the resource (line counts) is distinct enough among the listed siblings.

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

Usage Guidelines3/5

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

The description gives a brief usage hint: 'Use extensions to filter.' This implies the tool is for counting lines and can be filtered, but it does not explicitly state when to use this tool versus alternatives like get_code_inventory or get_complexity_metrics. No exclusions or alternative routing is provided.

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

get_prop_drillingB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesTarget path
limitNoMax results
max_depthNoMax depth
max_filesNoMax files to scan
extensionsNoFilter by extensions
summary_onlyNoReturn only summary without per-parameter details (default false)
exclude_commonNoExclude common parameter names like id, key, className (default false)
include_hiddenNoInclude hidden
ignore_patternsNoExclude patterns
min_occurrencesNoMinimum function occurrences to flag (default 3)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining behavior. It discloses the core heuristic approach ('finding parameter names passed through chains of functions'), which is useful. However, it does not explain return format, whether results are summary + per-parameter details, false-positive risks, or what 'prop drilling' detection entails in practice.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence states purpose and mechanism; the second quickly points to the key output controls. Every sentence earns its place and the core information is front-loaded.

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

Completeness2/5

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

The tool has 10 parameters and no output schema, and there are no annotations to fill gaps. The description does not explain what the output looks like, how chains are defined, what summary-only mode returns, or which fields like max_depth, max_files, and include_hidden affect results 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 the schema already documents all 10 parameters. The description adds only a minor hint by naming limit and summary_only as output controls, but this does not meaningfully improve on the existing parameter descriptions.

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

Purpose5/5

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

The description uses a specific verb ('Detects') and a clear resource ('parameter threading (prop drilling)'), and it explains the mechanism ('finding parameter names passed through chains of functions'). This distinguishes it from sibling tools like get_line_counts or get_functions, even without naming an alternative.

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

Usage Guidelines2/5

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

The description says 'Use limit/summary_only to control output' but gives no guidance on when to use this tool versus alternatives such as get_code_smells or find_dead_code. There is no statement of when-not-to-use, and no explicit differentiation from sibling analysis tools.

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

Tool Schema Changelog

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

  1. 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
  2. 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"
        -}
  3. 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.4/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target a distinct static-analysis concern (line counts, complexity, smells, dead code), and the descriptions clarify their purpose with filters and detail options. There is slight overlap between get_functions and get_code_inventory, and between line-count reporting and threshold checking, but an agent can usually disambiguate with context.

Naming Consistency4/5

Tool names consistently use lowercase snake_case and mostly follow a get_<noun> pattern such as get_line_counts and get_complexity_metrics. The deviations check_thresholds and find_dead_code still use clear verb_noun naming, so the overall pattern remains predictable.

Tool Count5/5

Nine tools is a well-scoped size for a code-analysis MCP server. Each tool covers a distinct inspection area without unnecessary redundancy or bloat.

Completeness4/5

The tool set covers the major static-analysis workflows: size, structure, functions, complexity, code smells, documentation coverage, prop drilling, and dead code. A minor possible gap is dependency or import-level analysis, but the surface appears largely complete for its stated scope.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers