Skip to main content
Glama
lfnovo

Code Expert MCP Server

by lfnovo

Code Expert MCP Server

An MCP (Model Context Protocol) server designed to understand codebases and provide intelligent context to AI coding assistants. This server handles local directories, GitHub repositories, and Azure DevOps repositories, supporting standard MCP-compliant operations.

Features

  • Clone and analyze GitHub repositories, Azure DevOps repositories, or local codebases

  • Get repository structure and file organization

  • Identify critical files based on complexity metrics and code structure

  • Generate detailed repository maps showing:

    • Function signatures and relationships

    • Class definitions and hierarchies

    • Code structure and dependencies

  • Retrieve and analyze repository documentation

  • Target analysis to specific files or directories

  • Keep analysis up-to-date with repository changes via refresh

  • Auto-refresh system: Intelligent repository synchronization that:

    • Automatically refreshes active repositories every 24 hours

    • Refreshes inactive repositories every 7 days

    • Adapts to repository activity patterns

    • Provides error handling and recovery mechanisms

    • Offers configurable scheduling and resource management

Related MCP server: Ambiance MCP Server

Quick Start: MCP Client Configuration

Prerequisites

Required: uv Installation

This server requires uv, a modern Python package manager. If you don't already have uv installed:

# Install UV (macOS/Linux)
curl -sSf https://astral.sh/uv/install.sh | sh

# Install UV (Windows PowerShell)
ipow https://astral.sh/uv/install.ps1 | iex

For more installation options, visit the official uv installation guide at astral.sh/uv.

Installation Methods

For the most reliable isolated installation:

# Install the MCP server as a tool
uv tool install code-expert-mcp

Method 2: Direct Execution with uvx (Fallback)

⚠️ Warning: This method may encounter dependency conflicts with other Python packages on your system. Use Method 1 if you experience any issues.

# Run directly without installation
uvx code-expert-mcp

Verify Installation

After installation, verify the binary location:

# For Method 1 (tool installation)
which code-expert-mcp
# Expected output example: /Users/username/.local/bin/code-expert-mcp

# For Method 2 (uvx) - no persistent binary
# The tool runs directly through uvx

Configure Your MCP Client

Use the verified binary path in your MCP client configuration:

{
  "mcpServers": {
    "code-expert": {
      "command": "/path/to/code-expert-mcp",
      "args": []
    }
  }
}

Replace /path/to/code-expert-mcp with the actual path from the verification step above.

For uvx method (less reliable):

{
  "mcpServers": {
    "code-expert": {
      "command": "uvx",
      "args": [
        "code-expert-mcp-server"
      ]
    }
  }
}

Common Use Cases

Reference Repository Analysis

  • Examine external repositories (libraries, dependencies, etc.) to inform current development

  • Find implementation patterns and examples in open-source projects

  • Understand how specific libraries work internally when documentation is insufficient

  • Compare implementation approaches across similar projects

  • Identify best practices from high-quality codebases

Knowledge Extraction and Documentation

  • Generate comprehensive documentation for poorly documented codebases

  • Create architectural overviews and component relationship diagrams

  • Develop progressive learning paths for developer onboarding

  • Extract business logic and domain knowledge embedded in code

  • Identify and document system integration points and dependencies

Legacy System Understanding

  • Recover knowledge from systems with minimal documentation

  • Support migration planning by understanding system boundaries

  • Analyze complex dependencies before making changes

  • Trace feature implementations across multiple components

  • Understand historical design decisions and their rationales

Cross-Project Knowledge Transfer

  • Apply patterns from one project to another

  • Bridge knowledge gaps between teams working on related systems

  • Identify reusable components across multiple projects

  • Understand differences in implementation approaches between teams

  • Facilitate knowledge sharing in distributed development environments

How It Works

The MCP Code Expert Server processes repositories through a series of analysis steps:

  1. Repository Cloning: The server clones the target repository into its cache

  2. Structure Analysis: Analysis of directories, files, and their organization

  3. Critical File Identification: Determination of structurally significant components

  4. Documentation Retrieval: Collection of all documentation files

  5. Semantic Mapping: Creation of a detailed map showing relationships between components

  6. Content Analysis: Examination of specific files as needed for deeper understanding

AI assistants integrate with the server by making targeted requests for each analytical stage, building a comprehensive understanding of the codebase that can be used to address specific user questions and needs.

MCP Tools Available

The server provides the following MCP tools for AI assistants to interact with repositories:

Repository Management

  • clone_repo - Initialize a repository for analysis by copying it to MCP's cache

  • list_repos - List all repositories currently in the MCP server's cache with metadata

  • list_repository_branches - List all cached versions of a repository across different branches

  • delete_repo - ⚠️ Remove cached repositories from the MCP server to free disk space

  • refresh_repo - Update a repository with latest changes (manual sync only)

  • get_repo_status - Check if a repository is cloned and ready for analysis

Repository Analysis

  • get_repo_structure - Retrieve directory structure and analyzable file counts

  • get_repo_critical_files - Identify and analyze the most structurally significant files

  • get_source_repo_map - Retrieve a semantic analysis map of the repository's source code structure

  • get_repo_documentation - Retrieve and analyze documentation files from a repository

File Operations

  • get_repo_file_content - Retrieve file contents or directory listings from a repository

Note: The delete_repo tool is destructive and permanently removes cached repositories. Use with caution as deleted repositories will need to be re-cloned for further analysis.

Design Considerations for Large Codebases

The server employs several strategies to maintain performance and usability even with enterprise-scale repositories:

  • Asynchronous Processing: Repository cloning and analysis occur in background threads, providing immediate feedback while deeper analysis continues

  • Progressive Analysis: Initial quick analysis enables immediate interaction, with more detailed understanding building over time

  • Scope Control: Parameters for max_tokens, files, and directories enable targeted analysis of specific areas of interest

  • Threshold Management: Automatic detection of repository size with appropriate guidance for analysis strategies

  • Hierarchical Understanding: Repository structure is analyzed first, enabling intelligent prioritization of critical components for deeper semantic analysis

These design choices ensure that developers can start working immediately with large codebases while the system builds a progressively deeper understanding in the background, striking an optimal balance between analysis depth and responsiveness.

Git Repository Authentication (Optional)

GitHub

If you need to access private GitHub repositories or want to avoid API rate limits, add your GitHub token to the configuration:

{
  "mcpServers": {
    "code-expert": {
      "command": "/path/to/code-expert-mcp",
      "args": [],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-github-token-here"
      }
    }
  }
}

Azure DevOps

For private Azure DevOps repositories, add your Personal Access Token (PAT) to the configuration:

{
  "mcpServers": {
    "code-expert": {
      "command": "/path/to/code-expert-mcp",
      "args": [],
      "env": {
        "AZURE_DEVOPS_PAT": "your-azure-devops-pat-here"
      }
    }
  }
}

Using Both GitHub and Azure DevOps

You can configure both tokens if you work with repositories from both platforms:

{
  "mcpServers": {
    "code-expert": {
      "command": "/path/to/code-expert-mcp",
      "args": [],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-github-token-here",
        "AZURE_DEVOPS_PAT": "your-azure-devops-pat-here"
      }
    }
  }
}

Advanced Configuration Options

For advanced users, the server supports several configuration options:

{
  "mcpServers": {
    "code-expert": {
      "command": "/path/to/code-expert-mcp",
      "args": [
        "--cache-dir", "~/custom-cache-dir",     // Override repository cache location
        "--max-cached-repos", "20",              // Override maximum number of cached repos
        "--transport", "stdio",                  // Transport type (stdio or sse)
        "--port", "3001"                         // Port for SSE transport (only used with sse)
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-github-token-here",
        "AZURE_DEVOPS_PAT": "your-azure-devops-pat-here"
      }
    }
  }
}

Available options:

  • --cache-dir: Override the repository cache directory location (default: ~/.cache/code-expert-mcp)

  • --max-cached-repos: Set maximum number of cached repositories (default: 10)

  • --transport: Choose transport type (stdio or sse, default: stdio)

  • --port: Set port for SSE transport (default: 3001, only used with sse transport)

Docker Support with Streamable HTTP

The MCP server can be run in a Docker container with Streamable HTTP transport, enabling integration with Claude and other MCP clients that require HTTP-based communication.

Building the Docker Image

# Clone the repository
git clone https://github.com/yourusername/code-expert-mcp.git
cd code-expert-mcp

# Build the Docker image
docker build -t mcp-server .

Running the Docker Container

# Run with default settings (HTTPS on port 3001)
docker run -p 3001:3001 mcp-server

# Run with custom cache directory and max repos
docker run -p 3001:3001 \
  -e MAX_CACHED_REPOS=50 \
  -v /path/to/cache:/cache \
  mcp-server

# Run with authentication tokens for private repos
docker run -p 3001:3001 \
  -e GITHUB_PERSONAL_ACCESS_TOKEN="your-github-token" \
  -e AZURE_DEVOPS_PAT="your-azure-pat" \
  mcp-server

HTTPS and SSL Certificates

The Docker container automatically generates self-signed SSL certificates for HTTPS support, which is required by Claude. The certificates are created at container startup and stored in /app/certs/.

Note: Self-signed certificates will trigger browser security warnings. This is normal for development use.

Connecting Claude to Docker Container

Since Claude's backend servers cannot directly access localhost, you'll need to expose your Docker container through a tunnel service:

  1. Install cloudflared:

# macOS
brew install cloudflared

# Linux
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
  1. Start the tunnel:

cloudflared tunnel --url https://localhost:3001
  1. You'll receive a public URL like https://example.trycloudflare.com. Use this URL when adding the MCP server to Claude.

Using ngrok (Alternative)

  1. Install ngrok and authenticate:

# Install ngrok (see ngrok.com for instructions)
ngrok config add-authtoken YOUR_AUTH_TOKEN
  1. Start the tunnel:

ngrok http https://localhost:3001
  1. Use the provided HTTPS URL when configuring Claude.

Docker Environment Variables

The Docker container supports the following environment variables:

  • MAX_CACHED_REPOS: Maximum number of repositories to cache (default: 50)

  • GITHUB_PERSONAL_ACCESS_TOKEN: GitHub PAT for private repositories

  • AZURE_DEVOPS_PAT: Azure DevOps PAT for private repositories

  • MCP_USE_HTTPS: Enable HTTPS (default: true, required for Claude)

Docker Compose Example

For production deployments, you can use Docker Compose:

version: '3.8'
services:
  mcp-server:
    build: .
    ports:
      - "3001:3001"
    environment:
      - MAX_CACHED_REPOS=100
      - GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_TOKEN}
      - AZURE_DEVOPS_PAT=${AZURE_PAT}
    volumes:
      - ./cache:/cache
    restart: unless-stopped

Supported Repository Formats

The server supports the following repository URL formats:

GitHub

  • HTTPS: https://github.com/owner/repo

  • SSH: git@github.com:owner/repo.git

Azure DevOps

  • HTTPS: https://dev.azure.com/organization/project/_git/repository

  • HTTPS with org: https://organization@dev.azure.com/organization/project/_git/repository

  • SSH: git@ssh.dev.azure.com:v3/organization/project/repository

Local Directories

  • Absolute paths: /home/user/projects/my-repo

  • Relative paths: ./my-repo or ../other-repo

Platform-Specific Notes

macOS

  • Binary typically installs to: ~/.local/bin/code-expert-mcp

  • Ensure ~/.local/bin is in your PATH

Linux

  • Binary typically installs to: ~/.local/bin/code-expert-mcp

  • May require: export PATH="$HOME/.local/bin:$PATH" in your shell profile

Windows

  • Not currently supported - Windows support is planned for a future release

  • Development work is ongoing to enable Windows compatibility

Troubleshooting

Dependency Conflicts

If you encounter dependency conflicts when using uvx:

  1. Switch to the tool installation method:

    uv tool install code-expert-mcp
  2. If conflicts persist, create an isolated environment:

    # Create a dedicated virtual environment
    uv venv ~/.venvs/code-expert-mcp
    # Activate it (macOS/Linux)
    source ~/.venvs/code-expert-mcp/bin/activate
    # Install the package
    uv pip install code-expert-mcp

Binary Not Found

If the installed binary is not found:

  1. Check installation location:

    # macOS/Linux
    find ~/.local -name "code-expert-mcp" 2>/dev/null
  2. Add to PATH if needed:

    # Add to ~/.bashrc, ~/.zshrc, or appropriate shell config
    export PATH="$HOME/.local/bin:$PATH"
  3. Use absolute path in MCP configuration

Server Configuration

The server uses a config.yaml file for base configuration. This file is automatically created in the standard configuration directory (~/.config/code-expert-mcp/config.yaml) when the server first runs. You can also place a config.yaml file in your current directory to override the default configuration.

Here's the default configuration structure:

name: "Code Expert Server"
log_level: "debug"

repository:
  cache_dir: "~/.cache/code-expert-mcp"
  max_cached_repos: 10

# Auto-refresh system configuration
auto_refresh:
  enabled: true                       # Enable/disable auto-refresh
  active_repo_interval_hours: 24      # Refresh interval for active repos (hours)
  inactive_repo_interval_hours: 168   # Refresh interval for inactive repos (hours, 7 days)
  startup_delay_seconds: 30           # Delay before first refresh on startup
  max_concurrent_refreshes: 2         # Maximum concurrent refresh operations
  activity_threshold_days: 7          # Days to consider repo active (based on commits)

documentation:
  include_tags:
    - markdown
    - rst
    - adoc
  include_extensions:
    - .md
    - .markdown
    - .rst
    - .txt
    - .adoc
    - .ipynb
  format_mapping:
    tag:markdown: markdown
    tag:rst: restructuredtext
    tag:adoc: asciidoc
    ext:.md: markdown
    ext:.markdown: markdown
    ext:.rst: restructuredtext
    ext:.txt: plaintext
    ext:.adoc: asciidoc
    ext:.ipynb: jupyter
  category_patterns:
    readme: 
      - readme
    api: 
      - api
    documentation:
      - docs
      - documentation
    examples:
      - examples
      - sample

Auto-Refresh System

The auto-refresh system keeps your repository caches current by automatically refreshing them based on activity patterns:

  • Active repositories (with commits in the last 7 days): Refreshed every 24 hours by default

  • Inactive repositories: Refreshed every 7 days by default

  • Smart scheduling: Repositories are scheduled based on their last commit activity

  • Error handling: Failed refreshes use exponential backoff and temporary disabling

  • Resource management: Configurable concurrent refresh limits prevent system overload

Configuration Options

  • enabled: Enable or disable the auto-refresh system (default: true)

  • active_repo_interval_hours: How often to refresh active repositories in hours (default: 24)

  • inactive_repo_interval_hours: How often to refresh inactive repositories in hours (default: 168)

  • startup_delay_seconds: Delay before starting refreshes on server startup (default: 30)

  • max_concurrent_refreshes: Maximum number of concurrent refresh operations (default: 2)

  • activity_threshold_days: Days to consider a repository active based on commit history (default: 7)

Auto-Refresh Management Tools

The server provides MCP tools to monitor and manage the auto-refresh system:

  • get_auto_refresh_status: Get detailed status including scheduled repositories, error statistics, and performance metrics

  • start_auto_refresh: Manually start the auto-refresh system (typically automatic)

  • stop_auto_refresh: Manually stop the auto-refresh system

For Developers

Prerequisites

  • Python 3.11 or 3.12: Required for both development and usage

    # Verify your Python version
    python --version
    # or
    python3 --version
  • UV Package Manager: The modern Python package installer

    # Install UV
    curl -sSf https://astral.sh/uv/install.sh | sh

Development Setup

To contribute or run this project locally:

# 1. Clone the repository
git clone https://github.com/yourusername/code-expert-mcp.git
cd code-expert-mcp

# 2. Create virtual environment
uv venv

# 3. Activate the virtual environment
#    Choose the command appropriate for your operating system and shell:

#    Linux/macOS (bash/zsh):
source .venv/bin/activate

#    Windows (Command Prompt - cmd.exe):
.venv\\Scripts\\activate.bat

#    Windows (PowerShell):
#    Note: You might need to adjust your execution policy first.
#    Run: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
.venv\\Scripts\\Activate.ps1

# 4. Install dependencies (editable mode with dev extras)
#    (Ensure your virtual environment is activated first!)
uv pip install -e ".[dev]"

# 5. Set up pre-commit hooks
pre-commit install

# 6. Run tests
uv run pytest

# 7. Test the server using MCP inspector
# Without authentication:
uv run mcp dev src/code_understanding/mcp/server/app.py

# With GitHub authentication (for testing private repos):
GITHUB_PERSONAL_ACCESS_TOKEN=your_token_here uv run mcp dev src/code_understanding/mcp/server/app.py

# With Azure DevOps authentication:
AZURE_DEVOPS_PAT=your_token_here uv run mcp dev src/code_understanding/mcp/server/app.py

# With both GitHub and Azure DevOps authentication:
GITHUB_PERSONAL_ACCESS_TOKEN=github_token AZURE_DEVOPS_PAT=azure_token uv run mcp dev src/code_understanding/mcp/server/app.py

This will launch an interactive console where you can test all MCP server endpoints directly.

Development Tools

The following development tools are available after installing with dev extras (.[dev]):

Run tests with coverage:

uv run pytest

Format code (using black and isort):

# Format with black
uv run black .

# Sort imports
uv run isort .

Type checking with mypy:

uv run mypy .

All tools are configured via pyproject.toml with settings optimized for this project.

Publishing to PyPI

When you're ready to publish a new version to PyPI, follow these steps:

  1. Update the version number in pyproject.toml:

    # Edit pyproject.toml and change the version field
    # For example: version = "0.1.1"
  2. Clean previous build artifacts:

    # Remove previous distribution packages and build directories
    rm -rf dist/ 2>/dev/null || true
    rm -rf build/ 2>/dev/null || true
    rm -rf src/*.egg-info/ 2>/dev/null || true
  3. Build the distribution packages:

    uv run python -m build
  4. Verify the built packages:

    ls dist/
  5. Upload to PyPI (use TestPyPI first if unsure):

    # Install twine if you haven't already
    uv pip install twine
    
    # For PyPI release:
    uv run python -m twine upload dist/*

You'll need PyPI credentials configured or you'll be prompted to enter them during upload.

Version History

v0.1.6 (Latest)

  • Dependency Fix: Explicitly pinned configargparse==1.7 to resolve installation issues caused by the yanked version in PyPI

  • This ensures clean installation with uvx and other package managers by preventing dependency resolution failures

  • No functional changes to the server capabilities

License

MIT

Acknowledgments

This project was originally inspired by mcp-code-understanding.

Webhook Integration

The MCP server supports webhook-triggered repository refreshes via a secure HTTP endpoint. This allows external systems (e.g., GitHub) to notify the server of repository changes and trigger an immediate refresh.

Webhook Endpoint

  • URL: /webhook (POST)

  • Purpose: Trigger a refresh of the repository specified in the webhook payload.

  • Supported Providers: GitHub (push events)

Common issues? Check the Troubleshooting section below for quick tips.

Example: GitHub Webhook Setup

  1. Go to your repository's Settings > Webhooks in GitHub.

  2. Add a new webhook with the following settings:

  • Payload URL: https://your-server-domain/webhook

  • Content type: application/json

  • Secret: Set to a strong random value (see below)

  • Events: Choose "Just the push event" or as needed

Security: HMAC Signature Validation

The server validates incoming webhook requests using HMAC-SHA256 signatures. You must set the WEBHOOK_SECRET environment variable to match the secret configured in your webhook provider (e.g., GitHub).

Environment Variable:

export WEBHOOK_SECRET="your-strong-secret"

Validation:

  • The server checks the X-Hub-Signature-256 header against the request body using the shared secret.

  • Requests with missing or invalid signatures are rejected with HTTP 401 Unauthorized.

Payload Parsing

  • The server extracts the repository clone URL from the webhook payload (currently supports GitHub push events).

  • If the repository cannot be parsed, the server returns HTTP 400 Bad Request.

Refresh Logic

  • If the repository is found in the cache, the server triggers a refresh (git pull).

  • If not found, the server attempts to clone it.

  • Success returns HTTP 200 with commit info; errors return appropriate status codes.

Example Request

curl -X POST https://your-server-domain/webhook \
  -H "Content-Type: application/json" \
  -H "X-Hub-Signature-256: sha256=..." \
  -d '{ "repository": { "clone_url": "https://github.com/user/repo.git" }, ... }'

Configuration Reference

  • Set WEBHOOK_SECRET in your environment for production use.

  • The endpoint is enabled by default when running the server.

Troubleshooting

  • 401 Unauthorized: Check that your webhook secret matches WEBHOOK_SECRET and the signature is correct.

  • 400 Bad Request: Ensure the payload includes a valid repository.clone_url field.

  • 500 Internal Server Error: Indicates a problem with repository access or refresh logic.

---# Testing webhook

Available Tools

14 tools
clone_repoA

Initialize a repository for analysis by copying it to MCP's cache. This is a prerequisite for all other analysis tools.

WHEN TO USE:

  • First time analyzing a repository

  • When explicitly switching cache strategies

  • NOT needed if already cloned (check with list_repos first if unsure)

RETURNS:

  • 'already_cloned': Repository ready for analysis, no action needed

  • 'pending': Clone started, will complete in background. You can proceed with other tools

  • 'switched_branch': Branch changed successfully (shared cache only)

  • 'error': Operation failed, see error message

CACHE STRATEGIES:

  • 'shared' (default): One cache per repo, can switch branches in-place

  • 'per-branch': Separate cache for each branch, useful for comparing branches

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
branchNo
cache_strategyNoshared

TDQS

A5/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It discloses return values ('already_cloned', 'pending', 'switched_branch', 'error'), asynchronous behavior ('pending' means background completion), and cache strategy nuances. This is rich behavioral context beyond the schema.

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 clear sections (main sentence, WHEN TO USE, RETURNS, CACHE STRATEGIES). Each section adds distinct value without redundancy, and the key point (prerequisite) is front-loaded.

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?

With no output schema, the description adequately explains all possible return states. It also covers when to use, cache strategies, and prerequisites. For a tool with moderate complexity, this is complete and self-contained.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It explains cache_strategy in detail (shared vs per-branch), branch behavior via return values and cache strategy, and URL is self-evident. This fully covers parameter meaning.

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 initializes a repository for analysis by copying it to MCP's cache, and explicitly notes it is a prerequisite for all other analysis tools. This distinguishes it from sibling tools like list_repos and get_repo_file_content.

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?

Provides a dedicated WHEN TO USE section specifying first-time analysis, cache strategy switching, and explicitly says it is not needed if already cloned—directing users to check with list_repos. This gives clear usage context and an alternative.

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

delete_repoA

Remove a cached repository from the MCP server's cache, including all associated metadata and analysis results.

⚠️ DESTRUCTIVE OPERATION: This permanently removes cached repositories and cannot be undone.

WHAT IT DOES:

  • Removes ALL cached versions of the repository (shared and per-branch cache entries)

  • Deletes associated metadata including clone status and analysis results

  • Frees up disk space and cache slots

  • Cleans up in-memory references

IDENTIFICATION METHODS:

PARAMETER:

  • repo_identifier: Repository URL or direct cache path to identify which repository to delete

USE CASES:

  • Clean up repositories no longer needed for analysis

  • Free cache space when approaching maximum cached repositories limit

  • Remove corrupted or problematic cache entries

  • Cache management and maintenance operations

NOTE: After deletion, the repository will need to be re-cloned via clone_repo before it can be analyzed again.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_identifierYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility for behavioral disclosure. It goes above and beyond by warning 'DESTRUCTIVE OPERATION: This permanently removes cached repositories and cannot be undone,' and details the full scope of deletion (all cached versions, metadata, analysis results, disk space, in-memory references). It also explains identification methods and consequences, providing excellent 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 well-structured with a concise opening statement, a prominent warning, and logically grouped sections (WHAT IT DOES, IDENTIFICATION METHODS, PARAMETER, USE CASES, NOTE). Every sentence adds value and the formatting enhances readability without unnecessary fluff. The front-loaded warning is appropriate for a destructive tool.

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 simple one-parameter deletion tool with no output schema or annotations, the description is thoroughly complete. It covers the operation's effect, the irreversible nature, the parameter format, example usage, and the re-clone requirement. This provides an agent with all necessary context 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.

Parameters5/5

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

The input schema provides only a bare string parameter name 'repo_identifier' with no description (0% coverage). The description fully compensates with a dedicated PARAMETER section explaining that it accepts a repository URL or direct cache path, plus examples of both. This gives the agent everything needed to construct valid input.

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: 'Remove a cached repository from the MCP server's cache, including all associated metadata and analysis results.' The verb 'Remove' is specific and distinct from sibling tools like clone_repo or refresh_repo. It also explicitly warns this is a destructive operation, 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 Guidelines4/5

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

The description provides clear use cases ('Clean up repositories no longer needed for analysis', 'Free cache space', 'Remove corrupted entries') and notes that after deletion the repo must be re-cloned via clone_repo. While it doesn't explicitly list excluded scenarios or alternatives, the context is strong enough for an agent to decide when to use it.

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

get_auto_refresh_statusA

Get the current status of the auto-refresh system.

    Returns information about:
    - Whether auto-refresh is enabled and running
    - Number of repositories scheduled for refresh
    - Next scheduled refresh times
    - Configuration settings
    - Recent refresh activity
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/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. The verb 'Get' and the listing of returned status categories imply a non-mutating read operation, offering useful behavioral context. However, it doesn't explicitly confirm read-only status or mention potential edge cases like system not running.

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 concise and front-loaded, with a clear main statement followed by a bulleted list of return categories. No redundant or missing content.

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 simple zero-parameter tool without an output schema, the description provides a comprehensive overview of the return information. It sufficiently covers what the agent needs to know about the tool's functionality in context of its siblings.

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?

There are zero parameters, so the baseline is 4. The description appropriately focuses on return value categories rather than parameters, which adds no additional semantics needed for an empty 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 retrieves the current auto-refresh system status, listing specific information categories. It distinguishes from sibling action tools (start/stop/refresh) by being the status read mechanism.

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?

Usage is implied as the read-only counterpart to start/stop_auto_refresh, but there is no explicit when-to-use guidance or mention of alternatives. The context signals provide sibling names, but the description itself doesn't direct when to choose this tool.

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

get_repo_critical_filesA

Identify and analyze the most structurally significant files in a repository to guide code understanding efforts.

PARAMETER:

RESPONSE CHARACTERISTICS:

  1. Analysis Metrics:

    • Calculates importance scores based on:

      • Function count (weight: 2.0)

      • Total cyclomatic complexity (weight: 1.5)

      • Maximum cyclomatic complexity (weight: 1.2)

      • Lines of code (weight: 0.05)

    • Provides detailed metrics per file

    • Ranks files by composite importance score

  2. Resource Management:

    • Repository must be previously cloned via clone_repo

    • Analysis performed on-demand using Lizard

    • Efficient for both small and large codebases

    • Supports both full-repo and targeted analysis

  3. Scope Control Options:

    • 'files': Analyze specific files. If only this is provided, the entire repository will be searched for matching file names.

    • 'directories': Analyze all source files within specific directories.

    • If BOTH 'files' and 'directories' are provided, the tool will perform an INTERSECTION, analyzing only the files named in 'files' that are also located within the specified 'directories'.

    • 'limit': Control maximum results returned.

  4. Response Metadata:

    • Total files analyzed

    • Analysis completion status

NOTE: This tool is designed to guide initial codebase exploration by identifying structurally significant files. Results can be used to target subsequent get_source_repo_map calls for detailed analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNo
limitNo
repo_pathYes
directoriesNo
include_metricsNo

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and excels. It reveals internal behavior such as the exact weighted scoring formula (function count, cyclomatic complexity, LOC), use of Lizard for on-demand analysis, and the intersection scope logic when both files and directories are supplied.

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-organized with clear sections (PARAMETER, RESPONSE CHARACTERISTICS, Scope Control, NOTE) and front-loaded purpose. Every sentence adds value, covering prerequisites, metrics, scope semantics, and output metadata without fluff.

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 output schema exists, the description thoroughly explains response characteristics: metric details, ranking, and response metadata. It also covers prerequisites, scope control nuances, and overall use-case context. The only minor gap is include_metrics, but overall the description is remarkably complete for a complex tool.

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 description provides substantial semantic value for repo_path (with examples and auto-normalization), files, directories, and limit. It explains the intersection behavior and repo-wide search for files. However, include_metrics is not mentioned at all, leaving its meaning to inference despite being a parameter.

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 first sentence clearly states the tool's purpose: to identify and analyze the most structurally significant files in a repository to guide code understanding. It distinguishes itself from siblings like get_source_repo_map by positioning itself as an initial exploration tool whose results feed into subsequent, more detailed analysis calls.

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 NOTE explicitly states it is designed for initial codebase exploration and mentions how results can be used to target subsequent get_source_repo_map calls. It also provides a clear prerequisite: the repository must be previously cloned via clone_repo, and describes supported analysis modes (full-repo vs. targeted).

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

get_repo_documentationB

Retrieve and analyze documentation files from a repository, including README files, API docs, design documents, and other documentation. Repository must be previously cloned via clone_repo.

PARAMETER:

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'retrieve and analyze' but does not explicitly indicate whether this is a read-only operation, whether it modifies the repository, or what side effects might occur. The prerequisite about cloning is present, but it does not disclose safety or side-effect behavior.

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 relatively concise, with a clear first sentence and a structured parameter section. The formatting is slightly unconventional for a description, but every sentence conveys useful information without unnecessary padding.

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?

Even though the tool is moderately simple, it has no output schema and no annotations. The description does not explain what the tool returns or what 'analyze' produces (e.g., extracted text, summaries, file paths), leaving a significant gap for an agent deciding how to use the output. The prerequisite is stated, but return semantics are missing.

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 has a single parameter (repo_path) with zero description coverage, but the description compensates by providing a dedicated PARAMETER section explaining the accepted formats (GitHub URL, Azure DevOps URL, local path) and including concrete examples. This adds meaningful value beyond the bare schema definition.

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 retrieves and analyzes documentation files from a repository, listing specific types like README and API docs. However, it does not explicitly differentiate from sibling tools such as get_repo_file_content or get_repo_structure, so it falls short of a 5.

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

Usage Guidelines4/5

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

The description gives a clear prerequisite: the repository must be previously cloned via clone_repo. It does not mention when to use this tool over alternatives or provide exclusions, but the enforcement of the clone prerequisite provides useful usage context.

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

get_repo_file_contentA

Retrieve file contents or directory listings from a repository. For files, returns the complete file content. For directories, returns a non-recursive listing of immediate files and subdirectories.

PARAMETERS:

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNo
repo_pathYes
resource_pathNo
cache_strategyNoshared

TDQS

A3.7/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 for behavioral disclosure. It does disclose the non-recursive directory behavior and full file content return, but omits important aspects like error handling, branch selection behavior, cache strategy effect, and authentication requirements.

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-organized: a concise behavioral overview followed by a PARAMETERS section with examples. Every sentence adds useful information, and the structure makes it 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 core file/directory behavior well, but without an output schema or annotations it should also mention return format, error behavior, and branch/cache parameter implications. It also does not clarify when to use this instead of get_repo_structure, leaving some contextual gaps for a moderately configured 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 description adds valuable meaning for repo_path with concrete examples (GitHub URL, Azure DevOps URL, local path) and clarifies that resource_path defaults to the root directory. However, it completely omits branch and cache_strategy, leaving two of four parameters without any explanation beyond their names.

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 ('Retrieve') and clearly scopes the resource: file contents or directory listings from a repository. It further distinguishes behavior for files versus directories, which helps differentiate it from sibling tools like get_repo_structure and get_repo_critical_files.

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?

Usage context is implied through the file-vs-directory behavior, but there is no explicit guidance on when to prefer this tool over siblings such as get_repo_structure or list_repos. No exclusions or alternative tool names are mentioned, so the agent must infer when this tool is appropriate.

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

get_repo_statusA

Check if a repository is cloned and ready for analysis without triggering any operations.

USE THIS TO:

  • Check if a repository needs to be cloned

  • Verify if analysis is complete or in progress

  • See which branch is currently active

  • Understand the cache state before using other tools

RETURNS:

  • is_cloned: Whether the repository exists in cache

  • clone_status: Current state ('complete', 'cloning', 'failed', or None)

  • analysis_status: State of code analysis ('complete', 'building', or None)

  • current_branch: The active branch name

  • cache_strategy: Which strategy is being used

  • last_updated: When the repository was last accessed

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNo
repo_pathYes
cache_strategyNoshared

TDQS

A3.8/5.0
Behavior4/5

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

Since there are no annotations, the description carries the full burden of disclosing behavior. It explicitly states 'without triggering any operations,' which clearly conveys that this is a read-only, non-mutating check. It also lists all return fields, giving the agent a full picture of the response shape. It does not discuss error conditions or permissions, but for a simple status 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 and appropriately sized. It front-loads the purpose in a single sentence, then uses clear 'USE THIS TO' and 'RETURNS' sections to convey usage and output. Every sentence serves a purpose, and the formatting makes it 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 effectively covers the tool's purpose, usage scenarios, and return values, which is commendable given the absence of an output schema. However, it completely omits parameter semantics, leaving the agent without guidance on how to populate branch and cache_strategy. This is a notable gap for a tool with three parameters, making the description only moderately complete.

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

Parameters1/5

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

The description completely ignores the three parameters (repo_path, branch, cache_strategy). Schema description coverage is 0%, and the description does not compensate by explaining what these parameters do or how they affect the result. An agent would have to rely solely on the schema, which provides minimal help for branch and cache_strategy.

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 crystal-clear statement: 'Check if a repository is cloned and ready for analysis without triggering any operations.' This uses a specific verb and resource, and explicitly distinguishes the tool from mutating siblings like clone_repo and refresh_repo by emphasizing it performs no operations. The RETURN fields further clarify the status-checking purpose.

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 'USE THIS TO' section provides explicit, actionable use cases: checking if a repository needs cloning, verifying analysis status, inspecting the active branch, and understanding cache state before using other tools. This gives solid contextual guidance, but it does not name alternative tools or state when not to use this tool, so it stops short of the top score.

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

get_repo_structureA

Retrieve directory structure and analyzable file counts for a repository to guide analysis decisions.

PARAMETER:

RESPONSE CHARACTERISTICS:

  1. Directory Information:

  • Lists directories containing analyzable source code

  • Reports number of analyzable files per directory

  • Shows directory hierarchy

  • Indicates file extensions present in each location

  1. Usage:

  • Requires repository to be previously cloned via clone_repo

  • Helps identify main code directories

  • Supports planning targeted analysis

  • Shows where analyzable code is located

NOTE: Use this tool to understand repository structure and choose which directories to analyze in detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNo
repo_pathYes
directoriesNo
include_filesNo
cache_strategyNoshared

TDQS

A3.9/5.0
Behavior4/5

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

Without annotations, the description carries the full burden. It discloses that the repository must be cloned first, that repo_path formats are normalized automatically, and describes response characteristics (directory hierarchy, file counts, extensions). It does not mention side effects (likely none) or how optional parameters affect output, but it provides meaningful behavioral context beyond the tool's basic function.

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 clear sections (parameter, response characteristics, usage, note). It is a bit verbose and repeats the usage intent in multiple bullets, but overall it is organized and each section adds value without requiring extensive trimming.

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 has 5 parameters and no output schema, the description should cover all parameters and return behavior. It explains repo_path and gives a high-level summary of response characteristics, but omits the other four parameters. This makes it incomplete for a tool of this complexity, though it does provide enough context for the main use case.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It only documents repo_path with examples and normalization behavior, which is helpful for the required parameter. However, it completely ignores the other four parameters (branch, directories, include_files, cache_strategy), leaving their meaning and effect undocumented. This is a significant gap given the number of 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 clearly states the tool retrieves directory structure and analyzable file counts for a repository, which is a specific verb and resource. It distinguishes itself from sibling tools like get_repo_file_content or get_repo_critical_files by focusing on structure and file counts rather than content or critical 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 provides clear usage context: it is for understanding repository structure and deciding which directories to analyze in detail. It also states a prerequisite (requires prior cloning via clone_repo). However, it does not explicitly exclude other tools or mention when not to use it, so it falls 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.

get_source_repo_mapA

Retrieve a semantic analysis map of the repository's source code structure, including file hierarchy, functions, classes, and their relationships. Repository must be previously cloned via clone_repo.

PARAMETER:

RESPONSE CHARACTERISTICS:

  1. Status Types:

  • "threshold_exceeded": Indicates analysis scope exceeds processing limits

  • "building": Analysis in progress

  • "waiting": Waiting for prerequisite operation

  • "success": Analysis complete

  • "error": Operation failed

  1. Resource Management:

  • Repository size impacts processing time and token usage

  • 'max_tokens' parameter provides approximate control of response size Note: Actual token count may vary slightly above or below specified limit

  • File count threshold exists to prevent overload

  • Processing time scales with both file count and max_tokens Important: Clients should adjust their timeout values proportionally when:

    • Analyzing larger numbers of files

    • Specifying higher max_tokens values

    • Working with complex repositories

  1. Scope Control Options:

  • 'files': Analyze specific files. If only this is provided, the entire repository will be searched for matching file names.

  • 'directories': Analyze all source files within specific directories.

  • If BOTH 'files' and 'directories' are provided, the tool will perform an INTERSECTION, analyzing only the files named in 'files' that are also located within the specified 'directories'.

  1. Response Metadata:

  • Contains processing statistics and limitation details

  • Provides override_guidance when thresholds are exceeded

  • Reports excluded files and completion status

NOTE: This tool supports both broad and focused analysis strategies. Response handling can be adapted based on specific use case requirements and user preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNo
branchNo
repo_pathYes
max_tokensNo
directoriesNo
cache_strategyNoshared

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers rich behavioral details: status types (threshold_exceeded, building, waiting, success, error), resource management implications (token usage, timeout adjustments, file count thresholds), and scope intersection behavior. It also discloses response metadata (override_guidance, excluded files, completion status). No contradictions with annotations exist.

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 sections (PARAMETER, RESPONSE CHARACTERISTICS, Scope Control Options, Response Metadata) and front-loaded with a clear purpose statement. It is somewhat verbose and slightly redundant (e.g., resource management points overlap), but each section adds relevant operational information. It earns its length for a complex tool, though it could be tightened.

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 complexity (6 parameters, no output schema, no annotations), the description provides extensive context: prerequisite, behavioral statuses, resource trade-offs, scope controls, and metadata. It is missing explicit coverage of the branch and cache_strategy parameters, and the response format beyond status types isn't described. Still, it gives enough for an agent to select and invoke the tool correctly in most scenarios.

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 description compensates for the 0% schema coverage by explaining repo_path with examples and normalization, files/directories with intersection logic, and max_tokens with token control nuances. However, it omits documentation for 'branch' and 'cache_strategy' parameters, leaving two of six parameters semantically unexplained. Overall, the semantic coverage is strong but incomplete.

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 it 'Retrieve[s] a semantic analysis map of the repository's source code structure, including file hierarchy, functions, classes, and their relationships.' This is a specific verb and resource, distinct from sibling tools like get_repo_structure or get_repo_documentation. The prerequisite mention ('must be previously cloned via clone_repo') further clarifies the context.

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 by stating that the repository must be cloned first, and details scope control options (files, directories, intersection) with a note supporting 'broad and focused analysis strategies.' It does not explicitly name alternative tools or state when not to use this tool, but the context is sufficient. There is an implicit exclusion: if the repo isn't cloned, you should use clone_repo first.

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

list_reposA

List all repositories currently in the MCP server's cache with their complete metadata including clone status, analysis status, branches, and cache sizes.

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?

Since no annotations are provided, the description carries the full burden. It adds useful context by indicating that the data comes from the server's cache and enumerates the metadata fields (clone status, analysis status, branches, cache sizes), giving the agent a clear picture of what to expect without requiring an output schema.

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 conveys all essential information without redundancy. It efficiently states the action, scope, and return content.

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 simple, parameterless tool with no output schema, the description is complete. It explains the exact return value (all cached repos with specific metadata fields) and the nature of the data (from cache), leaving no significant 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?

The tool accepts zero parameters, so parameter semantics are trivial. The baseline score of 4 applies, and the description adds no parameter information because none is needed; it focuses on the tool's result.

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 action (list) and the resource (all repositories in the MCP server's cache) and specifies the included metadata. It distinguishes itself from sibling tools like get_repo_status or list_repository_branches, which focus on a single repository or its branches.

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 clearly implies this is the tool to use when you want an overview of all cached repositories. However, it does not explicitly state when not to use it or mention alternatives, such as using get_repo_status for a single repository's status.

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

list_repository_branchesB

List all cached versions of a repository across different branches. Shows information about each cached branch including paths, strategies, and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_urlYes

TDQS

B3.2/5.0
Behavior3/5

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

The description mentions 'cached' versions, which indicates that the data may be stale or local-only, providing some behavioral insight beyond the annotations (which are absent). However, it does not disclose other important traits such as whether the operation is read-only, any permission requirements, or whether it triggers network calls. The burden is partially met but not fully.

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

Conciseness4/5

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

The description is concise at two sentences and front-loads the main purpose. It avoids redundancy but the phrase 'cached versions of a repository across different branches' is slightly convoluted and could be simplified to 'list cached branches'. Still, it is compact and structured effectively.

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 there is no output schema, the description reasonably explains what the tool returns (paths, strategies, metadata). It does not elaborate on error conditions, pagination, or response format, but for a simple list operation with one parameter, it covers the essential context adequately.

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 a single param repo_url with 0% description coverage, so the description should compensate. It does not mention repo_url at all, but the parameter is self-explanatory given the tool's focus on 'repository'. The description adds minimal semantic value beyond the schema, which already labels the parameter as 'Repo Url'.

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 tool as listing cached branches with metadata, using the verb 'List' and specifying the resource (repository branches). It distinguishes this from sibling tools like list_repos (which lists repositories) and get_repo_structure (which is about structure). The phrase 'cached versions' is somewhat ambiguous but the follow-up 'cached branch' clarifies intent.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives. The description does not mention any use cases, prerequisites, or exclusions. While the tool name implies its purpose, the description fails to provide context on when it is the appropriate choice among the many sibling tools.

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

refresh_repoA

⚠️ MANUAL SYNC ONLY: Update a repository with latest changes. Only use when explicitly requested by the user.

IMPORTANT:

  • DO NOT use this automatically or proactively

  • ONLY use when user explicitly asks to "refresh", "sync", or "update" the repository

  • The initial clone already provides the latest code - no refresh needed after cloning

WHAT IT DOES:

  • Git repos: Performs git pull to fetch latest commits

  • Local dirs: Re-copies from source directory

  • Triggers re-analysis of changed files

PARAMETER:

ParametersJSON Schema
NameRequiredDescriptionDefault
branchNo
repo_pathYes
cache_strategyNoshared

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 explains the underlying behavior: git pull for git repos, re-copy for local dirs, and triggering re-analysis. However, it does not disclose potential side effects like merge conflicts or overwriting local changes, leaving gaps in 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 uses a clear warning banner, bullet points, and headings, presenting information in a scannable format. It is slightly repetitive with the warning, but overall every section earns its place.

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 strong purpose and usage guidance, the description is incomplete for a 3-parameter tool without an output schema or annotations. It omits behavior for branch and cache_strategy, does not describe expected outcomes or errors, and lacks information on return values, making it inadequate for full autonomous invocation.

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

Parameters2/5

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

Schema coverage is 0%; the description only documents repo_path with examples, while branch and cache_strategy are entirely omitted. Given that the schema itself also lacks descriptions, this is insufficient for an agent to correctly set all 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 clearly states the tool 'Update a repository with latest changes' and distinguishes it from sibling operations by emphasizing 'MANUAL SYNC ONLY' and noting that cloning already provides latest code. This leaves no doubt about the tool's specific 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?

It explicitly says to use only when the user requests 'refresh', 'sync', or 'update', and warns against automatic/proactive use. It also notes that refresh is unnecessary after cloning. While it does not name alternative tools like start_auto_refresh, the guidance is clear and actionable.

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

start_auto_refreshA

Manually start the auto-refresh system if it's not already running.

    This is typically not needed as auto-refresh starts automatically with the server,
    but can be useful for recovery scenarios or manual management.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/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 burden of behavioral disclosure. It transparently indicates the conditional behavior ('if it's not already running') and notes that it is a manual override for an otherwise automatic process. However, it does not mention what happens if the system is already running (e.g., no-op, error) or describe the output/return value, so it is not a full 5.

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 purpose in the first sentence and contextual guidance in the second. Every sentence earns its place, with no fluff or repetition.

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 that this is a simple, zero-parameter control action with no output schema, the description is sufficiently complete. It explains what the tool does, why it might be needed, and when to use it, making it self-contained for an agent to decide 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, so the baseline is 4 according to the rubric. The description adds no parameter-specific information (none needed), but it compensates by explaining the tool's purpose and context, making it clear that no inputs are required.

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: 'Manually start the auto-refresh system if it's not already running.' It specifies the verb (start), the resource (auto-refresh system), and a condition (if not already running), which distinguishes it from sibling tools like stop_auto_refresh and get_auto_refresh_status.

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 provides guidance on when to use and when not to use the tool: 'This is typically not needed as auto-refresh starts automatically with the server, but can be useful for recovery scenarios or manual management.' This clearly differentiates it from alternatives and gives concrete use cases.

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

stop_auto_refreshA

Manually stop the auto-refresh system.

    This will cancel all scheduled refreshes and stop the background worker.
    Repositories will no longer be automatically refreshed until the system is restarted.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral consequences: cancels scheduled refreshes, stops the background worker, and remains inactive until restart. This provides clear side-effect awareness beyond the tool name.

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 key action, and every sentence adds essential context (scope and consequences). No filler 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?

For a zero-parameter, no-output tool, the description covers purpose, side effects, and persistence until restart. It is fully sufficient for an agent to select and invoke this tool correctly.

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 the input schema is empty, so there is nothing to explain. The baseline of 4 applies as the description need not add parameter details.

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 'stop' with resource 'auto-refresh system', clearly stating the tool's function. It naturally distinguishes from sibling tools like start_auto_refresh and get_auto_refresh_status by naming the action it performs.

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 implies usage context by stating 'Manually stop' and explaining the effect on repositories ('no longer automatically refreshed'). It does not explicitly name alternatives or exclusions, but the action is unique among siblings, so the usage is clear enough.

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. Dates show when Glama detected each change.

  1. 14 tool updatesv0.3.0
    • First observedclone_repo
    • First observeddelete_repo
    • First observedget_auto_refresh_status
    • First observedget_repo_critical_files
    • First observedget_repo_documentation
    • First observedget_repo_file_content
    • First observedget_repo_status
    • First observedget_repo_structure
    • First observedget_source_repo_map
    • First observedlist_repos
    • First observedlist_repository_branches
    • First observedrefresh_repo
    • First observedstart_auto_refresh
    • First observedstop_auto_refresh

TDQS

A4/5.0
Disambiguation4/5

Tools are mostly distinct, but there is some overlap between list_repos, get_repo_status, and list_repository_branches for repository status and branch information. Additionally, get_repo_file_content and get_repo_structure both provide directory listings, though they serve different purposes. Descriptions help clarify when to use each.

Naming Consistency4/5

The majority of tools follow a verb_noun pattern (list_, get_, delete_, clone_, start_, stop_). Minor deviations include 'list_repos' using an abbreviation and 'get_source_repo_map' breaking the 'get_repo_*' pattern. Overall, naming is predictable and consistent.

Tool Count5/5

14 tools is an appropriate number for a server focused on repository lifecycle management and code analysis. Each tool serves a clear purpose without unnecessary bloat, and the count fits within the well-scoped range.

Completeness5/5

The server provides complete CRUD for cached repositories (clone, refresh, delete, get status) and a comprehensive set of analysis tools (structure, critical files, source map, documentation, file content). The domain is fully covered with no obvious dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

  • F
    license
    Not graded
    quality
    C
    maintenance
    Intelligently analyzes codebases to enhance LLM prompts with relevant context, featuring adaptive context management and task detection to produce higher quality AI responses.
    2
    -
  • A
    license
    A
    quality
    D
    maintenance
    Provides intelligent code context and analysis through semantic compression, AST parsing, and multi-language support. Offers 60-80% token reduction while enabling AI assistants to understand codebases through local analysis, OpenAI-enhanced insights, and GitHub repository integration.
    6
    22
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI coding assistants with deep, semantic understanding of local codebases via AST-aware chunking, cross-repo symbol graphs, and architectural memory, enabling context-aware code search and dependency tracing.
    10
    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/lfnovo/code-expert-mcp'

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