io.github.Murugarajr/ohm-mcp

Official registry Other

AST-based Python refactoring MCP server with safe automated refactorings and rollback

What can you do with io.github.Murugarajr/ohm-mcp?

  • ✅ Automatic backup before changes
  • ✅ Test execution validation
  • ✅ Auto-rollback on failure
  • ✅ Full audit trail with history
  • ✅ Automatic backup cleanup
  • 🎨 Circular health gauge
  • 📊 Color-coded metrics (🟢🟡🔴)
  • 📈 Trend tracking ready

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

NPM package ohm-mcp
Claude Code
claude mcp add ohm-mcp -- npx -y ohm-mcp@1.0.1
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "ohm-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "ohm-mcp@1.0.1"
            ]
        }
    }
}
PYPI package ohm-mcp
Claude Code
claude mcp add ohm-mcp -- uvx ohm-mcp==1.0.1
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "ohm-mcp": {
            "command": "uvx",
            "args": [
                "ohm-mcp==1.0.1"
            ]
        }
    }
}

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. OHM-MCP
  2. ✨ Core Capabilities
  3. 🚀 Quick Start
  4. 💡 Quick Usage Examples
  5. 🎯 Key Tools (30 Total)
  6. 💡 Common Workflows
  7. 🎨 Visual Examples
  8. 🧠 Design Principles
  9. 🔌 IDE Compatibility
  10. 📊 Comparison
  11. 🎯 Use Cases
  12. 📈 Metrics
  13. 🛠️ Troubleshooting
  14. 🤝 Contributing
  15. 🙏 Credits

OHM-MCP

AI-Powered Python Refactoring & Code Quality Assistant

Works with GitHub Copilot, Cursor IDE, Cline, and any MCP-compatible AI assistant.

[]() []()


✨ Core Capabilities

🏗️ 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
📊 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

🚀 Quick Start

Installation

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:

pip install ohm-mcp

Install from source (for development):

pip install -e .
IDE Configuration

🔵 GitHub Copilot (VS Code) with NPX

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 select ohm-mcp tools
  • Ask: "Analyze this file and suggest refactorings"

🟣 Cursor IDE with NPX

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"

🟢 Cline (VS Code Extension) with NPX

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"

🟠 Antigravity with NPX

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"

🔴 Roo Code with NPX

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"

⚫ Codex VS Code with NPX

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"

🟡 Kilo Code with NPX (Local/Global)

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"
🐍 Option 2: Direct Python (Manual setup)

🔵 GitHub Copilot (VS Code) with Python

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 select ohm-mcp tools
  • Ask: "Analyze this file and suggest refactorings"

🟣 Cursor IDE with Python

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"

🟢 Cline (VS Code Extension) with Python

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"

🔧 Other MCP-Compatible Clients

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

💡 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)

📋 General Analysis & Planning (4 tools)

ToolPurposeOutput
analyze_codebaseComprehensive code analysisIssues + refactoring plan
propose_function_refactorFunction-level refactor planningDetailed refactor proposal
explain_refactoringExplain refactoring patternsEducational guidance
create_refactor_patchGenerate unified diff patchesPatch file

🏗️ Architecture & Design (4 tools)

ToolPurposeOutput
analyze_architectureDetect God Objects, SOLID violationsDetailed issue report
suggest_design_patternsRecommend patterns (Strategy, Factory, Observer)Pattern suggestions + examples
analyze_tight_couplingFind coupling issuesDI recommendations
suggest_di_refactorGenerate DI codeBefore/after refactor

🔧 Code Quality & Refactoring (10 tools)

ToolPurposeKey Feature
extract_method_astExtract code into function100% AST-based accuracy
suggest_extractable_methodsFind extractable blocksCohesion scoring
detect_dead_codeFind unused code5 types of dead code
refactor_importsUpdate imports project-wideSafe module renaming
refactor_single_file_importsRefactor imports in one fileSingle file focus
analyze_wildcard_importsFind wildcard importsExplicit replacements
rename_symbolRename across codebaseConflict detection
detect_code_duplicatesFind DRY violationsExact + near duplicates
extract_function_codeExtract single function codeCode extraction utility
apply_function_refactorApply function-level refactorDirect 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

📊 Type Safety & Testing (5 tools)

ToolPurposeBenefit
analyze_type_hintsCheck type coverageMigration plan
generate_type_stubCreate .pyi filesGradual typing
generate_characterization_testsAuto-generate testsSafe refactoring
generate_test_for_functionSingle function testsTargeted testing
suggest_testsSuggest test strategiesTest planning

⚡ Performance & Prioritization (2 tools)

ToolPurposeDetects
analyze_performanceFind bottlenecksNested loops, mutable defaults, O(n²)
prioritize_by_coverageRisk-based prioritizationHigh-risk uncovered code

🤖 Automated Execution & History (4 tools)

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]
ToolPurpose
apply_refactoringAuto-apply refactoring with safety checks
rollback_refactoringRollback previous refactoring
show_refactoring_historyView refactoring audit trail
cleanup_old_backupsClean up old backup files

Features:

  • ✅ Automatic backup before changes
  • ✅ Test execution validation
  • ✅ Auto-rollback on failure
  • ✅ Full audit trail with history
  • ✅ Automatic backup cleanup

📈 Metrics & Reporting (1 tool)

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)

💡 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

PrincipleImplementation
🧪 Test-FirstAuto-generate characterization tests before refactoring
↩️ ReversibleEvery change = backup + rollback capability
🎯 AST-Driven100% accurate (no regex)
📊 Risk-AwareCoverage + complexity = prioritization
🏛️ SOLIDDetect violations + concrete fixes
🚫 No BlindnessAnalyze → Plan → Validate

🔌 IDE Compatibility

🤖 Any MCP Client

✅ Standard Protocol

✅ Easy Setup

✅ Works with all MCP-compatible AI assistants


📊 Comparison

FeatureOHM MCPTraditional Tools
Accuracy100% AST~70% Regex
SafetyAuto backup/rollbackManual
TestingAuto-generatesManual
AutomationFullSuggestions only
DashboardHTML/JSON/MDText logs
IDE SupportCopilot/Cursor/ClineLimited

🎯 Use Cases

👨‍💻 Developers
• Refactor legacy code safely
• Find dead code
• Optimize performance 👥 Teams
• Track tech debt
• Enforce standards
• Design patterns 🚀 CI/CD
• Quality gates
• Trend tracking
• Block bad PRs


📈 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

MCP Connection Issues

  1. Verify Python path:
     which python  # Unix/Mac
     where python  # Windows
  2. Test MCP server directly:
     python -m ohm_mcp.server
  3. Check logs:
    • VS Code: Check Output panel
    • Cursor: Check Cursor logs
    • Cline: Check Cline settings panel
  4. Common issues:
    • ❌ Relative paths in command → Use absolute paths
    • ❌ Missing virtual environment → Activate venv first
    • ❌ Wrong cwd for Cline → Must be absolute path

🤝 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


Made with ❤️ for better code quality

⭐ Star this repo if it helps you write cleaner code!

Documentation

Frequently asked questions

What is io.github.Murugarajr/ohm-mcp?

AST-based Python refactoring MCP server with safe automated refactorings and rollback

How do I install io.github.Murugarajr/ohm-mcp?

It runs on your machine. In Claude Code: claude mcp add ohm-mcp -- npx -y ohm-mcp@1.0.1. For other clients, paste the JSON configuration from this page into their MCP settings.

Does io.github.Murugarajr/ohm-mcp need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is io.github.Murugarajr/ohm-mcp open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains io.github.Murugarajr/ohm-mcp?

It is published by Murugarajr. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.