关于 ohm-mcp
ohm-mcp 是面向 Python 项目的 AST 代码分析与重构 MCP 服务,供编码 Agent 和开发者使用。它涵盖架构、类型和性能检查,并支持自动应用更改及回滚。
主要功能
- 01AST 方法提取与符号重命名
- 02死代码和重复代码检测
- 03架构与 SOLID 分析
- 04类型覆盖率和测试生成
- 05性能模式检测
- 06自动应用、历史记录与回滚
适用场景
- 01从函数中提取方法并生成补丁
- 02跨项目重命名符号或调整导入
- 03定位未使用代码与重复实现
- 04检查类型覆盖率并生成测试
MCP 相关
作为 MCP 服务向兼容客户端提供 Python 分析与重构工具,可在 GitHub Copilot、Cursor、Cline 等客户端中使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
✨ 核心功能
🏗️ 架构
🔧 代码质量
|
📊 类型安全
⚡ 性能
🤖 自动化
|
🚀 快速开始
安装
📦 推荐:NPM 方式(自动安装依赖)
无需安装!使用 NPX 自动运行最新版本:
npx -y ohm-mcp@latest
这是最简单的入门方式。只需将配置添加到 AI 助手中(请参阅下文的 IDE 配置)。
MCP Registry: mcp-name: io.github.Murugarajr/ohm-mcp
🐍 替代方式:PyPI 方式(用于本地开发)
在以下情况使用此方式:
- 使用 Python 包进行本地开发
- 使用特定的 Python 虚拟环境
- 从源代码安装以进行自定义
从 PyPI 安装:
pip install ohm-mcp
从源代码安装(用于开发):
pip install -e .
IDE 配置
📦 选项 1:NPX(推荐 - 自动安装依赖)
🔵 使用 NPX 的 GitHub Copilot(VS Code)
发布到 npm 后:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["ohm-mcp@latest"]
}
}
}
本地开发:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"]
}
}
}
用法:
- 打开 Copilot Chat
- 输入
#并选择ohm-mcp工具 - 提问:“分析此文件并提出重构建议”
🟣 使用 NPX 的 Cursor IDE
全局(发布到 npm 后):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
本地开发:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"]
}
}
}
用法:
- 打开 Cursor Chat(Cmd+L / Ctrl+L)
- 工具会自动可用
- 提问:“使用 ohm-mcp 检测死代码”
🟢 使用 NPX 的 Cline(VS Code 扩展)
全局(发布到 npm 后):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
本地开发:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"]
}
}
}
用法:
- 打开 Cline 面板
- 工具可在 Agent 上下文中使用
- 提问:“分析类型覆盖率并提出改进建议”
🟠 使用 NPX 的 Antigravity
全局(发布到 npm 后):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}
用法:
- 工具会在 Antigravity 中自动可用
- 提问:“使用 ohm-mcp 分析架构”
🔴 使用 NPX 的 Roo Code
全局(发布到 npm 后):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
用法:
- 打开 Roo Code 面板
- 工具可在 Agent 上下文中使用
- 提问:“使用 ohm-mcp 检测重复项”
⚫ 使用 NPX 的 Codex VS Code
配置(config.toml):
[mcp_servers.ohm-mcp]
args = ["-y", "ohm-mcp@latest"]
command = "npx"
用法:
- 打开 Codex 面板
- 工具会自动可用
- 提问:“使用 ohm-mcp 推荐设计模式”
🟡 使用 NPX 的 Kilo Code(本地/全局)
本地(在虚拟环境中进行本地开发):
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/project/venv/bin/python",
"args": ["-m", "ohm_mcp.server"],
"disabled": false,
"alwaysAllow": []
}
}
}
全局(发布到 npm 后):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
用法:
- 打开 Kilo Code 面板
- 工具可在 Agent 上下文中使用
- 提问:“使用 ohm-mcp 进行重构”
🐍 选项 2:直接使用 Python(手动设置)
🔵 使用 Python 的 GitHub Copilot(VS Code)
首先安装:pip install ohm-mcp
然后添加到 .vscode/mcp.json:
{
"servers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
},
"inputs": []
}
用法:
- 打开 Copilot Chat
- 输入
#并选择ohm-mcp工具 - 提问:“分析此文件并提出重构建议”
🟣 使用 Python 的 Cursor IDE
首先安装:pip install ohm-mcp
然后添加到 Cursor 的 MCP 设置文件(.cursorrules 或 MCP 配置):
{
"mcpServers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
},
"inputs": []
}
虚拟环境示例:
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/projects/venv/bin/python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
用法:
- 打开 Cursor Chat(Cmd+L / Ctrl+L)
- 工具会自动可用
- 提问:“使用 ohm-mcp 检测死代码”
🟢 使用 Python 的 Cline(VS Code 扩展)
首先安装:pip install ohm-mcp
然后添加到 Cline 的 MCP 设置:
{
"mcpServers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
虚拟环境示例:
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/projects/venv/bin/python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
注意: Cline 的 command 和 cwd 都需要使用绝对路径。
用法:
- 打开 Cline 面板
- 工具可在 Agent 上下文中使用
- 提问:“分析类型覆盖率并提出改进建议”
🔧 其他兼容 MCP 的客户端
任何兼容 MCP 的客户端都可以使用此服务。通用配置:
{
"mcpServers": {
"ohm-mcp": {
"command": "<python-interpreter-path>",
"args": ["<path-to-mcp_server.py>"],
"cwd": "<project-directory>"
}
}
}
查找 Python 路径:
# Unix/Mac
which python
# or
which python3
# Windows
where python
💡 快速用法示例
配置完成后,只需在 AI 助手聊天中按以下格式引用工具:对当前文件使用 #ohm-mcp.tool_name,或使用 @file_name.py
🗑️ 查找死代码
Use #ohm-mcp.detect_dead_code on @utils.py
此工具将检测:
- ✅ 未使用的导入(从未被引用的导入语句)
- ✅ 未使用的变量(已赋值但从未读取)
- ✅ 不可达代码(位于 return/raise/break/continue 之后)
- ✅ 未使用的函数(已定义但从未调用)
- ✅ 被遮蔽的变量(内层作用域隐藏了外层作用域的变量)
📋 代码重复检测
Use #ohm-mcp.detect_code_duplicates to find duplicates in /path/to/project
可查找:
- ✅ 完全重复(代码块 100% 相同)
- ✅ 近似重复(相似度达到 90% 以上)
- ✅ 重复函数(结构相同,名称不同)
- ✅ 提供重构建议以消除重复
🏗️ 架构分析
Analyze architecture of @my_module.py using #ohm-mcp.analyze_architecture
可检测:
- ✅ 上帝对象(承担过多职责的类)
- ✅ 违反 SOLID 原则
- ✅ 循环依赖
- ✅ 高耦合问题
✂️ 提取方法重构
Use #ohm-mcp.extract_method_ast to extract lines 45-60 from @handler.py into a new function called "process_request"
自动:
- ✅ 检测所需参数
- ✅ 识别返回值
- ✅ 生成重构后的代码
- ✅ 创建统一差异补丁
🔄 安全重命名符号
Use #ohm-mcp.rename_symbol to rename "old_function_name" to "new_function_name" in /path/to/project
功能:
- ✅ 基于 AST(准确率 100%)
- ✅ 检测命名冲突
- ✅ 应用更改前显示所有出现位置
- ✅ 更新文档字符串和注释
📊 类型覆盖率分析
Analyze type hints in @module.py using #ohm-mcp.analyze_type_hints
提供:
- ✅ 覆盖率百分比和等级
- ✅ 缺少类型提示的函数
- ✅ 建议的类型注解
- ✅ 按优先级排列的迁移计划
⚡ 性能优化
Use #ohm-mcp.analyze_performance on @slow_module.py
可检测:
- ✅ 嵌套循环(O(n²) 复杂度)
- ✅ 二次复杂度的列表操作
- ✅ 重复函数调用(缺少缓存)
- ✅ 可变默认参数
- ✅ 低效的字符串拼接
🧪 自动生成测试
Generate tests for @calculator.py using #ohm-mcp.generate_characterization_tests
可创建:
- ✅ 正常流程测试用例
- ✅ 边界情况(None、零、负数、空值)
- ✅ 可直接运行的 pytest 代码
- ✅ 重构前保留当前行为
🎨 设计模式建议
Suggest design patterns for @legacy_code.py using #ohm-mcp.suggest_design_patterns
建议:
- ✅ 为冗长的 if/elif 链使用策略模式
- ✅ 为重复的对象创建使用工厂模式
- ✅ 为回调地狱使用观察者模式
- ✅ 为横切关注点使用装饰器模式
🔧 导入重构
Use #ohm-mcp.refactor_imports to update all files in /path/to/project from "old.module" to "new.module"
可处理:
- ✅ 直接导入(
import old.module) - ✅ From 导入(
from old.module import X) - ✅ 子模块导入
- ✅ 导入别名
🎯 核心工具(共 30 个)
📋 通用分析与规划(4 个工具)
| 工具 | 用途 | 输出 |
|---|---|---|
analyze_codebase | 全面分析代码 | 问题 + 重构计划 |
propose_function_refactor | 规划函数级重构 | 详细的重构方案 |
explain_refactoring | 解释重构模式 | 教学指导 |
create_refactor_patch | 生成统一差异补丁 | 补丁文件 |
🏗️ 架构与设计(4 个工具)
| 工具 | 用途 | 输出 |
|---|---|---|
analyze_architecture | 检测上帝对象、SOLID 原则违规 | 详细的问题报告 |
suggest_design_patterns | 推荐模式(Strategy、Factory、Observer) | 模式建议 + 示例 |
analyze_tight_coupling | 查找耦合问题 | DI 建议 |
suggest_di_refactor | 生成 DI 代码 | 重构前后对比 |
🔧 代码质量与重构(10 个工具)
| 工具 | 用途 | 主要功能 |
|---|---|---|
extract_method_ast | 将代码提取到函数中 | 基于 AST,准确率达 100% |
suggest_extractable_methods | 查找可提取的代码块 | 内聚性评分 |
detect_dead_code | 查找未使用的代码 | 5 种死代码类型 |
refactor_imports | 在整个项目范围内更新导入 | 安全的模块重命名 |
refactor_single_file_imports | 重构单个文件中的导入 | 专注于单个文件 |
analyze_wildcard_imports | 查找通配符导入 | 提供显式替换方案 |
rename_symbol | 在整个代码库中重命名 | 冲突检测 |
detect_code_duplicates | 查找违反 DRY 原则的代码 | 完全重复 + 近似重复 |
extract_function_code | 提取单个函数代码 | 代码提取工具 |
apply_function_refactor | 应用函数级重构 | 直接修改代码 |
示例 - 提取方法:
# Input: Lines 45-60
result = extract_method_ast(code, 45, 60, "calculate_total")
# Output: Refactored code + patch + auto-detected params/returns
📊 类型安全与测试(5 个工具)
| 工具 | 用途 | 优势 |
|---|---|---|
analyze_type_hints | 检查类型覆盖率 | 迁移计划 |
generate_type_stub | 创建 .pyi 文件 | 渐进式类型标注 |
generate_characterization_tests | 自动生成测试 | 安全重构 |
generate_test_for_function | 为单个函数生成测试 | 定向测试 |
suggest_tests | 建议测试策略 | 测试规划 |
⚡ 性能与优先级排序(2 个工具)
| 工具 | 用途 | 检测内容 |
|---|---|---|
analyze_performance | 查找性能瓶颈 | 嵌套循环、可变默认值、O(n²) |
prioritize_by_coverage | 基于风险进行优先级排序 | 未覆盖的高风险代码 |
🤖 自动化执行与历史记录(4 个工具)
graph LR
A[apply_refactoring] --> B{Dry Run?}
B -->|Yes| C[Show Preview]
B -->|No| D[Create Backup]
D --> E[Apply Changes]
E --> F{Run Tests}
F -->|Pass| G[Success]
F -->|Fail| H[Auto Rollback]
H --> I[rollback_refactoring]
| 工具 | 用途 |
|---|---|
apply_refactoring | 在安全检查后自动应用重构 |
rollback_refactoring | 回滚之前的重构 |
show_refactoring_history | 查看重构审计记录 |
cleanup_old_backups | 清理旧备份文件 |
功能:
- ✅ 更改前自动备份
- ✅ 验证测试执行
- ✅ 失败时自动回滚
- ✅ 完整的历史审计记录
- ✅ 自动清理备份
📈 指标与报告(1 个工具)
generate_quality_report - 以 HTML/Markdown/JSON 格式生成综合仪表板
输出预览:
📊 Health Score: 85/100 (Good)
📁 Files: 47 | Lines: 12,450 | Tech Debt: 23 pts
📊 Type Coverage: 67%
🗑️ Dead Code: 8 imports, 12 variables, 3 functions
⚡ Performance: 4 nested loops, 2 mutable defaults
📋 Duplication: 3 exact, 5 near-duplicates
可视化仪表板:
- 🎨 圆形健康度仪表
- 📊 彩色编码指标(🟢🟡🔴)
- 📈 支持趋势跟踪
- 🔗 CI/CD 集成(JSON 导出)
💡 常见工作流
1️⃣ 安全重构
generate_characterization_tests → pytest → extract_method_ast → pytest
2️⃣ 消除重复
detect_code_duplicates → review suggestions → extract_method_ast
3️⃣ 类型迁移
analyze_type_hints → follow migration plan → generate_type_stub
4️⃣ 性能优化
analyze_performance → prioritize_by_coverage → apply fixes
5️⃣ 模块重构
refactor_imports(old="myapp.old", new="myapp.new") → review patches
6️⃣ 符号重命名
rename_symbol(old="calc", new="calculate", preview_only=True) → apply
7️⃣ 质量跟踪
generate_quality_report(format="html") → open dashboard → track trends
🎨 可视化示例
质量仪表板预览
┌─────────────────────────────────────────────┐
│ 🔍 Code Quality Dashboard │
├─────────────────────────────────────────────┤
│ │
│ ╭─────────╮ 📁 Overview │
│ │ 85 │ Files: 47 │
│ │ /100 │ Lines: 12,450 │
│ ╰─────────╯ Tech Debt: 23 │
│ Health Score │
│ │
├─────────────────────────────────────────────┤
│ 📊 Type Coverage ⚡ Performance │
│ ████████░░ 67% 🔴 4 nested loops │
│ 120/180 typed 🟡 2 mutable args │
├─────────────────────────────────────────────┤
│ 🗑️ Dead Code 📋 Duplication │
│ 8 imports 3 exact │
│ 12 variables 5 near │
│ 3 functions │
└─────────────────────────────────────────────┘
符号重命名预览
# Before
- def calc(x, y):
- return x + y
- result = calc(5, 3)
# After
+ def calculate_sum(x, y):
+ return x + y
+ result = calculate_sum(5, 3)
✅ 1 function renamed
✅ 3 call sites updated
✅ 0 conflicts detected
🧠 设计原则
| 原则 | 实现方式 |
|---|---|
| 🧪 测试优先 | 在重构前自动生成特征测试 |
| ↩️ 可逆 | 每项更改 = 备份 + 回滚能力 |
| 🎯 AST 驱动 | 100% 准确(不使用正则表达式) |
| 📊 风险感知 | 覆盖率 + 复杂度 = 优先级 |
| 🏛️ SOLID | 检测违规并提供具体修复方案 |
| 🚫 拒绝盲改 | 分析 → 规划 → 验证 |
🔌 IDE 兼容性
|
🤖 任意 MCP 客户端 ✅ 标准协议 ✅ 轻松配置 ✅ 适用于所有兼容 MCP 的 AI 助手 |
📊 对比
| 功能 | OHM MCP | 传统工具 |
|---|---|---|
| 准确性 | 100% AST | ~70% 正则表达式 |
| 安全性 | 自动备份/回滚 | 手动 |
| 测试 | 自动生成 | 手动 |
| 自动化 | 全面 | 仅提供建议 |
| 仪表板 | HTML/JSON/MD | 文本日志 |
| IDE 支持 | Copilot/Cursor/Cline | 有限 |
🎯 使用场景
| 👨💻 开发者 • 安全地重构遗留代码 • 查找死代码 • 优化性能 | 👥 团队 • 跟踪技术债务 • 强制执行标准 • 设计模式 | 🚀 CI/CD • 质量门禁 • 趋势跟踪 • 阻止不合格的 PR |
📈 指标
✅ 30 MCP Tools
✅ 40+ Static Checks
✅ 100% AST Accuracy
✅ Zero Regex Patterns
✅ Automated Execution with Rollback
✅ Beautiful Dashboards (HTML/JSON/MD)
✅ Universal MCP Compatibility
✅ Safe Refactoring with Auto-Backup
🛠️ 故障排除
MCP 连接问题
-
验证 Python 路径:
which python # Unix/Mac where python # Windows -
直接测试 MCP 服务:
python -m ohm_mcp.server -
检查日志:
- VS Code:检查“输出”面板
- Cursor:检查 Cursor 日志
- Cline:检查 Cline 设置面板
-
常见问题:
- ❌
command中使用相对路径 → 使用绝对路径 - ❌ 缺少虚拟环境 → 先激活 venv
- ❌ Cline 的
cwd错误 → 必须使用绝对路径
- ❌
🤝 贡献
提交前运行:
./static_analyser.sh # Runs ruff, mypy, pylint, flake8
pytest # All tests must pass
🙏 致谢
基于 Model Context Protocol • Python AST 构建 • 兼容 GitHub Copilot、Cursor IDE、Cline
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。