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.

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

๐Ÿ 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

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