conflictfix について
conflictfixは、三者間マージの競合箇所を機械的に解決できるか、リスクがあるか分類するローカルツールです。安全な場合のみ解決行を返し、それ以外は人による確認に残します。
主な機能
- 01競合箇所を5種類に分類
- 02一致・片側変更・空白差分を解決
- 03リスクのある箇所は未解決のまま保持
- 04箇所ごとと全体の安全性を集計
- 05リポジトリのファイルを読まずに入力を検証
活用シーン
- 01人による確認前の競合箇所の分類
- 02機械的に解決できる変更の特定
- 03すべての競合箇所が解決可能かの確認
MCP 対応
MCP サーバーは `triage_conflicts` ツールを公開します。パスと呼び出し側が指定する base、ours、theirs の行を受け取り、分類と安全な解決結果を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 競合ハンクが属するファイルパス |
| hunks | array | はい | トリアージする競合ハンク。各項目には base、ours、theirs の行リストが含まれます |
詳細
conflictfix
マージコンフリクトがすでに発生しており、各ハンクについて判断する内容は明確です。このハンクを機械的に解決できるのか、それとも人間が確認する必要があるのか、という点です。conflictfix はハンクごとに判定します。ファイルパスと、各ハンクについて3ウェイマージで使用する3つの行リスト、つまり共通の祖先の行(base)、自分側の行(ours)、相手側の行(theirs)を渡すと、各ハンクを分類し、安全なものについては解決後の行を返し、リスクのあるものはそのまま残します。
安全なクラスは4つあります。ours と theirs が完全に同じ場合、ハンクは identical となり、base との差にかかわらず、その行に解決されます。片方の側だけが変更された場合、ours が base と同じならハンクは theirs_only となり、theirs に解決されます。または、theirs が base と同じならハンクは ours_only となり、ours に解決されます。この場合は、すべての行が削除されていても、変更された側がそのまま採用されます。両側の違いが空白文字だけの場合、ハンクは whitespace_only となり、空白も含めてそのまま ours の行が解決結果として返されます。正規化によってクラスは判定されますが、行が書き換えられることはありません。それ以外はすべて conflict となり、安全ではないため、解決結果は null で、このツールによって自動マージされることはありません。
チェックは定められた順序で実行され、最初に一致したものが採用されます。そのため、3つのリストすべてが一致するハンクは ours_only ではなく identical となり、片側だけの変更が空白文字を除けば同じ場合も、空白文字だけの変更ではなく、片側だけの変更として報告されます。空白文字の正規化では各行をトリミングし、トリミング後に空になる先頭と末尾の項目を取り除いたうえで、残りを改行で連結します。この処理では途中の空行は保持されるため、片側の途中にのみ空行がある場合は実際の差異となり、ハンクは空白文字の違いではなく conflict となります。
結果には path がそのまま含まれ、入力した各ハンクに対応するエントリが1つずつ含まれます。各エントリには0始まりの index、class、safe フラグ、resolution が含まれ、さらに結果の合計として safe_count、risky_count、fully_resolvable も含まれます。fully_resolvable は、リスクのあるハンクがない場合に限り true になります。不正な入力、つまり path がない、空、または文字列ではない場合、hunks リストがない、配列ではない、または空の場合、ハンクがオブジェクトではない場合、base、ours、theirs がない、または配列ではない場合、あるいは文字列ではない行が含まれる場合は、hunks[2].ours[0] must be a string のように、問題のあるパスを示す検証エラーとなり、部分的な結果は返されません。ハンク項目内も含め、未知の追加フィールドは無視されます。この計算は純粋かつローカルに行われます。リポジトリの読み取り、マージ、ファイルの変更は行いません。
CLI
npx @reneturcios/conflictfix triage --input args.json
npx @reneturcios/conflictfix --version
args.json には引数オブジェクト全体が含まれます。
{
"path": "src/app.ts",
"hunks": [
{
"base": ["const x = 1;"],
"ours": ["const x = 1;"],
"theirs": ["const x = 2;"]
},
{
"base": ["return a;"],
"ours": ["return b;"],
"theirs": ["return c;"]
}
]
}
結果は JSON として出力されます。
{
"path": "src/app.ts",
"hunks": [
{
"index": 0,
"class": "theirs_only",
"safe": true,
"resolution": ["const x = 2;"]
},
{
"index": 1,
"class": "conflict",
"safe": false,
"resolution": null
}
],
"safe_count": 1,
"risky_count": 1,
"fully_resolvable": false
}
終了コード:成功時は 0、ランタイムエラー時(読み取れない、または無効な入力ファイル、無効な入力を含む)は 1、使用方法のエラー時は 2 です。
MCP サーバー
npx -y @reneturcios/conflictfix mcp
MCP クライアントの設定:
{
"mcpServers": {
"conflictfix": {
"command": "npx",
"args": ["-y", "@reneturcios/conflictfix", "mcp"]
}
}
}
ツール
-
triage_conflicts— 3ウェイマージのコンフリクトを判定します。呼び出し側から渡されたbase、ours、theirsの行に基づいて、各ハンクを安全な機械的解決またはリスクありに分類します。安全なハンクについては解決後の行を返し、リスクのあるハンクは自動マージしません。path(文字列、必須、空でない) — コンフリクトのハンクが属するファイルパスhunks(配列、必須、1項目以上) — 判定するコンフリクトのハンク。各項目には次の内容が含まれます。base(文字列の配列、必須、空でも可) — 共通の祖先の行ours(文字列の配列、必須、空でも可) — 自分側の行theirs(文字列の配列、必須、空でも可) — 相手側の行
{path, hunks, safe_count, risky_count, fully_resolvable}を返します。hunks内の各エントリは{index, class, safe, resolution}で、classはidentical、theirs_only、ours_only、whitespace_only、conflictのいずれかです。
Docker
docker run -i ghcr.io/cloudcorprecords/conflictfix
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/conflictfix triage --input /w/args.json
開発
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
ライセンス
MIT — Copyright (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。