mcpField
R
renameplan

renameplan

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

关于 renameplan

renameplan 是面向计划重命名文件或导出的开发者的命令行工具和 MCP 服务。它根据提供的模块图定位直接和间接引用、安排编辑顺序并标记风险,不会读取或修改文件。

主要功能

  1. 01分析提供的模块图
  2. 02查找直接和间接引用
  3. 03支持静态、动态及命名导出关联
  4. 04按接近目标的顺序安排编辑
  5. 05标记动态引用和广泛影响

适用场景

  1. 01规划模块文件重命名
  2. 02重命名导出前追踪依赖方
  3. 03检查重新导出链中的重命名影响

MCP 相关

MCP 服务提供 `plan_rename`,接收目标和调用方提供的模块图,并返回引用关系、编辑顺序、计数及风险标记。

配置

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

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

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

安装包
npm@reneturcios/renameplan0.1.0
ocighcr.io/cloudcorprecords/renameplan:0.1.0

工具

1

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

参数类型必填说明
targetobject是要重命名的文件或导出项
target.kindenum是目标是文件还是导出项file | export
target.namestring是对于 kind file:模块路径。对于 kind export:导出名称
target.modulestring否定义导出的模块(kind export 必填)
modulesarray是模块图

详细介绍

renameplan

重命名文件或导出项很容易开始,却也很容易出错:你能看到导入它的模块,几乎从来都不是全部情况。renameplan 会先让你了解全貌。你提供一个模块图——每个模块的路径、带有任意命名绑定的静态导入、模块导出的名称,以及模块动态导入的路径——再提供你要重命名的文件或导出项。它会返回所有直接引用者、所有间接引用者、编辑它们的安全顺序,以及提醒你谨慎操作的风险标记。它只返回计划;不会读取、重命名或执行任何内容。

对于文件目标,直接引用者是静态导入、动态导入或两者都导入该目标的模块;其 kinds 列表会说明导入类型,静态导入排在前面。间接引用者是通过两条或更多静态边抵达目标的模块,可通过沿反向静态边从目标向外遍历图找到。每个间接引用者都会标明一个 via:即它所导入的、距离目标近一步的模块。如果它有多个符合条件的导入项,via 会选你提供的模块顺序中最先出现的那个,因此对于给定的图,结果是稳定的。动态导入会使模块成为文件的直接引用者,但动态边不会继续传递链路——仅静态导入某个仅通过动态导入引用目标的模块,并不会因此成为间接引用者。

对于导出项目标,只有命名绑定才会计入。若模块导入定义模块时未指定该导出项的名称,或导入的是该模块中的其他名称,则它根本不算引用者,动态导入也不算。间接引用者通过重新导出链路产生:如果某个直接引用者重新导出该名称,那么从该引用者导入此名称的模块就是间接引用者,链路也可以继续经过后续的重新导出模块。对应的规则很严格:如果一个模块本身没有导出该名称,那么即使它从链路中的某个模块导入了该名称,从它导入该名称也不会计入任何引用。

该计划刻意设计得便于直接解读。直接引用者和间接引用者都按路径的代码单元顺序排序。edit_order 会依次列出直接路径、间接路径,最后列出目标模块,这样你就会从外向内编辑,逐步接近要重命名的对象。标记按固定顺序出现:文件被动态引用时为 dynamic_reference,直接引用者重新导出某个导出项时为 reexport_chain,总共影响十个或更多模块时为 wide_blast_radius。

输入格式错误——包括缺少目标、kind 不是 file 或 export、名称或路径为空、模块路径重复、导入项、导出项或动态导入项的类型错误、目标模块不在图中,或定义模块未导出该导出项——都会报错并指出有问题的路径,且不会返回部分计划。未知的额外字段会被忽略,包括项内的字段。

CLI

npx @reneturcios/renameplan plan --input args.json
npx @reneturcios/renameplan --version

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

{
  "target": { "kind": "file", "name": "src/util.ts" },
  "modules": [
    { "path": "src/util.ts", "exports": ["help"] },
    {
      "path": "src/app.ts",
      "imports": [{ "from": "src/util.ts", "names": ["help"] }]
    },
    {
      "path": "src/page.ts",
      "imports": [{ "from": "src/app.ts" }]
    }
  ]
}

结果以 JSON 格式打印:

{
  "target": { "kind": "file", "name": "src/util.ts", "module": null },
  "direct": [{ "path": "src/app.ts", "kinds": ["static"] }],
  "indirect": [{ "path": "src/page.ts", "via": "src/app.ts" }],
  "edit_order": ["src/app.ts", "src/page.ts", "src/util.ts"],
  "flags": [],
  "counts": { "direct": 1, "indirect": 1, "total_affected": 2 }
}

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

MCP 服务

npx -y @reneturcios/renameplan mcp

MCP 客户端配置:

{
  "mcpServers": {
    "renameplan": {
      "command": "npx",
      "args": ["-y", "@reneturcios/renameplan", "mcp"]
    }
  }
}
工具
  • plan_rename — 根据调用方提供的模块图,规划安全的文件或导出项重命名。

    • target(对象,必填)— 要重命名的文件或导出项
      • kind(字符串,必填)— "file" 或 "export"
      • name(字符串,必填,非空)— kind 为 file 时:模块路径;kind 为 export 时:导出项名称
      • module(字符串,架构中可选)— 定义该导出项的模块;kind 为 export 时必填
    • modules(数组,必填,至少 1 项)— 模块图
      • path(字符串,必填,非空)— 模块路径
      • imports(数组,可选)— 静态导入;每项包含 from(字符串,必填,非空)和 names(字符串数组,可选;缺省表示没有具名绑定)
      • exports(字符串数组,可选)— 此模块导出的名称
      • dynamic_imports(字符串数组,可选)— 此模块动态导入的模块路径

    返回 {target, direct, indirect, edit_order, flags, counts},其中 target 为 {kind, name, module} (kind 为 file 时,module 为 null),direct 是由 {path, kinds} 组成的列表,indirect 是由 {path, via} 组成的列表, counts 为 {direct, indirect, total_affected}。

Docker

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