Skip to main content
Glama

Repo Therapist 🛋️

让你的代码库在压力下自我解释

此 MCP 服务器完全使用 Cursor 构建

Repo Therapist 是一个 MCP(模型上下文协议)服务器,可将任何代码仓库转化为可查询、可解释的知识库。通过 Cursor 询问有关代码库的问题,并获得结构化、深刻的答案。

它能做什么

你可以向 Cursor 询问诸如:

  • “为什么这个服务要这样构建?”

  • “如果我删除了这个,会破坏什么?”

  • “这个仓库的哪些部分让你感到担忧?”

在后台,Repo Therapist 会:

  • 读取你的仓库结构和文件

  • 分析 git 历史和提交模式

  • 将代码与变更频率相关联

  • 识别复杂性热点和风险

Related MCP server: Code Understanding MCP Server

可用工具

工具

描述

analyze_repo(path)

分析仓库 - 请先运行此项

get_snapshot(section?)

获取仓库的静态快照(事实依据)

get_history(section?)

获取 git 历史分析(时间维度)

why_is_this_weird(file_path)

解释特定文件为何如此

ask_repo(question)

询问有关已分析仓库的任何问题

repo_summary()

获取高层级概述

risk_report()

生成风险评估报告

事实依据:快照

当你运行 analyze_repo 时,Repo Therapist 会创建一个静态快照 - 这是关于你仓库的权威事实来源。此快照包括:

{
  "files": [...],           // Every file with path, language, line count
  "languages": {...},       // Language breakdown with percentages
  "entryPoints": [...],     // Detected entry points with confidence levels
  "configs": {...},         // Parsed package.json, tsconfig, Dockerfile, CI configs
  "directories": [...]      // Directory structure with inferred purposes
}

为什么这很重要: 大语言模型(LLM)必须引用此快照数据,而不是进行猜测。当你问“这个仓库使用什么语言?”时,答案来自快照,而不是 LLM 的假设。

使用 get_snapshot 获取特定部分:

  • get_snapshot(section: "files") - 带有元数据的所有文件

  • get_snapshot(section: "languages") - 语言统计信息

  • get_snapshot(section: "entryPoints") - 检测到的入口点

  • get_snapshot(section: "configs") - 解析后的配置文件

  • get_snapshot(section: "directories") - 目录结构

  • get_snapshot() - 所有内容的摘要

Git 历史学家:时间维度

Git 历史学家分析提交历史,以解释代码为什么是现在这个样子。这就是它变得强大的地方。

{
  "fileChurn": { "auth.ts": { "totalCommits": 47, "churnScore": 85 } },
  "authors": { "auth.ts": ["alice", "bob", "charlie"] },
  "fragileFiles": [{ "path": "auth.ts", "reasons": ["high-churn", "many-authors"] }],
  "hotPaths": [...],
  "stableCore": [...]
}

这让你能够回答:

  • “为什么这很奇怪?” → “因为它在 6 个月内被重写了 12 次。”

  • “谁拥有这个文件?” → “有争议 - 4 个人修改过它,没有人的修改占比超过 30%。”

  • “我应该小心什么?” → “这 5 个文件很脆弱且容易出错。”

使用 get_history 获取特定方面:

  • get_history(section: "churn") - 文件变更频率和波动性

  • get_history(section: "authors") - 贡献者统计信息

  • get_history(section: "fragile") - 可能导致问题的文件

  • get_history(section: "hotPaths") - 热点路径与稳定核心

  • get_history(section: "timeline") - 关键事件和提交模式

  • get_history(section: "ownership") - 谁拥有什么

  • get_history() - 所有内容的摘要

使用 why_is_this_weird 进行特定文件分析:

Use why_is_this_weird on "src/auth/login.ts"

返回带有引用的详细解释:

# Why is "src/auth/login.ts" the way it is?

## Change History
- Total commits: 47
- Authors: 5 (alice, bob, charlie, dave, eve)
- Churn score: 85 ⚠️ HIGH

## 🔍 Why It's Unusual
**Heavily modified:** This file has been changed 47 times...
**Many hands:** 5 different people have modified this file...

设置

1. 安装依赖

cd repo-therapist
npm install

2. 构建项目

npm run build

3. 添加到 Cursor

打开 Cursor 设置 → MCP → 添加新的 MCP 服务器:

{
  "mcpServers": {
    "repo-therapist": {
      "command": "node",
      "args": ["/FULL/PATH/TO/repo-therapist/dist/index.js"]
    }
  }
}

重要: 将 /FULL/PATH/TO/ 替换为你 repo-therapist 文件夹的实际绝对路径。

示例:

{
  "mcpServers": {
    "repo-therapist": {
      "command": "node",
      "args": ["/Users/saar/Projects/private/repo-therapist/dist/index.js"]
    }
  }
}

4. 重启 Cursor

添加 MCP 配置后,重启 Cursor 以使更改生效。

常见问题

我需要单独运行 repo-therapist 吗?

不需要。 Cursor 会自动为你启动并管理 MCP 服务器。当你将配置添加到 Cursor 的 MCP 设置中时,Cursor 将:

  • 在需要时启动 node dist/index.js 进程

  • 使其在后台运行

  • 通过 stdio(标准输入/输出)与它通信

你只需要构建一次 (npm run build),添加配置,然后重启 Cursor。就是这样。

我在哪里提问?

在正常的 Cursor 聊天中 (Cmd+L 或聊天面板)。区别在于你如何提问:

  • 没有 MCP: “这个仓库是做什么的?” → Cursor 使用其内置工具

  • 使用 Repo Therapist: “在 /path/to/repo 上使用 analyze_repo” → Cursor 调用 MCP 工具

你明确告诉 Cursor 使用 repo-therapist 工具。Cursor 将它们视为它可以使用的额外功能。

它与普通 Cursor 聊天有什么区别?

普通 Cursor 聊天

使用 Repo Therapist

按需读取文件

预先分析整个仓库结构

没有 git 历史意识

分析提交模式和变更频率

基于读取的内容回答

基于结构化分析回答

没有风险检测

识别复杂性热点

通用的代码理解

领域特定的见解(“什么让你感到担忧?”)

关键区别: Repo Therapist 会预先进行结构化分析并将其存储起来,因此像“哪些文件变更最频繁?”或“有哪些风险?”这样的问题可以从预先计算的数据中得到回答,而不是让 Cursor 每次都去计算。

可以这样理解:Cursor 很聪明但很被动。Repo Therapist 为它提供了一份关于你代码库的“简报文档”,它可以参考这份文档。

使用方法

配置完成后,你可以在 Cursor 聊天中使用 Repo Therapist:

第 1 步:分析仓库

首先,分析你想要探索的仓库:

Use analyze_repo to analyze /path/to/some/repo

第 2 步:提问

现在你可以提问了:

Use ask_repo to answer: "What does this repo do?"
Use ask_repo to answer: "Which parts of this repo scare you?"
Use ask_repo to answer: "What will break if I remove the auth module?"

第 3 步:获取报告

获取摘要:

Use repo_summary to show me an overview

获取风险评估:

Use risk_report to identify potential issues

示例问题

  • “这个仓库是做什么的?”

  • “代码是如何构建的?”

  • “使用了什么技术栈?”

  • “向我展示依赖项”

  • “哪些文件最大?”

  • “哪些文件变更最频繁?”

  • “贡献者是谁?”

  • “最近的提交是什么?”

  • “哪些部分让你感到担忧?”

  • “如果我更改 X,会破坏什么?”

开发

在开发模式下运行

npm run dev

构建生产版本

npm run build

运行测试

npm test              # Run all tests
npm run test:watch    # Run tests in watch mode
npm run test:coverage # Run tests with coverage report

测试指南

注意: 实现新功能时请务必添加单元测试。

测试位于 tests/ 中并使用 Vitest。测试结构与源代码镜像:

tests/
├── fixtures/           # Test utilities and mock repos
│   └── setup.ts        # Helper functions for creating test repos
├── scanner/            # Scanner module tests
├── historian/          # Historian module tests
├── tools/              # Tool tests
└── cache.test.ts       # Cache tests

添加新功能时:

  1. 在相应的 tests/ 子目录中创建测试

  2. 对于 git 相关测试,使用 fixtures/setup.ts 中的 createTestRepo()

  3. 在 afterAll 中使用 cleanupTestRepo() 清理测试仓库

  4. 在提交前运行 npm test 以验证所有测试通过

项目结构

repo-therapist/
├── src/
│   ├── index.ts              # MCP server entry point
│   ├── cache.ts              # In-memory repo cache
│   ├── types.ts              # TypeScript interfaces
│   ├── scanner/              # Static snapshot engine (Step 2)
│   │   ├── index.ts          # Scanner exports
│   │   ├── types.ts          # Snapshot type definitions
│   │   └── scan-repo.ts      # Repository scanner
│   ├── historian/            # Git history analyzer (Step 3)
│   │   ├── index.ts          # Historian exports
│   │   ├── types.ts          # History type definitions
│   │   └── analyze-history.ts # Git history analysis
│   └── tools/
│       ├── analyze-repo.ts   # Repository analyzer (orchestrates all)
│       ├── get-snapshot.ts   # Snapshot retrieval (ground truth)
│       ├── get-history.ts    # History retrieval (time dimension)
│       ├── ask-repo.ts       # Question answering
│       ├── repo-summary.ts   # Summary generator
│       └── risk-report.ts    # Risk assessment
├── tests/                    # Unit tests
│   ├── fixtures/             # Test utilities
│   ├── scanner/              # Scanner tests
│   ├── historian/            # Historian tests
│   └── tools/                # Tool tests
├── package.json
├── tsconfig.json
├── vitest.config.ts          # Test configuration
└── README.md

技术栈

  • TypeScript - 类型安全的代码库

  • @modelcontextprotocol/sdk - MCP 服务器实现

  • simple-git - Git 历史分析

  • ts-morph - TypeScript/JavaScript AST 解析(计划中)

  • glob - 文件模式匹配

路线图

  • [ ] 基于 AST 的代码分析 (ts-morph)

  • [ ] 将分析结果持久化到 JSON/SQLite

  • [ ] 依赖关系图可视化

  • [ ] 安全漏洞检测

  • [ ] 测试覆盖率分析

  • [ ] 自定义问题处理器

许可证

MIT

Available Tools

7 tools
analyze_repoA

Analyze a repository to understand its structure, dependencies, and git history. Run this first before asking questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the repository to analyze

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 full burden. It describes what the tool does (analyze structure, dependencies, git history) but does not disclose side effects, permissions, or output format. Adequate but lacks depth on behavioral traits like mutability or performance impact.

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

Conciseness5/5

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

Two sentences: first states purpose, second provides usage guidance. Extremely concise, front-loaded with essential information, no wasted words.

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 no output schema and no annotations, the description lacks details on what the analysis returns (e.g., report structure, how to use results). It hints at follow-up use ('before asking questions') but does not fully equip an agent to handle output.

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 only parameter, 'path', is described in the schema as 'Absolute path to the repository to analyze'. The description does not add extra meaning beyond what the schema already provides. With 100% schema coverage, 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 clearly states the tool analyzes a repository for structure, dependencies, and git history, and provides a usage directive ('Run this first before asking questions'), which distinctively positions it among siblings like ask_repo and get_history.

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 explicit usage guidance: run this before asking questions. It implies when to use but does not explicitly list alternatives or when not to use, though the sibling context partially compensates.

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

ask_repoC

Ask a question about an analyzed repository. Questions can be about structure, purpose, dependencies, patterns, or concerns.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional: path to repo if different from last analyzed
questionYesThe question to ask about the repository (e.g., 'What does this repo do?', 'Why is the auth service structured this way?')

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does not state that the tool is read-only, whether it requires prior analysis, or any side effects. The description lacks behavioral details beyond the basic action.

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 sentence that is concise and to the point. No unnecessary words or repetition.

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

Completeness2/5

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

With no output schema, the description should explain what the agent can expect as a response (e.g., an answer text). It also does not mention that the repository must be analyzed first, though sibling tools imply context. The description is incomplete for effective use.

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 schema already contains examples for the 'question' parameter. The description adds marginal value by listing question types, but those are similar to schema examples. Baseline 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 verb 'ask' and the resource 'repository', and provides examples of question categories (structure, purpose, etc.). However, it does not explicitly distinguish from sibling tools like 'repo_summary' or 'why_is_this_weird', which may also answer questions.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites (e.g., that the repository must have been analyzed first). It only states what the tool does.

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

get_historyB

Get git history analysis - the time dimension. Reveals WHY code is the way it is: file churn, ownership, fragile files, hot paths vs stable core.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional: path to repo if different from last analyzed
sectionNoWhich aspect of history to retrieve: 'churn' (file change frequency), 'authors' (contributor stats), 'fragile' (problem files), 'hotPaths' (volatile vs stable), 'timeline' (events), 'ownership' (who owns what), 'all' (summary).

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided; description carries full burden. It mentions what the tool reveals (churn, authorship, etc.) but omits behavioral details: whether it modifies state, requires authentication, or handles large repos. As a likely read-only analysis, this gap limits agent understanding.

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?

Single, front-loaded sentence with purpose and examples. Efficient but could briefly list alternative uses or output format.

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?

Lacks usage guidelines, output schema, and behavioral details. With six sibling tools, agent needs more context to choose correctly. Missing information on return format or prerequisites.

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 has 100% coverage with clear descriptions for both parameters (path, section with enums). Description adds no further semantic value beyond what the schema provides; baseline of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool's verb ('Get'), resource ('git history analysis'), and specific insights ('file churn, ownership, fragile files, hot paths vs stable core'). It emphasizes the 'time dimension', distinguishing it from sibling tools like get_snapshot or repo_summary.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives (e.g., analyze_repo, risk_report). The description hints at 'time dimension' but lacks exclusions or context for tool selection.

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

get_snapshotA

Get the static snapshot (ground truth) of the repository. This is the authoritative source - LLMs must cite this data, not guess. Use section parameter to get specific data.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional: path to repo if different from last analyzed
sectionNoWhich section of the snapshot to retrieve. 'all' returns a summary view.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It describes a read operation but does not disclose error handling, caching behavior, or response scope beyond inferring from section parameter.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and authoritative emphasis. No wasted words.

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

Completeness4/5

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

Given no output schema, the description conveys the tool's role as a source of truth. Could elaborate on return format, but sufficient for a simple retrieval tool with well-defined params.

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 covers 100% of parameters, baseline 3. The description adds 'Use section parameter' but does not provide additional meaning beyond the schema's enum or path description.

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 a static snapshot as the authoritative ground truth, distinguishing it from sibling tools that involve analysis or generation. It emphasizes this data should be cited, not guessed.

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 clear guidance on when to use (for ground truth) and suggests using the section parameter. However, no explicit when-not-to-use or alternatives, though siblings like analyze_repo imply different use cases.

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

repo_summaryB

Get a high-level summary of the analyzed repository including tech stack, structure, and key components.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional: path to repo if different from last analyzed

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits, but it only states the action. It does not mention that the tool requires a repository to have been analyzed, that it is read-only, or any constraints like 'last analyzed' implication.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no unnecessary words. It efficiently conveys the tool's purpose.

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 one optional parameter and no output schema, the description is minimally complete. However, it omits details about the output format and prerequisites (e.g., requiring prior analysis), which would be helpful for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, and the description does not add meaning beyond what is already in the schema for the 'path' parameter. The baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states it gets a high-level summary including tech stack, structure, and key components, which is specific and informative. However, it does not explicitly differentiate from sibling tools like ask_repo or analyze_repo, but the distinct purpose is inferable.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, nor any context about prerequisites (e.g., requiring a prior analysis). The description is purely declarative.

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

risk_reportC

Generate a risk assessment report identifying code smells, complexity hotspots, and areas that might cause problems.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional: path to repo if different from last analyzed

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose whether the tool is read-only, requires permissions, or has side effects. It only states it generates a report, leaving behavioral traits unclear.

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, concise sentence that directly states the tool's purpose without extraneous information.

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

Completeness2/5

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

Given the complexity of a risk assessment report, the description lacks details on the report's structure, output format, or behavior. It does not compensate for the absence of an output schema.

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

Parameters3/5

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

The single optional parameter 'path' is already fully described in the input schema. The tool description adds no additional meaning beyond the schema, achieving baseline for high coverage.

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 generates a risk assessment report focusing on code smells and complexity hotspots. However, it does not differentiate from sibling tools like analyze_repo or repo_summary, which may have overlapping purposes.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives such as analyze_repo, repo_summary, or why_is_this_weird. The description lacks context on appropriate use cases.

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

why_is_this_weirdA

Explain why a specific file is the way it is, based on git history. Answers questions like 'Why is this file so complex?' with data: 'Because it's been rewritten 12 times by 5 different people.'

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional: path to repo if different from last analyzed
file_pathYesThe relative path to the file to analyze (e.g., 'src/auth/login.ts')

TDQS

A3.8/5.0
Behavior3/5

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

The description indicates the tool uses git history to answer questions, but with no annotations, it does not disclose whether the tool modifies data, requires special permissions, or the exact nature of its operations. It is adequate but lacks full 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 concise, consisting of two sentences and an example. It is front-loaded with the primary purpose and efficiently conveys value without unnecessary words.

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

Completeness4/5

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

Given no output schema and a moderate number of parameters, the description explains the tool's behavior well, including an example output. However, it does not address edge cases like files with no history or error conditions, leaving some gaps.

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 has 100% description coverage for both parameters, so the schema itself provides parameter meaning. The description adds context about the analysis type (git history, complexity) but does not extend parameter semantics significantly beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Explain why a specific file is the way it is, based on git history.' It provides a concrete example question and answer, distinguishing it from sibling tools like get_history or analyze_repo.

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

Usage Guidelines3/5

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

The description implies usage for understanding file complexity via git history, but it does not explicitly state when to use this tool versus alternatives (e.g., get_history for raw history), nor does it provide any 'when not to use' guidance.

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

Tool Schema Changelog

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

  1. 7 tool updatesv1.0.0
    • First observedanalyze_repo
    • First observedask_repo
    • First observedget_history
    • First observedget_snapshot
    • First observedrepo_summary
    • First observedrisk_report
    • First observedwhy_is_this_weird

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: analyze_repo is for initial analysis, ask_repo for questions, get_history for git history, get_snapshot for authoritative data, repo_summary for high-level summary, risk_report for risk assessment, and why_is_this_weird for explaining file history. No overlap.

Naming Consistency3/5

Most tools follow a verb_noun pattern (analyze_repo, ask_repo, get_history, get_snapshot), but repo_summary and risk_report are noun_noun, and why_is_this_weird is a full sentence, creating inconsistency.

Tool Count5/5

Seven tools is well-scoped for a repository analysis server, providing essential functionality without being overwhelming or insufficient.

Completeness4/5

The tool set covers key aspects: analysis, Q&A, history, snapshot, summary, and risk assessment. Minor gaps like direct file search or comparison are missing but can be partially addressed by ask_repo.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers