<div align="center">
<img src="https://raw.githubusercontent.com/murugarajr/ohm-mcp/main/image/ohm-mcp.png" alt="OHM-MCP" width="300">
OHM-MCP
AI-Powered Python Refactoring & Code Quality Assistant
Works with GitHub Copilot, Cursor IDE, Cline, and any MCP-compatible AI assistant.
   ![AST-Based]() ![License]()
</div>
---
โจ Core Capabilities
<table> <tr> <td width="50%">
๐๏ธ Architecture
- God Object Detection
- SOLID Violation Analysis
- Design Pattern Suggestions
- Dependency Injection Refactoring
๐ง Code Quality
- AST Extract Method (100% accurate)
- Dead Code Elimination
- Import Refactoring
- Symbol Renaming (project-wide)
- Duplication Detection
</td> <td width="50%">
๐ Type Safety
- Type Coverage Analysis
- Type Stub Generation
- Auto Test Generation
โก Performance
- O(nยฒ) Pattern Detection
- Hotspot Analysis
- Coverage-Driven Prioritization
๐ค Automation
- Auto-Apply with Rollback
- Operation History
- Quality Dashboard
</td> </tr> </table>
---
๐ Quick Start
Installation
๐ฆ Recommended: NPM Method (Auto-installs dependencies)
No installation required! Use NPX to run the latest version automatically:
npx -y ohm-mcp@latest
This is the easiest way to get started. Just add the configuration to your AI assistant (see IDE Configuration below).
MCP Registry: mcp-name: io.github.Murugarajr/ohm-mcp
๐ Alternative: PyPI Method (For local development)
Use this method when you need to:
- Develop locally with the Python package
- Use a specific Python virtual environment
- Install from source for customization
Install from PyPI: ``bash pip install ohm-mcp ``
Install from source (for development): ``bash pip install -e . ``
IDE Configuration
๐ฆ Option 1: NPX (Recommended - Auto-installs dependencies)
<details> <summary><b>๐ต GitHub Copilot (VS Code) with NPX</b></summary>
After publishing to npm: ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["ohm-mcp@latest"] } } } ``
For local development: ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"] } } } ``
Usage:
- Open Copilot Chat
- Type
#and selectohm-mcptools - Ask: "Analyze this file and suggest refactorings"
</details>
<details> <summary><b>๐ฃ Cursor IDE with NPX</b></summary>
Global (After publishing to npm): ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["-y", "ohm-mcp@latest"] } } } ``
For local development: ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"] } } } ``
Usage:
- Open Cursor Chat (Cmd+L / Ctrl+L)
- Tools are automatically available
- Ask: "Use ohm-mcp to detect dead code"
</details>
<details> <summary><b>๐ข Cline (VS Code Extension) with NPX</b></summary>
Global (After publishing to npm): ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["-y", "ohm-mcp@latest"] } } } ``
For local development: ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"] } } } ``
Usage:
- Open Cline panel
- Tools are available in agent context
- Ask: "Analyze type coverage and suggest improvements"
</details>
<details> <summary><b>๐ Antigravity with NPX</b></summary>
Global (After publishing to npm): ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["-y", "ohm-mcp@latest"], "env": { "PYTHONUNBUFFERED": "1" } } } } ``
Usage:
- Tools are automatically available in Antigravity
- Ask: "Use ohm-mcp to analyze architecture"
</details>
<details> <summary><b>๐ด Roo Code with NPX</b></summary>
Global (After publishing to npm): ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["-y", "ohm-mcp@latest"] } } } ``
Usage:
- Open Roo Code panel
- Tools are available in agent context
- Ask: "Use ohm-mcp to detect duplicates"
</details>
<details> <summary><b>โซ Codex VS Code with NPX</b></summary>
Configuration (config.toml): ``toml [mcp_servers.ohm-mcp] args = ["-y", "ohm-mcp@latest"] command = "npx" ``
Usage:
- Open Codex panel
- Tools are automatically available
- Ask: "Use ohm-mcp to suggest design patterns"
</details>
<details> <summary><b>๐ก Kilo Code with NPX (Local/Global)</b></summary>
Local (For local development with virtual environment): ``json { "mcpServers": { "ohm-mcp": { "command": "/Users/username/project/venv/bin/python", "args": ["-m", "ohm_mcp.server"], "disabled": false, "alwaysAllow": [] } } } ``
Global (After publishing to npm): ``json { "mcpServers": { "ohm-mcp": { "command": "npx", "args": ["-y", "ohm-mcp@latest"] } } } ``
Usage:
- Open Kilo Code panel
- Tools are available in agent context
- Ask: "Use ohm-mcp for refactoring"
</details>
๐ Option 2: Direct Python (Manual setup)
<details> <summary><b>๐ต GitHub Copilot (VS Code) with Python</b></summary>
First install: pip install ohm-mcp
Then add to .vscode/mcp.json: ``json { "servers": { "ohm-mcp": { "command": "python", "args": ["-m", "ohm_mcp.server"] } }, "inputs": [] } ``
Usage:
- Open Copilot Chat
- Type
#and selectohm-mcptools - Ask: "Analyze this file and suggest refactorings"
</details>
<details> <summary><b>๐ฃ Cursor IDE with Python</b></summary>
First install: pip install ohm-mcp
Then add to Cursor's MCP settings file (.cursorrules or MCP config): ``json { "mcpServers": { "ohm-mcp": { "command": "python", "args": ["-m", "ohm_mcp.server"] } }, "inputs": [] } ``
Example with virtual environment: ``json { "mcpServers": { "ohm-mcp": { "command": "/Users/username/projects/venv/bin/python", "args": ["-m", "ohm_mcp.server"] } } } ``
Usage:
- Open Cursor Chat (Cmd+L / Ctrl+L)
- Tools are automatically available
- Ask: "Use ohm-mcp to detect dead code"
</details>
<details> <summary><b>๐ข Cline (VS Code Extension) with Python</b></summary>
First install: pip install ohm-mcp
Then add to Cline's MCP settings: ``json { "mcpServers": { "ohm-mcp": { "command": "python", "args": ["-m", "ohm_mcp.server"] } } } ``
Example with virtual environment: ``json { "mcpServers": { "ohm-mcp": { "command": "/Users/username/projects/venv/bin/python", "args": ["-m", "ohm_mcp.server"] } } } ``
Note: Cline requires absolute paths for both command and cwd.
Usage:
- Open Cline panel
- Tools are available in agent context
- Ask: "Analyze type coverage and suggest improvements"
</details>
<details> <summary><b>๐ง Other MCP-Compatible Clients</b></summary>
Any MCP-compatible client can use this server. General configuration:
{
"mcpServers": {
"ohm-mcp": {
"command": "<python-interpreter-path>",
"args": ["<path-to-mcp_server.py>"],
"cwd": "<project-directory>"
}
}
}
Finding your Python path: ```bash
Unix/Mac
which python
or
which python3
Windows
where python ```
</details>
---
๐ก Quick Usage Examples
Once configured, simply reference tools in your AI assistant chat using the format: use #ohm-mcp.tool_name on the current file or @file_name.py
๐๏ธ Find Dead Code
Use #ohm-mcp.detect_dead_code on @utils.py
This will detect:
- โ Unused imports (import statements never referenced)
- โ Unused variables (assigned but never read)
- โ Unreachable code (after return/raise/break/continue)
- โ Unused functions (defined but never called)
- โ Shadowed variables (inner scope hides outer scope variable)
๐ Code Duplication Detection
Use #ohm-mcp.detect_code_duplicates to find duplicates in /path/to/project
Finds:
- โ Exact duplicates (100% identical code blocks)
- โ Near duplicates (90%+ similarity)
- โ Duplicate functions (same structure, different names)
- โ Provides refactoring suggestions to eliminate duplication
๐๏ธ Architecture Analysis
Analyze architecture of @my_module.py using #ohm-mcp.analyze_architecture
Detects:
- โ God Objects (classes doing too much)
- โ SOLID principle violations
- โ Circular dependencies
- โ High coupling issues
โ๏ธ Extract Method Refactoring
Use #ohm-mcp.extract_method_ast to extract lines 45-60 from @handler.py into a new function called "process_request"
Automatically:
- โ Detects required parameters
- โ Identifies return values
- โ Generates refactored code
- โ Creates unified diff patch
๐ Safe Symbol Renaming
Use #ohm-mcp.rename_symbol to rename "old_function_name" to "new_function_name" in /path/to/project
Features:
- โ AST-based (100% accurate)
- โ Detects naming conflicts
- โ Shows all occurrences before applying
- โ Updates docstrings and comments
๐ Type Coverage Analysis
Analyze type hints in @module.py using #ohm-mcp.analyze_type_hints
Provides:
- โ Coverage percentage and grade
- โ Functions missing type hints
- โ Suggested type annotations
- โ Migration plan with priorities
โก Performance Optimization
Use #ohm-mcp.analyze_performance on @slow_module.py
Detects:
- โ Nested loops (O(nยฒ) complexity)
- โ Quadratic list operations
- โ Repeated function calls (missing caching)
- โ Mutable default arguments
- โ Inefficient string concatenation
๐งช Auto-Generate Tests
Generate tests for @calculator.py using #ohm-mcp.generate_characterization_tests
Creates:
- โ Happy path test cases
- โ Edge cases (None, zero, negative, empty)
- โ Ready-to-run pytest code
- โ Preserves current behavior before refactoring
๐จ Design Pattern Suggestions
Suggest design patterns for @legacy_code.py using #ohm-mcp.suggest_design_patterns
Recommends:
- โ Strategy pattern for long if/elif chains
- โ Factory pattern for repetitive object creation
- โ Observer pattern for callback hell
- โ Decorator pattern for cross-cutting concerns
๐ง Import Refactoring
Use #ohm-mcp.refactor_imports to update all files in /path/to/project from "old.module" to "new.module"
Handles:
- โ
Direct imports (
import old.module) - โ
From imports (
from old.module import X) - โ Submodule imports
- โ Import aliases
---
๐ฏ Key Tools (30 Total)
<details> <summary><b>๐ General Analysis & Planning (4 tools)</b></summary>
| Tool | Purpose | Output | |------|---------|--------| | analyze_codebase | Comprehensive code analysis | Issues + refactoring plan | | propose_function_refactor | Function-level refactor planning | Detailed refactor proposal | | explain_refactoring | Explain refactoring patterns | Educational guidance | | create_refactor_patch | Generate unified diff patches | Patch file |
</details>
<details> <summary><b>๐๏ธ Architecture & Design (4 tools)</b></summary>
| Tool | Purpose | Output | |------|---------|--------| | analyze_architecture | Detect God Objects, SOLID violations | Detailed issue report | | suggest_design_patterns | Recommend patterns (Strategy, Factory, Observer) | Pattern suggestions + examples | | analyze_tight_coupling | Find coupling issues | DI recommendations | | suggest_di_refactor | Generate DI code | Before/after refactor |
</details>
<details> <summary><b>๐ง Code Quality & Refactoring (10 tools)</b></summary>
| Tool | Purpose | Key Feature | |------|---------|-------------| | extract_method_ast | Extract code into function | 100% AST-based accuracy | | suggest_extractable_methods | Find extractable blocks | Cohesion scoring | | detect_dead_code | Find unused code | 5 types of dead code | | refactor_imports | Update imports project-wide | Safe module renaming | | refactor_single_file_imports | Refactor imports in one file | Single file focus | | analyze_wildcard_imports | Find wildcard imports | Explicit replacements | | rename_symbol | Rename across codebase | Conflict detection | | detect_code_duplicates | Find DRY violations | Exact + near duplicates | | extract_function_code | Extract single function code | Code extraction utility | | apply_function_refactor | Apply function-level refactor | Direct code modification |
Example - Extract Method: ```python
Input: Lines 45-60
result = extract_method_ast(code, 45, 60, "calculate_total")
Output: Refactored code + patch + auto-detected params/returns
</details>
<details>
<summary><b>๐ Type Safety & Testing (5 tools)</b></summary>
| Tool | Purpose | Benefit |
|------|---------|---------|
| `analyze_type_hints` | Check type coverage | Migration plan |
| `generate_type_stub` | Create .pyi files | Gradual typing |
| `generate_characterization_tests` | Auto-generate tests | Safe refactoring |
| `generate_test_for_function` | Single function tests | Targeted testing |
| `suggest_tests` | Suggest test strategies | Test planning |
</details>
<details>
<summary><b>โก Performance & Prioritization (2 tools)</b></summary>
| Tool | Purpose | Detects |
|------|---------|---------|
| `analyze_performance` | Find bottlenecks | Nested loops, mutable defaults, O(nยฒ) |
| `prioritize_by_coverage` | Risk-based prioritization | High-risk uncovered code |
</details>
<details>
<summary><b>๐ค Automated Execution & History (4 tools)</b></summary>
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] ```
| Tool | Purpose | |------|--------| | apply_refactoring | Auto-apply refactoring with safety checks | | rollback_refactoring | Rollback previous refactoring | | show_refactoring_history | View refactoring audit trail | | cleanup_old_backups | Clean up old backup files |
Features:
- โ Automatic backup before changes
- โ Test execution validation
- โ Auto-rollback on failure
- โ Full audit trail with history
- โ Automatic backup cleanup
</details>
<details> <summary><b>๐ Metrics & Reporting (1 tool)</b></summary>
generate_quality_report - Comprehensive dashboard in HTML/Markdown/JSON
Output Preview:
๐ 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
Visual Dashboard:
- ๐จ Circular health gauge
- ๐ Color-coded metrics (๐ข๐ก๐ด)
- ๐ Trend tracking ready
- ๐ CI/CD integration (JSON export)
</details>
---
๐ก Common Workflows
1๏ธโฃ Safe Refactoring
generate_characterization_tests โ pytest โ extract_method_ast โ pytest
2๏ธโฃ Eliminate Duplication
detect_code_duplicates โ review suggestions โ extract_method_ast
3๏ธโฃ Type Migration
analyze_type_hints โ follow migration plan โ generate_type_stub
4๏ธโฃ Performance Optimization
analyze_performance โ prioritize_by_coverage โ apply fixes
5๏ธโฃ Module Refactoring
refactor_imports(old="myapp.old", new="myapp.new") โ review patches
6๏ธโฃ Symbol Renaming
rename_symbol(old="calc", new="calculate", preview_only=True) โ apply
7๏ธโฃ Quality Tracking
generate_quality_report(format="html") โ open dashboard โ track trends
---
๐จ Visual Examples
Quality Dashboard Preview
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ 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 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Symbol Rename Preview
# 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
---
๐ง Design Principles
| Principle | Implementation | |-----------|----------------| | ๐งช Test-First | Auto-generate characterization tests before refactoring | | โฉ๏ธ Reversible | Every change = backup + rollback capability | | ๐ฏ AST-Driven | 100% accurate (no regex) | | ๐ Risk-Aware | Coverage + complexity = prioritization | | ๐๏ธ SOLID | Detect violations + concrete fixes | | ๐ซ No Blindness | Analyze โ Plan โ Validate |
---
๐ IDE Compatibility
<table> <tr> <td align="center" width="100%"> <b>๐ค Any MCP Client</b><br> โ Standard Protocol<br> โ Easy Setup<br> โ Works with all MCP-compatible AI assistants </td> </tr> </table>
---
๐ Comparison
| Feature | OHM MCP | Traditional Tools | |---------|---------|-------------------| | Accuracy | 100% AST | ~70% Regex | | Safety | Auto backup/rollback | Manual | | Testing | Auto-generates | Manual | | Automation | Full | Suggestions only | | Dashboard | HTML/JSON/MD | Text logs | | IDE Support | Copilot/Cursor/Cline | Limited |
---
๐ฏ Use Cases
<table> <tr> <td><b>๐จโ๐ป Developers</b><br>โข Refactor legacy code safely<br>โข Find dead code<br>โข Optimize performance</td> <td><b>๐ฅ Teams</b><br>โข Track tech debt<br>โข Enforce standards<br>โข Design patterns</td> <td><b>๐ CI/CD</b><br>โข Quality gates<br>โข Trend tracking<br>โข Block bad PRs</td> </tr> </table>
---
๐ Metrics
โ
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
---
๐ ๏ธ Troubleshooting
<details> <summary><b>MCP Connection Issues</b></summary>
- Verify Python path:
which python # Unix/Mac
where python # Windows
- Test MCP server directly:
python -m ohm_mcp.server
- Check logs:
- VS Code: Check Output panel
- Cursor: Check Cursor logs
- Cline: Check Cline settings panel
- Common issues:
- โ Relative paths in
commandโ Use absolute paths - โ Missing virtual environment โ Activate venv first
- โ Wrong
cwdfor Cline โ Must be absolute path
</details>
---
๐ค Contributing
Run before submitting: ``bash ./static_analyser.sh # Runs ruff, mypy, pylint, flake8 pytest # All tests must pass ``
---
๐ Credits
Built with Model Context Protocol โข Python AST โข Compatible with GitHub Copilot, Cursor IDE, Cline
---
<div align="center">
Made with โค๏ธ for better code quality
โญ Star this repo if it helps you write cleaner code!
</div>






