Skip to main content
Glama
oaslananka

MCP Infra Lens

mcp-infra-lens

ベースラインを認識するMCPツールを使用して、SSH経由でLinuxのインシデントを解説します。

npm version npm downloads License: MIT Node 20+ MCP SDK Azure Pipelines

デモ

mcp-infra-lens demo

Claudeが「prod-01に何が起きているの?」と尋ねた際の analyze_server の応答例:

{
  "host": "prod-01.internal",
  "health_score": 42,
  "summary": "Found 2 anomalies on prod-01.internal. Most urgent signal: CPU is at 91% (3.4σ above baseline 28.2%). Load is 7.2/6.8/5.1. Top CPU consumer: java (87%).",
  "anomalies": [
    {
      "metric": "cpu",
      "severity": "high",
      "value": 91,
      "z_score": 3.4,
      "explanation": "CPU is at 91% (3.4σ above baseline 28.2%). Load is 7.2/6.8/5.1. Top CPU consumer: java (87%).",
      "recommendation": "Investigate java (PID 18432) and review application logs or scale-out options."
    },
    {
      "metric": "disk:/",
      "severity": "high",
      "value": 91,
      "explanation": "Disk / is 91% full (182GB/200GB).",
      "recommendation": "Run du -sh //* | sort -rh | head -20 and clean logs or temporary files."
    }
  ]
}

機能

mcp-infra-lens はSSH経由でLinuxホストに接続し、ライブインフラストラクチャのスナップショットをキャプチャし、最近記録されたベースラインと比較して、異常を平易な英語で解説します。

  • ターゲットホストを変更することなく、CPU、メモリ、ディスク、ネットワーク、プロセス、OSデータを収集します

  • ベースライン、比較、トレンド検索のために、ローカルのメトリクス履歴をSQLiteに記録します

  • 十分なベースラインサンプルが存在する場合、CPU異常検知にzスコア分析を使用します

  • 単なる生のメトリクス値だけでなく、負荷の可能性が高い原因を解説します

  • stdio および Streamable HTTP 経由のMCPをサポートします

仕組み

flowchart TD
    A["Claude / Cursor / VS Code / Windsurf"] --> B["mcp-infra-lens"]
    B --> C["server-core.ts"]
    C --> D["collector.ts"]
    C --> E["analyzer.ts"]
    C --> F["baseline.ts + db.ts"]
    D --> G["ssh.ts"]
    G --> H["Linux host over SSH"]
    F --> I["SQLite history + baselines"]

analyze_server は、要求された duration_minutes にわたって実際のサンプリング収集を実行し、収集期間中のCPUおよびメモリ負荷を平均化し、結果のスナップショットを永続化してから、選択されたベースラインに対して異常検知を実行します。

ツール

ツール

機能

主要なパラメータ

analyze_server

サンプリングされたスナップショットを収集・保存し、異常を解説します

connection, duration_minutes, include_processes, include_network

snapshot

分析なしで現在の時点のメトリクスをキャプチャして保存します

connection

record_baseline

将来の比較のために、ラベル付けされた正常状態のサンプルを保存します

connection, label

compare_to_baseline

現在の状態を名前付きベースラインと比較し、差分を解説します

connection, baseline_label

get_history

SQLiteから過去のCPU、メモリ、または負荷ポイントを返します

host, metric, hours, label?

クイックスタート

1. npx で実行

npx -y mcp-infra-lens

2. Claude Desktop

公開済みパッケージ:

{
  "mcpServers": {
    "infra-lens": {
      "command": "npx",
      "args": ["-y", "mcp-infra-lens"],
      "env": {
        "INFRA_LENS_DB": "/Users/you/.mcp-infra-lens/metrics.db"
      }
    }
  }
}

ローカル開発:

{
  "mcpServers": {
    "infra-lens": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-infra-lens/dist/mcp.js"],
      "env": {
        "INFRA_LENS_DB": "/Users/you/.mcp-infra-lens/metrics.db"
      }
    }
  }
}

3. Docker

docker build -t mcp-infra-lens .
docker run --rm -it \
  -v "$HOME/.mcp-infra-lens:/home/appuser/.mcp-infra-lens" \
  mcp-infra-lens

設定

環境変数

デフォルト

説明

INFRA_LENS_DB

~/.mcp-infra-lens/metrics.db

SQLiteデータベースのパス。テストには :memory: を使用してください

HOST

127.0.0.1

HTTPトランスポートのバインドアドレス

PORT

3000

HTTPトランスポートのポート

ヘルススコア

  • 90-100: 正常、有意な異常は検出されませんでした

  • 70-89: 軽微または局所的な負荷

  • 40-69: 複数の警告、または進行中の重大な問題

  • 0-39: 緊急の対応が必要な重大な状態

推奨ワークフロー

  1. 正常な稼働期間中に record_baseline サンプルを記録します。

  2. インシデントや負荷スパイクが発生した際に analyze_server を使用します。

  3. 名前付きベースラインとのより厳密な差分ビューには compare_to_baseline を使用します。

  4. トレンドを調査し、デフォルトのスナップショットとラベル付けされたベースラインセッションを分離するには get_history を使用します。

認証

SSH入力スキーマは以下をサポートしています:

  • パスワード認証

  • インライン秘密鍵認証

  • 暗号化された鍵のためのオプションのパスフレーズサポート

認証情報フィールドは、stderr に書き込まれる前に構造化ログから削除されます。

セキュリティに関する注意点

  • SSH収集はターゲットホストに対して読み取り専用です

  • SSH認証情報はSQLiteに保存されません

  • v1では互換性のためにホストキー検証が許可されています。本番環境へのデプロイでは、アウトバウンドネットワークアクセスを制限し、将来のリリースで厳格なホスト検証を強制することを計画してください

  • HTTPトランスポートには組み込みの認証がありません。ループバックにバインドし、ローカル以外へのデプロイでは認証されたリバースプロキシの背後に配置してください

報告ポリシーおよび保存データの範囲については SECURITY.md を参照してください。

統合

Claude Desktop

{
  "mcpServers": {
    "infra-lens": {
      "command": "npx",
      "args": ["-y", "mcp-infra-lens"],
      "env": {
        "INFRA_LENS_DB": "/Users/you/.mcp-infra-lens/metrics.db"
      }
    }
  }
}

Cursor IDE

{
  "mcpServers": {
    "infra-lens": {
      "command": "npx",
      "args": ["-y", "mcp-infra-lens"]
    }
  }
}

VS Code (MCP extension)

{
  "inputs": [],
  "servers": {
    "infra-lens": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mcp-infra-lens"]
    }
  }
}

Windsurf

{
  "mcpServers": {
    "infra-lens": {
      "command": "npx",
      "args": ["-y", "mcp-infra-lens"]
    }
  }
}

Docker (HTTP transport)

docker run -d \
  -p 3000:3000 \
  -v $HOME/.mcp-infra-lens:/home/appuser/.mcp-infra-lens \
  ghcr.io/oaslananka/mcp-infra-lens:latest

その後、MCPクライアントが http://localhost:3000 を使用するように設定してください。

Docker

バンドルされているDockerイメージは以下の通りです:

  • TypeScriptプロジェクトを別のステージでビルドします

  • 両方のステージでコンテナアーキテクチャ用に better-sqlite3 を再ビルドします

  • 非rootユーザー appuser として実行します

  • SQLiteデータを /home/appuser/.mcp-infra-lens/metrics.db に保存します

貢献

貢献を歓迎します。CONTRIBUTING.md から始めて、以下を使用してください:

  • ツールの例については docs/usage.md

  • コンポーネントマップについては docs/architecture.md

  • ローカル検証および公開チェックについては docs/testing.md

  • npmおよびMCPレジストリのバージョン管理ルールについては RELEASE_POLICY.md

  • リポジトリ固有のAIコーディングガイダンスについては AGENTS.md, CLAUDE.md, GEMINI.md, .github/copilot-instructions.md, および .agent/rules/repository.md

運用 / CIに関する注意点

  • azure-pipelines.yml は標準のCIパイプラインであり、Node 20およびNode 22で Quality ステージを実行し、JUnitおよびCoberturaアーティファクトを発行し、Node 20でDockerベースのSSH e2eカバレッジを実行します

  • .azure/pipelines/publish.yml は手動のnpmリリースパイプラインとして残されています

  • .azure/pipelines/mirror.yml はリポジトリミラーリングワークフロー用に利用可能です

  • ローカルの公開前チェックリストとCIの両方がNode 20で正常に完了した後にのみ公開してください

  • 変更にnpm、MCPレジストリ、またはレジストリのみのプレリリース公開が必要かどうかを判断する際は RELEASE_POLICY.md に従ってください

ライセンス

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
B
quality - B tier

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oaslananka/mcp-infra-lens'

If you have feedback or need assistance with the MCP directory API, please join our Discord server