OHM-MCP
AI-powered Python refactoring assistant that provides AST-based code analysis, SOLID violation detection, dead code elimination, type safety analysis, performance optimization, and automated refactoring with rollback capabilities.
README
<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.
</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).
๐ 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:
pip install ohm-mcp
Install from source (for development):
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:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["ohm-mcp@latest"]
}
}
}
For local development:
{
"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):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
For local development:
{
"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):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
For local development:
{
"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):
{
"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):
{
"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):
[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):
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/project/venv/bin/python",
"args": ["-m", "ohm_mcp.server"],
"disabled": false,
"alwaysAllow": []
}
}
}
Global (After publishing to npm):
{
"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:
{
"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):
{
"mcpServers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
},
"inputs": []
}
Example with virtual environment:
{
"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:
{
"mcpServers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
Example with virtual environment:
{
"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:
# 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:
# 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
- โ Relative paths in
</details>
๐ค Contributing
Run before submitting:
./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>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Neon Database
MCP server for interacting with Neon Management API and databases