Skip to main content
Glama

πŸ—ΊοΈ ast-impact-mapper-mcp ✨

npm version npm downloads CI License: MIT

"Stop boiling the ocean. Run only the tests that actually care about your changes." 🐸

ast-impact-mapper-mcp is an advanced Model Context Protocol (MCP) server that analyzes your TypeScript/JavaScript codebase using AST parsing (ts-morph) and dependency graph tracing. It helps AI agents (like Claude or Cursor) target only the relevant tests, find dead code, identify circular import dependencies, and trace API mutations.


🧐 Why import graphs?

Guessing affected tests based on matching filenames (e.g. auth.ts -> auth.test.ts) is highly inaccurate. Running the entire test suite on every minor change is extremely slow.

Import graphs do not lie. If a test file transitively imports a modified source file, it must be run. ast-impact-mapper-mcp builds a bidirectional file dependency graph and answers "which tests should I run?" in milliseconds.


Related MCP server: lsp-intelligence

πŸ’‘ Quick Showcase (Real-World e2e Flow)

Imagine your AI agent modifies a shared helper: src/utils/auth.ts. Instead of blindly running all tests or guessing by name, the agent uses this MCP server:

1. Identify Affected Tests

The agent calls get_affected_tests with the changed file:

// Tool Call: get_affected_tests({ changed_files: ["src/utils/auth.ts"] })
{
  "changed_files": ["/project/src/utils/auth.ts"],
  "affected_tests": ["/project/tests/checkout.spec.ts"],
  "total_affected": 1
}

2. Explain the Connection

To understand why checkout.spec.ts depends on auth.ts, the agent calls explain_impact:

// Tool Call: explain_impact({ changed_file: "src/utils/auth.ts", test_file: "tests/checkout.spec.ts" })
{
  "found": true,
  "import_chain": [
    "/project/tests/checkout.spec.ts",
    "/project/src/fixtures/user-fixture.ts",
    "/project/src/utils/auth.ts"
  ]
}

Aha! The checkout spec imports the user-fixture, which imports auth!

3. Check for Runtime Impact

If the change in auth.ts was only adding a TypeScript interface (type-only change), calling differentiate_type_impact tells the agent:

{
  "files": [{ "file": "/project/src/utils/auth.ts", "runtime_impact": false }],
  "total_tests_must_run": 0,
  "total_tests_skippable": 1
}

Success! Since it is a type-only change, the agent can skip running tests entirely, saving precious CPU cycles and time.

4. Run Minimal Tests

If it does contain runtime changes, the agent requests the execution command:

// Tool Call: generate_test_command({ changed_files: ["src/utils/auth.ts"], runner: "vitest" })
{
  "command": "npx vitest run tests/checkout.spec.ts"
}

πŸ› οΈ MCP Tools Reference

All tools are configured with consistent, type-safe schemas (arguments in snake_case).

1. Impact Mapping & Tracing

  • get_affected_tests

    Finds all test files transitively importing changed source files.

    • Arguments:

      • project_root (string, required): Absolute path to the TypeScript project.

      • changed_files (string[], optional): Modified file paths.

      • git_diff (string, optional): Raw stdout of git diff --name-only.

    • Returns: Detailed map of changed files, affected tests, and totals.

  • get_affected_tests_by_branch

    Automatically diffs the current state against a base branch using git to find affected tests.

    • Arguments:

      • project_root (string, required)

      • base_branch (string, default: "main"): Branch to compare against.

  • get_rename_aware_diff

    Highly robust branch impact analysis that tracks file moves/renames (via git diff -M) and ignores formatting/whitespace changes.

    • Arguments:

      • project_root (string, required)

      • base_branch (string, default: "main")

      • similarity_threshold (number, default: 90): % similarity threshold to declare a move.

  • explain_impact

    Traces and explains the exact chain of imports showing why a changed source file affects a specific test.

    • Arguments:

      • project_root (string, required)

      • changed_file (string, required)

      • test_file (string, required)

  • generate_test_command

    Constructs CLI commands for test runners (vitest, jest, or playwright) matching the affected tests subset.

    • Arguments:

      • project_root (string, required)

      • changed_files (string[], required)

      • runner (enum: jest, vitest, playwright, default: vitest)


2. TypeScript-specific Deep Code Analysis

  • differentiate_type_impact

    Inspects imports and types to isolate type-only changes (interfaces, types, or import type exports). Helps skip test execution entirely if the changes do not impact the runtime bundle!

    • Arguments:

      • project_root (string, required)

      • changed_files (string[], required)

  • analyze_api_surface_mutation

    Compares a file against its HEAD version and determines if it modifies the public API (breaking_api_change) or only contains internal implementation edits (internal_refactor).

    • Arguments:

      • project_root (string, required)

      • file_path (string, required)

  • generate_skeleton_view

    Generates a token-optimized skeleton of a file by stripping out function and method bodies, keeping only signatures, JSDocs, and line numbers.

    • Arguments:

      • project_root (string, required)

      • file_path (string, required)

      • include_jsdoc (boolean, default: true)

      • include_private_members (boolean, default: false)

  • get_symbol_dependency_graph

    Traces declaration-level dependencies (functions, classes, variables) across files, finding internal declarations usage.

    • Arguments:

      • project_root (string, required)

      • file_path (string, required)

      • symbol_name (string, optional): Specific export symbol to map.

      • direction (enum: forward, reverse, bidirectional, default: bidirectional)


3. Codebase Health & Graph Insights

  • identify_unreachable_modules

    Finds orphaned source files that have zero incoming imports (dead code safe to prune). Automatically respects standard entry points.

    • Arguments:

      • project_root (string, required)

      • entry_points (string[], optional): Explicit entry-points to exclude from warning.

      • limit (number, default: 50)

  • detect_architectural_cycles

    Locates circular dependency loops (e.g. A β†’ B β†’ C β†’ A) which cause unpredictable module initialization orders.

    • Arguments:

      • project_root (string, required)

  • get_dependency_graph

    Returns direct imports/importers of a file in JSON format or as a visual Mermaid TD flowchart.

    • Arguments:

      • project_root (string, required)

      • file_path (string, required)

      • format (enum: json, mermaid, default: json)

  • get_coverage_gaps

    Identifies files with zero import coverage β€” those that are never imported by any test file.

    • Arguments:

      • project_root (string, required)

      • source_dirs (string[], optional)

      • limit (number, default: 50)

  • get_test_summary

    Provides a high-level view of test coverage rate, deepest import chains, and high-risk most-imported modules.

    • Arguments:

      • project_root (string, required)

  • refresh_project

    Invalidates AST and dependency graphs cache. Run this after checking out branches or pulling remote git updates.

    • Arguments:

      • project_root (string, required)


πŸš€ Installation & Setup

1. Global Installation

npm install -g ast-impact-mapper-mcp

2. Configure Editor / Agent Client

VS Code / Cursor

Add the following to your .cursor/mcp.json or .vscode/mcp.json:

{
  "mcpServers": {
    "ast-impact-mapper": {
      "command": "npx",
      "args": ["-y", "ast-impact-mapper-mcp"]
    }
  }
}

Claude Code CLI

claude mcp add ast-impact-mapper npx -- -y ast-impact-mapper-mcp

πŸ’¬ Example Scenario

Imagine you modify a shared page component: src/pages/login-page.ts.

  1. AI Agent runs get_rename_aware_diff: It detects that only tests/auth.spec.ts imports the page object transitively.

  2. AI Agent runs differentiate_type_impact: It sees you only added a type definition interface, classifying it as type_only_change -> it skips running the test execution completely, saving developer cycles!

  3. AI Agent runs explain_impact: If asked why tests/auth.spec.ts depends on it, it renders the path: tests/auth.spec.ts β†’ src/fixtures/app.ts β†’ src/pages/login-page.ts.


πŸ”— The Ecosystem

  • ast-impact-mapper-mcp answers: "Which tests are affected by my changes?" πŸ—ΊοΈ

  • flakiness-graph-mcp answers: "Of those affected tests, which ones are historically unstable?" πŸ“Š

  • Together, they form a perfect feedback loop for running a prioritized, resilient, and minimal test suite.


πŸ› οΈ CLI Development

npm run build        # Compile TypeScript to dist/
npm run lint         # Run ESLint validation
npm run format       # Format files via Prettier
npm test             # Run unit tests via Vitest

πŸ“„ License

MIT © vola-trebla 🐸

Available Tools

15 tools
analyze_api_surface_mutationA

Compares a file against its HEAD version and classifies the change as breaking_api_change (exported function signature changed, parameter removed/added, interface field removed) or internal_refactor (only implementation body changed). Use to answer: is this PR a breaking change or a safe refactor?

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath to the changed file (absolute or relative to project_root)
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explains the classification logic and what triggers each category, which is helpful. However, it does not explicitly state that the tool is read-only or specify prerequisites like a git repository or tsconfig.json, despite the schema mentioning these.

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 sentences, front-loaded with the primary function and immediately followed by the intended use case. No filler words; every clause contributes value.

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

Completeness4/5

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

With no output schema, the description adequately communicates the possible return values by naming the two classification categories and their meanings. It also covers the main use case. It could be improved by mentioning error cases (e.g., file not under git), but for a simple analysis tool this is fairly 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 coverage is 100% (both file_path and project_root have descriptions), so the baseline is 3. The tool description adds no additional meaning beyond the schema; it merely references 'file' and 'HEAD version' without clarifying parameter usage.

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

Purpose5/5

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

The description clearly states the tool's function: comparing a file against its HEAD version and classifying the change into two specific categories. It lists concrete examples of what constitutes each category, making the tool's purpose unmistakable and distinguishing it from siblings like 'differentiate_type_impact'.

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

Usage Guidelines4/5

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

The description provides a clear usage context: 'Use to answer: is this PR a breaking change or a safe refactor?' This tells the agent when to invoke the tool. However, it does not explicitly mention alternatives or exclusions, which would push it to a 5.

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

detect_architectural_cyclesA

Detects circular import dependencies β€” A imports B which imports C which imports A. Cycles cause unpredictable module initialization order and indicate tight coupling. Use to answer: are there circular dependencies I need to break before refactoring?

ParametersJSON Schema
NameRequiredDescriptionDefault
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must carry behavior. It explains why cycles matter (unpredictable initialization, tight coupling) but does not disclose output format, side effects, or limitations. The tool is likely read-only, but this is not explicitly stated.

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 sentences: one defining the tool's behavior and one giving a use-case question. It is concise, front-loaded, and contains no filler.

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 is simple and the schema is clear, but no output schema exists and the description does not explain what the return value looks like. This leaves an information gap for the agent, though the purpose and prerequisites are covered.

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

Parameters3/5

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

The input schema already fully describes the single parameter (project_root) with a clear description. The tool description adds no new parameter semantics, so the baseline of 3 is appropriate given 100% schema coverage.

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

Purpose5/5

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

The description clearly states the tool detects circular import dependencies, with a concrete example (A imports B which imports C which imports A). It distinguishes this from sibling tools like get_dependency_graph by focusing on cycles, not the graph itself.

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

Usage Guidelines4/5

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

The description explicitly says when to use it: 'Use to answer: are there circular dependencies I need to break before refactoring?' It provides context but does not name alternatives or exclusion criteria, so it stops short of a 5.

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

differentiate_type_impactA

Classifies each changed file as type-only or runtime, then splits affected tests into "must run" vs "skippable". A test is skippable when the changed file contains only TypeScript type declarations (interfaces/type aliases) or the test imports it via import type. Use to answer: which tests can I skip after a type-only refactor?

ParametersJSON Schema
NameRequiredDescriptionDefault
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)
changed_filesYesChanged file paths (absolute or relative to project_root)

TDQS

A4.2/5.0
Behavior4/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 does so effectively by explaining the classification criteria: a test is skippable when the changed file contains only TypeScript type declarations or is imported via `import type`. It does not detail side effects or limitations, but for an analytical tool, this is substantial transparency.

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 exactly three sentences: the first states the core action, the second explains the skippability criteria, and the third gives a usage example. Every sentence earns its place, with no redundant or filler content. It is front-loaded with the primary purpose.

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

Completeness4/5

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

Given the tool has only 2 parameters and no output schema, the description covers the essential aspects: what it does, how it decides, and when to use it. It does not explicitly describe the format of the returned test split, but that is implied. It is complete enough for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The input schema already provides full descriptions for both parameters (100% coverage), so the baseline is 3. The description adds context on how changed_files are processed but does not add new parameter-specific semantics (e.g., format constraints or examples). It does not degrade the understanding, but it does not elevate it beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb+resource pair: 'Classifies each changed file as type-only or runtime, then splits affected tests.' This clearly states what the tool does and distinguishes it from sibling tools like get_affected_tests by focusing on type-only vs runtime impact. The scope is unambiguous and actionable.

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

Usage Guidelines4/5

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

The description provides an explicit usage prompt: 'Use to answer: which tests can I skip after a type-only refactor?' This gives clear context for when to invoke the tool. However, it does not explicitly name alternatives or say when not to use it (e.g., for runtime changes), so it stops short of a full 5.

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

explain_impactA

Finds the exact import chain that connects a changed source file to a test file. Use to answer: why does changing file X cause test Y to be affected? Returns the step-by-step import path from the test to the changed file.

ParametersJSON Schema
NameRequiredDescriptionDefault
test_fileYesThe test file to explain the connection for
changed_fileYesThe source file that was changed (absolute or relative to project_root)
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A3.7/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 implies a read-only analysis but does not explicitly state that it does not modify the project, nor does it disclose any limitations, prerequisites (like needing a fresh index), or error behavior. The description focuses on purpose and output rather than behavioral traits.

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 sentences, front-loaded with the core function, and adds a concrete use case and output expectation. Every word earns its place with no redundancy.

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 3 parameters, no output schema, and no annotations. The description explains the output ('step-by-step import path') but does not address edge cases (e.g., no import chain exists) or prerequisites (e.g., project must be indexed via refresh_project). While sufficient for a simple tool, it leaves gaps in operational context.

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 each parameter (test_file, changed_file, project_root) already well-documented. The description adds minimal semantic value, only linking changed_file to 'X' and test_file to 'Y' in the example question. This slightly enriches context but does not go beyond the schema's baseline.

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

Purpose5/5

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

The description clearly states the tool's function: 'Finds the exact import chain that connects a changed source file to a test file.' It uses a specific verb and resource, and the example question 'why does changing file X cause test Y to be affected?' distinguishes it from sibling tools that list affected tests or show dependency graphs.

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

Usage Guidelines4/5

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

The description provides clear context by explicitly saying 'Use to answer: why does changing file X cause test Y to be affected?' This indicates when to use the tool. However, it does not mention alternatives or exclusions, so it falls short of an explicit when-not-to-use guidance.

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

generate_skeleton_viewA

Generates a token-optimized representation of a source file by stripping function and method bodies, keeping only JSDocs and declarations with line numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the target source file
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)
include_jsdocNoWhether to preserve JSDoc annotations
include_private_membersNoWhether to list private/internal symbols

TDQS

A4/5.0
Behavior4/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 explicitly reveals the core transformation (removing function/method bodies, preserving JSDoc and declarations with line numbers), which is the essential behavioral trait. It does not mention side effects or return details, but the described behavior is clear and sufficient for basic understanding.

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, well-structured sentence that front-loads the purpose ('Generates a token-optimized representation') and efficiently conveys the mechanism. There is zero redundant or filler content, making it highly concise.

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

Completeness4/5

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

The tool is straightforward, and the description covers its transformation logic and output basis (declarations with line numbers). It does not specify the return format or side effects, but given the strong schema coverage and simple nature, the description is generally complete for an agent to select and invoke the 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?

The schema covers 100% of parameters with meaningful descriptions (file_path, project_root, include_jsdoc, include_private_members). The tool description itself adds no parameter-specific semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's action ('Generates a token-optimized representation'), the target resource ('a source file'), and the transformation method ('stripping function and method bodies, keeping only JSDocs and declarations with line numbers'). This is specific and distinguishes it from sibling tools, which focus on analysis or diffing rather than compact source representation.

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 implies its usage for generating a leaner view of source files for context-constrained tasks, but it does not explicitly state when to prefer this tool over alternatives or when not to use it. No exclusions or references to sibling tools are provided, so the guidance is only implied.

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

generate_test_commandA

Outputs the optimal test execution command for Jest, Vitest, or Playwright based on changed files.

ParametersJSON Schema
NameRequiredDescriptionDefault
runnerNoTest runner to targetvitest
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)
changed_filesYesList of modified source file paths

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full transparency burden. It discloses that the tool outputs a command rather than executing it, which is useful. However, it does not explain behavior around edge cases (e.g., no changed files, unsupported runner), return format, or any side effects. The description is minimally transparent.

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 that wastes no words. It immediately states what the tool does and the key conditions (test runners, changed files). This is an example of effective conciseness.

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?

Given the tool's moderate complexity, the description is functional but incomplete. It does not specify the output format (e.g., raw string versus JSON) and there is no output schema. It also lacks integration context with sibling tools. The schema covers parameter descriptions, but behavioral and output expectations are underexplained.

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

Parameters3/5

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

The input schema already provides descriptions for all three parameters (100% coverage). The tool description adds no extra semantic meaning beyond rephrasing the purpose, so it does not exceed the baseline score of 3.

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

Purpose5/5

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

The description clearly states the tool's purpose: it outputs the optimal test execution command for Jest, Vitest, or Playwright based on changed files. It names specific test runners and the input basis, distinguishing it from sibling tools that analyze test impact rather than generate commands.

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 implies usage: you provide changed files and get a command. However, it does not explicitly state when to use this tool versus alternatives like get_affected_tests, nor does it mention any prerequisites or exclusions. This is adequate but lacks clear guidance on tool selection.

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

get_affected_testsA

Given a list of changed source files, returns which test files are affected β€” directly or transitively through the import graph. Use to answer: which tests should I run after this code change?

ParametersJSON Schema
NameRequiredDescriptionDefault
git_diffNoRaw output of `git diff --name-only` β€” newline-separated file paths. Use instead of changed_files when piping git output directly.
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)
changed_filesNoList of changed file paths (absolute or relative to project_root)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavior. It reveals the transitive dependency traversal through the import graph, which is a meaningful behavioral trait beyond simple reading. It lacks details on output format or error handling, but for a read-only analysis tool this is sufficient.

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, front-loaded with the core purpose, followed by a practical usage question. No wasted words.

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

Completeness4/5

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

The description covers the purpose, usage, and computation method. It does not specify the return format (e.g., array of paths), but no output schema is present and the tool is relatively simple. The absence of edge-case documentation (e.g., empty input) is a minor gap.

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

Parameters3/5

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

All three parameters have descriptions in the schema (100% coverage). The description conceptually maps to 'changed source files' but adds no additional syntax or format beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('returns'), a resource ('test files'), and the mechanism (directly or transitively through the import graph). It clearly distinguishes from siblings like get_affected_tests_by_branch by specifying input as a list of changed source files.

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

Usage Guidelines4/5

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

The description explicitly frames the use case with 'Use to answer: which tests should I run after this code change?' and defines the required input condition. It does not mention alternatives or exclusions, but provides clear contextual guidance.

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

get_affected_tests_by_branchA

Runs git diff --name-only <base_branch>...HEAD internally and returns affected test files. Use instead of get_affected_tests when you want the server to handle the git diff automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_branchNoBranch to diff against (default: main)main
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden of behavioral disclosure. It reveals the internal git diff mechanism and that it returns affected test files, providing meaningful context beyond the name. However, it doesn't disclose potential errors, performance characteristics, or side effects, though as a read-only operation this is reasonably transparent.

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 sentences, with the first stating the core operation and the second providing usage guidance. Every word earns its place, and it is immediately clear and front-loaded.

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

Completeness4/5

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

The tool is simple with two parameters and no output schema. The description explains the internal command, the return type ('affected test files'), and when to use it versus the sibling. It could mention the output format (e.g., list of paths) or error handling, but for a read-only diff tool, it is sufficiently 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 coverage is 100% with both base_branch and project_root described in the schema. The description adds no further parameter-specific semantics, only referencing the diff operation. Baseline 3 is appropriate because the schema already documents the parameters adequately.

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

Purpose5/5

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

The description clearly states the tool runs `git diff --name-only <base_branch>...HEAD` and returns affected test files, using a specific verb and resource. It also explicitly distinguishes itself from the sibling tool get_affected_tests, making the purpose unmistakable.

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

Usage Guidelines5/5

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

The description explicitly says 'Use instead of get_affected_tests when you want the server to handle the git diff automatically,' providing a direct alternative and condition for use. This offers clear guidance on when to select this tool over its sibling.

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

get_coverage_gapsA

Finds source files that are not reachable from any test file through the import graph β€” i.e. completely untested code. Use to answer: which parts of the codebase have zero test coverage?

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax uncovered files to return
source_dirsNoRestrict results to these directories (absolute or relative to project_root). Defaults to the entire project.
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4.2/5.0
Behavior4/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 reveals the underlying methodology (import-graph reachability from test files), which is a meaningful behavioral trait beyond the tool name. It implies a read-only analysis, though it doesn't discuss edge cases like dynamic imports, but that's acceptable for this simple tool.

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

Conciseness5/5

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

The description is exactly two sentences, with the core behavior in the first sentence and a usage prompt in the second. There is no wasted wording, and the information is front-loaded.

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

Completeness4/5

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

Given the tool's moderate complexity, the description sufficiently explains what it does and when to use it. All parameters are documented in the schema, so the only missing piece is the return format (e.g., whether it returns file paths, a count, or a structure), since there is no output schema. This is a minor gap and doesn't block correct invocation.

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

Parameters3/5

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

The input schema already provides 100% description coverage for all three parameters (project_root, limit, source_dirs). The tool description adds no additional parameter-level semantics, so the baseline of 3 is appropriate because the schema does the heavy lifting.

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 ('Finds') and resource ('source files not reachable from any test file through the import graph'), clearly defining its scope as completely untested code. This distinguishes it from sibling tools like get_dependency_graph or identify_unreachable_modules, which target different concepts of unreachability.

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

Usage Guidelines4/5

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

The description explicitly gives a use-case question ('which parts of the codebase have zero test coverage?'), telling the agent when to invoke it. It does not explicitly list exclusions or name alternative tools, but the context is clear enough for selection.

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

get_dependency_graphA

Returns the direct import graph for a specific file: what it imports, and what imports it. Use to answer: what depends on this file? What does this file depend on?

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format β€” json (default) or mermaid flowchart diagramjson
file_pathYesPath to the file (absolute or relative to project_root)
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It adds useful context by scoping to 'direct' imports (not transitive), but it does not mention error behavior, performance characteristics, or whether any state changes occur (though 'Returns' implies read-only). This is a minimal but not rich disclosure.

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 sentences, front-loads the core action, and immediately provides practical use cases. Every word earns its place, with no fluff or redundancy.

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

Completeness4/5

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

For a 3-parameter read tool with full schema coverage and no output schema, the description provides enough context: it states what the tool returns and the key questions it answers. It does not describe the exact JSON/mermaid structure, but the two-direction graph return is sufficiently outlined. It could mention edge cases, but overall completeness is good.

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 three parameters already have descriptions. The tool description adds no extra parameter-level meaning beyond the schema; it only refers to 'a specific file' which is already captured in file_path. Thus the baseline of 3 applies.

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

Purpose5/5

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

The description names a specific verb ('Returns') and a specific resource ('direct import graph for a specific file'), and clarifies the two directions of the graph ('what it imports, and what imports it'). It clearly distinguishes this from sibling get_symbol_dependency_graph by emphasizing 'import graph' and 'direct'.

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

Usage Guidelines4/5

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

The description provides explicit use cases ('what depends on this file? What does this file depend on?'), giving the agent clear context for when to invoke this tool. However, it does not mention any alternatives or exclusions, such as when to prefer get_symbol_dependency_graph, so it lacks explicit when-not-to-use guidance.

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

get_rename_aware_diffA

Like get_affected_tests_by_branch, but correctly handles renamed and moved files. Uses --find-renames to detect file moves and --ignore-all-space to skip whitespace-only changes. Use instead of get_affected_tests_by_branch when the branch contains refactors or file moves.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_branchNoBranch to diff against (default: main)main
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)
similarity_thresholdNoMinimum similarity % to consider a file move a rename (default: 90)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the use of --find-renames and --ignore-all-space, which explains behavior beyond the name. However, it does not mention whether the operation is read-only or any side effects, which would be useful given the lack of annotations.

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

Conciseness5/5

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

The description is three sentences: a comparison, a technical detail sentence, and a usage directive. Every sentence adds value, and the most important information is front-loaded. No fluff or redundancy.

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

Completeness4/5

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

The tool has no output schema and no annotations, so the description should ideally clarify what the tool returns. It implies the return matches get_affected_tests_by_branch ('Like...'), which supports inference, but does not explicitly state the output. The core functionality and usage context are well covered, making this only a minor gap.

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

Parameters3/5

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

The schema already has 100% coverage for all parameters, so the baseline is 3. The description adds no extra parameter-specific meaning beyond what the schema provides; the similarity_threshold is already well-documented in the schema.

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

Purpose5/5

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

The description clearly states the tool computes affected tests while handling renamed and moved files, distinguishing it from the sibling get_affected_tests_by_branch. It names the exact comparison and the specific behavior that sets it apart (rename/move handling).

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

Usage Guidelines5/5

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

Explicitly says 'Use instead of get_affected_tests_by_branch when the branch contains refactors or file moves,' providing clear when-to-use guidance and naming the alternative tool. This directly answers the selection problem.

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

get_symbol_dependency_graphA

Retrieves a bidirectional or directed dependency graph mapped to individual declarations, functions, and variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionNoGraph traversal directionbidirectional
file_pathYesAbsolute path to the TypeScript source file
symbol_nameNoTarget export symbol. If omitted, maps all symbols in the file
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A3.7/5.0
Behavior3/5

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

Annotations are absent, so the description carries the burden. It adds useful behavioral context by mentioning 'bidirectional or directed' and 'mapped to individual declarations, functions, and variables,' but it does not disclose return format, edge-case behavior, or whether the operation is read-only.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant words. It efficiently conveys the action, resource, and scope.

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 lacks an output schema and annotations, so the description must compensate. It covers the core purpose and direction parameter, but does not specify the return structure, how to interpret the graph, or potential limitations. For a simple retrieval tool, this is adequate but with clear gaps.

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?

With 100% schema coverage, the baseline is 3. The description adds value by specifying the graph's granularity ('individual declarations, functions, and variables'), which complements the symbol_name parameter's semantics. However, it does not add new meaning beyond the schema for other parameters.

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 'Retrieves' and resource 'dependency graph' with a clear scope modifier 'mapped to individual declarations, functions, and variables.' This clearly distinguishes it from the sibling tool get_dependency_graph, which likely operates at a different granularity.

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 guidance is provided on when to use this tool versus get_dependency_graph or other sibling tools. There is no mention of appropriate contexts, prerequisites, or exclusions.

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

get_test_summaryA

Returns a bird's-eye view of the project's test structure: coverage rate, most-imported source files (highest risk to change), and tests with the deepest import chains. Use to answer: what is the overall test health of this project?

ParametersJSON Schema
NameRequiredDescriptionDefault
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly implies a read-only operation ('Returns') and outlines the scope of the output, but it does not mention potential performance implications, whether tests are executed, or any side effects on the project. It provides adequate but not rich behavioral context.

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

Conciseness5/5

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

The description is two sentences long, with the first sentence stating what the tool returns and the second providing a direct use case. It is front-loaded with the most important information and contains no redundant or fluff wording.

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

Completeness4/5

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

For a tool with one well-specified parameter, no output schema, and no annotations, the description is reasonably complete. It conveys the purpose, key output items, and a representative question it answers. It could be improved by noting the output format or any limitations, but given the simplicity of the tool, it is adequate.

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

Parameters3/5

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

Schema description coverage is 100% as the single parameter project_root has a clear description ('Absolute path to the TypeScript project root (must contain tsconfig.json)'). The description adds no additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description explicitly states 'Returns a bird's-eye view of the project's test structure' and then specifies the exact outputs (coverage rate, most-imported source files, tests with deepest import chains). The use case is clearly framed by 'Use to answer: what is the overall test health of this project?', which differentiates it from the more granular sibling tools like get_affected_tests or get_coverage_gaps.

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

Usage Guidelines4/5

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

Provides a clear context for when to use it ('Use to answer: what is the overall test health of this project?'), but does not explicitly state when not to use it or name alternative tools. Since the sibling tools are more specialized, some implicit differentiation exists, but the absence of explicit exclusions keeps it from a 5.

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

identify_unreachable_modulesA

Finds source files that are never imported by any other file β€” dead code candidates safe to delete. Automatically excludes known entry points (index.ts, main.ts, pages/, routes/, app/, api/, bin/). Use to answer: which files in this codebase are orphaned and can be safely removed?

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax unreachable files to return (default: 50)
entry_pointsNoAdditional entry point files to exclude (absolute or relative to project_root). Common patterns like index.ts and pages/ are auto-excluded.
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the responsibility. It discloses a key behavioral trait: automatically excludes known entry points (index.ts, main.ts, pages/, etc.), affecting results. It also qualifies findings as 'candidates' rather than guarantees, adding nuance.

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 concise sentences: the first states the purpose and key behavior, the second gives a direct usage question. Every word earns its place, with no filler or redundancy.

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

Completeness4/5

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

For a read-only analysis tool with three parameters and no output schema, the description covers the core context: purpose, auto-exclusion behavior, and an example query. It does not explicitly describe the return format, but that is not critical given the straightforward list-like output implied.

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 mentions entry point exclusions but does not add detail beyond what the schema already provides for parameters like limit, entry_points, and project_root.

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

Purpose5/5

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

The description clearly states the tool 'Finds source files that are never imported by any other file' with a specific verb (Finds) and resource (unreachable modules), distinguishing it from sibling tools like get_dependency_graph. It also frames the purpose as identifying 'dead code candidates safe to delete'.

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

Usage Guidelines4/5

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

The description provides clear usage context with 'Use to answer: which files in this codebase are orphaned and can be safely removed?' It does not explicitly mention when not to use or alternatives, but the intended use case is well-defined.

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

refresh_projectA

Clears the cached AST for a project root, forcing a full re-parse on the next call. Use after switching branches, running git pull, or adding/removing files.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_rootYesAbsolute path to the TypeScript project root (must contain tsconfig.json)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the primary side effect (clearing the cached AST) and the consequence (full re-parse on next call). However, it does not mention whether this operation is reversible, requires special permissions, or returns any confirmation/error. It also leaves unclear whether the cache is in-memory or on disk. Adequate but with gaps.

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, front-loaded with the main action and then the usage context. Every word earns its place. No redundancy or filler.

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

Completeness4/5

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

The tool is simple (one parameter, no output schema). The description covers the purpose and when to use it. It doesn't describe return values, but for a cache-clear operation it's reasonable to expect no meaningful return. Could be more complete with error conditions or behavior on invalid project roots, but the schema already constrains the parameter. Overall quite complete for a straightforward refresh 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 coverage is 100% for the single parameter, and the schema already describes project_root as 'Absolute path to the TypeScript project root (must contain tsconfig.json)'. The description adds no new parameter-specific meaning beyond what the schema provides. Baseline of 3 is appropriate given the high schema coverage.

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

Purpose5/5

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

The description clearly states the action: 'Clears the cached AST for a project root, forcing a full re-parse on the next call.' It specifies the verb ('clears'), the resource ('cached AST for a project root'), and the effect ('forcing a full re-parse'). This distinguishes it from the sibling analysis tools, which focus on inspecting or computing rather than mutating cache state.

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

Usage Guidelines4/5

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

The description explicitly provides when-to-use guidance: 'Use after switching branches, running git pull, or adding/removing files.' This gives clear operational context. It does not explicitly call out alternatives or when not to use, but the sibling tool names and the state-changing nature imply this is a maintenance/refresh tool rather than an analysis tool.

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. 15 tool updatesv0.4.0
    • First observedanalyze_api_surface_mutation
    • First observeddetect_architectural_cycles
    • First observeddifferentiate_type_impact
    • First observedexplain_impact
    • First observedgenerate_skeleton_view
    • First observedgenerate_test_command
    • First observedget_affected_tests
    • First observedget_affected_tests_by_branch
    • First observedget_coverage_gaps
    • First observedget_dependency_graph
    • First observedget_rename_aware_diff
    • First observedget_symbol_dependency_graph
    • First observedget_test_summary
    • First observedidentify_unreachable_modules
    • First observedrefresh_project

TDQS

A4/5.0

Scored across 15 tools

Disambiguation3/5

Several tools overlap in purpose: get_affected_tests, get_affected_tests_by_branch, and get_rename_aware_diff all return affected test files, differing only in how they compute changed files. get_dependency_graph and get_symbol_dependency_graph also overlap at different granularities. The descriptions clarify the distinctions, but the close purposes could cause misselection.

Naming Consistency5/5

All tools use lowercase snake_case with a verb-noun pattern, such as refresh_project, get_affected_tests, explain_impact, identify_unreachable_modules, and generate_test_command. The verbs vary by action but the convention is consistent and predictable.

Tool Count4/5

15 tools is at the upper boundary of the well-scoped range and covers many facets of AST impact mapping. The count feels slightly heavier due to three variants of affected-tests tools, but overall each tool has a distinct role and the breadth is justified.

Completeness5/5

The tool set provides comprehensive coverage for impact analysis: affected tests (multiple methods), import chains, dependency graphs, coverage gaps, dead code, architecture cycles, type-only changes, API breaking changes, skeleton views, and test command generation. No critical gaps are evident for the stated domain.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A TypeScript-aware MCP server that provides coding agents with repository discovery, code intelligence, and web project context for local codebases. It enables deep symbol navigation, diagnostic reporting, and structural analysis of monorepos without requiring full IDE integration.
    7
    11
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing 29 tools across 5 layers for semantic TypeScript/JavaScript code intelligence, enabling AI agents to find references, trace impacts, guard APIs, and explain errors without text-search false positives.
    14
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides tools to query a TypeScript/JavaScript/Vue codebase's dependency graph, enabling agents to find impacted files, hubs, orphans, and symbol relationships through natural language.
    481
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Compiler-exact TypeScript code graph MCP server exposing find-references, change impact analysis, and repo map tools for AI agents, powered by the TypeScript compiler via ts-morph.
    MIT