mcpField
D
deadpath

deadpath

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

关于 deadpath

deadpath 是面向开发者的本地分析工具,用于检查给定模块集合中哪些导出名称未被使用。它会验证封闭的导入图,并按模块及整体汇总未使用导出。

主要功能

  1. 01识别未被导入的导出名称
  2. 02汇总各模块的使用情况
  3. 03输出排序后的未使用导出项
  4. 04计算整体未使用比例
  5. 05验证模块和导入输入

适用场景

  1. 01清理前查找过时导出
  2. 02为 CI 检查生成未使用导出列表
  3. 03衡量模块集合中未使用的导出范围

MCP 相关

它以 MCP 服务运行,提供 find_dead_exports 工具,接收模块定义并返回使用情况摘要和未使用导出结果。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-deadpath": {
"command": "npx",
"args": [
"-y",
"@reneturcios/deadpath"
]
}
}
}
启动命令npx -y @reneturcios/deadpath

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

安装包
npm@reneturcios/deadpath0.1.0
ocighcr.io/cloudcorprecords/deadpath:0.1.0

工具

1

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

参数类型必填说明
modulesarray是集合中的模块(至少一个)

详细介绍

deadpath

代码库中会不断积累无人使用的导出:为某个后来被删除的调用方编写的辅助函数、为了“以防万一”而保留的常量,或某个曾有其他代码导入其名称、因而仍随项目发布的整个模块。deadpath 根据证据给出答案。你向它提供一组模块——每个模块的路径、导出的名称以及进行的导入——它就会找出这组模块中从未在任何地方被导入的导出名称:

  • 各模块摘要 — 对每个模块,列出其未使用的导出名称、导出总数(去重后),以及已使用的导出数量。
  • 未使用导出的列表 — 列出每个未使用的导出,形式为 {module, name},并排序,方便直接生成清理列表或 CI 检查。
  • 整组统计 — 导出总数、未使用导出的总数,以及 dead_ratio:这组模块中已导出但未使用的部分所占比例,四舍五入到小数点后四位。

判定规则很简单:只要这组模块中有某个模块从该导出所属模块导入了该名称,就算该导出已使用——模块从自身导入自己的名称也算,和其他导入一样。入口模块是唯一例外:将模块标记为 entry: true,其所有导出都会算作已使用,因为入口点的导出属于公共接口,会被这组模块之外的代码使用。names 列表为空的导入属于副作用导入:它会运行目标模块,但不会使用其中任何具名导出,因此不会让任何导出继续保留。

导入范围是封闭的:每个导入的 from 都必须指定所提供的模块之一。这样,未使用的判定才有意义——图的完整性由构造方式保证;若导入指向这组模块之外,则会产生指出问题路径的校验错误(例如 modules[0].imports[1].from must name a supplied module),而不会在证明中留下未说明的缺口。任何格式错误的输入——包括重复的模块路径、无效的 exports 条目或非布尔值的 entry——都会以同样的方式报错并指出问题路径,且不会生成部分报告。计算是纯本地的:不访问网络、不需要配置,也不会读取你传入的输入之外的文件。

CLI

npx @reneturcios/deadpath find --input args.json
npx @reneturcios/deadpath --version

args.json 包含完整的参数对象:

{
  "modules": [
    { "path": "src/main.ts", "exports": ["boot"], "entry": true },
    {
      "path": "src/util.ts",
      "exports": ["fmt", "parse", "legacy"],
      "imports": []
    },
    {
      "path": "src/app.ts",
      "imports": [{ "from": "src/util.ts", "names": ["fmt", "parse"] }]
    }
  ]
}

每个模块的 exports 和 imports 默认值均为 [],每个导入的 names 默认值为 [],而 entry 默认值为 false。在此示例中,src/util.ts 导出了 legacy,但没有任何模块导入它,因此报告如下:

{
  "modules": [
    { "path": "src/app.ts", "dead_exports": [], "used_count": 0, "export_count": 0 },
    { "path": "src/main.ts", "dead_exports": [], "used_count": 1, "export_count": 1 },
    { "path": "src/util.ts", "dead_exports": ["legacy"], "used_count": 2, "export_count": 3 }
  ],
  "dead_exports": [
    { "module": "src/util.ts", "name": "legacy" }
  ],
  "total_exports": 4,
  "total_dead": 1,
  "dead_ratio": 0.25
}

退出代码:成功时为 0;运行时错误时为 1(包括输入文件无法读取或无效,以及输入无效);用法错误时为 2。

MCP 服务

npx -y @reneturcios/deadpath mcp

MCP 客户端配置:

{
  "mcpServers": {
    "deadpath": {
      "command": "npx",
      "args": ["-y", "@reneturcios/deadpath", "mcp"]
    }
  }
}
工具
  • find_dead_exports — 查找没有任何模块导入的导出名称。

    • modules(数组,必填,至少一个元素)——模块列表,每个模块为 {path, exports?, imports?, entry?} 对象;path 在整组中必须唯一;每个导入为 {from, names?} 对象,其中 from 指定所提供的模块之一;entry: true 表示该模块的所有导出都算作已使用

    返回 {modules, dead_exports, total_exports, total_dead, dead_ratio}。

Docker

docker run -i ghcr.io/cloudcorprecords/deadpath
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/deadpath find --input /w/args.json

开发

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

许可证

MIT — Copyright (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

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

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