Infra Lens について
Infra Lens は、SSH 経由で Linux ホストを診断する TypeScript 製 MCP サーバーです。観測結果と承認済みベースラインを SQLite に保存し、修復を実行せずに異常分析やレビュー前提のインシデント対応を支援します。
主な機能
- 01SSH 経由の指標収集と診断
- 02SQLite による履歴と健全性ベースライン
- 03異常分析とベースライン比較
- 04承認を求める修復案
- 05インシデント報告と期間比較
- 06任意の観測データエクスポート
活用シーン
- 01Linux ホストの異常調査
- 02現在の状態と健全性ベースラインの比較
- 03インシデント報告と事後分析の作成
- 04保存済み観測データのエクスポート
MCP 対応
MCP サーバーとして、ホスト収集、ベースライン管理、履歴照会、インシデント対応のツールをクライアントに提供します。stdio と Streamable HTTP に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
10掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| connection | object | はい | |
| connection.host | string | はい | サーバーのホスト名または IP |
| connection.port | integer | いいえ | SSH ポート |
| connection.password | string | いいえ | SSH パスワード |
| connection.username | string | はい | SSH ユーザー名 |
| connection.passphrase | string | いいえ | 秘密鍵のパスフレーズ |
| connection.privateKey | string | いいえ | SSH 秘密鍵の内容 |
| connection.hostKeySha256 | string | いいえ | 固定する SSH ホスト鍵のフィンガープリント。SHA256: プレフィックスの有無は問いません |
| connection.knownHostsPath | string | いいえ | 厳密なホスト鍵検証に使用する OpenSSH known_hosts ファイルのパス |
| include_network | boolean | いいえ | ネットワーク指標を含める |
| duration_minutes | integer | いいえ | 分析用の指標を何分間収集するか |
| include_processes | boolean | いいえ | 上位プロセスの分析を含める |
詳細
infra-lens-mcp
ベースラインを考慮した MCP ツールで、SSH 経由の Linux インシデントを解説します。
ライブ Linux 診断、ローカル SQLite 履歴、
レビュー優先のインシデントワークフロー、安全なオブザーバビリティエクスポートに対応する TypeScript MCP サーバーです。
ドキュメント · 使い方 · アーキテクチャ · セキュリティ · ガバナンス · ロードマップ · サポート · リリース
infra-lens-mcp は SSH 経由で Linux ホストに接続し、上限を設けたライブメトリクスを取得して、観測結果と承認済みベースラインをローカル SQLite に保存し、異常を解説して、レビュー優先のインシデント成果物を作成します。npm パッケージと署名済みコンテナーはリリース可能な状態です。外部 OAuth/HTTPS デプロイの検証が完了するまでは、コネクターの公開を意図的に保留しています。
デモ

現在のプロトコルサポート、委任動作、コネクター公開の制約については、MCP 2025-11-25 準拠マトリクスをご覧ください。
ツール
| ツール | 目的 |
|---|---|
analyze_server | 進捗/キャンセルに対応した、範囲を限定したサンプリングウィンドウを分析し、完了した観測結果のみを保存します |
analyze_server_snapshot | サンプリング待ち時間なしで、即時スナップショットを分析して保存します |
snapshot | 異常分析を行わず、特定時点の観測結果を保存します |
record_baseline | 正常状態のサンプルにラベルを付けて保存します |
compare_to_baseline | 現在の状態を指定したベースラインと比較します |
get_history | SQLite から CPU、メモリ、または負荷の履歴を返します |
inspect_host_capabilities | 収集前に必要な Linux コマンドと proc ファイルを確認します |
plan_remediation | 変更を実行せず、証拠に基づく承認必須の修復を提案します |
draft_incident_report | 保存済みの観測結果からインシデントレポートと事後分析を作成します |
compare_incident_windows | 1 台のホストの隣接するウィンドウ、または 2 台のホストの同一ウィンドウを比較します |
すべてのツールは、読み取り可能な JSON テキストと、宣言された outputSchema 定義に照らして検証された MCP structuredContent の両方を返すため、クライアントやエージェントはテキストブロックを解析せずに応答を利用できます。収集ツールでは、任意のセクションを収集できなくても部分的なスナップショットが利用可能な場合、warnings 配列が含まれます。対話形式での確認には analyze_server_snapshot を使用してください。サンプリングウィンドウが必要な場合に限り、analyze_server を使用してください。サンプリング分析では、クライアントが進捗トークンを指定すると MCP の進捗が通知され、キャンセルされた実行の途中結果が保存されることはありません。
要件
- CI、Docker、リリースのワークフローには Node.js 24 LTS
- パッケージのランタイム互換性には Node.js 22 以降
- 開発環境へのインストールには、Corepack 経由の pnpm 11.15.1
/proc、free、df、ps、unameを備えた Linux SSH 接続先known_hostsまたは固定された SHA256 ホストキーによる、厳格な SSH ホスト検証
クイックスタート
npm から stdio MCP サーバーを実行します:
npx -y infra-lens-mcp
デスクトップ MCP クライアント向けの設定:
{
"mcpServers": {
"infra-lens": {
"command": "npx",
"args": ["-y", "infra-lens-mcp"],
"env": {
"INFRA_LENS_DB": "/Users/you/.infra-lens-mcp/metrics.db"
}
}
}
}
ローカル開発:
corepack enable
corepack prepare [email protected] --activate
pnpm install --frozen-lockfile
pnpm run build
node dist/mcp.js
設定
トランスポートは環境変数ではなく、実行ファイルのエントリーポイントによって選択されます。npx -y infra-lens-mcp または node dist/mcp.js は stdio を起動し、node dist/server-http.js は Streamable HTTP を起動します。
| 変数 | デフォルト | 説明 |
|---|---|---|
INFRA_LENS_DB | ~/.infra-lens-mcp/metrics.db | SQLite データベースのパス |
INFRA_LENS_RETENTION_DAYS | 30 | スナップショットの保持日数。0 にすると自動削除が無効になります |
MCP_HTTP_HOST | 127.0.0.1 | HTTP のバインド先ホスト。HOST は非推奨の別名として引き続き使用できます |
MCP_HTTP_PORT | 3000 | HTTP のバインド先ポート。PORT は非推奨の別名として引き続き使用できます |
MCP_HTTP_ENDPOINT_PATH | /mcp | Streamable HTTP MCP エンドポイントの標準パス |
MCP_HTTP_ALLOWED_ORIGINS | 未設定 | 許可する Origin 値をカンマ区切りで指定します |
MCP_HTTP_ALLOWED_HOSTS | 未設定 | 許可する Host 値をカンマ区切りで指定します |
MCP_HTTP_AUTH_MODE | none | none、bearer、または oauth-gateway。互換性のため、oauth も別名として使用できます |
MCP_HTTP_BEARER_TOKEN | 未設定 | ローカル/開発用の Bearer フォールバックトークン |
MCP_HTTP_OAUTH_GATEWAY_HEADER | x-infra-lens-gateway-auth | 信頼された OAuth ゲートウェイによって挿入されるヘッダー |
MCP_HTTP_OAUTH_GATEWAY_SECRET | 未設定 | oauth-gateway モードで必要な共有バックエンドシークレット |
MCP_HTTP_BODY_LIMIT_BYTES | 1048576 | JSON リクエストボディの最大サイズ |
MCP_HTTP_REQUEST_TIMEOUT_MS | 30000 | ソケットが閉じられるまでに HTTP リクエストを受信して処理する最大時間 |
MCP_HTTP_MAX_CONCURRENT_REQUESTS | 100 | Node プロセスが受け付ける HTTP リクエストの最大同時数 |
MCP_HTTP_RATE_LIMIT_PER_MINUTE | 0 | クライアントごとの任意のインメモリレート制限。0 にすると無効になります |
MCP_HTTP_AUTHORIZATION_SERVERS | 未設定 | OAuth 認可サーバーのメタデータ URL |
MCP_PROFILE | full | full、remote-safe、chatgpt、または claude |
MCP_SSH_STRICT_HOST_CHECKING | true | 厳格なホストキー検証の切り替え |
MCP_SSH_KNOWN_HOSTS | ~/.ssh/known_hosts | Known hosts ファイル |
MCP_SSH_ALLOWED_HOSTS | 未設定 | ホスト/IP の完全一致、または IPv4 CIDR の許可リスト。リモートセーフプロファイルでは必須であり、設定されている場合は full プロファイルでも適用されます |
MCP_SSH_ALLOWED_USERS | 未設定 | SSH ユーザー名の任意のカンマ区切り許可リスト |
MCP_SSH_ALLOWED_PORTS | 未設定 | SSH ポートの任意のカンマ区切り許可リスト |
MCP_SSH_MAX_SESSIONS_PER_HOST | 0 | ホスト:ポートごとのアクティブな SSH セッション数の任意の上限。0 にすると無効になります |
MCP_SSH_MAX_CONNECTION_ATTEMPTS_PER_MINUTE | 0 | ホスト:ポートごとの 1 分あたりの SSH 接続試行回数の任意の上限。0 にすると無効になります |
以前の例にある MCP_DB_PATH は使用されません。INFRA_LENS_DB を使用してください。
SSH セキュリティ
ホストキーの厳格な確認はデフォルトで有効です。次のいずれかを指定してください。
- 接続入力の
hostKeySha256値。例:SHA256:... - 接続入力の
knownHostsPath - OpenSSH の
known_hostsファイルを指すMCP_SSH_KNOWN_HOSTS
生のパスワード、秘密鍵、パスフレーズは、信頼されたローカル MCP コンテキスト向けのデフォルト full プロファイルでのみ受け付けられます。remote-safe、chatgpt、claude プロファイルでは、ツール入力での生の SSH 認証情報は拒否され、MCP_SSH_ALLOWED_HOSTS が必須です。本番環境の SSH ポリシーでは、ホストの完全一致または IPv4 CIDR 範囲、ユーザー、ポート、ホストごとのアクティブセッション数、ホストごとの接続試行回数を制限することもできます。
デフォルトのプロセスコマンドでは、プロセスコマンドの引数は収集されません。プロセスデータ、SSH エラー、ログ内のシークレットと思われる値は、保存または出力する前にマスキングされます。
HTTP トランスポート
Streamable HTTP トランスポートをローカルで実行します。MCP_HTTP_ENDPOINT_PATH を変更しない限り、標準の MCP エンドポイントは http://127.0.0.1:3000/mcp です。現在、HTTP モードはステートレスです。サーバーは MCP-Session-Id を発行も受け付けもせず、MCP エンドポイントでは POST による JSON-RPC 呼び出しのみをサポートします。MCP_HTTP_REQUEST_TIMEOUT_MS とプロキシのタイムアウトは、要求したサンプリング期間を超える値にしてください。そうでない場合は analyze_server_snapshot を使用します。stdio にはサーバー側で管理される実時間のリクエストタイムアウトがないため、クライアントがタイムアウトと MCP キャンセルを制御します。
MCP_HTTP_HOST=127.0.0.1 MCP_HTTP_PORT=3000 node dist/server-http.js
ローカル開発では、ループバック HTTP を認証なしで実行できます。0.0.0.0 など、ループバック以外のアドレスにバインドすると、以下のすべてが設定されていない限り、すぐに失敗します。
MCP_PROFILE=remote-safe、chatgpt、またはclaudeMCP_HTTP_AUTH_MODE=bearerまたはoauth-gatewayMCP_HTTP_ALLOWED_ORIGINSMCP_HTTP_ALLOWED_HOSTS
ネイティブの OAuth/JWT 検証は、このパッケージ内には実装されていません。パブリック環境にデプロイする場合は、本番環境用の OAuth 対応ゲートウェイまたはリバースプロキシの背後で MCP_HTTP_AUTH_MODE=oauth-gateway を使用し、HTTPS の MCP_HTTP_RESOURCE_URL を設定して、Node プロセスへの直接アクセスをブロックしてください。上流のプロキシでも適用している場合でも、Node プロセスではオリジン/ホストの許可リスト、リクエストボディの上限、リクエストタイムアウト、同時実行数の上限、任意のレート制限を有効にしてください。ADR 0006 を参照してください。コネクターのデプロイ全体が検証されるまで、コネクターの公開準備は未完了のままです。
Docker
Docker イメージはデフォルトで stdio モードになります。
docker build -t infra-lens-mcp .
docker volume create infra-lens-data
docker run --rm -i \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges:true \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
--mount type=volume,src=infra-lens-data,dst=/home/appuser/.infra-lens-mcp \
infra-lens-mcp
ローカルで HTTP をテストするには、コマンドを上書きし、remote-safe プロファイルと認証制御を設定していない限り、バインド先のホストをループバックにしてください。
docker run --rm -p 127.0.0.1:3000:3000 \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges:true \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
--mount type=volume,src=infra-lens-data,dst=/home/appuser/.infra-lens-mcp \
-e MCP_HTTP_HOST=0.0.0.0 \
-e MCP_HTTP_ALLOWED_ORIGINS=http://localhost:3000 \
-e MCP_HTTP_ALLOWED_HOSTS=localhost:3000 \
-e MCP_HTTP_AUTH_MODE=bearer \
-e MCP_HTTP_BEARER_TOKEN=local-dev-token \
infra-lens-mcp node dist/server-http.js
オブザーバビリティのエクスポート
オブザーバビリティは、SSH による収集を開始せず、最後に永続化された観測結果を読み取る、個別のデフォルトで無効なプロセスです。
INFRA_LENS_OBSERVABILITY_ENABLED=true infra-lens-observe
デフォルトの OpenMetrics エンドポイントは http://127.0.0.1:9464/metrics です。任意の OTLP/HTTP JSON エクスポートでは、標準の OTEL_EXPORTER_OTLP_* 変数を使用します。Prometheus、OpenTelemetry、プライバシー、リモートアクセスのガイダンスについては、オブザーバビリティのエクスポートを参照してください。
開発
pnpm run format:check
pnpm run lint
pnpm test
pnpm run test:coverage
pnpm run build
pnpm run check:metadata
pnpm run package:dry-run
Docker を利用した SSH e2e 検証では、自己完結型のフィクスチャライフサイクルを使用します。
pnpm run test:e2e
フィクスチャがすでに実行中で、ライフサイクル管理を意図的に省略する場合は、次を使用します。
INFRA_LENS_E2E_SKIP_FIXTURE=1 pnpm run test:e2e:raw
使い方、クライアントのセットアップ、運用、インシデント対応ワークフロー、オブザーバビリティ、ストレージ、セキュリティ、ガバナンス、テスト、リリースに関するガイダンスは、ドキュメントのインデックスからご確認ください。生成された API ドキュメントは docs/api に、レビュー済みのインシデント例は examples/incidents にあります。
コミュニティ
サポート窓口と応答方針については、SUPPORT.md をご利用ください。進行中の作業は、infra-lens-mcp Governance プロジェクトで管理されています。プロジェクトの行動規範は CODE_OF_CONDUCT.md に、メンテナーのトリアージ方針は docs/governance.md に記載されています。
リリース
リリースは release-please のマニフェストモードと、保護された GitHub Actions のリリースワークフローを通じて管理されます。実装 PR では、パッケージ、コンテナー、MCP Registry のエントリー、マーケットプレイスの成果物、本番用 GitHub Releases を公開してはいけません。
docs/release.md と docs/release-state-machine.md を参照してください。
ライセンス
エージェントプラグインとランタイム設定
このリポジトリでは、infra-lens-mcp の製品レベルのエージェントプラグイン、MCP ランタイム設定、製品固有のスキルを管理しています。中央の agent-tools リポジトリにこのプラグインを登録しますが、マニフェストとワークフローの手順は、実際の MCP サーバーパッケージとの同期を保つため、ここに置いています。
| ファイル | 目的 |
|---|---|
.claude-plugin/plugin.json | Claude Code に準拠した製品プラグインのマニフェストです。 |
.mcp.json | Claude Code のプロジェクトローカル MCP サーバー設定です。 |
.codex/config.example.toml | Codex CLI の MCP 設定例です。 |
.vscode/mcp.example.json | VS Code / GitHub Copilot のワークスペース MCP 設定例です。 |
opencode.example.jsonc | OpenCode のプロジェクト MCP 設定例です。 |
.opencode/skills/ | OpenCode ネイティブのスキル定義のミラーです。 |
docs/agent-runtime-config.md | エージェントのランタイム設定と検証に関するメモです。 |
プラグインのパッケージングをローカルで検証します。
claude plugin validate .
レビューを前提とした修正計画、インシデントの草案、ホストや時間帯の比較については、インシデントのワークフローを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。