🚀 OHM-MCP
AIによるPythonのリファクタリングとコード品質アシスタント
GitHub Copilot、Cursor IDE、Cline、およびMCP互換のAIアシスタントと連携可能です。
🚀 クイックスタート
インストール
📦 推奨: NPMメソッド (依存関係を自動インストール)
インストールは不要です!NPXを使用して最新バージョンを自動的に実行できます。
npx -y ohm-mcp@latest
これが最も簡単な開始方法です。AIアシスタントに設定を追加するだけです(下記のIDE設定を参照)。
MCP Registry: mcp-name: io.github.Murugarajr/ohm-mcp
🐍 代替: PyPIメソッド (ローカル開発用)
以下の場合にこの方法を使用します。
- Pythonパッケージをローカルで開発する場合
- 特定のPython仮想環境を使用する場合
- カスタマイズのためにソースからインストールする場合
PyPIからインストール:
pip install ohm-mcp
開発用にソースからインストール:
pip install -e .
IDE設定
📦 オプション1: NPX (推奨 - 依存関係を自動インストール)
🔵 GitHub Copilot (VS Code) とNPX
npmに公開した後:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["ohm-mcp@latest"]
}
}
}
ローカル開発用:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"]
}
}
}
使用方法:
- Copilotチャットを開く
# を入力して ohm-mcp ツールを選択
- 「このファイルを分析してリファクタリングの提案をしてください」と尋ねる
🟣 Cursor IDE とNPX
グローバル (npmに公開した後):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
ローカル開発用:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"]
}
}
}
使用方法:
- Cursorチャットを開く (Cmd+L / Ctrl+L)
- ツールが自動的に利用可能になる
- 「ohm-mcpを使って未使用コードを検出してください」と尋ねる
🟢 Cline (VS Code拡張機能) とNPX
グローバル (npmに公開した後):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
ローカル開発用:
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["--package", "/path/to/ohm-mcp-npm", "ohm-mcp"]
}
}
}
使用方法:
- Clineパネルを開く
- ツールがエージェントコンテキストで利用可能になる
- 「型カバレッジを分析して改善案を提案してください」と尋ねる
🟠 Antigravity とNPX
グローバル (npmに公開した後):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}
使用方法:
- Antigravityでツールが自動的に利用可能になる
- 「ohm-mcpを使ってアーキテクチャを分析してください」と尋ねる
🔴 Roo Code とNPX
グローバル (npmに公開した後):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
使用方法:
- Roo Codeパネルを開く
- ツールがエージェントコンテキストで利用可能になる
- 「ohm-mcpを使って重複コードを検出してください」と尋ねる
⚫ Codex VS Code とNPX
設定 (config.toml):
[mcp_servers.ohm-mcp]
args = ["-y", "ohm-mcp@latest"]
command = "npx"
使用方法:
- Codexパネルを開く
- ツールが自動的に利用可能になる
- 「ohm-mcpを使ってデザインパターンを提案してください」と尋ねる
🟡 Kilo Code とNPX (ローカル/グローバル)
ローカル (仮想環境を使ったローカル開発用):
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/project/venv/bin/python",
"args": ["-m", "ohm_mcp.server"],
"disabled": false,
"alwaysAllow": []
}
}
}
グローバル (npmに公開した後):
{
"mcpServers": {
"ohm-mcp": {
"command": "npx",
"args": ["-y", "ohm-mcp@latest"]
}
}
}
使用方法:
- Kilo Codeパネルを開く
- ツールがエージェントコンテキストで利用可能になる
- 「ohm-mcpを使ってリファクタリングを行ってください」と尋ねる
🐍 オプション2: 直接Python (手動設定)
🔵 GitHub Copilot (VS Code) とPython
まずインストールします: pip install ohm-mcp
次に .vscode/mcp.json に追加します:
{
"servers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
},
"inputs": []
}
使用方法:
- Copilotチャットを開く
# を入力して ohm-mcp ツールを選択
- 「このファイルを分析してリファクタリングの提案をしてください」と尋ねる
🟣 Cursor IDE とPython
まずインストールします: pip install ohm-mcp
次にCursorのMCP設定ファイル (.cursorrules またはMCP設定) に追加します:
{
"mcpServers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
},
"inputs": []
}
仮想環境を使用する例:
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/projects/venv/bin/python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
使用方法:
- Cursorチャットを開く (Cmd+L / Ctrl+L)
- ツールが自動的に利用可能になる
- 「ohm-mcpを使って未使用コードを検出してください」と尋ねる
🟢 Cline (VS Code拡張機能) とPython
まずインストールします: pip install ohm-mcp
次にClineのMCP設定に追加します:
{
"mcpServers": {
"ohm-mcp": {
"command": "python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
仮想環境を使用する例:
{
"mcpServers": {
"ohm-mcp": {
"command": "/Users/username/projects/venv/bin/python",
"args": ["-m", "ohm_mcp.server"]
}
}
}
注意: Clineは command と cwd の両方に絶対パスが必要です。
使用方法:
- Clineパネルを開く
- ツールがエージェントコンテキストで利用可能になる
- 「型カバレッジを分析して改善案を提案してください」と尋ねる
🔧 その他のMCP互換クライアント
任意のMCP互換クライアントがこのサーバーを使用できます。一般的な設定は次の通りです。
{
"mcpServers": {
"ohm-mcp": {
"command": "<python-interpreter-path>",
"args": ["<path-to-mcp_server.py>"],
"cwd": "<project-directory>"
}
}
}
Pythonパスの検索方法:
which python
which python3
where python
✨ 主な機能
| カテゴリ |
詳細 |
| 🏗️ アーキテクチャ |
- ゴッドオブジェクトの検出 - SOLID原則違反の分析 - デザインパターンの提案 - 依存性注入のリファクタリング |
| 🔧 コード品質 |
- ASTによるメソッド抽出 (100%正確) - 未使用コードの削除 - インポートのリファクタリング - シンボルのリネーム (プロジェクト全体) - 重複コードの検出 |
| 📊 型安全性 |
- 型カバレッジの分析 - 型スタブの生成 - 自動テストの生成 |
| ⚡ パフォーマンス |
- O(n²)パターンの検出 - ホットスポットの分析 - カバレッジに基づく優先順位付け |
| 🤖 自動化 |
- ロールバック機能付きの自動適用 - 操作履歴 - 品質ダッシュボード |
💻 使用例
基本的な使用法
設定が完了したら、AIアシスタントのチャットで #ohm-mcp.tool_name の形式でツールを参照し、現在のファイルまたは @file_name.py を指定します。
🗑️ 未使用コードの検出
Use #ohm-mcp.detect_dead_code on @utils.py
これにより、以下が検出されます。
- ✅ 未使用のインポート (参照されないインポート文)
- ✅ 未使用の変数 (割り当てられたが読み取られない変数)
- ✅ 到達不能なコード (return/raise/break/continueの後のコード)
- ✅ 未使用の関数 (定義されたが呼び出されない関数)
- ✅ シャドウ変数 (内側のスコープが外側のスコープの変数を隠す)
📋 コードの重複検出
Use #ohm-mcp.detect_code_duplicates to find duplicates in /path/to/project
以下が見つかります。
- ✅ 完全な重複 (100%同一のコードブロック)
- ✅ ほぼ重複 (90%以上の類似度)
- ✅ 重複する関数 (同じ構造で名前が異なる)
- ✅ 重複を排除するためのリファクタリング提案
🏗️ アーキテクチャ分析
Analyze architecture of @my_module.py using #ohm-mcp.analyze_architecture
以下が検出されます。
- ✅ ゴッドオブジェクト (過度に多くの機能を持つクラス)
- ✅ SOLID原則の違反
- ✅ 循環依存
- ✅ 高い結合度の問題
✂️ メソッド抽出リファクタリング
Use #ohm-mcp.extract_method_ast to extract lines 45-60 from @handler.py into a new function called "process_request"
自動的に以下が行われます。
- ✅ 必要なパラメータの検出
- ✅ 戻り値の特定
- ✅ リファクタリングされたコードの生成
- ✅ 統一された差分パッチの作成
🔄 安全なシンボルのリネーム
Use #ohm-mcp.rename_symbol to rename "old_function_name" to "new_function_name" in /path/to/project
特徴:
- ✅ ASTベース (100%正確)
- ✅ 名前の衝突の検出
- ✅ 適用前にすべての出現箇所を表示
- ✅ ドキュメント文字列とコメントの更新
📊 型カバレッジの分析
Analyze type hints in @module.py using #ohm-mcp.analyze_type_hints
以下が提供されます。
- ✅ カバレッジ率と評価
- ✅ 型ヒントが欠けている関数
- ✅ 提案される型アノテーション
- ✅ 優先順位付けされた移行計画
⚡ パフォーマンスの最適化
Use #ohm-mcp.analyze_performance on @slow_module.py
以下が検出されます。
- ✅ ネストされたループ (O(n²)の複雑度)
- ✅ 二次的なリスト操作
- ✅ 繰り返される関数呼び出し (キャッシュが欠けている)
- ✅ ミュータブルなデフォルト引数
- ✅ 非効率な文字列結合
🧪 自動テストの生成
Generate tests for @calculator.py using #ohm-mcp.generate_characterization_tests
以下が作成されます。
- ✅ 正常系のテストケース
- ✅ エッジケース (None、ゼロ、負の値、空)
- ✅ 実行可能なpytestコード
- ✅ リファクタリング前の現在の振る舞いを保持
🎨 デザインパターンの提案
Suggest design patterns for @legacy_code.py using #ohm-mcp.suggest_design_patterns
以下が推奨されます。
- ✅ 長いif/elifチェーンに対するストラテジーパターン
- ✅ 繰り返しのオブジェクト生成に対するファクトリーパターン
- ✅ コールバック地獄に対するオブザーバーパターン
- ✅ 横断的関心事に対するデコレータパターン
🔧 インポートのリファクタリング
Use #ohm-mcp.refactor_imports to update all files in /path/to/project from "old.module" to "new.module"
以下が処理されます。
- ✅ 直接のインポート (
import old.module)
- ✅ フロムインポート (
from old.module import X)
- ✅ サブモジュールのインポート
- ✅ インポートのエイリアス
🎯 主要ツール (合計30個)
📋 一般的な分析と計画 (4つのツール)
| ツール |
目的 |
出力 |
analyze_codebase |
包括的なコード分析 |
問題とリファクタリング計画 |
propose_function_refactor |
関数レベルのリファクタリング計画 |
詳細なリファクタリング提案 |
explain_refactoring |
リファクタリングパターンの説明 |
教育的なガイダンス |
create_refactor_patch |
統一された差分パッチの生成 |
パッチファイル |
🏗️ アーキテクチャとデザイン (4つのツール)
| ツール |
目的 |
出力 |
analyze_architecture |
ゴッドオブジェクト、SOLID違反の検出 |
詳細な問題レポート |
suggest_design_patterns |
パターンの提案 (ストラテジー、ファクトリー、オブザーバー) |
パターン提案と例 |
analyze_tight_coupling |
結合度の問題の検出 |
依存性注入の推奨事項 |
suggest_di_refactor |
依存性注入コードの生成 |
リファクタリング前後 |
🔧 コード品質とリファクタリング (10個のツール)
| ツール |
目的 |
主要な特徴 |
extract_method_ast |
コードを関数に抽出 |
100% ASTベースの正確性 |
suggest_extractable_methods |
抽出可能なブロックの検出 |
凝集度のスコアリング |
detect_dead_code |
未使用コードの検出 |
5種類の未使用コード |
refactor_imports |
プロジェクト全体のインポートの更新 |
安全なモジュールのリネーム |
refactor_single_file_imports |
1つのファイルのインポートのリファクタリング |
単一ファイルの焦点 |
analyze_wildcard_imports |
ワイルドカードインポートの検出 |
明示的な置き換え |
rename_symbol |
コードベース全体のシンボルのリネーム |
衝突の検出 |
detect_code_duplicates |
DRY原則違反の検出 |
完全な重複とほぼ重複 |
extract_function_code |
単一の関数コードの抽出 |
コード抽出ユーティリティ |
apply_function_refactor |
関数レベルのリファクタリングの適用 |
直接のコード変更 |
例 - メソッド抽出:
result = extract_method_ast(code, 45, 60, "calculate_total")
📊 型安全性とテスト (5つのツール)
| ツール |
目的 |
利点 |
analyze_type_hints |
型カバレッジのチェック |
移行計画 |
generate_type_stub |
.pyiファイルの作成 |
段階的な型付け |
generate_characterization_tests |
自動テストの生成 |
安全なリファクタリング |
generate_test_for_function |
単一の関数のテスト |
ターゲットのテスト |
suggest_tests |
テスト戦略の提案 |
テスト計画 |
⚡ パフォーマンスと優先順位付け (2つのツール)
| ツール |
目的 |
検出内容 |
analyze_performance |
ボトルネックの検出 |
ネストされたループ、ミュータブルなデフォルト、O(n²) |
prioritize_by_coverage |
リスクベースの優先順位付け |
高リスクの未カバーコード |
🤖 自動実行と履歴 (4つのツール)
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]
| ツール |
目的 |
apply_refactoring |
安全チェック付きの自動リファクタリングの適用 |
rollback_refactoring |
前のリファクタリングのロールバック |
show_refactoring_history |
リファクタリングの監査履歴の表示 |
cleanup_old_backups |
古いバックアップファイルのクリーンアップ |
特徴:
- ✅ 変更前の自動バックアップ
- ✅ テスト実行の検証
- ✅ 失敗時の自動ロールバック
- ✅ 完全な監査履歴
- ✅ 自動バックアップのクリーンアップ
📈 メトリクスとレポート (1つのツール)
generate_quality_report - HTML/Markdown/JSON形式の包括的なダッシュボード
出力のプレビュー:
📊 ヘルススコア: 85/100 (良好)
📁 ファイル: 47 | 行数: 12,450 | 技術的負債: 23ポイント
📊 型カバレッジ: 67%
🗑️ 未使用コード: 8つのインポート、12個の変数、3つの関数
⚡ パフォーマンス: 4つのネストされたループ、2つのミュータブルなデフォルト引数
📋 重複: 3つの完全な重複、5つのほぼ重複
ビジュアルダッシュボード:
- 🎨 円形のヘルスゲージ
- 📊 色分けされたメトリクス (🟢🟡🔴)
- 📈 トレンド追跡可能
- 🔗 CI/CD統合 (JSONエクスポート)
💡 一般的なワークフロー
1️⃣ 安全なリファクタリング
generate_characterization_tests → pytest → extract_method_ast → pytest
2️⃣ 重複の排除
detect_code_duplicates → review suggestions → extract_method_ast
3️⃣ 型の移行
analyze_type_hints → follow migration plan → generate_type_stub
4️⃣ パフォーマンスの最適化
analyze_performance → prioritize_by_coverage → apply fixes
5️⃣ モジュールのリファクタリング
refactor_imports(old="myapp.old", new="myapp.new") → review patches
6️⃣ シンボルのリネーム
rename_symbol(old="calc", new="calculate", preview_only=True) → apply
7️⃣ 品質の追跡
generate_quality_report(format="html") → open dashboard → track trends
🎨 ビジュアル例
品質ダッシュボードのプレビュー
┌─────────────────────────────────────────────┐
│ 🔍 コード品質ダッシュボード │
├─────────────────────────────────────────────┤
│ │
│ ╭─────────╮ 📁 概要 │
│ │ 85 │ ファイル: 47 │
│ │ /100 │ 行数: 12,450 │
│ ╰─────────╯ 技術的負債: 23 │
│ ヘルススコア │
│ │
├─────────────────────────────────────────────┤
│ 📊 型カバレッジ ⚡ パフォーマンス │
│ ████████░░ 67% 🔴 4つのネストされたループ │
│ 120/180 型付け済み 🟡 2つのミュータブルな引数 │
├─────────────────────────────────────────────┤
│ 🗑️ 未使用コード 📋 重複 │
│ 8つのインポート 3つの完全な重複 │
│ 12個の変数 5つのほぼ重複 │
│ 3つの関数 │
└─────────────────────────────────────────────┘
シンボルのリネームのプレビュー
# 変更前
- def calc(x, y):
- return x + y
- result = calc(5, 3)
# 変更後
+ def calculate_sum(x, y):
+ return x + y
+ result = calculate_sum(5, 3)
✅ 1つの関数がリネームされました
✅ 3つの呼び出し箇所が更新されました
✅ 0つの衝突が検出されました
🧠 設計原則
| 原則 |
実装 |
| 🧪 テスト先行 |
リファクタリング前に自動的に特性テストを生成 |
| ↩️ 可逆性 |
すべての変更にバックアップとロールバック機能を備える |
| 🎯 AST駆動 |
100%正確 (正規表現なし) |
| 📊 リスク意識 |
カバレッジ + 複雑度 = 優先順位付け |
| 🏛️ SOLID |
違反の検出と具体的な修正策 |
| 🚫 盲目性の排除 |
分析 → 計画 → 検証 |
🔌 IDE互換性
| IDE |
互換性 |
| 🤖 任意のMCPクライアント |
✅ 標準プロトコル ✅ 簡単なセットアップ ✅ すべてのMCP互換AIアシスタントと連携可能 |
📊 比較
| 機能 |
OHM MCP |
従来のツール |
| 正確性 |
100% AST |
~70% 正規表現 |
| 安全性 |
自動バックアップ/ロールバック |
手動 |
| テスト |
自動生成 |
手動 |
| 自動化 |
完全自動 |
提案のみ |
| ダッシュボード |
HTML/JSON/MD |
テキストログ |
| IDEサポート |
Copilot/Cursor/Cline |
限定的 |
🎯 使用例
| ユーザー |
使用例 |
| 👨💻 開発者 |
• レガシーコードを安全にリファクタリング • 未使用コードを見つける • パフォーマンスを最適化する |
| 👥 チーム |
• 技術的負債を追跡する • 標準を強制する • デザインパターンを適用する |
| 🚀 CI/CD |
• 品質ゲートを設定する • トレンドを追跡する • 不適切なPRをブロックする |
📈 メトリクス
✅ 30個のMCPツール
✅ 40以上の静的チェック
✅ 100% AST正確性
✅ 正規表現パターンなし
✅ ロールバック機能付きの自動実行
✅ 美しいダッシュボード (HTML/JSON/MD)
✅ 汎用的なMCP互換性
✅ 自動バックアップ付きの安全なリファクタリング
🛠️ トラブルシューティング
MCP接続問題
-
Pythonパスを確認する:
which python
where python
-
MCPサーバーを直接テストする:
python -m ohm_mcp.server
-
ログを確認する:
- VS Code: 出力パネルを確認
- Cursor: Cursorログを確認
- Cline: Cline設定パネルを確認
-
一般的な問題:
- ❌
command で相対パスを使用している → 絶対パスを使用する
- ❌ 仮想環境がない → まず仮想環境をアクティブにする
- ❌ Clineの
cwd が間違っている → 絶対パスにする必要がある
🤝 コントリビューション
提出する前に実行してください:
./static_analyser.sh
pytest
🙏 クレジット
Model Context Protocol、Python ASTを使用して構築されています。GitHub Copilot、Cursor IDE、Clineと互換性があります。
良質なコードのために愛を込めて作られました
⭐ このリポジトリをスター して、クリーンなコードを書くのに役立ててください!
ドキュメント