Skip to main content
Glama

OHM-MCP

AI-Powered Python Refactoring & Code Quality Assistant

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

MCP Registry Python 3.8+ MCP AST-Based License


โœจ 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

๐Ÿ“ฆ 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:

pip install ohm-mcp

Install from source (for development):

pip install -e .

IDE Configuration

๐Ÿ“ฆ Option 1: NPX (Recommended - Auto-installs dependencies)

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"

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"

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"

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"

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"

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"

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)

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"

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"

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"

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)

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

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

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

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

Tool

Purpose

Detects

analyze_performance

Find bottlenecks

Nested loops, mutable defaults, O(nยฒ)

prioritize_by_coverage

Risk-based prioritization

High-risk uncovered code

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

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

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


๐Ÿ“Š 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


๐Ÿ“ˆ 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

  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

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Looking for Admin?

Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Murugarajr/ohm-mcp-pypi'

If you have feedback or need assistance with the MCP directory API, please join our Discord server