envspeak について
envspeakは、開発者やAIエージェント向けのMCPサーバー兼CLIで、設定ソースや環境ごとのアプリ変数の実効値を調べます。変数の出所追跡、変更影響のプレビュー、潜在的なリスクの検出も行います。
主な機能
- 01変数の実効値を解決
- 02ファイルや環境をまたいで出所を追跡
- 03設定変更の下流への影響をプレビュー
- 04変数一覧とリスク情報を作成
- 05環境やサービス間の変数を比較
活用シーン
- 01本番環境の変数値が決まる理由を調査
- 02設定変更が影響するサービスを確認
- 03出所のない変数や秘密情報の露出を検出
- 04開発環境と本番環境の設定を比較
MCP 対応
MCPサーバーは、変数解決、出所追跡、影響プレビュー、設定マニフェスト、環境比較のツールを提供します。MCP呼び出しで読み取るファイルを明示的に限定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| files | array | はい | 確認対象の .env*、compose、k8s マニフェストファイルのパス(projectRoot からの相対パス) |
| service | string | いいえ | 解決する docker-compose サービス名 |
| variable | string | はい | 変数名(例:DATABASE_URL) |
| workload | string | いいえ | 解決する Kubernetes ワークロード(Deployment/Pod など)の名前 |
| container | string | いいえ | ワークロード内の Kubernetes コンテナ名 |
| environment | string | いいえ | dotenv の解決に使用する NODE_ENV 形式の値。例:"production" |
| projectRoot | string | いいえ | ファイルパスの基準となるディレクトリ |
詳細
EnvSpeak
.env ファイル、Docker Compose、Kubernetes にまたがる設定/環境変数の優先順位を解決する MCP サーバー兼 CLI です。実行時に変数が実際にどの値になるのか、その理由を AI エージェント(とあなた)に伝えます。
CSS のカスケードと同じ構造の問題です。複数のソースがあり、優先順位のルールが直感的でなく、値が「勝つ」のは定義された場所が理由にすぎません。これをスタイルシートではなく、アプリケーション設定に適用します。stylesafe と stylespeak の姉妹プロジェクトで、CSS に対して同じことを行います。
問題
実際のアプリの設定は、.env、.env.local、.env.production、Docker Compose の docker-compose.yml(environment: と env_file:)、Kubernetes の ConfigMap/Secret オブジェクト、コード内のハードコードされたフォールバックから構成されます。5 つ以上のレイヤーがあり、それぞれに独自の優先順位ルールがあるため、推測どおりには組み合わさりません。よく知られた落とし穴は、.env.production.local も存在しない限り、通常の .env.local が .env.production より優先されることです。これは、一般的な dotenv の優先順位では「local」が「環境固有」より優先されるためです。設定を編集するエージェントには、変数が実際にどの値に解決されるのか、また、あるレイヤーを変更すると何が壊れるのかを知る方法がありません。
ツール
resolve_variable—DATABASE_URLは実際にどの値になり、どのファイルが優先されるのでしょうか?trace_variable— すべてのドメインと環境にわたって、この変数が設定されているすべての場所を表示します。impact_preview— このファイル内の値を変更すると、下流では実際に何が変わるのでしょうか。また、より優先順位の高い設定によって影響を受けないものは何でしょうか?config_manifest— プロジェクト全体を圧縮してまとめます。すべての変数、そのソース、リスクの高い箇所(追跡対象ファイルに置かれたシークレット、フォールバックなしでコードから読み取られているが、どこにもソースがない変数)を表示します。diff_environments— 2 つの環境/サービス/ワークロードですべての変数を解決し、実際に異なるものを確認します。
インストール
npm install -g @patrizzos/envspeak
MCP サーバーとして
{
"mcpServers": {
"envspeak": {
"command": "envspeak"
}
}
}
CLI として
envspeak resolve DATABASE_URL --environment production
envspeak trace LOG_LEVEL
envspeak impact --file .env --variable LOG_LEVEL --newValue debug
envspeak manifest
envspeak diff --a '{"nodeEnv":"development"}' --b '{"nodeEnv":"production"}'
--files を省略すると、envspeak は --projectRoot(デフォルトはカレントディレクトリ)以下にある .env*、Compose、Kubernetes のマニフェストファイルを自動検出します。対象を明示するには --files a,b,c を渡してください。エージェントが読み取るものを正確に制御できるため、MCP 呼び出しではこの方法を推奨します。
実装済みの優先順位規約
dotenv(Next.js/Vite 形式、事実上の標準):process.env(シェル)> .env.[env].local > .env.local > .env.[env] > .env > コード内のフォールバック(process.env.X || 'default')。.env.local が .env.[env] より優先される点に注意してください。これが前述の落とし穴です。
Docker Compose:docker compose run -e(CLI)> environment: > env_file:(競合する場合、リストの最後のファイルが優先)> Dockerfile の ENV(解析対象外)。
Kubernetes:インラインの env: は常に envFrom:(ConfigMap/Secret の一括インポート。これらの間ではリストの最後のエントリーが優先)より優先されます。環境変数の値はポッドの起動時に固定されます。参照先の ConfigMap/Secret を編集しても、再起動またはロールアウトなしでは実行中のポッドに反映されません。impact_preview はこの点を警告します。
各結果には confidence レベルと caveat 文字列が含まれます。シェルでのエクスポートや CLI で渡された上書きは常に可能ですが、静的解析では決して確認できないためです。envspeak は、確信できないことを確実であるかのように装わず、その旨を明示します。
セキュリティ
- 実行時の依存関係はありません。 Compose/Kubernetes ファイルに使用する YAML サブセットパーサーは npm から取り込まずに手書きされているため、サードパーティのサプライチェーンにさらされるリスクはありません。
npm auditが常にクリーンなのは、この設計によるものです。 - パストラバーサルを防止します。 ファイルの読み込み先は
projectRootを基準に解決され、ツール呼び出しで細工された相対パスが渡された場合でも、その範囲外へのアクセスを拒否します。 - プロトタイプ汚染を防止します。 YAML コンテンツから解析されたオブジェクトキー(
__proto__、constructor、prototype)が、プロパティへの代入に使われることはありません。 - シークレットはデフォルトでマスキングされます。 Kubernetes の
Secretの値は、どのツールで表示される場合でも、完全な値ではなくab***yzの形式でのみ表示されます。 - シークレットらしさを判定するヒューリスティックを備えています。 変数名や値の形式(AWS キー、GitHub トークン、PEM ブロック、エントロピーが高く認証情報のような文字列)にフラグを立て、
.gitignoreと照合したうえで、黙って通過させるのではなくsecretFlag/リスクのホットスポットとして表示します。 - バックトラッキングを行わない、入力サイズに制限された正規表現を使用します。 コードのデフォルト値のスキャンに使うパターンマッチングでは、マッチする長さに上限を設け、ネストした量指定子を避けることで、大きなファイルで ReDoS が発生しないようにしています。
- これらの保護策にかかわらず、envspeak は指定されたファイルをすべて読み取ります。ファイルシステムへのアクセス権を持つツールと同様に、エージェントが渡せる
filesリストの範囲を制限してください。
開発
npm test # zero dependencies — no install step needed
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。