mcpField
D
depmap

depmap

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

关于 depmap

depmap 是本地 CLI 和 MCP 服务端,可将提供的 monorepo 包依赖转换为结构化图数据和 Mermaid 图。它识别根节点、叶节点、外部依赖和循环,并提供确定性输出与输入验证。

主要功能

  1. 01映射包之间的内部依赖
  2. 02报告边、根节点和叶节点
  3. 03识别循环包及一条循环路径
  4. 04统计外部依赖
  5. 05生成 Mermaid 图
  6. 06验证输入并排序结果

适用场景

  1. 01检查 monorepo 中的依赖结构
  2. 02查找涉及依赖循环的包
  3. 03在 Mermaid 查看器中呈现包关系图

MCP 相关

它向 MCP 客户端提供 map_internal_dependencies 工具。该工具接收包名和依赖,并返回结构化图数据及 Mermaid 输出。

配置

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

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

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

安装包
npm@reneturcios/depmap0.1.0
ocighcr.io/cloudcorprecords/depmap:0.1.0

工具

1

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

参数类型必填说明
packagesarray是monorepo 中的软件包(至少一个)

详细介绍

depmap

大型单体仓库很容易让人摸不清头绪:集合中的哪些软件包实际依赖哪些其他软件包,哪些位于顶层且没有任何依赖,哪些位于底层且不依赖任何内部软件包,以及内部图是否形成了循环。depmap 获取软件包图——每个软件包的名称及其依赖项名称——并绘制出完整的映射:

  • 每个软件包的条目——对于每个软件包,列出其内部依赖项(depends_on)、依赖它的软件包(depended_by),以及 external_count:其依赖项名称中有多少指向集合之外。外部名称只计数,不绘制,也不会导致错误——软件包可以自由依赖大型单体仓库中不存在的库。
  • 边、根和叶——每个内部依赖项都表示为一个 {from, to} 边;列出根(没有任何内部软件包依赖的包)和叶(没有内部依赖项的包)。
  • 两种方式呈现循环——cyclic_packages 列出位于任意循环中的所有软件包:属于包含多个软件包的强连通分量的成员,以及任何依赖自身的软件包。此外,cycle 会报告一个具体的循环,该循环由深度优先搜索找到,搜索按升序访问名称和依赖项。发现循环不代表错误。
  • Mermaid 图——将映射呈现为 graph TD 图表,可粘贴到任意 Mermaid 渲染器中。不是有效 Mermaid ID 的软件包名称会获得经过清理的 ID(@scope/app 会变成 _scope_app),并通过声明行将该 ID 与真实名称关联起来。

映射之前,会对单个软件包的 dependencies 中重复的条目去重;结果中的所有列表都会按升序排列,因此相同的图始终会生成完全相同的映射。格式错误的输入——缺少软件包列表或列表为空、缺少或重复的软件包名称、字段类型错误——会导致验证错误,并指出出错路径(例如 packages[1].dependencies[0] must be a string),且不会生成部分映射。计算是纯本地操作:不访问网络、不需要配置,也不会读取你传入的输入以外的文件。

命令行

npx @reneturcios/depmap map --input args.json
npx @reneturcios/depmap --version

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

{
  "packages": [
    { "name": "core" },
    { "name": "lib", "dependencies": ["core"] },
    { "name": "app", "dependencies": ["lib", "react"] }
  ]
}

每个软件包的 dependencies 默认为 [];此处 react 不属于该集合,因此只会出现在 app 的 external_count 中。映射会以 JSON 格式打印:

{
  "packages": [
    { "name": "app", "depends_on": ["lib"], "depended_by": [], "external_count": 1 },
    { "name": "core", "depends_on": [], "depended_by": ["lib"], "external_count": 0 },
    { "name": "lib", "depends_on": ["core"], "depended_by": ["app"], "external_count": 0 }
  ],
  "edges": [
    { "from": "app", "to": "lib" },
    { "from": "lib", "to": "core" }
  ],
  "roots": ["app"],
  "leaves": ["core"],
  "has_cycle": false,
  "cycle": [],
  "cyclic_packages": [],
  "mermaid": "graph TD\n  app --> lib\n  lib --> core"
}

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

MCP 服务

npx -y @reneturcios/depmap mcp

MCP 客户端配置:

{
  "mcpServers": {
    "depmap": {
      "command": "npx",
      "args": ["-y", "@reneturcios/depmap", "mcp"]
    }
  }
}
工具
  • map_internal_dependencies — 映射大型单体仓库的内部依赖项。
    • packages(数组,必填,至少一个)——软件包对象数组,格式为 {name, dependencies?};name 在集合中必须唯一,每个 dependencies 条目要么指向另一个已提供的软件包(内部),要么是其他任何内容(外部,只计数)

返回 {packages, edges, roots, leaves, has_cycle, cycle, cyclic_packages, mermaid}。

Docker

docker run -i ghcr.io/cloudcorprecords/depmap
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/depmap map --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 — 版权所有 (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

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

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