此 MCP 服务器使用 ts-morph 提供针对 TypeScript 和 JavaScript 代码库的重构操作。通过与诸如 Cursor 等编辑器扩展功能集成,可以基于抽象语法树(AST)执行符号名称更改、文件/文件夹名称更改以及查找引用等操作。
此 MCP 服务器提供了以下重构功能。每个功能都使用 ts-morph 解析 AST,并在维护项目整体一致性的同时进行更改。
rename_symbol_by_tsmorph)tsconfig.json 路径、目标文件路径、符号的位置(行、列)、当前符号名称、新的符号名称。rename_filesystem_entry_by_tsmorph)import/export 路径。tsconfig.json 路径、重命名操作数组 (renames: { oldPath: string, newPath: string }[])。@/)的引用会被更新为相对路径。../components)将被更新为明确的文件路径(例如:../components/index.tsx)。export default Identifier; 格式的默认导出引用可能无法正确更新。find_references_by_tsmorph)tsconfig.json 路径、目标文件路径、符号的位置(行、列)。remove_path_alias_by_tsmorph)import/export 语句中的路径别名(如 @/components)替换为相对路径(如 ../../components)。tsconfig.json 路径、处理目标文件或目录的路径。move_symbol_to_file_by_tsmorph)tsconfig.json 路径、移动源文件路径、移动目标文件路径、要移动的符号名称。根据需要,可以指定符号类型(declarationKindString),以消除同名符号的歧义。export,并在移动目标文件中导入。export default)的符号不能使用此工具进行移动。在 mcp.json 中添加如下设置。使用 npx 命令可以自动使用已安装的最新版本。
{
"mcpServers": {
"mcp-tsmorph-refactor": { // 任意的服务器名称
"command": "npx",
"args": ["-y", "@sirosuzume/mcp-tsmorph-refactor"],
"env": {} // 根据需要添加日志设置等
}
}
}
若要在本地从源码启动服务器,首先需要构建。
# 安装依赖(仅首次)
pnpm install
# 构建 TypeScript 代码
pnpm run build
构建完成后,可以在 mcp.json 中做如下设置,然后使用 node 直接运行。
{
"mcpServers": {
"mcp-tsmorph-refactor-dev": { // 推荐使用不同的名称,如开发用
"command": "node",
// 项目根目录下的相对路径或绝对路径
"args": ["/path/to/your/local/repo/dist/index.js"],
"env": {
// 开发时的日志设置等
"LOG_LEVEL": "debug"
}
}
}
}
可以通过环境变量控制服务器的操作日志输出级别和输出目标。在 mcp.json 的 env 块中设置。
LOG_LEVEL: 设置日志的详细程度。
fatal, error, warn, info (默认), debug, trace, silent"LOG_LEVEL": "debug"LOG_OUTPUT: 指定日志的输出目标。
console (默认): 将日志输出到标准输出。如果开发环境 (NODE_ENV !== 'production') 中安装了 pino-pretty,则将以易读的形式输出。file: 将日志输出到指定文件。当需要避免影响 MCP 客户端时使用。"LOG_OUTPUT": "file"LOG_FILE_PATH: 当 LOG_OUTPUT 为 file 时,指定日志文件的绝对路径。
[项目根目录]/app.log"LOG_FILE_PATH": "/var/log/mcp-tsmorph.log"设置示例(在 mcp.json 中):
// ... (mcp.json 的其他设置)
"env": {
"LOG_LEVEL": "debug", // 设置调试级别的日志
"LOG_OUTPUT": "file", // 输出到文件
"LOG_FILE_PATH": "/Users/yourname/logs/mcp-t-alias.log" // 指定日志文件的路径
}
// ...
.node-version 或 package.json 的 volta 字段)package.json 的 packageManager 字段)克隆仓库并安装依赖。
git clone https://github.com/sirosuzume/mcp-tsmorph-refactor.git
cd mcp-tsmorph-refactor
pnpm install
编译 TypeScript 代码为 JavaScript。
pnpm build
构建产物将输出到 dist 目录。
运行单元测试。
pnpm test
对代码进行静态分析和格式化。
# 进行 lint 检查
pnpm lint
# 自动修复 lint 错误
pnpm lint:fix
# 进行格式化
pnpm format
在开发过程中,若需详细查看 MCP 服务器的启动序列、标准输入输出及错误输出,可以使用位于项目 scripts 目录下的 mcp_launcher.js。
该包装脚本将作为子进程启动原始的 MCP 服务器进程 (npx -y @sirosuzume/mcp-tsmorph-refactor),并将启动信息及输出记录到项目根目录的 .logs/mcp_launcher.log 文件中。
使用方法:
修改 mcp.json 文件中的 mcp-tsmorph-refactor 服务器设置如下。
command 设为 "node"。args 中指定 scripts/mcp_launcher.js 的路径(例如:["path/to/your_project_root/scripts/mcp_launcher.js"])。也可以使用相对于项目根目录的路径(例如:["scripts/mcp_launcher.js"])。设置示例(在 mcp.json 中):
{
"mcpServers": {
"mcp-tsmorph-refactor": {
"command": "node",
// 指向 scripts/mcp_launcher.js 的路径(项目根目录下的相对路径或绝对路径)
"args": ["path/to/your_project_root/scripts/mcp_launcher.js"],
"env": {
// 可保留原有的环境变量设置
// 示例:
// "LOG_LEVEL": "trace",
// "LOG_OUTPUT": "file",
// "LOG_FILE_PATH": ".logs/mcp-ts-morph.log"
}
}
// ... 其他服务器设置 ...
}
}
重启或重新加载 MCP 客户端(例如:Cursor)。
确认项目根目录下的 .logs/mcp_launcher.log 文件中有日志输出。
同时,如果设置了 MCP 服务器自身的日志(例如:.logs/mcp-ts-morph.log),也可以确认其内容。
使用该包装器可以帮助诊断 MCP 服务器未能按预期启动的原因。
此包通过 GitHub Actions 工作流(.github/workflows/release.yml)自动发布到 npm。
Settings > Secrets and variables > Actions),命名为 NPM_TOKEN。package.json 中的 version 字段。通过推送 Git 标签触发发布工作流。
方法: 推送 Git 标签(推荐用于发布)
package.json 中的 version(例如:0.3.0)。package.json 的更改,并推送到 main 分支。v 前缀),并推送。
git tag v0.3.0
git push origin v0.3.0
Release Package 工作流将被触发,执行包的构建、测试及发布到 npm。v0.3.0)必须与 package.json 中的 version(例如:0.3.0)完全一致。不一致会导致工作流失败。pnpm run build 和 pnpm run test 以尽早发现潜在问题。此项目在 MIT 许可证下发布。详情请参阅 LICENSE 文件。