mcpField
T
Tech Debt Mcp

Tech Debt Mcp

本地服务
github.com/PierreJanineh开发工具714 周前更新

关于 Tech Debt Mcp

Tech Debt Mcp 面向开发者和编码 Agent,用于检查 14 种语言项目的技术债。它将代码检查、SQALE 指标、自定义规则和依赖清单分析整合在一个 MCP 服务中。

主要功能

  1. 01分析 14 种语言的代码
  2. 02计算 SQALE 技术债指标
  3. 03添加基于正则表达式的自定义规则
  4. 04扫描 10 个生态系统的依赖
  5. 05筛选问题并获取优先级建议

适用场景

  1. 01检查项目的可维护性问题
  2. 02使用 SQALE 指标评估技术债
  3. 03检查依赖清单和依赖项
  4. 04应用项目专属代码模式

MCP 相关

向 MCP 客户端提供代码分析、筛选、自定义规则、依赖检查和配置验证工具,以及两个资源。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"TechDebtMCP": {
"command": "npx",
"args": [
"-y",
"tech-debt-mcp"
]
}
}
}
启动命令npx -y tech-debt-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmtech-debt-mcp2.1.0

工具

16

收录的工具列表 · 更新于 3 周前

参数类型必填说明
pathstring是项目根目录的绝对路径
languagesarray否可选:要分析的特定语言
categoriesarray否可选:按债务类别筛选
severityenum否可选:最低严重级别low | medium | high | critical
maxFilesinteger否可选:要分析的最大文件数(最小值:1)

详细介绍

技术债务 MCP

技术债务 MCP 服务

npm version Add to MCP SQALE Rating CodeQL Documentation

16 个工具 · 2 个资源 · 14 种语言 · 10 种依赖生态

用于分析多种编程语言技术债务的模型上下文协议(MCP)服务。旨在与 GitHub Copilot、Claude、Cursor 及其他兼容 MCP 的工具集成。

功能特性

  • 多语言支持:JavaScript、TypeScript、Python、Java、Swift、Kotlin、Objective-C、C++、C、C#、Go、Rust、Ruby、PHP
  • 全面分析:检测多种技术债务,包括代码质量问题、安全漏洞和可维护性问题
  • SQALE 指标:使用 SQALE 评级系统(A-E 级)计算技术债务
  • SwiftUI 分析:针对 SwiftUI 模式、状态管理、内存泄漏、视图嵌套和并发问题的专项检查
  • 自定义规则:支持正则表达式,定义自己的基于模式的检查规则
  • 依赖分析:解析 10 种生态系统中的包清单(npm、pip、Maven/Gradle、Cargo、Go Modules、Composer、Bundler、NuGet、C/C++、Swift)
  • 行内抑制:使用 // techdebt-ignore-next-line 或块注释抑制误报
  • 配置验证:验证 .techdebtrc.json 配置文件的架构正确性
  • 可执行的建议:提供按优先级排序的技术债务处理建议
  • 灵活筛选:按严重程度、类别或语言筛选结果
  • 强化安全性(v2.0.2):防止所有工具和资源路径输入中的路径遍历,安全验证自定义规则正则表达式以防止 ReDoS,在 SwiftUI 检查中转义正则表达式注入内容,在所有错误消息中清理绝对路径,并在每次推送/PR 时进行 CodeQL SAST 扫描

支持的语言

语言扩展名关键检查项
JavaScript.js, .mjs, .cjs, .jsxconsole.log、debugger、eslint-disable、动态代码执行的使用、var 的使用
TypeScript.ts, .tsx, .mts, .ctsany 类型、@ts-ignore、非空断言、类型断言
Python.py, .pyw, .pyi裸 except、print 语句、global 的使用、动态代码执行
Java.javaSystem.out、printStackTrace、空 catch、@SuppressWarnings
Swift.swift强制解包(!)、强制类型转换(as!)、强制 try、保留环、SwiftUI 模式
Kotlin.kt, .kts!!、滥用 lateinit、@Suppress、未检查的类型转换
Objective-C.m, .mm, .hNSLog、保留环、已弃用的方法、臃肿的视图控制器
C++.cpp, .cc, .hpp, .h裸指针、C 风格类型转换、goto、using namespace std
C.c, .hmalloc 未配对 free、goto、不安全函数、空值检查
C#.csConsole.WriteLine、async void、空 catch、dispose 模式
Go.go被忽略的错误、空白导入、fmt.Print、panic、全局变量
Rust.rsunwrap、expect、unsafe、allow 属性、panic、println
Ruby.rbputs、binding.pry、禁用 rubocop、动态代码执行、全局变量
PHP.phpvar_dump、print_r、die/exit、动态代码执行、错误抑制

安装

VS Code:安装服务

一键安装

VS Code(通过终端):

code --add-mcp '{"name":"tech-debt-mcp","command":"npx","args":["-y","tech-debt-mcp@latest"]}'
Cursor: Install Server

一键安装

Cursor(通过终端):

cursor --add-mcp '{"name":"tech-debt-mcp","command":"npx -y tech-debt-mcp@latest"}'
Claude:安装服务

Claude Code(通过终端):

claude mcp add tech-debt-mcp -- npx -y tech-debt-mcp@latest

Claude Desktop — 添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "tech-debt-mcp": {
      "command": "npx",
      "args": ["-y", "tech-debt-mcp@latest"]
    }
  }
}
Claude Code:安装为插件

Claude Code 插件 — 添加此仓库的市场,然后安装插件:

/plugin marketplace add PierreJanineh/TechDebtMCP
/plugin install tech-debt-mcp@techdebtmcp

该插件在底层运行 npx -y tech-debt-mcp@latest——无需打包源代码,始终使用已发布的 npm 版本。有关面向插件用户的文档(安装流程、示例对话记录、安全状况),请参阅 plugin/README.md。

Claude Desktop:安装 MCPB 包

Claude Desktop MCPB 包 — 一键安装,包含 node_modules(无需 npx,运行时无需联网)。

从最新的 GitHub Release下载 tech-debt-mcp-<version>.mcpb,并使用 macOS 或 Windows 版 Claude 打开。

在本地构建此包:

npm install --include=dev --ignore-scripts
npm run mcpb:pack
# -> mcpb/tech-debt-mcp-<version>.mcpb
Windsurf:安装服务

添加到 Windsurf MCP 配置(~/.codeium/windsurf/mcp_config.json):

{
  "mcpServers": {
    "tech-debt-mcp": {
      "command": "npx",
      "args": ["-y", "tech-debt-mcp@latest"]
    }
  }
}
JetBrains:安装服务

通过 AI Assistant — 打开 Settings > Tools > AI Assistant > Model Context Protocol (MCP),点击 +,选择 As JSON,然后粘贴:

{
  "mcpServers": {
    "tech-debt-mcp": {
      "command": "npx",
      "args": ["-y", "tech-debt-mcp@latest"]
    }
  }
}
Xcode:安装服务

通过 GitHub Copilot for Xcode — 打开 Settings > MCP 标签页 > Edit Config(mcp.json):

{
  "servers": {
    "tech-debt-mcp": {
      "command": "npx",
      "args": ["-y", "tech-debt-mcp@latest"]
    }
  }
}
手动设置

添加到你的 MCP 客户端配置中:

{
  "mcpServers": {
    "tech-debt-mcp": {
      "command": "npx",
      "args": ["-y", "tech-debt-mcp@latest"]
    }
  }
}

开发时使用:npm run dev

工具

每个工具都声明了一个工具注解——Read 工具不会产生副作用(readOnlyHint: true);Write 工具会修改服务会话状态(destructiveHint: true)。

类别工具类型描述
分析analyze_project读取分析整个项目 — 可按语言、类别、严重性和 maxFiles 筛选
analyze_file读取分析单个文件
get_debt_summary读取快速摘要,包含健康评分和问题数量
get_sqale_metrics读取SQALE 评级、修复时间、债务比率和细分数据
筛选get_recommendations读取按优先级排列的修复建议(可配置数量上限)
get_issues_by_severity读取按严重性级别筛选问题
get_issues_by_category读取按债务类别筛选问题
list_supported_languages读取所有受支持的语言及其检查项
自定义规则add_custom_rule写入添加基于正则表达式的技术债务规则
remove_custom_rule写入按 ID 移除自定义规则
list_session_custom_rules读取列出本会话通过 add_custom_rule 添加的规则(不包含 .techdebtrc.json customPatterns)
execute_custom_rules读取对代码或文件运行自定义规则
validate_custom_pattern读取添加规则前测试模式
依赖项check_dependencies读取扫描 10 个生态系统中的包清单
get_vulnerability_report读取用于审查 CVE 的离线依赖项清单
validate_config读取验证 .techdebtrc.json 架构

全文使用的债务类别: dependency · code-quality · architecture · documentation · testing · security · performance · maintainability

分析 — 参数参考
工具参数类型必填限制 / 默认值描述
analyze_projectpathstring✓绝对文件系统路径项目根目录
languagesstring[]筛选指定语言
categoriesstring[]参见上方类别按债务类别筛选
severityenumlow / medium / high / critical最低严重性级别
maxFilesinteger最小值:1限制分析的文件数量
analyze_filepathstring✓绝对文件系统路径要分析的文件
get_debt_summarypathstring✓绝对文件系统路径项目根目录
get_sqale_metricspathstring✓绝对文件系统路径项目根目录
developmentTimenumber小时用于计算债务比率的预计开发时间

get_sqale_metrics 返回 SQALE 评级(A-E)及星级可视化、总修复时间、债务比率,以及按严重性和类别细分的数据。

筛选 — 参数参考
工具参数类型必填限制 / 默认值描述
get_recommendationspathstring✓绝对文件系统路径项目根目录
limitinteger默认值:5,最小值:1返回的建议数量上限
get_issues_by_severitypathstring✓绝对文件系统路径项目根目录
severityenum✓low / medium / high / critical要筛选的严重性
get_issues_by_categorypathstring✓绝对文件系统路径项目根目录
categoryenum✓参见上方类别要筛选的债务类别
list_supported_languages————无参数
自定义规则 — 参数参考 | 工具 | 参数 | 类型 | 必填 | 限制 / 默认值 | 描述 | |------|-----------|------|:--------:|----------------------|-------------| | `add_custom_rule` | `id` | 字符串 | ✓ | | 唯一规则标识符 | | | `pattern` | 字符串 | ✓ | 最多 1,000 个字符 | 要匹配的正则表达式模式 | | | `message` | 字符串 | ✓ | | 问题标题 / 消息 | | | `severity` | 枚举 | ✓ | `low` / `medium` / `high` / `critical` | 严重级别 | | | `category` | 枚举 | ✓ | 参见上文的类别 | 债务类别 | | | `suggestion` | 字符串 | | | 如何修复问题 | | | `languages` | 字符串[] | | | 限定为特定语言 | | | `flags` | 字符串 | | 允许值:`d g i m s u v y`;`u` / `v` 互斥 | 正则表达式标志 | | `remove_custom_rule` | `id` | 字符串 | ✓ | | 要移除的规则 ID | | `list_session_custom_rules` | — | — | — | — | 无参数。此工具从 `list_custom_rules`(TEC-51)重命名而来,以明确其作用范围:仅包含在会话中注册的规则。 | | `execute_custom_rules` | `path` | 字符串 | ◐ | 绝对路径,最多 500,000 字节 | 要分析的文件 | | | `code` | 字符串 | ◐ | 1-500,000 个字符 | 直接分析的源代码 | | | `language` | 字符串 | | 必须是受支持的语言 ID(与 `list_supported_languages` 使用的集合相同) | 按语言筛选规则 | | `validate_custom_pattern` | `id` | 字符串 | ✓ | | 唯一规则标识符 | | | `pattern` | 字符串 | ✓ | 最多 1,000 个字符 | 要验证的正则表达式 | | | `message` | 字符串 | ✓ | | 问题标题 / 消息 | | | `severity` | 枚举 | ✓ | `low` / `medium` / `high` / `critical` | 严重级别 | | | `category` | 枚举 | ✓ | 参见上文的类别 | 债务类别 |

◐ execute_custom_rules 要求提供 path 或 code,而非两者都必填。path 的空字符串 "" 与省略该字段的处理方式相同。

依赖项 — 参数参考
工具参数类型必填限制 / 默认值描述
check_dependenciespath字符串✓绝对文件系统路径项目根目录
includeDev布尔值默认值:true包含开发 / 测试依赖项
get_vulnerability_reportpath字符串✓绝对文件系统路径项目根目录
includeDev布尔值默认值:false包含开发依赖项
validate_configpath字符串✓绝对文件系统路径项目根目录 或 .techdebtrc.json 的直接路径

check_dependencies 会检测 npm、pip、Maven/Gradle、Cargo、Go Modules、Composer、Bundler、NuGet、C/C++(CMakeLists.txt、conanfile.txt/py、vcpkg.json)和 Swift Package Manager 的清单文件。get_vulnerability_report 会生成离线依赖项清单 — 关于计划中的在线 CVE 查询,请参见 ROADMAP.md。

资源

两个 MCP 资源以 JSON 格式公开只读技术债务数据。两者都使用 RFC 6570 URI 模板:{+projectPath} 语法是保留字符扩展,允许变量包含绝对文件系统路径中的 / 字符,而无需进行百分号编码。

URI 模板描述
debt://summary/{+projectPath}健康评分、债务评分、问题数量和 SQALE 指标
debt://issues/{+projectPath}可筛选的所有技术债务问题列表;支持 severity、category 和 limit 查询参数

具体示例 — 将 {+projectPath} 替换为绝对路径。请注意双斜杠:模板末尾的 / 与路径开头的 / 会组成 //,这是有效的 URI 语法。

debt://summary//Users/you/projects/myapp
debt://issues//Users/you/projects/myapp
debt://issues//Users/you/projects/myapp?severity=high&limit=50
debt://issues//Users/you/projects/myapp?category=security

交互式测试 — 使用工具和资源最简单的方式是 MCP Inspector:

npm run build
npx @modelcontextprotocol/inspector node dist/index.js

打开它打印出的 URL,切换到 Resources 标签页,然后使用你的绝对项目路径读取模板 URI。

配置

在项目根目录中创建一个 .techdebtrc.json 文件:

{
  "include": ["src/**", "lib/**"],
  "ignore": ["vendor/**", "generated/**"],
  "rules": {
    "maxFileLines": 500,
    "maxFunctionLines": 50,
    "maxComplexity": 10,
    "maxNestingDepth": 4
  },
  "severity": {
    "todo-comment": "low",
    "console-log": "medium"
  },
  "ruleExclusions": {
    "debugger": ["**/src/analyzers/**"],
    "ts-ignore": ["**/src/analyzers/**"]
  },
  "customPatterns": [
    {
      "id": "no-console-log",
      "pattern": "console\\.log",
      "severity": "low",
      "category": "code-quality",
      "message": "Remove console.log() statements",
      "suggestion": "Use proper logging library instead",
      "languages": ["javascript", "typescript"]
    }
  ]
}
语言覆盖

使用 languageOverrides 按语言覆盖规则、严重级别或文件扩展名。键必须是有效的支持的语言标识符。

{
  "languageOverrides": {
    "typescript": {
      "rules": {
        "maxFileLines": 800,
        "maxFunctionLines": 80
      },
      "severity": {
        "todo-comment": "high"
      }
    },
    "python": {
      "extensions": [".pyx"],
      "rules": {
        "maxComplexity": 15
      }
    }
  }
}
  • rules — 按语言设置阈值(覆盖匹配文件的顶层 rules)。
  • severity — 按语言覆盖规则严重级别。
  • extensions — 为此语言添加额外的文件扩展名(默认扩展名之外)。
规则排除

使用 ruleExclusions,对与 glob 模式匹配的文件停用特定规则。在所有平台上,模式均使用正斜杠(/)。使用带 **/ 前缀的模式(例如 **/src/analyzers/**),可确保无论路径格式如何都能可靠匹配。

内联抑制

直接在源代码中抑制特定问题。所有语言均支持 // 和 # 注释前缀。

单行 — 抑制下一行:

// techdebt-ignore-next-line debugger
debugger; // only the 'debugger' rule is suppressed
# techdebt-ignore-next-line print-statement
print("debug output")  # will not be reported

代码块 — 抑制起始行与结束行之间的所有行:

// techdebt-ignore-start ts-ignore
issues.push(...this.checkPattern(filePath, content, /@ts-ignore/g, { ... }));
// techdebt-ignore-end ts-ignore

未指定规则名称时,将抑制所有规则。代码块可以嵌套。抑制注释必须单独占一行。

自定义规则示例

适用范围说明: 在 .techdebtrc.json 中定义的 customPatterns 仅由 analyze_project 应用,该工具会在扫描前加载项目配置。analyze_file 会直接调用语言分析器,不会加载 .techdebtrc.json,因此不会在该调用路径中应用配置定义的模式。若要对单个文件运行自定义模式,请在运行时使用 add_custom_rule(或直接调用 execute_custom_rules)。

在 .techdebtrc.json 的 customPatterns 下定义模式,或通过 add_custom_rule MCP 工具在运行时注册:

{
  "customPatterns": [
    {
      "id": "no-magic-numbers",
      "pattern": "=\\s*\\d{3,}",
      "severity": "medium",
      "category": "maintainability",
      "message": "Magic number detected",
      "suggestion": "Extract to named constant"
    },
    {
      "id": "forbidden-library",
      "pattern": "import.*moment.*from",
      "severity": "medium",
      "category": "dependency",
      "message": "moment.js is deprecated",
      "suggestion": "Use native Date or date-fns instead",
      "languages": ["javascript", "typescript"]
    }
  ]
}

SQALE 指标

Tech Debt MCP 使用 SQALE 方法量化技术债务:

评级债务比率质量
A≤5%极佳
B6-10%良好
C11-20%一般
D21-50%较差
E>50%严重

工作量与耗时的对应关系: 极少(≤5m)· 少(5-30m)· 中(30m-2h)· 多(2-4h)· 极多(4h+)

SwiftUI 分析

针对 SwiftUI 应用的 14 项专项检查,涵盖状态管理(过多的 @State、误用 @ObservedObject、环境值安全性)、内存与生命周期(Combine 保留环、计时器清理、任务取消、闭包保留环)、性能(缺少 .id() 修饰符、复杂的 body 计算、深层嵌套、误用 GeometryReader)以及最佳实践(AnyView 类型擦除、已弃用的 NavigationLink、主线程安全)。

查看所有 SwiftUI 检查项及示例
状态管理问题
  • 过多的 @State 变量 - 检测拥有超过 5 个 @State 变量、应改用 ViewModel 的视图
  • 误用 @ObservedObject - 标记带初始化操作的 @ObservedObject(应使用 @StateObject)
  • 环境值安全性 - 检测对 @Environment 值进行强制解包
内存与生命周期
  • Combine 循环引用 - 查找 Combine sink 中缺少 [weak self] 的情况
  • 缺少计时器清理 - 检测未在 onDisappear 中清理的计时器
  • 缺少任务取消 - 标记未处理取消操作的异步 Task
  • 闭包中的保留环 - 检测 onChange/onReceive 中未使用 [weak self] 的 self 捕获
性能与视图层级
  • 缺少 .id() 修饰符 - 检测缺少稳定标识符的 ForEach
  • 复杂的视图 body 计算 - 标记视图 body 中的 reduce/sort/filter
  • 视图深层嵌套 - 嵌套深度超过 6 层时发出警告
  • 误用 GeometryReader - 检测位于视图根节点的 GeometryReader
SwiftUI 最佳实践
  • AnyView 类型擦除 - 建议改用泛型或 @ViewBuilder
  • 已弃用的 NavigationLink - 标记旧式 NavigationLink 模式
  • 主线程安全 - 确保 UI 更新在主线程上进行
检测到的问题示例
// Excessive @State - should use ViewModel
struct UserView: View {
  @State private var firstName = ""
  @State private var lastName = ""
  @State private var email = ""
  @State private var phone = ""
  @State private var address = ""
  @State private var city = ""  // 6+ @State variables!
}

// @ObservedObject with initialization
struct ContentView: View {
  @ObservedObject var viewModel = UserViewModel()  // Should be @StateObject!
}

// Missing Timer cleanup
struct TimerView: View {
  var body: some View {
    Text("Hello")
      .onAppear {
        Timer.scheduledTimer(...)  // Missing .onDisappear cleanup!
      }
  }
}

// Retain cycle in Combine
publisher
  .sink { value in
    self.updateUI(value)  // Missing [weak self]!
  }

输出示例

# Tech Debt Analysis Report

## Health Score: 72/100

### Issues by Severity
| Severity | Count |
|----------|-------|
| Critical | 2 |
| High | 15 |
| Medium | 45 |
| Low | 120 |

## Top Recommendations

1. **Address Critical Issues Immediately**
   Fix 2 critical security issues.

2. **Clean Up TODO/FIXME Comments**
   Found 45 TODO comments - consider creating tracked issues.

代码质量

Tech Debt MCP 践行其倡导的做法——通过 AI 辅助的 vibe coding 构建,并定期扫描自身,保持 A 级评级。内部重构(例如,通过提取辅助函数减少 customRulesEngine.validatePattern 中的嵌套——#146)由自扫描结果推动。

自扫描结果(v2.0.2,2026 年 4 月)
  • SQALE 评级: A(优秀)
  • 债务分数: 5/100(目标:≤5/100)
  • 问题总数: 13(0 个严重,0 个高危,6 个中危,7 个低危)
  • 修复时间: 14 小时
  • 健康评分: 95/100

在 v2.0.2 加固安全性、添加 ruleExclusions 配置、进行嵌套重构(#113、#118、#131、#146)以及提取自定义规则处理程序(#145)后,问题数量从 v2.0.1 基线的 118 个降至目前的 13 个,健康评分从 42.4 提升至 95。剩余债务:5 处嵌套热点(4 处位于服务端/核心模块,另有 1 处位于 eslint.config.mjs)、7 处系统边界类型断言,以及 1 处非空断言。各问题详情请参阅 TECH_DEBT_SCAN.md。

开发

npm install --include=dev --ignore-scripts  # Install dependencies (incl. devDependencies)
npm run typecheck  # Type-check without emitting output
npm run lint       # Lint source files
npm run build      # Compile TypeScript
npm run dev        # Run with ts-node
npm run watch      # Watch mode
npm test           # Run tests

文档

隐私

Tech Debt MCP 完全在你的计算机上运行。安装后,它会读取你传递给它的文件,通过本地 stdio 传输将问题返回给 MCP 客户端,除此之外不会执行任何操作——服务本身不会发起任何出站网络调用,没有遥测或分析,也不使用任何第三方服务。通过 npm/npx 安装时会按包管理器的常规行为连接 npm 注册表;MCPB 捆绑包已预先安装,无需进一步访问网络。详情请参阅 PRIVACY.md 或托管的政策页面 https://pierrejanineh.github.io/TechDebtMCP/privacy。

贡献

欢迎贡献!请参阅 CONTRIBUTING.md 了解指南,并参阅 CODE_OF_CONDUCT.md 了解社区规范。

发布

  • 最新版本: npm version
  • 发布版本: GitHub Releases
  • 路线图: 请参阅 ROADMAP.md 了解计划中的功能
  • 安全性: 将捕获的字符串插入 new RegExp() 时,必须使用 escapeRegExp()(src/utils/regexUtils.ts)——参阅 issue #128;处理程序输出使用 basename() / getRelativePath(),防止在有意提供的消息中泄露绝对文件系统路径;文件系统操作返回的原始 err.message 字符串会在返回给客户端前经过清理——参阅 issue #129

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。