rope mcp服务器
一个模型上下文协议(MCP)服务器,提供Python重构功能,由 绳索 图书馆。使像Claude这样的AI代理能够执行安全的、项目范围内的重构操作。
特性
- 移动符号 -通过自动导入更新在文件之间移动类和函数
- 移动模块 -将整个模块或包移动到不同的文件夹
- 移动和重命名模块 -将模块移动到文件夹并重命名(例如。,
foo_extra.py→foo/extra.py) - 将模块转换为Init -转换
foo.py进入foo/__init__.py(没有导入更改!) - 将模块转换为包 -转换
foo.py进入foo/foo.py带有导入更新 - 重命名符号 -重命名整个项目中的变量、函数、类
- 提取方法 -将代码块提取到新方法中
- 内联变量 -所有使用站点的内联变量
- 列出符号 -发现Python文件中的顶级符号
所有操作都是项目感知的,并自动更新整个代码库中的导入和引用。
安装
Claude Code快速入门(推荐)
# Global installation (all projects)
claude mcp add rope-refactor uvx rope-mcp-server -s user
# Or for current project only
claude mcp add rope-refactor uvx rope-mcp-server -s local来自PyPI
pip install rope-mcp-server使用Claude代码
claude mcp add rope-refactor uvx rope-mcp-server -s user
claude mcp list # verify就这样
可用工具
list_symbols
列出Python文件中的所有顶级符号(类、函数、变量)。
project_path: /path/to/your/project
file_path: src/models.pymove_symbol
将类或函数移动到另一个文件。自动更新所有导入。
project_path: /path/to/your/project
source_file: src/models.py
symbol_name: UserModel
dest_file: src/users/models.pymove_module
将模块或包移动到另一个文件夹。自动更新所有导入。
project_path: /path/to/your/project
module_path: src/utils.py
dest_folder: src/libconvert_module_to_init (推荐)
通过将模块文件移动到以下位置将其转换为包 __init__.py。无需导入更改!
这就是 推荐 将模块转换为包的方法。转换后,您可以使用 move_module 移动相关文件(如 foo_mixins.py)进入新的包装。
project_path: /path/to/your/project
module_path: app/views/customer_order.py之前:
app/views/customer_order.py
app/views/customer_order_mixins.py运行后 convert_module_to_init:
app/views/customer_order/__init__.py (was customer_order.py)
app/views/customer_order_mixins.py (move this next with move_module)导入 from app.views.customer_order import X 停留 未改变的!
move_and_rename_module
将模块移动到文件夹并可选择重命名。非常适合移动相关文件(如 _mixins.py, _extra.py)放入用创建的包中 convert_module_to_init.
自动检测: 如果模块名称以目标文件夹名称+下划线开头,则会自动删除该前缀。
绳索虫解决方法: 此工具包括一个解决Rope错误的方法,当文件同时从目标包和正在移动的模块导入时,该错误会崩溃。此类文件在移动过程中会暂时隐藏,然后手动修复其导入。
project_path: /path/to/your/project
module_path: app/views/customer_order_mixins.py
dest_folder: app/views/customer_order
new_name: mixins # Optional - auto-detected from prefix之前:
app/views/customer_order/__init__.py
app/views/customer_order_mixins.py导入: from app.views.customer_order_mixins import MyMixin
之后:
app/views/customer_order/__init__.py
app/views/customer_order/mixins.py导入: from app.views.customer_order.mixins import MyMixin
convert_module_to_package
将模块文件转换为同名包。变换 foo.py 进入 foo/foo.py 同时更新项目范围内的所有导入。
当您希望将原始模块内容放在子模块中,而不是放在 __init__.py.
project_path: /path/to/your/project
module_path: app/views/service_contractor.py之前:
app/views/service_contractor.py导入: from app.views.service_contractor import MyClass
之后:
app/views/service_contractor/
├── __init__.py
└── service_contractor.py导入: from app.views.service_contractor.service_contractor import MyClass
rename_symbol
在整个项目中重命名符号。
project_path: /path/to/your/project
file_path: src/utils.py
symbol_name: old_function_name
new_name: new_function_nameextract_method
将代码区域提取到新方法中。
project_path: /path/to/your/project
file_path: src/service.py
start_line: 15
start_col: 4
end_line: 20
end_col: 30
new_name: extracted_helperinline_variable
在所有使用站点内联一个变量。
project_path: /path/to/your/project
file_path: src/handler.py
variable_name: temp_result
line: 42close_rope_project
关闭Rope项目以释放内存。重构完成后致电。
project_path: /path/to/your/project发展
# Install dependencies
uv sync
# Run tests
uv run pytest tests/ -v
# Run server locally
uv run python -m rope_mcp_server.server运作原理
关键实施细节:
- 项目缓存 -Rope项目被缓存以避免在每次操作时重新解析
- 基于AST的偏移计算 -符号位置是通过Python的AST模块计算的,以确保准确性
- 自动进口处理 -移动/重命名符号时,绳索会处理所有导入更新
局限性
- 仅支持Python代码(绳索限制)
- 在类之间移动方法需要目标类存在
- 大型项目的初始索引可能较慢
- 绳索虫解决方法:从目标包和要移动的模块导入的文件会被特殊处理(在移动过程中隐藏,然后手动导入修复)-请参阅
move_and_rename_module
许可证
麻省理工学院
贡献
欢迎投稿!请先打开一个问题,讨论您想更改什么。
