mcpField
I
importfix

importfix

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

关于 importfix

importfix 分析调用方提供的模块图,找出循环导入,并为每个循环组件报告一个确定性循环及建议移除的边。它面向排查依赖环的开发者;计算在本地完成,不读取源文件或访问网络。

主要功能

  1. 01查找模块图中的循环
  2. 02每个组件报告一个循环
  3. 03建议断开循环的边
  4. 04在统计中计入外部导入
  5. 05支持命令行和 MCP 服务

适用场景

  1. 01定位依赖图中的循环
  2. 02选择影响较小的断环边

MCP 相关

MCP 服务提供 `find_import_cycles`,接收模块图并返回代表性循环及建议断开点。

配置

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

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

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

安装包
npm@reneturcios/importfix0.1.0
ocighcr.io/cloudcorprecords/importfix:0.1.0

工具

1

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

参数类型必填说明
modulesarray是图中的模块;每个条目都包含模块路径及其导入的路径。

详细介绍

importfix

循环导入很容易产生,靠肉眼排查却十分痛苦:编译器指出的是文件,而不是循环。importfix 接收一个模块图——包含每个模块的路径及其导入的路径——并找出循环实际出现的位置。

对于每个循环分量,它都会报告一个且仅一个代表性循环:按遍历顺序排列的确切节点,以及节点间的边,最后回到起点。它不会枚举所有基本循环;每个分量报告一个确切且可复现的循环,这是它的约定。每个循环还会附带一个建议的断开点——优先移除的循环边。该边的目标模块在整个图中依赖者最少,因此移除它对循环中被导入最少的模块影响最小。

图的规则对统计范围有严格要求:

  • 只有当导入项指向同一输入中的另一个模块时,才会形成边。其他导入都属于外部导入:计入统计数据,但不会形成边。
  • 重复导入会合并为一条边。
  • 模块导入自身时,形成一个长度为 1 的循环,处理方式与其他循环相同。
  • 代表性循环具有确定性:从分量中字典序最小的模块开始,并按字典序遍历相邻节点,因此相同的图始终会得到相同结果。

纯本地计算:不会访问网络,也不会读取源代码树中的文件——调用方会提供图。

命令行

npx @reneturcios/importfix cycles --modules modules.json
npx @reneturcios/importfix --version

modules.json 包含 modules 数组:

[
  {"path": "src/a.ts", "imports": ["src/b.ts"]},
  {"path": "src/b.ts", "imports": ["src/a.ts", "node:fs"]}
]

该命令会以 JSON 格式输出报告:

{
  "has_cycles": true,
  "cycles": [
    {
      "nodes": ["src/a.ts", "src/b.ts"],
      "edges": [
        {"from": "src/a.ts", "to": "src/b.ts"},
        {"from": "src/b.ts", "to": "src/a.ts"}
      ],
      "suggested_break": {
        "from": "src/a.ts",
        "to": "src/b.ts",
        "reason": "target has the fewest dependents in the graph (1)"
      }
    }
  ],
  "stats": {
    "module_count": 2,
    "edge_count": 2,
    "external_imports": 1,
    "cyclic_module_count": 2
  }
}

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

MCP 服务

npx -y @reneturcios/importfix mcp

MCP 客户端配置:

{
  "mcpServers": {
    "importfix": {
      "command": "npx",
      "args": ["-y", "@reneturcios/importfix", "mcp"]
    }
  }
}
工具
  • find_import_cycles — 检测模块图中的循环导入,并为每个循环分量报告一个代表性循环及建议的断开点。
    • modules(数组,必填,至少包含一项)——由 {path, imports} 对象组成的模块列表;path 是模块自身的路径,imports 列出该模块导入的路径(可以为空)

Docker

docker run -i ghcr.io/cloudcorprecords/importfix
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/importfix cycles --modules /w/modules.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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。