Skip to main content
Glama
oaslananka
by oaslananka

infra-lens-mcp connects to Linux hosts over SSH, captures bounded live metrics, stores observations and approved baselines in local SQLite, explains anomalies, and produces review-first incident artifacts. The npm package and signed container are release-ready; public connector publication remains intentionally blocked until an external OAuth/HTTPS deployment is verified.

Demo

infra-lens-mcp demo

See the MCP 2025-11-25 compliance matrix for current protocol support, delegated behavior, and connector publication constraints.

Related MCP server: Linux MCP Server

Tools

Tool

Purpose

analyze_server

Analyze a bounded sampled window with progress/cancellation support, then store only the completed observation

analyze_server_snapshot

Analyze and store one immediate snapshot without a sampling delay

snapshot

Store a point-in-time observation without anomaly analysis

record_baseline

Save a labeled healthy-state sample

compare_to_baseline

Compare current state with a named baseline

get_history

Return CPU, memory, or load history from SQLite

inspect_host_capabilities

Check required Linux commands and proc files before collection

plan_remediation

Propose evidence-backed, approval-required remediation without executing changes

draft_incident_report

Draft an incident report and postmortem from persisted observations

compare_incident_windows

Compare adjacent windows for one host or the same window across two hosts

All tools return both readable JSON text and MCP structuredContent validated by declared outputSchema definitions, so clients and agents can consume responses without parsing the text block. Collection tools include a warnings array when optional sections cannot be collected but a partial snapshot is still usable. Use analyze_server_snapshot for interactive checks; use analyze_server only when a sampled window is required. Sampled analysis emits MCP progress when the client supplies a progress token and never persists a cancelled partial run.

Requirements

  • Node.js 24 LTS for CI, Docker, and release workflows

  • Node.js 22 or newer for package runtime compatibility

  • pnpm 11.15.1 through Corepack for development installs

  • Linux SSH targets with /proc, free, df, ps, and uname

  • Strict SSH host verification through known_hosts or pinned SHA256 host keys

Quick Start

Run the stdio MCP server from npm:

npx -y infra-lens-mcp

Desktop MCP client style configuration:

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

Local development:

corepack enable
corepack prepare pnpm@11.15.1 --activate
pnpm install --frozen-lockfile
pnpm run build
node dist/mcp.js

Configuration

Transport is selected by the executable entry point, not by an environment variable: npx -y infra-lens-mcp or node dist/mcp.js starts stdio, while node dist/server-http.js starts Streamable HTTP.

Variable

Default

Description

INFRA_LENS_DB

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

SQLite database path

INFRA_LENS_RETENTION_DAYS

30

Snapshot retention in days; 0 disables automatic pruning

MCP_HTTP_HOST

127.0.0.1

HTTP bind host. HOST remains a deprecated alias

MCP_HTTP_PORT

3000

HTTP bind port. PORT remains a deprecated alias

MCP_HTTP_ENDPOINT_PATH

/mcp

Canonical Streamable HTTP MCP endpoint path

MCP_HTTP_ALLOWED_ORIGINS

unset

Comma-separated allowed Origin values

MCP_HTTP_ALLOWED_HOSTS

unset

Comma-separated allowed Host values

MCP_HTTP_AUTH_MODE

none

none, bearer, or oauth-gateway; oauth is accepted as a compatibility alias

MCP_HTTP_BEARER_TOKEN

unset

Local/dev bearer fallback token

MCP_HTTP_OAUTH_GATEWAY_HEADER

x-infra-lens-gateway-auth

Header injected by a trusted OAuth gateway

MCP_HTTP_OAUTH_GATEWAY_SECRET

unset

Shared backend secret required for oauth-gateway mode

MCP_HTTP_BODY_LIMIT_BYTES

1048576

Maximum JSON request body size

MCP_HTTP_REQUEST_TIMEOUT_MS

30000

Maximum time to receive and handle an HTTP request before the socket is closed

MCP_HTTP_MAX_CONCURRENT_REQUESTS

100

Maximum concurrent HTTP requests accepted by the Node process

MCP_HTTP_RATE_LIMIT_PER_MINUTE

0

Optional per-client in-memory rate limit; 0 disables it

MCP_HTTP_AUTHORIZATION_SERVERS

unset

OAuth authorization server metadata URLs

MCP_PROFILE

full

full, remote-safe, chatgpt, or claude

MCP_SSH_STRICT_HOST_CHECKING

true

Strict host key verification toggle

MCP_SSH_KNOWN_HOSTS

~/.ssh/known_hosts

Known hosts file

MCP_SSH_ALLOWED_HOSTS

unset

Exact host/IP or IPv4 CIDR allowlist; required for remote-safe profiles and enforced in full profile when set

MCP_SSH_ALLOWED_USERS

unset

Optional comma-separated SSH username allowlist

MCP_SSH_ALLOWED_PORTS

unset

Optional comma-separated SSH port allowlist

MCP_SSH_MAX_SESSIONS_PER_HOST

0

Optional active SSH session cap per host:port; 0 disables it

MCP_SSH_MAX_CONNECTION_ATTEMPTS_PER_MINUTE

0

Optional SSH connection-attempt cap per host:port per minute; 0 disables it

MCP_DB_PATH from older examples is not used; use INFRA_LENS_DB.

SSH Security

Strict host key checking is enabled by default. Provide either:

  • a hostKeySha256 value in the connection input, such as SHA256:...

  • a knownHostsPath in the connection input

  • MCP_SSH_KNOWN_HOSTS pointing at an OpenSSH known_hosts file

Raw passwords, private keys, and passphrases are accepted only in the default full profile for trusted local MCP contexts. remote-safe, chatgpt, and claude profiles reject raw SSH credentials in tool input and require MCP_SSH_ALLOWED_HOSTS. Production SSH policy can also restrict exact hosts or IPv4 CIDR ranges, users, ports, per-host active sessions, and per-host connection attempts.

Process command arguments are not collected by the default process command. Secret-like values in process data, SSH errors, and logs are redacted before storage or output.

HTTP Transport

Run the Streamable HTTP transport locally. The canonical MCP endpoint is http://127.0.0.1:3000/mcp unless MCP_HTTP_ENDPOINT_PATH is changed. HTTP mode is stateless today: the server does not issue or accept MCP-Session-Id, and only POST JSON-RPC calls are supported on the MCP endpoint. MCP_HTTP_REQUEST_TIMEOUT_MS and any proxy timeout must exceed the requested sampled window; otherwise use analyze_server_snapshot. stdio has no server-owned wall-clock request timeout, so the client controls its timeout and MCP cancellation.

MCP_HTTP_HOST=127.0.0.1 MCP_HTTP_PORT=3000 node dist/server-http.js

Loopback HTTP can run without auth for local development. Any non-loopback bind, such as 0.0.0.0, fails fast unless all of these are configured:

  • MCP_PROFILE=remote-safe, chatgpt, or claude

  • MCP_HTTP_AUTH_MODE=bearer or oauth-gateway

  • MCP_HTTP_ALLOWED_ORIGINS

  • MCP_HTTP_ALLOWED_HOSTS

Native OAuth/JWT validation is not implemented inside this package. Public deployments should use MCP_HTTP_AUTH_MODE=oauth-gateway behind a production OAuth-aware gateway or reverse proxy, configure HTTPS MCP_HTTP_RESOURCE_URL, and block direct access to the Node process. Keep origin/host allowlists, body limits, request timeout, concurrency limit, and optional rate limit enabled at the Node process even when an upstream proxy also enforces them. See ADR 0006. Connector publication readiness remains false until a full connector deployment is verified.

Docker

The Docker image defaults to stdio mode:

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

For local HTTP testing, override the command and keep the bind host on loopback unless a remote-safe profile and auth controls are configured:

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

Observability exports

Observability is a separate, disabled-by-default process that reads the latest persisted observations without initiating SSH collection:

INFRA_LENS_OBSERVABILITY_ENABLED=true infra-lens-observe

The default OpenMetrics endpoint is http://127.0.0.1:9464/metrics. Optional OTLP/HTTP JSON export uses standard OTEL_EXPORTER_OTLP_* variables. See Observability exports for Prometheus, OpenTelemetry, privacy, and remote-access guidance.

Development

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-backed SSH e2e validation uses a self-contained fixture lifecycle:

pnpm run test:e2e

If a fixture is already running and you intentionally want to skip lifecycle management, use:

INFRA_LENS_E2E_SKIP_FIXTURE=1 pnpm run test:e2e:raw

Start with the documentation index for usage, client setup, operations, incident workflows, observability, storage, security, governance, testing, and release guidance. Generated API docs live in docs/api, and reviewed incident examples live in examples/incidents.

Community

Use SUPPORT.md for support channels and response expectations. Active work is tracked in the infra-lens-mcp Governance project. Project conduct is defined in CODE_OF_CONDUCT.md, and maintainer triage policy lives in docs/governance.md.

Release

Releases are managed through release-please manifest mode and the guarded GitHub Actions release workflow. Implementation PRs must not publish packages, containers, MCP Registry entries, marketplace artifacts, or production GitHub Releases.

See docs/release.md and docs/release-state-machine.md.

License

MIT

Agent plugin and runtime configuration

This repository owns the product-level agent plugin, MCP runtime configuration, and product-specific skills for infra-lens-mcp. The central agent-tools repository should catalog this plugin, but the manifest and workflow instructions live here so they stay synchronized with the actual MCP server package.

File

Purpose

.claude-plugin/plugin.json

Claude Code-valid product plugin manifest.

.mcp.json

Claude Code project-local MCP server configuration.

.codex/config.example.toml

Codex CLI MCP configuration example.

.vscode/mcp.example.json

VS Code / GitHub Copilot workspace MCP configuration example.

opencode.example.jsonc

OpenCode project MCP configuration example.

.opencode/skills/

OpenCode-native mirrored skill definitions.

docs/agent-runtime-config.md

Agent runtime setup and validation notes.

Validate plugin packaging locally:

claude plugin validate .

For review-first remediation plans, incident drafts, and host/time-window comparisons, see Incident workflows.

Available Tools

10 tools
analyze_serverAnalyze ServerB

Collect metrics from a server and explain any anomalies in human language

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionYes
include_networkNoInclude network metrics
duration_minutesNoHow many minutes of metrics to collect for analysis
include_processesNoInclude top process analysis

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
metricsYes
summaryYes
warningsYes
anomaliesYes
timestampYes
health_scoreYes
collection_modeYes
samples_collectedYes
collection_window_minutesYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=false and destructiveHint=false, so the description carries a lower burden. It adds a notable behavioral detail—output is in 'human language'—but does not disclose potential side effects of establishing an SSH connection, resource usage, or whether any server-side modifications occur. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to the core message, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity (4 parameters, nested connection object) but an output schema exists, so return values are covered. The description, however, lacks context about prerequisites (e.g., SSH credentials, network access) and doesn't differentiate from siblings. Given the rich schema and annotations, a score of 3 reflects that it is minimally viable but has clear gaps in contextual guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides no parameter-specific information. However, the schema has high coverage (75%), including descriptions for connection fields, include_network, duration_minutes, and include_processes. Since the schema does the heavy lifting, the description adds minimal value beyond it, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Collect metrics') and a clear outcome ('explain any anomalies in human language'), identifying the tool's core purpose. It doesn't explicitly distinguish this from siblings like analyze_server_snapshot, but the phrasing implies live collection vs snapshot analysis, which provides some differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. There is no mention of preferred scenarios, prerequisites (e.g., SSH access), or exclusions. The description simply states what it does, leaving the agent to infer when it might be appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_server_snapshotAnalyze Current Server SnapshotC

Collect one immediate server snapshot, analyze it, and persist the completed observation without a sampling delay

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionYes
include_networkNoInclude network metrics
include_processesNoInclude top process analysis

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
metricsYes
summaryYes
warningsYes
anomaliesYes
timestampYes
health_scoreYes
collection_modeYes
samples_collectedYes
collection_window_minutesYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait beyond the annotations: it explicitly says 'persist the completed observation', indicating a write side-effect that aligns with readOnlyHint=false and openWorldHint=true. It also mentions 'without a sampling delay', adding temporal behavior. However, it does not elaborate on other potential side effects or permissions, so it adds only moderate context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, waste-free sentence that front-loads the core action. It is concise and readable. However, it is brief to the point of omitting important context, so it earns a 4 rather than a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the presence of an output schema and annotations, the description is too thin for a tool that performs collection, analysis, and persistence via SSH. It does not explain prerequisites, the scope of analysis, or the persistence mechanism. The output schema covers return values, but other contextual elements are missing for such a complex operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level information. The schema covers 67% of parameters with descriptions, but the connection object itself lacks a top-level description and the tool description does not reference or explain any parameters. Since coverage is not high, the description should compensate but fails to do so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action sequence (collect, analyze, persist) and adds a unique qualifier 'without a sampling delay'. This differentiates it from simpler sibling tools like 'snapshot' or 'analyze_server', but it does not explicitly name alternatives, so it is not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus its siblings. The description lacks any 'use this when' language or exclusions. The only hint is the phrase 'immediate server snapshot', which implies a real-time use case but is not explicit enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_incident_windowsCompare Incident WindowsA
Read-only

Compare adjacent time windows for one host or the same recent window across two hosts

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYes
limitNo
compare_hostNo
recent_hoursNo
end_timestampNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
leftYes
rightYes
metricsYes
summaryYes
left_labelYes
right_labelYes
review_requiredYes
left_invalid_rowsYes
right_invalid_rowsYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the two comparison modes as behavioral context. It does not disclose additional traits like rate limits or edge cases, so it is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action and efficiently covers both comparison modes without any waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters and 0% schema coverage, the description provides a high-level overview but leaves ambiguity about how parameters configure the two modes (e.g., how to specify adjacent windows). The output schema and annotations cover return values and safety, but the invocation guidance is incomplete, warranting a 3.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that host is the primary host, compare_host enables cross-host comparison, and recent_hours relates to the recent window. However, it leaves limit and end_timestamp unaddressed, relying on the schema's names and defaults. This partial compensation supports a score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Compare') and resource ('incident windows'), and distinguishes two clear usage modes: adjacent windows on one host or the same window across two hosts. This clearly differentiates it from sibling tools like compare_to_baseline and get_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: for comparing adjacent time windows on a single host, or comparing the same recent window across two hosts. This provides clear context without naming excluded scenarios or alternative tools, matching the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_to_baselineCompare to BaselineB
Read-only

Compare current server state to a recorded baseline and explain the differences

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionYes
baseline_labelNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
summaryYes
warningsYes
anomaliesYes
health_scoreYes
baseline_labelYes
baseline_samplesYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds that it explains differences, implying an analytical result. However, it does not disclose potential operational behavior such as live connections or credential requirements beyond the connection parameter, which is minimal additional context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler words, efficiently conveying the core action. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While an output schema exists for return values, the description lacks usage prerequisites and parameter clarification, making it only minimally complete for a 2-parameter tool. It is adequate but has clear gaps in parameter semantics and usage guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has two parameters with 0% description coverage, and the description adds no parameter semantics. It does not explain the baseline_label parameter or how connection should be provided, leaving the agent to infer from the schema alone. The description completely fails to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Compare' with the resource 'current server state to a recorded baseline' and adds the outcome 'explain the differences'. This clearly distinguishes it from sibling tools like record_baseline (which creates baselines) and snapshot (which captures state).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a baseline exists but provides no explicit guidance on when to prefer this tool over alternatives like analyze_server or how to first create a baseline with record_baseline. No exclusions are stated, so it is clear context but lacking explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draft_incident_reportDraft Incident ReportB
Read-only

Create a review-first incident report and postmortem draft from persisted observations

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYes
hoursNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
statusYes
windowYes
timelineYes
postmortemYes
remediationYes
completenessYes
generated_atYes
invalid_rowsYes
sample_countYes
impact_signalsYes
review_requiredYes
executive_summaryYes
detection_evidenceYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing the tool as safe and non-mutating. The description adds 'review-first' and 'postmortem draft' to indicate the output is a non-final artifact, but it does not disclose additional behavioral details such as response format or rate limits. With annotations covering the safety profile, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It efficiently communicates the core purpose and source without unnecessary detail, earning full marks for conciseness and structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0% schema coverage and a minimal one-sentence description, the tool is under-specified. The parameters host, hours, and limit are unexplained, and the meaning of 'persisted observations' is vague. The presence of an output schema covers return values, but input semantics and usage context remain incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention any of the three parameters (host, hours, limit). The agent is left to infer meaning solely from parameter names and defaults, which is insufficient for correct invocation. This is a significant gap that the description fails to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Create), the output (a review-first incident report and postmortem draft), and the data source (persisted observations). This distinguishes it from sibling tools like analyze_server or snapshot, which focus on analysis or data collection rather than report generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'from persisted observations' implies the tool requires prior data collection, but the description does not explicitly state when to use this tool versus alternatives like compare_incident_windows or plan_remediation. No exclusions, prerequisites, or alternative scenarios are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_historyGet Metric HistoryB
Read-only

Get historical CPU, memory, or load values for a server

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesServer hostname or IP
hoursNoHow many hours of history to return
labelNoOptional label filter; omitted returns observations, set returns matching records
limitNoMaximum history points returned in one page; defaults to 100
cursorNoOpaque cursor returned by a previous history page
metricNoMetric to return from historical snapshotscpu

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
hoursYes
labelYes
metricYes
historyYes
has_moreYes
data_pointsYes
next_cursorYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no additional behavioral details such as pagination, permission requirements, or side-effect warnings; it simply states the function without enriching beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action, no filler. It avoids redundancy and is easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations are rich (6 described parameters, output schema, read-only hint), so the description need not explain return values. However, the lack of usage guidance makes it contextually incomplete for selecting this tool over siblings, though invocation itself is well-supported by structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides complete descriptions for all 6 parameters with 100% coverage, including enums and defaults. The description only mentions the metric types (CPU, memory, load), which mirrors the schema's enum, adding no new semantic meaning beyond what the schema already specifies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly specifies the tool retrieves historical CPU, memory, or load values for a server. The verb 'Get' and resource 'historical values' make the purpose unambiguous, though it does not explicitly distinguish from sibling tools like analyze_server or snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as analyze_server or snapshot. The description only states what it does, without exclusions or alternative recommendations, leaving the agent without selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_host_capabilitiesInspect Host CapabilitiesB
Read-only

Check whether a Linux host supports infra-lens collection

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
warningsYes
checked_atYes
capabilitiesYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds some context by specifying 'Linux host' and 'infra-lens collection,' but it does not disclose what happens on unsupported hosts or any additional behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, front-loaded, with no extraneous words. It efficiently conveys the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple purpose and the presence of an output schema, the description is minimally adequate. However, it lacks usage context, parameter semantics, and an explanation of what 'supports' means in practice, leaving some gaps for an agent selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description says nothing about the 'connection' parameter. The schema has detailed nested descriptions for host, username, etc., but the top-level parameter lacks a description and the schema description coverage is 0%. The tool description does not compensate by explaining that the parameter is an SSH connection or how to provide it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks whether a Linux host supports infra-lens collection, using a specific verb 'check' and resource. It does not explicitly distinguish from sibling tools like analyze_server or snapshot, but the purpose is distinct and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no preconditions, and no exclusions. It simply states what it does without indicating a recommended context or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_remediationPlan RemediationA
Read-only

Collect a current read-only snapshot and produce approval-required remediation guidance without executing changes

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
stepsYes
summaryYes
confidenceYes
generated_atYes
health_scoreYes
review_requiredYes
execution_performedYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the annotations (readOnlyHint=true, destructiveHint=false) by reiterating 'read-only snapshot' and 'without executing changes,' and adds the behavioral nuance that remediation guidance requires approval. It does not contradict the annotations and provides context beyond what the structured annotations alone communicate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence that front-loads the key action and outcome. Every phrase earns its place: 'current read-only snapshot' specifies state and safety, 'approval-required remediation guidance' defines the deliverable, and 'without executing changes' prevents misuse. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (which covers return values), clear annotations, and the tool's simple parameter structure, the description sufficiently covers the essential context: what the tool does, that it is read-only, and that it produces guidance rather than direct changes. The combination of description, schema, and annotations makes the tool's role and safety profile complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one parameter ('connection') with nested sub-properties, but top-level schema description coverage is 0%. The tool description does not explain that the connection object is required for accessing the target host, nor does it clarify how to supply SSH credentials. The nested schema fields are self-descriptive, but the description fails to bridge the gap between the 'connection' parameter and the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('collect a current read-only snapshot') and a clear deliverable ('produce approval-required remediation guidance'), with an explicit constraint ('without executing changes'). It distinguishes itself from sibling tools like 'snapshot' and 'analyze_server' by focusing on remediation planning rather than raw data collection or analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without executing changes' clearly signals when to use this tool: for planning and guidance, not for actual remediation. It also implies that this is a non-invasive, read-only step. However, it does not explicitly name alternative tools for when changes should actually be executed or when a deeper analysis is needed, so it lacks formal exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_baselineRecord BaselineA

Record current metrics as baseline during normal operation for more accurate anomaly detection later

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoLabel for this baseline (e.g. "normal", "peak-hours")default
connectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
labelYes
savedYes
messageYes
warningsYes
sample_countYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, so the write nature is implied but not explicitly detailed. The description adds the behavioral context of running during normal operation and the purpose for future anomaly detection, but does not disclose whether baselines are overwritten or how they are stored.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence. It front-loads the action and purpose without any wasted words, achieving high conciseness while remaining clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a nested connection object and an output schema, and the description provides adequate context for its use. It covers the main purpose and when to use it, though it could mention the SSH connection mechanism or how it fits with sibling tools like 'compare_to_baseline' for fuller completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides descriptions for the 'label' parameter and nested connection properties, covering 50% of parameters. The description adds no parameter-specific information, but the schema already conveys meanings, resulting in a neutral baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool records current metrics as a baseline for anomaly detection. It uses a specific verb and resource, and the phrase 'as baseline' distinguishes it from generic snapshots, though it doesn't explicitly differentiate from the sibling 'snapshot' tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies that it should be used 'during normal operation' for more accurate anomaly detection later, providing clear usage context. However, it does not mention when not to use it or what alternatives might be preferred, such as 'snapshot' for point-in-time captures.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snapshotTake Metric SnapshotB

Collect and save current server metrics without analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
savedYes
warningsYes
timestampYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds the 'without analysis' qualifier, but does not disclose where metrics are saved, whether a snapshot ID is returned, or any rate limiting. With annotations present, the added context is limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the core action. It is well-structured and avoids redundancy, though it omits important details that could be included without harming conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are covered. However, the description lacks detail about the SSH connection required, the 'save' destination, and when to pick this over record_baseline or analyze_server_snapshot. Given the complexity of the connection parameter, the description is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the top-level parameter 'connection'. The description does not mention the parameter or explain how to construct the connection object. While the schema provides nested field descriptions, the tool description adds no value beyond the schema, so the agent gets minimal guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Collect and save current server metrics'. The verb 'collect and save' is specific, and the phrase 'without analysis' differentiates it from sibling tools like analyze_server_snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for raw metric collection without analysis, but does not explicitly state when to use this tool versus alternatives. No exclusions or explicit alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.5.1
    • First observedanalyze_server
    • First observedanalyze_server_snapshot
    • First observedcompare_incident_windows
    • First observedcompare_to_baseline
    • First observeddraft_incident_report
    • First observedget_history
    • First observedinspect_host_capabilities
    • First observedplan_remediation
    • First observedrecord_baseline
    • First observedsnapshot

TDQS

B3.4/5.0

Scored across 10 tools

Disambiguation3/5

Several tools have overlapping purposes, especially analyze_server and analyze_server_snapshot which both collect and analyze metrics with subtle differences in timing and persistence. snapshot and analyze_server_snapshot also share collection behavior, while compare_to_baseline and compare_incident_windows both perform comparisons in different contexts. Descriptions provide some clarity, but boundaries are not always obvious.

Naming Consistency4/5

Most tool names follow a verb_noun pattern (analyze_server, record_baseline, compare_to_baseline, get_history, inspect_host_capabilities, plan_remediation, draft_incident_report, compare_incident_windows). However, 'snapshot' is a bare noun, and 'analyze_server_snapshot' diverges from the simpler 'analyze_server' pattern, introducing minor inconsistency.

Tool Count5/5

With 10 tools, the server covers monitoring, baselining, comparison, history, remediation, and incident reporting without feeling bloated. Each tool addresses a distinct aspect of the infrastructure analysis workflow, and the count is well within the ideal range.

Completeness4/5

The tool set covers the core lifecycle of server monitoring: collection, analysis, baseline recording/comparison, historical lookup, host capability checks, remediation planning, and incident reporting. Minor gaps exist, such as no explicit tools to list or delete saved baselines or snapshots, but these do not cripple the main workflows.

Maintenance

ActivitySlowing
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables read-only Linux system diagnostics and troubleshooting on local and remote RHEL-based systems via SSH, including services, processes, logs, network, and storage analysis.
    20
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server for read-only Linux system administration and diagnostics on RHEL-based systems via SSH. It enables users to troubleshoot remote hosts by accessing system information, services, logs, and network configurations through natural language.
    19
    293
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server for on-prem Linux VMs and PostgreSQL over SSH. Check service health, retrieve bounded logs, inspect DB state, and explore table schemas — without terminal access.
    10
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server to inspect allowlisted Docker containers, systemd services, JSONL logs, and HTTP health endpoints without arbitrary shell access.
    MIT