Skip to main content
Glama

Code Graph MCP Server

Model Context Protocol server providing comprehensive code analysis, navigation, and quality assessment capabilities across 25+ programming languages.

Features

🎯 Enhanced Tool Guidance & AI OptimizationNEW in v1.2.0

  • Comprehensive Usage Guide - Built-in get_usage_guide tool with workflows, best practices, and examples

  • Rich Tool Descriptions - Visual hierarchy with 🎯 PURPOSE, 🔧 USAGE, ⚡ PERFORMANCE, 🔄 WORKFLOW, 💡 TIP sections

  • Performance-Aware Design - Clear expectations for Fast (<3s), Moderate (3-15s), and Expensive (10-60s) operations

  • Workflow Orchestration - Optimal tool sequences for Code Exploration, Refactoring Analysis, and Architecture Analysis

  • AI Model Optimization - Reduces trial-and-error, improves tool orchestration, enables strategic usage patterns

🌍 Multi-Language Support

  • 25+ Programming Languages: JavaScript, TypeScript, Python, Java, C#, C++, C, Rust, Go, Kotlin, Scala, Swift, Dart, Ruby, PHP, Elixir, Elm, Lua, HTML, CSS, SQL, YAML, JSON, XML, Markdown, Haskell, OCaml, F#

  • Intelligent Language Detection: Extension-based, MIME type, shebang, and content signature analysis

  • Framework Recognition: React, Angular, Vue, Django, Flask, Spring, and 15+ more

  • Universal AST Abstraction: Language-agnostic code analysis and graph structures

🔍 Advanced Code Analysis

  • Complete codebase structure analysis with metrics across all languages

  • Universal AST parsing with ast-grep backend and intelligent caching

  • Cyclomatic complexity calculation with language-specific patterns

  • Project health scoring and maintainability indexing

  • Code smell detection: long functions, complex logic, duplicate patterns

  • Cross-language similarity analysis and pattern matching

🧭 Navigation & Search

  • Symbol definition lookup across mixed-language codebases

  • Reference tracking across files and languages

  • Function caller/callee analysis with cross-language calls

  • Dependency mapping and circular dependency detection

  • Call graph generation across entire project

Performance Optimized

  • Debounced File Watcher - Automatic re-analysis when files change with 2-second intelligent debouncing

  • Real-time Updates - Code graph automatically updates during active development

  • Aggressive LRU caching with 50-90% speed improvements on repeated operations

  • Cache sizes optimized for 500+ file codebases (up to 300K entries)

  • Sub-microsecond response times on cache hits

  • Memory-efficient universal graph building

🏢 Enterprise Ready

  • Production-quality error handling across all languages

  • Comprehensive logging and monitoring with language context

  • UV package management with ast-grep integration

Related MCP server: code-graph-rag-mcp

Installation

Quick Start (PyPI)

pip install code-graph-mcp ast-grep-py rustworkx

MCP Host Integration

Claude Desktop

For PyPI installation:

# Project-specific installation
claude mcp add --scope project code-graph-mcp code-graph-mcp

# User-wide installation  
claude mcp add --scope user code-graph-mcp code-graph-mcp

For development installation:

# Project-specific installation
claude mcp add --scope project code-graph-mcp uv run code-graph-mcp

# User-wide installation  
claude mcp add --scope user code-graph-mcp uv run code-graph-mcp

Verify installation:

claude mcp list

Method 2: Manual Configuration

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "code-graph-mcp": {
      "command": "code-graph-mcp"
    }
  }
}

Cline (VS Code Extension)

Add to your Cline MCP settings in VS Code:

  1. Open VS Code Settings (Ctrl/Cmd + ,)

  2. Search for "Cline MCP"

  3. Add server configuration:

{
  "cline.mcp.servers": {
    "code-graph-mcp": {
      "command": "code-graph-mcp"
    }
  }
}

Continue (VS Code Extension)

Add to your ~/.continue/config.json:

{
  "mcpServers": [
    {
      "name": "code-graph-mcp",
      "command": "code-graph-mcp",
      "env": {}
    }
  ]
}

Cursor

Add to Cursor's MCP configuration:

  1. Open Cursor Settings

  2. Navigate to Extensions → MCP

  3. Add server:

{
  "name": "code-graph-mcp",
  "command": "code-graph-mcp"
}

Zed Editor

Add to your Zed settings.json:

{
  "assistant": {
    "mcp_servers": {
      "code-graph-mcp": {
        "command": "code-graph-mcp"
      }
    }
  }
}

Zencoder ⭐

The best AI coding tool! Add to your Zencoder MCP configuration:

{
  "mcpServers": {
    "code-graph-mcp": {
      "command": "code-graph-mcp",
      "env": {},
      "description": "Multi-language code analysis with 25+ language support"
    }
  }
}

Pro Tip: Zencoder's advanced AI capabilities work exceptionally well with Code Graph MCP's comprehensive multi-language analysis. Perfect combination for professional development! 🚀

Windsurf

Add to Windsurf's MCP configuration:

{
  "mcpServers": {
    "code-graph-mcp": {
      "command": "code-graph-mcp"
    }
  }
}

Aider

Use with Aider AI coding assistant:

aider --mcp-server code-graph-mcp

Open WebUI

For Open WebUI integration, add to your MCP configuration:

{
  "mcp_servers": {
    "code-graph-mcp": {
      "command": "code-graph-mcp",
      "env": {}
    }
  }
}

Generic MCP Client

For any MCP-compatible client, use these connection details:

{
  "name": "code-graph-mcp",
  "command": "code-graph-mcp",
  "env": {}
}

Docker Integration

Run as a containerized MCP server:

FROM python:3.12-slim
RUN pip install code-graph-mcp ast-grep-py rustworkx
WORKDIR /workspace
CMD ["code-graph-mcp"]
docker run -v $(pwd):/workspace code-graph-mcp

Development Installation

For contributing or custom builds:

git clone <repository-url>
cd code-graph-mcp
uv sync --dev
uv build

Add to Claude Code (development):

# Project-specific
claude mcp add --scope project code-graph-mcp uv run code-graph-mcp

# User-wide
claude mcp add --scope user code-graph-mcp uv run code-graph-mcp

For other MCP clients, use:

{
  "command": "uv",
  "args": ["run", "code-graph-mcp"]
}

Configuration Options

Command Line Arguments

code-graph-mcp --help

Available options:

  • --project-root PATH: Root directory of your project (optional, defaults to current directory)

  • --verbose: Enable detailed logging

  • --no-file-watcher: Disable automatic file change detection

Environment Variables

export CODE_GRAPH_MCP_LOG_LEVEL=DEBUG
export CODE_GRAPH_MCP_CACHE_SIZE=500000
export CODE_GRAPH_MCP_MAX_FILES=10000
export CODE_GRAPH_MCP_FILE_WATCHER=true
export CODE_GRAPH_MCP_DEBOUNCE_DELAY=2.0

File Watcher (v1.1.0+)

The server includes an intelligent file watcher that automatically updates the code graph when files change:

  • Automatic Detection: Monitors all supported file types in your project

  • Smart Debouncing: 2-second delay prevents excessive re-analysis during rapid changes

  • Efficient Filtering: Respects .gitignore patterns and only watches relevant files

  • Thread-Safe: Runs in background without blocking analysis operations

  • Zero Configuration: Starts automatically after first analysis

File Watcher Features:

  • Real-time graph updates during development

  • Batch processing of multiple rapid changes

  • Duplicate change prevention

  • Graceful error recovery

  • Resource cleanup on shutdown

Troubleshooting

Common Issues

  1. "Command not found": Ensure code-graph-mcp is in your PATH

    pip install --upgrade code-graph-mcp
    which code-graph-mcp
  2. "ast-grep not found": Install the required dependency

    pip install ast-grep-py
  3. Permission errors: Use virtual environment

    python -m venv venv
    source venv/bin/activate  # Linux/Mac
    # or
    venv\Scripts\activate     # Windows
    pip install code-graph-mcp ast-grep-py rustworkx
  4. Large project performance: Use verbose mode for debugging

    code-graph-mcp --verbose

Debug Mode

Enable verbose logging for troubleshooting:

code-graph-mcp --verbose

Supported File Types

The server automatically detects and analyzes these file extensions:

  • Web: .js, .ts, .jsx, .tsx, .html, .css

  • Backend: .py, .java, .cs, .cpp, .c, .rs, .go

  • Mobile: .swift, .dart, .kt

  • Scripting: .rb, .php, .lua, .pl

  • Config: .json, .yaml, .yml, .toml, .xml

  • Docs: .md, .rst, .txt

Available Tools

The MCP server provides 9 comprehensive analysis tools with enhanced guidance that work across all 25+ supported languages:

🎯 Enhanced Tool ExperienceNEW in v1.2.0

Each tool now includes rich guidance with visual hierarchy:

  • 🎯 PURPOSE - Clear explanation of what the tool does

  • 🔧 USAGE - When and how to use the tool effectively

  • ⚡ PERFORMANCE - Speed expectations and caching information

  • 🔄 WORKFLOW - Optimal tool sequencing recommendations

  • 💡 TIP - Pro tips for maximum effectiveness

📚 Usage Guide Tool

Tool

Description

Key Features

get_usage_guide

NEW - Comprehensive guidance with workflows, best practices, and examples

Complete documentation, workflow patterns, performance guidelines

🛠️ Analysis Tools

Tool

Description

Multi-Language Features

Performance

analyze_codebase

Complete project analysis with structure metrics and complexity assessment

Language detection, framework identification, cross-language dependency mapping

⚡ Expensive (10-60s)

find_definition

Locate symbol definitions with detailed metadata and documentation

Universal AST traversal, language-agnostic symbol resolution

⚡ Fast (<3s)

find_references

Find all references to symbols throughout the codebase

Cross-file and cross-language reference tracking

⚡ Fast (<3s)

find_callers

Identify all functions that call a specified function

Multi-language call graph analysis

⚡ Fast (<3s)

find_callees

List all functions called by a specified function

Universal function call detection across languages

⚡ Fast (<3s)

complexity_analysis

Analyze code complexity with refactoring recommendations

Language-specific complexity patterns, universal metrics

⚡ Moderate (5-15s)

dependency_analysis

Generate module dependency graphs and import relationships

Cross-language dependency detection, circular dependency analysis

⚡ Moderate (3-10s)

project_statistics

Comprehensive project health metrics and statistics

Multi-language project profiling, maintainability indexing

⚡ Fast (<3s)

Usage Examples

🎯 Getting Started with Enhanced GuidanceNEW in v1.2.0

First, get comprehensive guidance on using the tools effectively:
get_usage_guide

🔍 Multi-Language Analysis Workflows

Code Exploration Workflow:

1. analyze_codebase (build the foundation)
2. project_statistics (get overview)  
3. find_definition("MyClass") (locate specific symbols)
4. find_references("MyClass") (understand usage patterns)

Refactoring Analysis Workflow:

1. analyze_codebase
2. complexity_analysis (threshold=15 for critical issues)
3. find_callers("complex_function") (impact analysis)
4. find_callees("complex_function") (dependency analysis)

Architecture Analysis Workflow:

1. analyze_codebase
2. dependency_analysis (identify circular dependencies)
3. project_statistics (health metrics)
4. complexity_analysis (quality assessment)

💬 Natural Language Examples

Analyze this React/TypeScript frontend with Python backend - show me the overall structure and complexity metrics
Find all references to the function "authenticate" across both the Java services and JavaScript frontend
Show me functions with complexity higher than 15 across all languages that need refactoring
Generate a dependency graph showing how the Python API connects to the React components
Detect code smells and duplicate patterns across the entire multi-language codebase

Development

Requirements

  • Python 3.12+

  • UV package manager

  • MCP SDK

  • ast-grep-py (for multi-language support)

  • rustworkx (for high-performance graph operations)

Running locally

# Install dependencies
uv sync

# Run the server directly (auto-detects current directory)
uv run code-graph-mcp --verbose

# Test with help
uv run code-graph-mcp --help

Performance Features

  • LRU Caching: 50-90% speed improvements with cache sizes up to 300K entries for large codebases

  • High-Performance Analytics: PageRank at 4.9M nodes/second, Betweenness Centrality at 104K nodes/second

  • Sub-microsecond Response: Cache hits deliver sub-microsecond response times for repeated operations

  • Memory Optimized: Cache configurations optimized for 500+ file codebases with 500MB memory allocation

  • Comprehensive Benchmarks: Performance monitoring with detailed cache effectiveness metrics

Supported Languages

Category

Languages

Count

Web & Frontend

JavaScript, TypeScript, HTML, CSS

4

Backend & Systems

Python, Java, C#, C++, C, Rust, Go

7

JVM Languages

Java, Kotlin, Scala

3

Functional

Elixir, Elm

2

Mobile

Swift, Dart

2

Scripting

Ruby, PHP, Lua

3

Data & Config

SQL, YAML, JSON, TOML

4

Markup & Docs

XML, Markdown

2

Additional

Haskell, OCaml, F#

3

Total

25+

Status

Multi-Language Support - 25+ programming languages with ast-grep backend
MCP SDK integrated - Full protocol compliance across all languages
Universal Architecture - Language-agnostic graph structures and analysis
Server architecture complete - Enterprise-grade multi-language structure
Core tools implemented - 8 comprehensive analysis tools working across all languages
Performance optimized - Multi-language AST caching with intelligent routing
Production ready - comprehensive error handling, defensive security

Available Tools

9 tools
analyze_codebaseA

🔍 Perform comprehensive codebase analysis with metrics and structure overview.

🎯 PURPOSE: Builds the foundational code graph and provides project-wide insights including file counts, language distribution, complexity metrics, and architectural overview. 🔧 USAGE: Run this FIRST before using other analysis tools - it builds the code graph that powers all subsequent operations. ⚡ PERFORMANCE: Expensive operation (10-60s for large codebases) - results are cached for subsequent tool calls. Progress is shown during analysis. 🔄 WORKFLOW: analyze_codebase → specific analysis tools (find_definition, complexity_analysis, etc.) → insights and recommendations. 💡 TIP: Use rebuild_graph=true only if code has changed significantly since last analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
rebuild_graphNoForce rebuild of code graph (use only if code has changed significantly)

TDQS

A4.5/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 that the operation is expensive (10-60s), that results are cached, and that progress is shown. It explains that it builds the code graph that powers subsequent operations. However, it does not explicitly clarify whether the tool modifies the filesystem or is purely read-only, though this is implied by 'analysis.' This is adequate but not exhaustive.

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

Conciseness4/5

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

The description is structured with labeled sections (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP) and each section adds value. While it includes decorative emojis, they do not dilute the content. The length is appropriate for a tool of this complexity, though it could be slightly tighter without losing clarity.

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 provides a complete picture for invocation: it explains what the tool does, when to run it, performance characteristics, caching behavior, and the workflow to follow. It even lists the types of outputs (metrics, structure overview). With no output schema, this describes return content sufficiently. It does not mention potential failure cases or permissions, but for a read-only analysis tool, this level of context is adequate.

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

Parameters4/5

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

The schema already fully documents the single parameter (rebuild_graph with description), achieving 100% coverage. The tool description adds extra context by providing a condition for use: 'Use rebuild_graph=true only if code has changed significantly since last analysis.' This goes beyond the schema baseline, adding meaningful guidance for parameter selection.

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: 'Perform comprehensive codebase analysis with metrics and structure overview.' It specifies concrete outputs (file counts, language distribution, complexity metrics, architectural overview) and differentiates itself from sibling analysis tools by explicitly positioning itself as the foundational first step that builds the code graph.

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

Usage Guidelines5/5

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

The description gives explicit usage guidance: 'Run this FIRST before using other analysis tools' and shows the workflow (analyze_codebase → specific analysis tools). It also advises when to use the rebuild_graph parameter ('only if code has changed significantly'), which provides clear context for when to use this tool versus alternatives.

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

complexity_analysisA

📊 Analyze code complexity and identify refactoring opportunities.

🎯 PURPOSE: Calculates cyclomatic complexity, identifies code smells, and suggests specific refactoring opportunities with priority rankings. 🔧 USAGE: Use after basic analysis to identify problematic code areas that need attention. Essential for code quality assessment. ⚡ PERFORMANCE: Moderate operation (5-15s) - analyzes complexity metrics across the entire codebase. 🔄 WORKFLOW: analyze_codebase → complexity_analysis → examine high-complexity functions → find_callers/find_callees for refactoring impact. 💡 TIP: Start with threshold=15 for critical issues, lower to 10 for comprehensive analysis. Focus on functions with complexity >20 first.

ParametersJSON Schema
NameRequiredDescriptionDefault
thresholdNoMinimum complexity threshold to report (10=comprehensive, 15=critical issues only, 20=severe problems)

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It includes performance characteristics ('Moderate operation (5-15s)'), scope ('across the entire codebase'), and output nature ('priority rankings'). It doesn't explicitly state it is read-only, but as an analysis tool this is implied, and the added performance/scope context goes beyond a basic statement.

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 well-structured with short labeled sections (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP) and a front-loaded summary sentence. Every sentence contributes actionable information, with no wasted words or redundancy.

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

Completeness5/5

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

Despite having only one parameter and no output schema, the description covers all necessary aspects: purpose, usage context, performance, workflow integration with siblings, and parameter tips. It is complete enough for an agent to select and invoke the tool correctly without additional context.

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

Parameters4/5

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

The schema already includes full descriptions of the single 'threshold' parameter with ranges. The description's TIP adds strategic guidance on how to choose thresholds (e.g., 'Start with threshold=15 for critical issues, lower to 10 for comprehensive analysis'), which provides practical value 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 what the tool does: calculates cyclomatic complexity, identifies code smells, and suggests refactoring opportunities with priority rankings. The PURPOSE section is specific and distinguishes it from siblings like analyze_codebase by emphasizing deeper complexity analysis.

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 USAGE section explicitly says 'Use after basic analysis' and provides a workflow (analyze_codebase → complexity_analysis → examine high-complexity functions → find_callers/find_callees), giving clear positioning relative to sibling tools. It also states it is 'Essential for code quality assessment,' making the when-to-use unambiguous.

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

dependency_analysisA

🔗 Analyze module dependencies and import relationships.

🎯 PURPOSE: Maps module interdependencies, identifies circular dependencies, and reveals architectural patterns and potential issues. 🔧 USAGE: Use for architectural analysis, identifying tightly coupled modules, or planning module restructuring. ⚡ PERFORMANCE: Moderate operation (3-10s) - analyzes import relationships and builds dependency graph. 🔄 WORKFLOW: analyze_codebase → dependency_analysis → identify problematic dependencies → complexity_analysis for detailed insights. 💡 TIP: Look for circular dependencies and modules with high fan-in/fan-out ratios - these often indicate architectural problems.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It discloses performance (3-10s), that it builds a dependency graph, and offers a tip about what to look for. It doesn't detail return format or side effects, 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?

The description is well-structured with labeled sections (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP). Each section adds unique value without redundancy, making it both compact and highly informative.

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

Completeness5/5

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

For a zero-parameter tool with no output schema and no annotations, the description is remarkably complete. It covers purpose, usage scenarios, performance expectations, workflow integration, and even analysis tips, fully enabling an agent to decide when and how to invoke it.

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

Parameters4/5

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

The tool has zero parameters and an empty schema, so the description doesn't need to explain parameter details. It confirms that the tool analyzes the entire codebase implicitly, which is appropriate given the lack of inputs.

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: analyzing module dependencies, mapping interdependencies, identifying circular dependencies, and revealing architectural patterns. It distinguishes itself from sibling tools like find_references or find_callers by focusing on the overall dependency graph rather than specific references.

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

Usage Guidelines4/5

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

It provides explicit use cases (architectural analysis, identifying tightly coupled modules, planning restructuring) and places the tool in a workflow (analyze_codebase → dependency_analysis → complexity_analysis). However, it does not explicitly mention alternatives or when-not-to-use conditions, so it's not a full 5.

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

find_calleesA

📱 Find all functions called by the specified function.

🎯 PURPOSE: Maps function dependencies - what other functions does the target function rely on, revealing complexity and coupling. 🔧 USAGE: Use to understand function complexity, identify potential extraction opportunities, or analyze dependency chains. ⚡ PERFORMANCE: Fast operation (1-2s) - leverages indexed call relationships for instant results. 🔄 WORKFLOW: find_definition → find_callees → complexity_analysis → identify refactoring opportunities. 💡 TIP: High callee count often indicates functions that are doing too much and could benefit from decomposition.

ParametersJSON Schema
NameRequiredDescriptionDefault
functionYesFunction name to find callees for (include class context for methods)

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 carries the burden of behavioral disclosure. It adds performance context ('Fast operation (1-2s) - leverages indexed call relationships'), but it doesn't clarify whether results include only direct callees or transitive calls, nor does it describe the return format. These limitations matter for a dependency-mapping tool.

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

Conciseness4/5

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

The description is structured with labeled sections (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP), each adding meaningful context. It is longer than a minimal two-sentence description but not bloated; every section contributes practical guidance.

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), and the description covers purpose, usage, workflow, and performance. It lacks an explicit mention of return values and direct-vs-transitive scope, but the workflow and tip provide enough context for an agent to select and invoke the tool correctly in common scenarios.

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

Parameters3/5

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

Schema coverage is 100% and the only parameter ('function') is already clearly described in the schema. The description doesn't add significant parameter-level detail beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Find all functions called by the specified function.' It clearly distinguishes from siblings like find_callers, find_definition, and dependency_analysis by focusing on outgoing dependencies of a single function.

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 USAGE section explicitly says when to use it: to understand function complexity, identify extraction opportunities, or analyze dependency chains. The WORKFLOW provides a suggested sequence (find_definition → find_callees → complexity_analysis), giving clear practical context, though it doesn't explicitly state when not to use it.

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

find_callersA

📞 Find all functions that call the specified function.

🎯 PURPOSE: Identifies the call hierarchy - which functions depend on the target function, essential for understanding code dependencies. 🔧 USAGE: Use when analyzing function dependencies, planning refactoring, or understanding code flow patterns. ⚡ PERFORMANCE: Fast operation (1-2s) - uses pre-built call graph for efficient traversal. 🔄 WORKFLOW: find_definition → find_callers → analyze call patterns → find_callees for complete dependency picture. 💡 TIP: Crucial for refactoring - shows all functions that would break if you change the target function's signature.

ParametersJSON Schema
NameRequiredDescriptionDefault
functionYesFunction name to find callers for (supports method names with class context)

TDQS

A3.9/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 burden. It discloses performance ('Fast operation 1-2s') and the underlying mechanism ('pre-built call graph'), which adds useful context. However, it does not explicitly state that the operation is read-only or describe error handling or edge cases, leaving some transparency gaps.

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

Conciseness4/5

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

The description is well-structured with labels (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP) and front-loaded with the core action. It is slightly longer than necessary, with some repetition of the purpose in the TIP, but every section contributes meaningful context.

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 simple one-parameter tool with no output schema, the description covers purpose, usage, performance, and workflow, giving an agent enough context to decide when and how to use it. It does not explicitly describe the return format or behavior when no callers are found, but these are inferable from the stated purpose.

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 a descriptive parameter entry ('Function name to find callers for (supports method names with class context)'). The description adds no additional parameter details beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description clearly states 'Find all functions that call the specified function' with a specific verb and resource. It further explains it identifies the call hierarchy, which distinguishes it from sibling tools like find_callees, and is well-scoped.

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

Usage Guidelines4/5

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

It provides clear usage context: 'Use when analyzing function dependencies, planning refactoring, or understanding code flow patterns.' It also includes a workflow showing where find_callers fits relative to find_definition and find_callees, but it does not explicitly mention alternatives or when not to use it.

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

find_definitionA

🎯 Find the definition location of a symbol (function, class, variable, method).

🎯 PURPOSE: Locates where a symbol is originally defined, providing file path, line number, and context. 🔧 USAGE: Use after analyze_codebase when you need to understand where a specific symbol is implemented. ⚡ PERFORMANCE: Fast operation (sub-second) - leverages cached code graph for instant lookups. 🔄 WORKFLOW: analyze_codebase → find_definition → examine definition context → find_references/find_callers for usage patterns. 💡 TIP: Works with partial names - 'MyClass' will find 'MyClass', 'MyClassImpl', etc. Use exact names for precision.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesSymbol name to find definition for (supports partial matching)

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 the full burden of behavioral disclosure. It adds valuable behavior details: performance (sub-second), reliance on a cached code graph, and partial-name matching with an example ('MyClass' will find 'MyClassImpl'). It does not cover error cases or return format, but for a simple read-only lookup the disclosed behaviors are useful and non-obvious.

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

Conciseness4/5

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

The description is well-structured with labeled sections (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP) and front-loaded with the core purpose. It is slightly verbose due to emojis and some redundancy between the first line and the PURPOSE section, but every section adds useful context. Not perfectly concise, but effective.

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

Completeness5/5

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

For a single-parameter tool with no output schema and no annotations, the description is remarkably complete. It covers the tool's purpose, usage context, performance, matching behavior, and workflow integration. All key aspects an agent needs to select and invoke the tool are present, making it a fully self-contained description.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds extra meaning to the 'symbol' parameter by explaining partial matching and advising 'Use exact names for precision.' This goes beyond the schema's simple 'supports partial matching' and gives the agent a clearer understanding of the parameter's 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 clearly states the tool's function: locating the definition of a symbol (function, class, variable, method). It uses specific verbs like 'find' and 'locates', and explicitly mentions the resource (symbol definitions). It distinguishes itself from sibling tools like find_references and find_callers by focusing on the original definition location rather than usage patterns.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Use after analyze_codebase when you need to understand where a specific symbol is implemented.' It also outlines a workflow (analyze_codebase → find_definition → examine context → find_references/find_callers) and mentions what the tool is not for ('find_references/find_callers for usage patterns'). It lacks explicit 'when not to use' statements but the workflow and alternative mentions implicitly guide the agent.

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

find_referencesA

📍 Find all references to a symbol throughout the codebase.

🎯 PURPOSE: Discovers everywhere a symbol is used, imported, or referenced, showing usage patterns and dependencies. 🔧 USAGE: Use after find_definition to understand how a symbol is used across the codebase. ⚡ PERFORMANCE: Fast operation (1-3s) - efficiently searches the indexed code graph. 🔄 WORKFLOW: find_definition → find_references → analyze usage patterns → complexity_analysis for refactoring insights. 💡 TIP: Essential for impact analysis before refactoring - shows all code that would be affected by changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesSymbol name to find references for (exact or partial match)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses performance ('Fast operation (1-3s)') and mechanism ('efficiently searches the indexed code graph'), which is helpful. However, it does not discuss potential limitations, whether the search includes comments or test files, or any side effects (though likely none). This is adequate but not deeper transparency.

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

Conciseness4/5

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

The description is structured with clear labels (PURPOSE, USAGE, PERFORMANCE, WORKFLOW, TIP) and is front-loaded with the main purpose. It includes some redundancy (the TIP repeats the impact analysis point from USAGE) and uses emojis, but each section adds value. Overall, it is well-organized and not overly long for the information conveyed.

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 simple tool with one parameter and no output schema, the description is quite complete. It covers purpose, usage, performance, workflow, and a practical tip. It does not describe the exact return format, but that is less critical without an output schema. The description gives enough context for an agent to use the tool correctly in a typical workflow.

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

Parameters3/5

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

The input schema covers 100% of parameters with a description for 'symbol' ('Symbol name to find references for (exact or partial match)'). The tool description itself does not add additional meaning about the parameter 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.

Purpose4/5

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

The description clearly states the tool's purpose: 'Find all references to a symbol throughout the codebase' and elaborates with 'Discovers everywhere a symbol is used, imported, or referenced.' This is a specific verb + resource, but it does not explicitly differentiate itself from sibling tools like find_callers or find_callees, which also deal with symbol relationships.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Use after find_definition to understand how a symbol is used' and 'Essential for impact analysis before refactoring.' It gives a workflow (find_definition → find_references → ...) and a use case, but does not mention alternatives or when not to use this tool, stopping short of the highest rating.

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

get_usage_guideA

📚 Get comprehensive guidance on effectively using code analysis tools.

🎯 PURPOSE: Provides detailed instructions, best practices, and workflow recommendations for optimal tool usage. 🔧 USAGE: Call this FIRST if you need guidance on tool selection, sequencing, or best practices. ⚡ PERFORMANCE: Lightweight operation - provides strategic guidance without analysis overhead. 🔄 WORKFLOW: Use before starting complex analysis tasks to understand optimal tool orchestration.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/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 value by noting the tool is lightweight and provides strategic guidance without analysis overhead, clarifying it doesn't perform heavy analysis. However, it doesn't explicitly state the absence of side effects or mention authentication needs, which is less critical for a read-only guidance tool.

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

Conciseness4/5

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

The description uses a structured format with short labeled sections (PURPOSE, USAGE, PERFORMANCE, WORKFLOW) that convey key information efficiently. While slightly longer than the simplest examples, every section adds relevant context and the content is front-loaded with the main purpose.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no output schema), the description comprehensively covers purpose, usage timing, performance, and workflow. It also positions itself within the sibling tool set as the entry point for guidance, making it sufficiently complete for correct invocation.

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

Parameters4/5

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

The tool has zero parameters, making schema description coverage trivially 100%. The description avoids parameter details appropriately, and a baseline of 4 is warranted for zero-parameter tools. No additional parameter meaning is needed.

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

Purpose5/5

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

The description clearly identifies the tool as providing comprehensive guidance on using code analysis tools, focusing on instructions, best practices, and workflow recommendations. This distinct purpose differentiates it from sibling analysis tools that perform actual code analysis rather than offering meta-guidance.

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 states to call this FIRST when needing guidance on tool selection, sequencing, or best practices, and recommends using it before complex analysis tasks. This provides clear when-to-use guidance and implicitly contrasts with the analysis siblings.

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

project_statisticsA

📈 Get comprehensive project statistics and health metrics.

🎯 PURPOSE: Provides high-level project overview including file counts, language distribution, complexity trends, and overall health score. 🔧 USAGE: Use for project assessment, progress tracking, or generating project reports. Great for understanding project scale and characteristics. ⚡ PERFORMANCE: Fast operation (1-3s) - aggregates pre-calculated metrics from the code graph. 🔄 WORKFLOW: analyze_codebase → project_statistics → drill down with specific analysis tools based on findings. 💡 TIP: Use regularly to track code quality trends over time. Health score below 7/10 indicates areas needing attention.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 full burden. It adds useful behavioral context: performance expectations (1-3s), data source ('pre-calculated metrics from the code graph'), and interpretation of health score (below 7/10 indicates issues). This goes beyond basic read-only implication, though it doesn't explicitly state side effects.

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

Conciseness4/5

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

The description is structured with clear sections (purpose, usage, performance, workflow, tip), making it scannable. It's slightly verbose for a zero-parameter tool, but every section adds value—especially the workflow and tip. It earns a 4 rather than 5 due to length, but it's well-organized.

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

Completeness5/5

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

Given no parameters and no output schema, the description is remarkably complete: it explains the tool's purpose, high-level metrics, performance characteristics, integration into a workflow, and how to interpret the health score. It covers all necessary context for an agent to decide when to use this tool and what to expect.

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?

Input schema has zero parameters, so the baseline is 4. The description adds meaning by listing the metrics the tool calculates (file counts, language distribution, complexity trends, health score), which helps the agent understand what the tool outputs even without an output 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 a specific verb+resource: 'Get comprehensive project statistics and health metrics,' then details what it provides (file counts, language distribution, complexity trends, health score). This distinguishes it from sibling tools like find_definition or complexity_analysis, which are more focused.

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

Usage Guidelines4/5

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

Provides explicit use cases: 'project assessment, progress tracking, generating project reports.' Includes a workflow suggestion (analyze_codebase → project_statistics → drill down) indicating when to use it relative to other tools. Does not name alternatives explicitly but gives clear contextual guidance.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct aspect of code analysis: setup, stats, symbol lookup, references, callers/callees, complexity, and dependencies. There is no meaningful overlap that would cause an agent to confuse one tool for another.

Naming Consistency4/5

Most tools follow a verb_noun pattern (find_definition, analyze_codebase, get_usage_guide), but a few use noun_analysis (complexity_analysis, dependency_analysis) or noun_noun (project_statistics). While the pattern is not perfectly uniform, the conventions are consistent within functional subgroups (find_* and *_analysis), keeping it readable and predictable.

Tool Count5/5

With 9 tools, the server is well-scoped for its purpose of code graph analysis. Each tool serves a clear role, from graph construction to querying definitions, references, dependencies, and complexity—no redundancy or excessive granularity.

Completeness5/5

The tool set covers the full lifecycle of code analysis: building the graph (analyze_codebase), high-level stats (project_statistics), symbol navigation (find_definition, find_references), call hierarchy (find_callers, find_callees), and deeper analysis (complexity_analysis, dependency_analysis). There are no obvious missing operations for the stated domain.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive code analysis through three MCP servers: static analysis for code quality and security, dependency analysis for package management and vulnerabilities, and complexity analysis for maintainability assessment across multiple programming languages.
    1
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    A powerful Model Context Protocol server that creates intelligent graph representations of your codebase with comprehensive semantic analysis capabilities, supporting 11 languages and 26 MCP methods.
    41
    121
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-grade MCP server providing advanced code intelligence capabilities such as semantic search, dependency analysis, and natural language Q&A across multiple programming languages.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A production-ready MCP server that enables AI assistants to intelligently understand, analyze, edit, navigate, and review software projects with multi-workspace support, Git integration, and semantic search.
    1
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/eas4ai/code-graph-mcp'

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