enginedrift について
enginedriftは、package.json、CI設定、Dockerfileに記載されたNodeのバージョンをローカルで照合するツールです。ネットワーク接続なしで、CLIまたはMCPツールから不一致や関連する問題を報告します。
主な機能
- 01宣言されたNodeバージョンを比較
- 02package.json、CI YAML、Dockerfileを解析
- 03メジャー不一致と最低要件未満を報告
- 04タグ未指定のDocker Nodeイメージを検出
- 05構造化JSONの結果を出力
活用シーン
- 01ビルド前にNodeバージョンを確認
- 02CIとコンテナのバージョン不一致を発見
- 03ビルドステージごとのNode宣言を確認
MCP 対応
MCPクライアントにcheck_engine_driftツールを提供します。package.jsonのテキストと、任意のCI YAMLおよびDockerfileのテキストを受け取り、バージョンのずれや問題を報告します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| ci_yaml | string | いいえ | CI ワークフローの YAML テキスト(任意)。node-version 値が抽出されます。 |
| dockerfile | string | いいえ | Dockerfile のテキスト(任意)。FROM に指定された node イメージタグが抽出されます |
| package_json | string | はい | package.json のテキスト。engines.node の範囲が基準となります |
詳細
enginedrift
Node プロジェクトでは、3 か所で Node のバージョンがひそかに指定されています。
package.json の engines.node、CI の node-version の値、Dockerfile の FROM node:... タグです。これらが一致しない場合、コンテナーとは異なるメジャーバージョンで CI ジョブが実行されたり、ある場所では使える構文機能が別の場所では使えなかったりと、問題が後になってから発生することがほとんどです。enginedrift は各ソースで実際に宣言されている内容を抽出し、不一致を事前に報告します。
次の情報を返します。
drift— ソース間で異なるメジャーバージョンが宣言されている場合、またはソースのバージョンがpackage.jsonで宣言された最小バージョンを完全に下回る場合はtruesources— 提供されたソースごとに 1 件のエントリーが含まれます。生の宣言文字列、検出されたメジャーバージョン(昇順、重複なし)、およびソースでメジャーバージョンを固定できない場合の注記(CI のnode-version-fileキーなど)が含まれますissues— 次の固定順で表示されます。MAJOR_MISMATCH(ソース間でメジャーバージョンが異なる)、BELOW_MINIMUM(ソースがpackage.jsonの最小メジャーバージョンを完全に下回る)、UNPINNED_IMAGE(数値タグのない Dockerfile のFROM node。例:lts-alpineやlatest)、NO_ENGINES(package.jsonにengines.nodeが宣言されていない)
抽出に関する注記:engines の範囲では、宣言された最小バージョンは言及されている最も小さいメジャーバージョンです(>=20 は 20、^18.2 は 18、20.x は 20、単独の * は何も宣言しません)。CI の値には、単一の値、[20, 22] のようなインラインのマトリックスリスト、またはキーの下にある YAML のブロックリストを指定できます。すべての Dockerfile ステージがスキャンされるため、マルチステージビルドでは各 FROM node 行が報告されます。CI 設定や Dockerfile が存在しないこと自体は問題になりません。ローカルでの純粋な計算のみを行います。ネットワーク接続、設定、ツール自体によるファイル読み取りはありません。
CLI
npx @reneturcios/enginedrift check --package-json package.json --ci .github/workflows/ci.yml --dockerfile Dockerfile
npx @reneturcios/enginedrift --version
--ci フラグと --dockerfile フラグは省略可能です。結果は JSON で出力されます。終了コード:チェックが実行された場合は 0(ドリフトはエラーではなくデータです)、実行時エラー(ファイルを読み取れない場合や package.json が無効な場合を含む)は 1、使用方法のエラーは 2 です。
MCP サーバー
npx -y @reneturcios/enginedrift mcp
MCP クライアントの設定:
{
"mcpServers": {
"enginedrift": {
"command": "npx",
"args": ["-y", "@reneturcios/enginedrift", "mcp"]
}
}
}
ツール
check_engine_drift—package.json、CI 設定、Dockerfile で宣言されている Node のメジャーバージョンを比較し、ドリフトを報告します。package_json(文字列、必須)—package.jsonのテキスト。engines.nodeの範囲が基準ソースになりますci_yaml(文字列、省略可能)— CI ワークフローの YAML テキスト。node-versionの値が抽出されますdockerfile(文字列、省略可能)— Dockerfile のテキスト。FROM nodeのイメージタグが抽出されます
Docker
docker run -i ghcr.io/cloudcorprecords/enginedrift
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/enginedrift check --package-json /w/package.json --dockerfile /w/Dockerfile
開発
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 つのサーバーを複数のクライアントで再利用できます。