mcpField
I
Infra Lens

Infra Lens

本地服务
github.com云与基础设施21 周前更新

关于 Infra Lens

Infra Lens 是一个通过 SSH 诊断 Linux 主机的 TypeScript MCP 服务。它将观测结果和获批基线存入 SQLite,用于分析异常并支持先审核再处理的事件工作流,不会执行修复操作。

主要功能

  1. 01通过 SSH 采样主机指标
  2. 02SQLite 观测历史与健康基线
  3. 03异常分析与基线比较
  4. 04需审批的修复方案
  5. 05事件报告与时间窗口比较
  6. 06可选观测数据导出

适用场景

  1. 01排查 Linux 主机异常
  2. 02比较当前状态与健康基线
  3. 03整理事件报告和事后复盘
  4. 04导出已保存的观测数据

MCP 相关

它作为 MCP 服务向客户端提供主机采样、基线管理、历史查询和事件工作流工具,并支持 stdio 与 Streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"infra-lens": {
"command": "npx",
"args": [
"-y",
"infra-lens-mcp"
]
}
}
}
启动命令npx -y infra-lens-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npminfra-lens-mcp1.5.1

工具

10

收录的工具列表 · 更新于 3 周前

参数类型必填说明
connectionobject是
connection.hoststring是服务器主机名或 IP
connection.portinteger否SSH 端口
connection.passwordstring否SSH 密码
connection.usernamestring是SSH 用户名
connection.passphrasestring否私钥口令
connection.privateKeystring否SSH 私钥内容
connection.hostKeySha256string否固定的 SSH 主机密钥指纹,可带或不带 SHA256: 前缀
connection.knownHostsPathstring否用于严格主机密钥验证的 OpenSSH known_hosts 文件路径
include_networkboolean否包含网络指标
duration_minutesinteger否收集多少分钟的指标用于分析
include_processesboolean否包含主要进程分析

详细介绍

infra-lens-mcp

借助感知基线的 MCP 工具,通过 SSH 解释 Linux 事件。

一个用于实时 Linux 诊断、本地 SQLite 历史记录、
以审核为先的事件工作流和安全可观测性导出的 TypeScript MCP 服务。

CI 状态 CodeQL 状态 安全门禁状态 OSV-Scanner 状态 Codecov 覆盖率 OpenSSF 记分卡

npm 版本 npm 下载量 Node.js 22 或更高版本 MCP 2025-11-25 已签名的多架构 GHCR 镜像 MIT 许可证

文档 · 使用方法 · 架构 · 安全 · 治理 · 路线图 · 支持 · 发行版本

请我喝杯咖啡

infra-lens-mcp 通过 SSH 连接 Linux 主机,采集有界的实时指标,将观测数据和经批准的基线存储在本地 SQLite 中,解释异常,并生成以审核为先的事件材料。npm 包和已签名容器已准备好发布;在验证外部 OAuth/HTTPS 部署之前,我们仍有意暂缓公开发布连接器。

演示

infra-lens-mcp 演示

有关当前的协议支持、委托行为和连接器发布限制,请参阅 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比较单个主机相邻时间窗口的数据,或比较两台主机的同一时间窗口数据

所有工具都会返回易读的 JSON 文本和经过声明的 outputSchema 定义验证的 MCP structuredContent,因此客户端和 Agent 无需解析文本块即可使用响应。如果无法采集可选部分,但部分快照仍可用,采集工具会在 warnings 数组中提供相关信息。交互式检查请使用 analyze_server_snapshot;只有在需要采样时间窗口时才使用 analyze_server。如果客户端提供了进度令牌,采样分析会发送 MCP 进度通知,且绝不会持久化已取消的部分运行结果。

要求

  • CI、Docker 和发布工作流需要 Node.js 24 LTS
  • 软件包运行时兼容性需要 Node.js 22 或更高版本
  • 开发安装需要通过 Corepack 使用 pnpm 11.15.1
  • Linux SSH 目标需具备 /proc、free、df、ps 和 uname
  • 通过 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.dbSQLite 数据库路径
INFRA_LENS_RETENTION_DAYS30快照保留天数;0 表示禁用自动清理
MCP_HTTP_HOST127.0.0.1HTTP 绑定主机。HOST 仍是已弃用的别名
MCP_HTTP_PORT3000HTTP 绑定端口。PORT 仍是已弃用的别名
MCP_HTTP_ENDPOINT_PATH/mcp标准 Streamable HTTP MCP 端点路径
MCP_HTTP_ALLOWED_ORIGINS未设置以逗号分隔的允许使用的 Origin 值
MCP_HTTP_ALLOWED_HOSTS未设置以逗号分隔的允许使用的 Host 值
MCP_HTTP_AUTH_MODEnonenone、bearer 或 oauth-gateway;接受 oauth 作为兼容性别名
MCP_HTTP_BEARER_TOKEN未设置本地/开发环境的 bearer 回退令牌
MCP_HTTP_OAUTH_GATEWAY_HEADERx-infra-lens-gateway-auth由可信 OAuth 网关注入的标头
MCP_HTTP_OAUTH_GATEWAY_SECRET未设置oauth-gateway 模式所需的共享后端密钥
MCP_HTTP_BODY_LIMIT_BYTES1048576JSON 请求正文的最大大小
MCP_HTTP_REQUEST_TIMEOUT_MS30000关闭套接字前接收并处理 HTTP 请求的最长时间
MCP_HTTP_MAX_CONCURRENT_REQUESTS100Node 进程接受的最大并发 HTTP 请求数
MCP_HTTP_RATE_LIMIT_PER_MINUTE0可选的按客户端内存速率限制;0 表示禁用
MCP_HTTP_AUTHORIZATION_SERVERS未设置OAuth 授权服务器元数据 URL
MCP_PROFILEfullfull、remote-safe、chatgpt 或 claude
MCP_SSH_STRICT_HOST_CHECKINGtrue严格主机密钥验证开关
MCP_SSH_KNOWN_HOSTS~/.ssh/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_HOST0可选的每主机:端口活动 SSH 会话上限;0 表示禁用
MCP_SSH_MAX_CONNECTION_ATTEMPTS_PER_MINUTE0可选的每主机:端口每分钟 SSH 连接尝试上限;0 表示禁用

旧示例中的 MCP_DB_PATH 不会使用;请改用 INFRA_LENS_DB。

SSH 安全

默认启用严格主机密钥检查。请提供以下任一项:

  • 连接输入中的 hostKeySha256 值,例如 SHA256:...
  • 连接输入中的 knownHostsPath
  • 指向 OpenSSH known_hosts 文件的 MCP_SSH_KNOWN_HOSTS

原始密码、私钥和口令仅在默认的 full 配置文件中用于可信的本地 MCP 环境时才会被接受。remote-safe、chatgpt 和 claude 配置文件会拒绝工具输入中的原始 SSH 凭据,并要求设置 MCP_SSH_ALLOWED_HOSTS。生产环境的 SSH 策略还可以限制精确主机或 IPv4 CIDR 范围、用户、端口、每主机的活动会话数以及每主机的连接尝试次数。

默认进程命令不会收集进程命令参数。存储或输出前,会对进程数据、SSH 错误和日志中的疑似机密值进行脱敏。

HTTP 传输

在本地运行 Streamable HTTP 传输。标准 MCP 端点为 http://127.0.0.1:3000/mcp,除非更改 MCP_HTTP_ENDPOINT_PATH。目前 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 或 claude
  • MCP_HTTP_AUTH_MODE=bearer 或 oauth-gateway
  • MCP_HTTP_ALLOWED_ORIGINS
  • MCP_HTTP_ALLOWED_HOSTS

本软件包内部尚未实现原生 OAuth/JWT 验证。公共部署应在支持 OAuth 的生产级网关或反向代理后使用 MCP_HTTP_AUTH_MODE=oauth-gateway,配置 HTTPS MCP_HTTP_RESOURCE_URL,并阻止对 Node 进程的直接访问。即使上游代理也执行这些限制,仍应在 Node 进程上启用来源/主机允许列表、请求正文大小限制、请求超时、并发限制和可选的速率限制。请参阅 ADR 0006。在验证完整的连接器部署之前,连接器发布就绪状态仍为 false。

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 测试,请覆盖命令,并将绑定主机保持为回环地址,除非已配置远程安全配置文件和身份验证控制:

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 端到端验证使用独立的测试夹具生命周期:

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 manifest 模式和受保护的 GitHub Actions 发布工作流进行管理。实现类 PR 不得发布软件包、容器、MCP Registry 条目、市场工件或生产环境中的 GitHub Releases。

请参阅 docs/release.md 和 docs/release-state-machine.md。

许可证

MIT

Agent 插件和运行时配置

此代码仓库维护 infra-lens-mcp 的产品级 Agent 插件、MCP 运行时配置和产品专属技能。中央 agent-tools 代码仓库应收录此插件,但清单和工作流说明保存在这里,以便与实际 MCP 服务包保持同步。

文件用途
.claude-plugin/plugin.json符合 Claude Code 规范的产品插件清单。
.mcp.jsonClaude Code 项目本地 MCP 服务配置。
.codex/config.example.tomlCodex CLI MCP 配置示例。
.vscode/mcp.example.jsonVS Code / GitHub Copilot 工作区 MCP 配置示例。
opencode.example.jsoncOpenCode 项目 MCP 配置示例。
.opencode/skills/OpenCode 原生镜像技能定义。
docs/agent-runtime-config.mdAgent 运行时设置和验证说明。

在本地验证插件打包:

claude plugin validate .

如需优先审核的修复计划、事件草稿以及主机/时间窗口比较,请参阅事件工作流。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。