Skip to main content
Glama

CodeHealth MCP

Codebase health analysis that works everywhere. Dead code, circular dependencies, coupling issues, and architectural drift — exposed as MCP tools for Claude Desktop, Cursor, Windsurf, and Slack.

MCP Node.js License: MIT MCP Registry awesome-mcp-servers


The Problem

Dead code, circular dependencies, excessive coupling, and architectural drift are invisible in day-to-day work. Static analysis tools produce noise in CI dashboards nobody checks. CodeHealth MCP brings these insights into the tools developers actually use — via the Model Context Protocol.


Related MCP server: arch-viewer

What CodeHealth MCP Does

7 analysis tools, available in any MCP-compatible client:

Tool

What It Finds

analyze_dead_code

Unused functions, classes, modules with file:line + fix suggestions

detect_circular_deps

Module import cycles via DFS with impact assessment

analyze_coupling

Fan-out per module, tight cluster detection, refactoring suggestions

detect_architectural_drift

Layer boundary violations (UI→Data, Business→UI, etc.)

full_health_scan

All four analyses + 0–100 health score + prioritized action items

explain_finding

AI-powered detailed explanation of any finding

check_mcp_health

Remote MCP handshake (initialize + tools/list), schema drift, secret scan — HTTP 200 is not healthy


Where It Works

Client

How to Add

Claude Desktop

Add to claude_desktop_config.json

Cursor / Windsurf

Add to MCP settings

Slack

Built-in Agent Builder integration with Block Kit UI

Any MCP client

Standard MCP server (stdio) or remote Streamable HTTP

Claude Desktop Config (stdio)

{
  "mcpServers": {
    "codehealth": {
      "command": "node",
      "args": ["/path/to/codehealth-mcp/mcp-server/index.js"]
    }
  }
}

Remote Streamable HTTP (Glama / hosted)

Public HTTPS + streamable-http is required to list CodeSentinel as a Glama remote connector. Replace the host from your deploy env — do not commit a fake hostname.

export MCP_BEARER_TOKEN="replace-with-a-long-random-secret"
npm run mcp:http

Local default: http://127.0.0.1:8787/mcp (health: GET /health). Production must be HTTPS.

{
  "mcpServers": {
    "codesentinel": {
      "type": "streamable-http",
      "url": "https://${MCP_HTTP_HOST}/mcp",
      "headers": {
        "Authorization": "Bearer ${MCP_BEARER_TOKEN}"
      }
    }
  }
}

Cursor / Claude remote connectors use the same url + Authorization header. Unauthenticated /mcp returns HTTP 401. LLM_API_KEY and other provider keys stay on the server and are never echoed.

Deploy on Vercel (public HTTPS)

Stateless Streamable HTTP (JSON request/response) runs on Vercel Fluid Compute. No sticky sessions. Do not invent a hostname — use the URL Vercel assigns.

npx vercel          # preview
npx vercel env add MCP_BEARER_TOKEN     # required for /mcp — fail-closed Bearer auth
npx vercel env add LLM_API_KEY          # optional, server-side only
npx vercel env add DAYTONA_API_KEY      # optional, isolated GitHub scans
npx vercel env add GITHUB_TOKEN         # optional, private repo fetch
npx vercel --prod
# GET /health must be 200 even if MCP_BEARER_TOKEN is not set yet.

After deploy, the MCP endpoint is:

https://$VERCEL_PROJECT_PRODUCTION_URL/mcp

(VERCEL_URL for a specific deployment). Health: https://$VERCEL_PROJECT_PRODUCTION_URL/health.

Turn off Vercel Deployment Protection on the production host, or Glama/clients cannot complete initialize.

Glama connector fields (fill after the Vercel URL exists)

Field

Value

Type

Connector (remote MCP)

Server URL

https://$VERCEL_PROJECT_PRODUCTION_URL/mcp

Transport

streamable-http

Auth

API Key / Bearer

Header

Authorization

Header value

Bearer $MCP_BEARER_TOKEN (same secret as the Vercel env)

Ownership claim

https://$VERCEL_PROJECT_PRODUCTION_URL/.well-known/glama.json (static public/ file)

See docs/mcp-http.md for Vercel env vars, Fluid Compute notes, and Docker/Fly fallback.


Quick Start

git clone https://github.com/Cubiczan/codesentinel.git
cd codesentinel
npm install
cp .env.sample .env
# Edit .env with your LLM API key (and MCP_BEARER_TOKEN for HTTP mode)
npm start

HTTP MCP (same tools, Bearer auth):

export MCP_BEARER_TOKEN="replace-with-a-long-random-secret"
npm run mcp:http
npm run mcp:http:smoke

Use in Claude Desktop

Run a full health scan on /path/to/my/repo
Find circular dependencies in the frontend
Check coupling metrics in src/services
Check MCP health on https://example.com/mcp

Remote MCP protocol health (not HTTP uptime)

A remote MCP endpoint can return HTTP 200 while initialize, tools/list, or the SSE stream fails. CodeSentinel probes the protocol itself:

  • Synthetic Streamable HTTP / legacy SSE handshake (initialize + tools/list)

  • Canonical tool-schema hash and drift alarms

  • Discovery-latency metrics

  • Secret scanning of tool descriptions/schemas before they enter agent context

npm test
npm run mcp:health -- https://example.com/mcp

Library: src/lib/mcp-health. Analyzer: lib/analyzers/mcp-health.js. Full write-up: docs/mcp-health.md.

Daytona sandbox scans (optional)

Set DAYTONA_API_KEY (and optionally GITHUB_TOKEN for private repos). MCP tools and Slack analysis will shallow-clone GitHub URLs in a Daytona VM and return live import-graph findings instead of demo data.

full_health_scan repo_path=https://github.com/org/repo

Use in Slack

Add the Slack app manifest, enable Agent Builder, and @CodeHealth in any channel.


Architecture

┌──────────────────────────────────────────┐
│          MCP CLIENT (any)                │
│  Claude Desktop, Cursor, Slack, etc.     │
└──────────────────┬───────────────────────┘
                   │ MCP Protocol (stdio or Streamable HTTP)
┌──────────────────▼───────────────────────┐
│         CODEHEALTH MCP SERVER            │
│                                          │
│  🔧 analyze_dead_code                    │
│  🔧 detect_circular_deps                 │
│  🔧 analyze_coupling                     │
│  🔧 detect_architectural_drift           │
│  🔧 full_health_scan                     │
│  🔧 explain_finding                      │
│  🔧 check_mcp_health                     │
│                                          │
│  ┌──────────────────────────────────┐    │
│  │       Analysis Engine            │    │
│  │  dead-code | circular-deps       │    │
│  │  coupling | drift | mcp-health   │    │
│  └──────────────────────────────────┘    │
│                                          │
│  ┌──────────────────────────────────┐    │
│  │       LLM Provider               │    │
│  │  Deepseek / OpenAI / Anthropic   │    │
│  └──────────────────────────────────┘    │
└──────────────────────────────────────────┘

Slack Integration

CodeHealth MCP ships with a full Slack Agent Builder app featuring:

  • Block Kit UI — Severity-coded findings, health scores, actionable suggestions

  • Thread-based conversations — Follow-up analysis in threads

  • Suggested prompts — One-click analysis triggers

  • MCP server — Same tools, available everywhere

Demo Sandbox (Devpost judges)

The live demo workspace is codehealthdemo.slack.com — the CodeSentinel agent (App ID A0BEHRDN5TQ) is installed and authorized there. Mention it in any channel:

@CodeSentinel run a full health scan on https://github.com/icohangar-ops/codesentinel

Sandbox configuration:

Live agent response in the sandbox — a real @CodeSentinel mention in #general triggering a Daytona-sandboxed repo scan:

CodeSentinel responding in #general

App credentials & App ID

Agent capability enabled

Socket Mode enabled

App Basic Information

Agent enabled

Socket Mode enabled


Adding Custom Analyzers

Each analyzer follows a simple interface:

function analyze(repoInfo) {
  return {
    type: "your_analysis_type",
    findings: [
      {
        type: "finding_type",
        severity: "critical" | "warning" | "info",
        file: "path/to/file.ts",
        line: 42,
        name: "symbol_name",
        reason: "Why this is a problem",
        suggestion: "How to fix it",
      },
    ],
    stats: { /* summary metrics */ },
  };
}

Add a new analyzer in lib/analyzers/, register it in analysis-engine.js, and it's automatically available in Slack and via MCP.


Roadmap

  • Real AST analysis — ts-morph for TypeScript, tree-sitter for multi-language

  • GitHub App — Automatic analysis on PRs with inline comments

  • Historical trends — Track health score over time per repo

  • Custom architecture rules — Define layer boundaries via config

  • Team dashboards — Aggregate health in Slack Canvas


Project Structure

codehealth-mcp/
├── app.js                    # Bolt app entry (Slack)
├── manifest.json             # Slack app manifest
├── lib/
│   ├── analysis-engine.js    # Analysis orchestrator + health score
│   ├── intent-parser.js      # NLP intent classification
│   ├── block-kit-builder.js  # Rich Slack UI
│   ├── llm-provider.js       # Multi-provider LLM
│   └── analyzers/            # dead-code, circular-deps, coupling, drift, mcp-health
├── src/lib/
│   ├── resilience/           # safeFetch / retry
│   └── mcp-health/           # handshake, schema hash, secret scan, CLI
├── mcp-server/
│   ├── index.js              # MCP stdio entry (unchanged tools)
│   ├── http.js               # Streamable HTTP (stateless, Bearer auth)
│   ├── create-server.js      # Shared tool registration
│   └── package.json
├── docs/mcp-http.md          # Remote / Glama / Fly / Railway notes
├── test/                     # handshake / HTTP transport / secret-scan tests
└── functions/                # Slack function definitions

Community & Registry

CodeHealth MCP is listed in the following directories:


License

MIT. See LICENSE.

Available Tools

6 tools
analyze_couplingA

Analyze coupling metrics across the codebase. Identifies modules with high fan-out (too many dependencies) and tightly coupled clusters.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNoPath or URL to the repository
fan_out_thresholdNoFan-out threshold for flagging modules

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are present, so the description carries full transparency burden. It discloses what the tool identifies (high fan-out modules, tightly coupled clusters) but does not state whether it modifies anything, what permissions are needed, or how results are returned. The verb 'Analyze' suggests a read-only operation, but this is inferred rather than 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?

Two sentences, front-loaded with the core action and followed by concrete outputs. No filler or redundant phrases. The structure is easy to scan.

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 description covers the tool's purpose and key concepts but lacks explicit output formatting, usage context relative to siblings, and side-effect disclosure. Since there is no output schema, agents would benefit from a sentence describing the return value. Comparable to a minimum-viable description for a simple analysis 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%; both repo_path and fan_out_threshold have descriptions in the input schema. The tool description adds contextual meaning (e.g., 'high fan-out' clarifies the threshold concept) but doesn't introduce new parameter semantics. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a distinct analysis task—coupling metrics—with concrete outputs: high fan-out modules and tightly coupled clusters. This differentiates it from siblings like detect_circular_deps (which focuses on cycles) or analyze_dead_code (unused code). A clear verb and resource make the purpose 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?

The description implies the tool is for coupling-focused analysis but offers no explicit when-to-use guidance or comparison to sibling analyzer tools. An agent could confuse it with detect_circular_deps or detect_architectural_drift without additional direction. There are no stated prerequisites or exclusions.

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

analyze_dead_codeA

Analyze a codebase for dead code — functions, classes, and modules that are defined but never referenced. Returns findings with file paths, line numbers, severity, and fix suggestions.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNoPath or URL to the repository to analyze
include_suggestionsNoWhether to include fix suggestions

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description carries the burden of explaining behavior. It does disclose that the tool returns findings with file paths, line numbers, severity, and fix suggestions, which implies a non-mutating analysis. However, it never explicitly says the tool is read-only or that it does not apply fixes, leaving some behavioral ambiguity for an agent.

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, information-dense sentence. It front-loads the core purpose, then adds a useful definition of dead code and the expected output structure without any 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?

Given the simple two-parameter schema and no output schema, the description compensates well by explaining both what is detected and what the return findings contain. It is mostly complete, though a note about supported languages or explicit confirmation that the tool does not modify code would make it fully self-sufficient.

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 parameters repo_path and include_suggestions are already documented. The description adds marginal value by mentioning 'fix suggestions,' which aligns with include_suggestions, but it does not elaborate on parameter-specific behavior 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 clearly states the verb 'Analyze', the resource ('a codebase'), and the specific target (dead code: functions, classes, and modules defined but never referenced). This definition alone distinguishes the tool from siblings like analyze_coupling and detect_circular_deps, since each targets a different code quality concern.

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

Usage Guidelines4/5

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

The description gives clear context: use this tool when the need is to find unused definitions, and it specifies exactly what counts as dead code. It does not explicitly name alternatives or exclusions, but the scoped language makes the appropriate use case obvious relative to the sibling tools.

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

detect_architectural_driftA

Detect architectural drift — violations of intended layer boundaries (e.g., UI importing from data layer, reverse dependencies).

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNoPath or URL to the repository
layers_configNoJSON string defining layer patterns, e.g. {"ui": ["src/components/"], "data": ["src/db/"]}

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral transparency burden. It communicates the core behavior: detecting drift/violations of layer boundaries, and the examples suggest a non-destructive analysis. However, it doesn't disclose potential side effects, prerequisites (e.g., whether a local clone is required), or behavior when inputs are invalid or absent.

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 defines the term with a dash and provides concrete examples. It is concise, contains no filler, and every phrase contributes to understanding. This is an ideal structure for a tool description.

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 covers both parameters, but the description leaves notable gaps: it does not clarify what happens when the optional parameters are omitted, how it relates to sibling detection tools, or whether any default configuration applies. These ambiguities prevent the definition from being fully complete for an agent.

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% for both repo_path and layers_config, including an example JSON for layers_config. The description adds no parameter-specific meaning, but because the schema already documents both parameters thoroughly, the baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the verb 'Detect' and the resource 'architectural drift', defining it as violations of intended layer boundaries with concrete examples (UI importing from data layer, reverse dependencies). This is a specific and meaningful expression, not a tautology. It does not explicitly contrast with sibling tools like detect_circular_deps, so it does not earn a 5.

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

Usage Guidelines3/5

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

The description implies when to use the tool by providing examples of architectural-drift violations, but it offers no explicit guidance on when to choose this tool over siblings like analyze_coupling or detect_circular_deps. There are no stated exclusions or alternative routing, leaving the agent to infer the appropriate context.

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

detect_circular_depsA

Detect circular dependencies between modules using DFS-based cycle detection. Returns cycles with involved files and impact assessment.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNoPath or URL to the repository

TDQS

A3.8/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 discloses the algorithm (DFS-based detection) and what it returns, but it does not explicitly state whether the operation is read-only, what repository states are valid, or any limits or side effects. For an analysis tool this is acceptable but not thorough.

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, information-dense sentence that front-loads the action and resource, then clearly states the output. 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.

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 parameter and no output schema, the description covers the key context well: what it detects, how it detects, and what it returns (cycles with files and impact assessment). It could be improved with notes on prerequisites or edge cases, but nothing essential is missing for a basic call.

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 single parameter repo_path is already fully described in the schema as 'Path or URL to the repository', giving 100% schema description coverage. The description adds no additional parameter-level details, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb ('Detect') and resource ('circular dependencies between modules'), and adds the method ('DFS-based cycle detection'). This clearly differentiates it from siblings like analyze_coupling or detect_architectural_drift, which target different concerns.

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 intended use case is implicitly clear: use when you need to find circular dependencies among modules. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, leaving the routing to inference.

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

explain_findingA

Get a detailed explanation of a specific code health finding, including why it matters, potential risks, and detailed remediation steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
finding_typeYes
codebase_contextNoAdditional context about the codebase (language, framework, etc.)
finding_descriptionYesDescription of the specific finding to explain

TDQS

A3.6/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 behavior disclosure. It does communicate that the tool is a read-only explanation operation and summarizes the output content. It does not mention prerequisites, side effects, possible errors, or response structure, but for an information-retrieval tool this is acceptable though not rich.

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 one concise sentence with no filler. It front-loads the action ('Get a detailed explanation') and immediately states the key output components. Every clause earns its place.

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 low-complexity explainer tool with no output schema, the description adequately covers the tool's purpose and expected return content, while the schema covers parameters. The main gap is the lack of explicit guidance on when to use this relative to the sibling analysis and detection tools, but that is not critical for basic 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 schema already provides descriptions for finding_description and codebase_context, and the enum documents finding_type. The description adds little to parameter understanding beyond framing the finding as 'specific.' With 67% schema coverage, the description does not need to compensate heavily, but it also does not enrich the parameters.

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 gets a detailed explanation of a specific code health finding and enumerates the content of that explanation (why it matters, risks, remediation). It is implicitly distinguished from the sibling detection/analysis tools, but it does not explicitly name them or contrast itself with them.

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 usage context is implied: the agent should use this tool when it has a specific finding to explain, likely after running one of the detection or analysis tools. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternatives are mentioned.

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

full_health_scanA

Run a complete codebase health scan: dead code, circular dependencies, coupling metrics, and architectural drift. Returns an overall health score (0-100) and prioritized findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNoPath or URL to the repository

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses that the tool returns a score (0-100) and prioritized findings, and its 'scan' wording implies a read-only operation, so it is not misleading. However, it does not explicitly state that the scan is non-destructive, nor does it mention potential side effects of accepting a URL (e.g., cloning), runtime cost, or failure modes.

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 tight sentences: the first front-loads the action and scope, the second states the return. Every phrase earns its place and there is no fluff or repetition of the tool name.

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 the low parameter count, the description leaves critical gaps: repo_path is optional (required: 0) but the description does not say what happens when it is omitted; no output schema exists, so 'prioritized findings' remains vague; and the relationship to the specialized sibling tools is not stated, so an agent cannot tell whether it should call this tool or the individual ones for details.

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 has 100% coverage for the single parameter repo_path, which is described as 'Path or URL to the repository'. The description adds no additional meaning about this parameter, staying at the baseline, and it does not clarify the parameter's optionality (required parameters: 0) or default behavior.

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

Purpose5/5

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

The description states a specific action ('Run a complete codebase health scan'), enumerates the exact scan dimensions (dead code, circular dependencies, coupling metrics, architectural drift), and defines the output (health score 0-100 and prioritized findings). This clearly separates it from the specialized sibling tools by covering them all in one complete scan.

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 word 'complete' implies this is the aggregate tool to use when a broad health overview is needed, but the description never explicitly tells the agent when to prefer this over analyze_coupling, analyze_dead_code, etc., nor does it list any exclusions. Usage must be inferred from the listing of sub-analyses rather than stated guidance.

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. 6 tool updatesv1.0.1
    • First observedanalyze_coupling
    • First observedanalyze_dead_code
    • First observeddetect_architectural_drift
    • First observeddetect_circular_deps
    • First observedexplain_finding
    • First observedfull_health_scan

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct analysis concern: dead code, circular deps, coupling, architectural drift, combined scan, and explanation. No overlap in purpose; even full_health_scan is clearly a superset rather than a duplicative tool.

Naming Consistency4/5

Naming follows a strong verb_noun pattern but mixes 'analyze' and 'detect' as starting verbs, plus 'full_health_scan' and 'explain_finding' break the strict pattern slightly. Still, all names are descriptive and predictable.

Tool Count5/5

Six tools are well-scoped for a code health analysis server. Each tool covers a meaningful aspect, and the full scan consolidates several, avoiding redundancy.

Completeness4/5

The server covers the core analysis surface (dead code, circular deps, coupling, architecture) plus explanation and a comprehensive scan. Minor gaps like generating reports or managing ignore lists are not essential for the apparent scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Code dependency graph and AI context engine. 10 MCP tools that give Claude, Cursor, and any MCP client full codebase context — impact analysis, dependency tracing, architecture summaries, and interactive arc diagram visualization. Supports TypeScript, JavaScript, Python, and Go.
    24
    521 npm
    61
    Business Source 1.1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI-powered architecture analysis and visualization of codebases, exposing 17 MCP tools for querying components, dependencies, and generating interactive diagrams.
    0
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    AI code analysis tools that plug into Claude Code, Cursor, VS Code, and any MCP client, providing six specialized tools for explaining code, debugging, code review, security audit, automation script generation, and MCP blueprint design.
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Analyzes repositories, explains architecture, calculates change impact, and enforces guardrails for AI Agents like Claude Code, Cursor, and Codex via MCP tools.
    -