mcpField
I
importfix

importfix

ローカル
github.com/CloudCorpRecords開発ツール01 週間前に更新

importfix について

importfixは、与えられたモジュールグラフを分析し、循環インポートを検出して、循環コンポーネントごとに決定的なループと削除候補のエッジを示します。依存関係のループを調べる開発者向けで、ソースファイルやネットワークを使わずローカルで処理します。

主な機能

  1. 01モジュールグラフの循環検出
  2. 02コンポーネントごとのループ報告
  3. 03切断するエッジの提案
  4. 04外部インポートの統計集計
  5. 05コマンドラインと MCP サーバー対応

活用シーン

  1. 01依存関係グラフのループ特定
  2. 02影響の小さい切断エッジの選定

MCP 対応

MCP サーバーは `find_import_cycles` を公開し、モジュールグラフを受け取り、代表的な循環と切断候補を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cloudcorprecords-importfix": {
"command": "npx",
"args": [
"-y",
"@reneturcios/importfix"
]
}
}
}
起動コマンドnpx -y @reneturcios/importfix

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@reneturcios/importfix0.1.0
ocighcr.io/cloudcorprecords/importfix:0.1.0

ツール

1

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
modulesarrayはいグラフ内のモジュールです。各エントリにはモジュールパスと、そのモジュールがインポートするパスが含まれます。

詳細

importfix

循環インポートは簡単に発生し、目視で解消するのは困難です。コンパイラーが示すのはファイル名であり、ループそのものではありません。importfix はモジュールグラフ(各モジュールのパスと、そのモジュールがインポートするパス)を受け取り、実際にループが発生している箇所を特定します。

循環成分ごとに、代表的なサイクルを正確に 1 つ報告します。巡回順のノードと、開始点に戻るまでのエッジを正確に示します。すべての基本サイクルを列挙するのではなく、各成分につき、正確で再現可能なサイクルを 1 つ報告する仕様です。各サイクルには、推奨される解消箇所も含まれます。これは最初に削除するサイクルエッジで、グラフ全体で依存元が最も少ないものの中から選ばれます。そのため、ループ内で最もインポートされていないモジュールへの影響を最小限に抑えられます。

グラフに含める対象は、次の厳密なルールに従います。

  • インポート先が同じ入力内の別のモジュールである場合にのみ、インポートをエッジとして扱います。それ以外のインポートは外部インポートとして統計に計上されますが、エッジにはなりません。
  • 重複するインポートは 1 つのエッジにまとめられます。
  • モジュールが自分自身をインポートする場合、長さ 1 のサイクルとして、ほかのサイクルと同様に報告されます。
  • 代表サイクルは決定的です。成分内で辞書順が最も早いモジュールから開始し、隣接モジュールを辞書順にたどるため、同じグラフからは常に同じ結果が得られます。

純粋なローカル処理です。ネットワーク通信やソースツリーのファイル読み込みは行いません。グラフは呼び出し元から渡されます。

CLI

npx @reneturcios/importfix cycles --modules modules.json
npx @reneturcios/importfix --version

modules.json には modules 配列が含まれます。

[
  {"path": "src/a.ts", "imports": ["src/b.ts"]},
  {"path": "src/b.ts", "imports": ["src/a.ts", "node:fs"]}
]

コマンドはレポートを JSON として出力します。

{
  "has_cycles": true,
  "cycles": [
    {
      "nodes": ["src/a.ts", "src/b.ts"],
      "edges": [
        {"from": "src/a.ts", "to": "src/b.ts"},
        {"from": "src/b.ts", "to": "src/a.ts"}
      ],
      "suggested_break": {
        "from": "src/a.ts",
        "to": "src/b.ts",
        "reason": "target has the fewest dependents in the graph (1)"
      }
    }
  ],
  "stats": {
    "module_count": 2,
    "edge_count": 2,
    "external_imports": 1,
    "cyclic_module_count": 2
  }
}

終了コード:成功時は 0、実行時エラー時(読み取れない、または無効な modules ファイルを含む)は 1、使用方法のエラー時は 2 です。

MCP server

npx -y @reneturcios/importfix mcp

MCP クライアントの設定:

{
  "mcpServers": {
    "importfix": {
      "command": "npx",
      "args": ["-y", "@reneturcios/importfix", "mcp"]
    }
  }
}
Tools
  • find_import_cycles — モジュールグラフ内の循環インポートを検出し、循環成分ごとに推奨される解消箇所とともに代表的なサイクルを 1 つ報告します。
    • modules(配列、必須、1 件以上)— {path, imports} オブジェクト形式のモジュールです。path はモジュール自身のパス、imports はインポートするパスの一覧です(空の場合もあります)。

Docker

docker run -i ghcr.io/cloudcorprecords/importfix
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/importfix cycles --modules /w/modules.json

Development

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。