Skip to main content
Glama
irfanfath123

homelab-monitor-mcp

by irfanfath123

homelab-monitor-mcp

MCP server for homelab monitoring — let any MCP-compatible AI assistant (Claude Desktop, ChatGPT, VS Code, ...) check your servers' health in plain language.

Ask things like:

  • "gimana kondisi serverku?"

  • "container apa aja yang jalan di sil-baru?"

  • "berapa load dan sisa disk?"

Install (30 seconds)

No clone, no manual setup. In your MCP client config:

{
  "mcpServers": {
    "homelab-monitor": {
      "command": "npx",
      "args": ["-y", "homelab-monitor-mcp"]
    }
  }
}

For Claude Desktop, add it to claude_desktop_config.json and restart. npx downloads and runs the server automatically.

Related MCP server: SSH MCP Server

Monitoring remote servers via SSH

Define your servers once with the HOMELAB_HOSTS env var (name=user@host pairs, comma-separated). SSH key auth is used (no passwords); the key must already work for these hosts.

{
  "mcpServers": {
    "homelab-monitor": {
      "command": "npx",
      "args": ["-y", "homelab-monitor-mcp"],
      "env": {
        "HOMELAB_HOSTS": "server1=alice@192.0.2.10,server2=bob@192.0.2.11"
      }
    }
  }
}

Every tool takes an optional host parameter: omit it to check the local machine, or pass a configured name (sil-baru) to check that server over SSH. Use the list_hosts tool to see what's configured.

Tools

Tool

Description

Write?

system_info

Uptime, load average, memory and disk usage

read-only

docker_ps

Running containers (like docker ps)

read-only

docker_stats

Container CPU/memory usage, one-shot

read-only

docker_logs

Recent logs of a container (--tail N)

read-only

service_status

systemd service state

read-only

port_listening

Listening TCP ports and processes

read-only

disk_detail

All mounts + largest directories

read-only

list_hosts

Show configured remote servers

read-only

docker_restart

Restart a container (client asks approval first)

write

list_dir

List directory contents

read-only

read_file

Read a text file (paginated)

read-only

edit_file

Replace text in a file (client asks approval first)

write

run_command

Run dev commands: tests, build, typecheck (allowlisted binaries, client asks approval)

write

db_query

Read-only SQL (SELECT/WITH) against a Laravel project's DB, credentials from its .env

read-only

File tools (list_dir, read_file, edit_file) are restricted to directories in HOMELAB_PROJECT_DIRS (colon-separated), e.g. HOMELAB_PROJECT_DIRS=/home/user/projects:/srv/apps. Paths outside it, relative paths, and .. are rejected.

Write tools (docker_restart, edit_file) always ask for your approval in the MCP client before running.

run_command executes binaries from an allowlist (HOMELAB_ALLOW_COMMANDS, default: npm, npx, node, python3, pytest, tsc, go, cargo, make, git) inside HOMELAB_PROJECT_DIRS only. Shell metacharacters (;, |, $, backticks, redirections) are rejected, so only a single simple command can run. Also asks approval.

db_query takes a Laravel project dir + a SELECT query, reads DB credentials from the project's .env (never returned), and enforces read-only: only SELECT/WITH/EXPLAIN, single statement, no INTO OUTFILE. Supports PostgreSQL, MySQL/MariaDB, SQLite. If the DB hostname only resolves inside Docker, map it with `HOMELAB_DB_OVERRIDES="pgsql=127.0.0.1:5433".

Requirements

  • Node.js 18+

  • Docker (only for the docker_* tools)

  • SSH key access (only for remote hosts)

Remote access (ChatGPT / web clients)

For clients that connect over the network (e.g. ChatGPT), run in HTTP mode:

MCP_HTTP_PORT=3000 \
MCP_AUTH_TOKEN="$(openssl rand -hex 32)" \
HOMELAB_HOSTS="server1=alice@192.0.2.10" \
HOMELAB_PROJECT_DIRS="/home/user/projects" \
node dist/index.js
  • Serves MCP at http://<host>:3000/mcp (Streamable HTTP, stateless)

  • MCP_AUTH_TOKEN is required — requests need Authorization: Bearer <token>

  • Expose it with Cloudflare Tunnel / Tailscale Funnel, then add the public URL as a remote MCP server in your client.

Local development

npm install
npm run build
npm start

Publishing

npm login
npm publish --access public

License

MIT

Available Tools

14 tools
db_queryA

Run a READ-ONLY SQL query (SELECT/WITH) against a Laravel project's database. Credentials come from the project's .env — never returned. Rows capped by limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesSingle SELECT query (read-only; no stacked statements)
limitNoMax rows (default 50, max 500)
project_dirYesAbsolute Laravel project path inside HOMELAB_PROJECT_DIRS (contains .env)
timeout_secsNoQuery timeout in seconds (default 30)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it declares read-only enforcement, that credentials are sourced from .env and never returned, and that rows are capped by limit. It omits query error behavior and the fact that it can target any project dir within the allowed roots, but the key safety and auth traits are disclosed.

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?

Three tight sentences, front-loaded with the operation and its read-only constraint, then credentials handling, then the row cap. Every sentence carries distinct information with no filler.

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?

No output schema exists, but the return shape is largely self-evident for a query tool (result rows from the SELECT), and the credential/row-cap notes cover the main surprises. It is nearly complete, though it could state the result envelope or error signaling.

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 100%, so the schema already documents all four parameters with defaults and bounds. The description only restates the limit cap ('Rows capped by limit') and adds nothing about timeout_secs or the project_dir allowlist, so baseline 3 applies.

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?

Specific verb ('Run') plus precise resource ('READ-ONLY SQL query against a Laravel project's database') with an explicit scope constraint (SELECT/WITH). No sibling tool operates on a database, so an agent can immediately tell this apart from read_file or run_command.

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 read-only SELECT/WITH restriction implies the intended use case, but there is no explicit statement of when to reach for this versus alternatives such as run_command or reading files. Usage is inferable rather than stated.

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

disk_detailA

Disk usage: all mounts plus largest top-level directories (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses that the operation is read-only and that results cover all mounts and top-level directories, which is useful. However, it does not explain permission requirements, output size limits, or potential latency across mounts, leaving gaps for an agent.

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?

A single, compact sentence that front-loads the core purpose and appends key output scope and safety qualifier. Every element earns its place with no redundancy.

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?

For a read-only diagnostic tool with no output schema and no annotations, the description is minimal but serviceable. It covers the main output dimensions, yet lacks return format details or hints about potential host-specific differences. It is adequate but could be more complete.

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

Parameters4/5

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

Schema coverage is 100% for the single host parameter, so the schema already fully documents it. The description adds no parameter details, but baseline for one fully described parameter is 4 since there is little to compensate for.

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?

States a specific resource (disk usage) and the exact output scope: all mounts plus largest top-level directories. 'read-only' further distinguishes it from mutating siblings like edit_file or run_command. It does not explicitly contrast with system_info, which may be a sibling that also reports host metrics.

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 the tool should be used for disk-space inspection via 'disk usage', but it offers no explicit when-to-use/when-not-to-use guidance nor names an alternative for disk-related queries. The omission of host via the schema is the only usage cue.

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

docker_logsA

Read recent logs of a Docker container (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
tailNoNumber of log lines (default 50, max 500)
containerYesContainer name (from docker_ps)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully states that the operation is read-only, which is the key safety trait, but it does not describe error behavior, remote-host implications, or output characteristics beyond what the schema already encodes.

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, so it is easy to scan and every word contributes to identifying the tool's action and target.

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?

For a simple read-only tool with full schema parameter coverage and no output schema, the description is largely complete. It identifies the operation and safety profile; only minor return-value context is missing.

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 100%, so all three parameters (host, tail, container) are already well documented in the input schema. The description adds no parameter-level meaning beyond the schema, making the baseline 3 appropriate.

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?

States a specific verb and resource ('Read recent logs of a Docker container'), so the agent knows exactly what the tool returns. It does not explicitly contrast itself with siblings such as docker_stats or read_file, which keeps it from 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 Guidelines3/5

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

The intended use is implied: inspect recent container logs. There is no explicit when-to-use or when-not-to-use guidance, no mention of alternatives, and no prerequisites, so it is only minimally adequate.

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

docker_psB

List Docker containers with status (read-only, like 'docker ps')

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full behavioral burden. It does disclose that the operation is read-only and analogous to 'docker ps', which is valuable. However, it omits details such as permissions needed, output format, or behavior when no containers exist.

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?

A single efficient sentence with no wasted words. The read-only hint is front-loaded and the analogy is compact.

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?

For a simple list tool with one optional, fully documented parameter and no output schema, the description provides adequate context to invoke it correctly. It lacks usage guidance and richer return-value hints, but the core information is present.

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 100%, so the single 'host' parameter is already fully documented in the schema. The description adds no additional parameter meaning, making the baseline of 3 appropriate.

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?

States a specific verb (list) and resource (Docker containers) plus what is included (status). The 'like docker ps' analogy makes the scope clear. However, it does not explicitly differentiate from sibling tools such as docker_stats, which also concerns containers.

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 on when to use this tool versus alternatives like docker_stats or docker_logs. The description only states what it does, not when an agent should choose it.

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

docker_restartA

Restart a Docker container. WRITE action — your MCP client will ask for approval before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
containerYesContainer name (from docker_ps)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It usefully discloses two things annotations would otherwise supply: this is a mutating write action and the MCP client will prompt for approval. It omits operational behavior such as whether the restart is graceful, what happens if the container is stopped or missing, and whether dependent services are affected.

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?

Two short sentences, zero filler, with the destructive/prompt-worthy nature front-loaded after the core action. Nothing could be cut without losing information.

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?

For a simple two-parameter tool with a fully documented schema and no output schema, the definition covers purpose, mutating nature, and approval behavior. Missing only failure/edge-case behavior (container not running, name not found), which is a minor gap at this complexity level.

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 100%: both 'host' (with HOMELAB_HOSTS semantics and local-machine default) and 'container' are fully documented in the schema. The description adds nothing about parameters, so the baseline of 3 applies.

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?

States a specific verb and resource ('Restart a Docker container'), instantly distinguishable from read-only siblings like docker_ps or docker_logs. It does not name any sibling explicitly, though the schema's 'from docker_ps' hint covers that on the parameter side.

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 'WRITE action' framing implies when this tool is appropriate versus read tools, and flags that approval will be requested. However, it names no alternative and gives no conditions such as when to restart a container versus starting or recreating one.

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

docker_statsA

One-shot Docker container CPU/memory usage (read-only, like 'docker stats --no-stream')

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose two non-obvious traits: the operation is read-only and it is a terminating one-shot snapshot rather than a streaming tail. It does not mention permissions, host prerequisites, or the shape of the returned metrics, so it is helpful but not exhaustive.

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?

A single line that front-loads the resource and behaviour with zero filler; the parenthetical is dense but every clause (one-shot, read-only, --no-stream analogy) earns its place.

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?

For a one-parameter, read-only stats tool with full schema coverage and no output schema, the definition supplies enough to call it correctly. A brief note on what metrics or format come back would make it fully self-sufficient, but little is missing.

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 coverage is 100% and the single optional 'host' parameter is fully documented in the schema, including the HOMELAB_HOSTS convention and the local-machine default. The description adds nothing about parameters, so baseline 3 applies.

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?

States a specific verb+resource: reads one-shot CPU/memory usage for Docker containers, with the analogy 'docker stats --no-stream' pinning the exact semantics. It is clearly separable from siblings like docker_ps and docker_logs by resource, though it does not name an alternative explicitly.

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?

'One-shot' and '--no-stream' imply this is for a single snapshot rather than continuous monitoring, which is useful context. However, no when-to-use guidance, prerequisites, or explicit sibling routing (e.g. use docker_ps to enumerate containers) is given.

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

edit_fileB

Replace text in a file. WRITE action — your MCP client will ask for approval before running it. old_text must occur exactly once.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
pathYesAbsolute path inside HOMELAB_PROJECT_DIRS (e.g. '/home/user/projects/api')
new_textYesReplacement text
old_textYesExact text to find (must occur exactly once)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does disclose the important traits: it is a WRITE action, the client will prompt for approval, and old_text must occur exactly once. It omits what happens on failure (zero or multiple matches), whether edits are atomic/reversible, and any permission or path-allowlist constraints beyond the schema's note.

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?

Three short sentences with zero filler, and the operation plus its uniqueness constraint are front-loaded. Every sentence earns its place.

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?

For a mutation tool with no annotations and no output schema, the description covers the essentials: what it does, that it is a guarded write, and the single-match precondition. Failure behavior and reversibility are the only meaningful gaps remaining.

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 100%, so all four parameters are already documented, including the 'must occur exactly once' constraint that the description repeats. The description adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

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?

States a specific verb and resource ('Replace text in a file'), which is unambiguous and clearly distinct from siblings like read_file or docker_logs. It does not explicitly name an alternative tool, but the purpose itself is sharp enough that no confusion arises.

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?

There is no guidance on when to choose this over alternatives such as run_command (e.g. sed) or a hypothetical write_file, nor any stated prerequisites like needing a unique anchor. Usage is only implied by the description of the operation.

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

list_dirB

List directory contents (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
pathYesAbsolute path inside HOMELAB_PROJECT_DIRS (e.g. '/home/user/projects/api')

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the key safety trait ('read-only'), which is real value, but says nothing about recursion depth, hidden files, output format, error behavior, or permission requirements.

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?

A single front-loaded sentence with zero waste. It is efficient, though its extreme brevity leans toward under-specification rather than exemplary structure.

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?

For a simple read-only listing tool with full schema coverage and no output schema, the essentials are present. However, nothing tells the agent whether the listing is recursive, how results are returned, or how path-scope violations are surfaced.

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 100%, so the schema already documents both 'host' (HOMELAB_HOSTS name, omitted for local) and 'path' (absolute path inside HOMELAB_PROJECT_DIRS). The description adds no syntax or constraint detail beyond that, so the baseline 3 applies.

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?

States a specific verb+resource ('List directory contents'), which is immediately distinguishable from file-content siblings like read_file and host-list siblings like list_hosts. It does not, however, explicitly name any sibling or scope boundary, so an agent gets no routing help beyond the obvious noun.

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?

There is no when-to-use, when-not-to-use, or alternative guidance. The parenthetical '(read-only)' hints at safety but not at when this tool should be chosen over read_file, run_command, or list_hosts.

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

list_hostsA

List remote servers configured via HOMELAB_HOSTS env var

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add one genuinely useful trait: the list is static configuration from an environment variable, not live network discovery. However, it says nothing about ordering, whether the env var being unset yields an empty list or an error, or what authentication/connectivity is implied.

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?

A single front-loaded sentence with no filler; the verb, resource, and data source all appear before any trailing detail, and every clause earns its place.

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?

For a trivial zero-parameter read tool with no output schema, the description covers what is returned (the configured servers) and where it comes from. The only meaningful gap is behavior when HOMELAB_HOSTS is unset or malformed, which an agent would need to know to handle the empty-result case.

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

Parameters4/5

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

The tool takes zero parameters, which is the baseline-4 case per the rubric; the description correctly signals that no filtering or arguments are accepted. There is nothing further for it to document here.

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?

States a specific verb ('List') and resource ('remote servers'), plus the exact configuration source (HOMELAB_HOSTS env var), so the agent knows precisely what is enumerated. It does not explicitly distinguish itself from siblings like system_info or service_status, which also read host-level state, but the resource is narrow enough to be unambiguous.

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?

Usage is implied rather than stated: an agent can infer this is the discovery step before targeting a specific host, but there is no explicit when-to-use, when-not-to-use, or named alternative among the siblings. No prerequisites or failure conditions are mentioned.

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

port_listeningA

List listening TCP ports and owning processes (read-only, like 'ss -tlnp')

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.

TDQS

A3.7/5.0
Behavior3/5

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

Mentions 'read-only' (though no annotations exist) and the local vs remote behavior from param description. Does not disclose required permissions, output format, or executable requirements.

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 concise sentence with no waste, front-loading the core purpose and read-only nature.

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?

Simple tool with one optional param, but lacks details on output format (process names, PIDs) and behavioral traits like error handling or permissions. Annotations absent, so description should carry more burden.

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 coverage is 100%, so the parameter is fully documented in the schema. The description adds no extra meaning about the 'host' parameter beyond what's in the schema.

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?

States a specific verb (List) and resource (listening TCP ports and owning processes), and the analogy 'ss -tlnp' makes the exact operation unambiguous.

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?

Implied usage via 'like ss -tlnp' but no explicit when/when-not or alternatives. Does not differentiate from siblings like service_status or system_info.

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

read_fileC

Read a text file with line pagination (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
pathYesAbsolute path inside HOMELAB_PROJECT_DIRS (e.g. '/home/user/projects/api')
limitNoMax lines to read (default 200, max 500)
offsetNoFirst line to read (default 1)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses only that the operation is read-only and that output is paginated by lines; it omits what happens with missing paths, permission failures, non-text/binary files, or how the host parameter affects execution.

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?

A single tight phrase with the core action and safety profile front-loaded — no wasted words. It is arguably under-specified rather than verbose, which is a completeness concern rather than a conciseness one.

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?

For a simple four-parameter read tool with full schema coverage and no output schema, the description covers the essentials: action, pagination, and non-mutating nature. It leaves gaps around file-type expectations, encoding, and error behavior, but nothing an agent strictly needs to construct a valid call is absent.

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 100%, so the schema already documents host, path, limit, and offset including defaults and bounds. The description adds only the pagination concept, which the schema's limit/offset descriptions already convey, so baseline 3 applies.

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?

States a specific verb and resource ('Read a text file') plus a scope qualifier (line pagination), which cleanly separates it from siblings like edit_file and list_dir. It does not explicitly name the sibling it contrasts with, but the read-only framing makes differentiation easy.

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 '(read-only)' tag implies this is the non-mutating counterpart to edit_file, but there is no explicit when-to-use statement, no conditions or prerequisites, and no routing to alternatives such as list_dir for directory enumeration. Nothing tells the agent when to prefer this over other read paths.

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

run_commandA

Run a dev command (tests, build, typecheck, git) inside a project directory. EXECUTION action — your MCP client will ask for approval before running it. Single command only; the binary must be in HOMELAB_ALLOW_COMMANDS.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
commandYese.g. 'npm test' or 'npx tsc --noEmit' (no shell metacharacters)
workdirYesAbsolute project path inside HOMELAB_PROJECT_DIRS
timeout_secsNoTimeout in seconds (default 120, max 600)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it flags this as an EXECUTION action, warns that the MCP client will prompt for approval, and pins the security boundary to HOMELAB_ALLOW_COMMANDS. It stops short of describing return contents (stdout/stderr/exit code) or failure behavior.

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?

Three short sentences, front-loaded with purpose, then the safety/approval note, then the constraints. Every clause carries information; nothing is redundant or buried.

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?

For a mutating execution tool with no output schema, the description covers approval, allowlisting, and single-command limits, which is what an agent most needs before invoking. Minor gap: no hint about how results (exit code, stdout/stderr) are surfaced to the caller.

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 100%, so all four parameters (host, command, workdir, timeout_secs) are already documented, which sets the baseline at 3. The description reinforces the 'single command' nature of `command` and the project-directory constraint on `workdir`, but adds no syntax or format detail beyond the schema.

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?

States a specific verb and resource ('Run a dev command') with concrete examples (tests, build, typecheck, git) and scope ('inside a project directory'). It clearly reads as an execution tool, distinct from read_file/edit_file siblings, though it never names an alternative tool explicitly.

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?

Gives clear operating context and hard constraints: an approval prompt will fire before execution, only a single command is allowed, and the binary must be present in HOMELAB_ALLOW_COMMANDS. It does not, however, compare against alternatives such as docker_* or db_query tools for related tasks.

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

service_statusB

Check systemd service status (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.
serviceYesService name, e.g. 'docker' or 'nginx'

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the read-only nature of the operation, which is the key behavioral fact for a status check, but says nothing about what status data is returned, how failures for unknown services behave, or remote-execution implications.

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?

A single short sentence with the resource front-loaded and the read-only qualifier trailing it. No filler, nothing to trim.

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?

For a two-parameter read-only probe with no output schema, the definition is minimally adequate. Because there is no output schema, the description could have sketched what status fields come back or noted that a non-running service still returns successfully, but it leaves that to inference.

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 coverage is 100%, so both 'host' and 'service' are fully documented in the schema, including the HOMELAB_HOSTS reference and local-machine default. The description adds nothing beyond the parameter level, which matches the baseline when the schema does the heavy lifting.

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?

States a specific verb (Check) and resource (systemd service status), which is enough to separate it from docker_* and file-based siblings. It stops short of naming when it should be preferred over any alternative, so it is clear but not sibling-differentiated.

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?

There is no guidance on when to use this versus system_info, docker_ps, or run_command for service inspection. The '(read-only)' tag implies a safe inspection use case but gives no explicit conditions or exclusions.

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

system_infoB

Get system uptime, load average, memory and disk usage (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoServer name from HOMELAB_HOSTS (e.g. 'sil-baru'). Omit to run on the local machine.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; it does declare read-only, which is real value. However it omits remote-execution concerns such as what happens if the named host is unreachable or whether the call blocks, leaving meaningful gaps.

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 tight sentence, front-loaded with the verb and resource, that enumerates the returned metrics without filler. Every clause earns its place.

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?

For a one-optional-param read-only tool with no output schema, listing the metric set is enough to call it correctly; the schema handles host semantics. Missing only failure-mode context for an unreachable remote host.

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 100% and the single 'host' parameter already documents HOMELAB_HOSTS names and the omit-for-local behavior. The description mentions nothing about the parameter, so it earns only the baseline 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 gives a specific verb (Get) plus the exact resource and the four metrics returned (uptime, load average, memory, disk usage). It doesn't explicitly distinguish itself from close siblings like disk_detail or service_status, which would be needed for 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?

There is no statement of when to use this tool rather than disk_detail (deeper disk info) or service_status (per-service state), even though disk usage overlaps directly with a sibling. The parenthetical '(read-only)' hints at safety but not at selection.

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. 14 tool updatesv0.1.0
    • First observeddb_query
    • First observeddisk_detail
    • First observeddocker_logs
    • First observeddocker_ps
    • First observeddocker_restart
    • First observeddocker_stats
    • First observededit_file
    • First observedlist_dir
    • First observedlist_hosts
    • First observedport_listening
    • First observedread_file
    • First observedrun_command
    • First observedservice_status
    • First observedsystem_info

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation4/5

Tools target mostly distinct resources (system, services, ports, disk, Docker, files, commands, DB), so an agent can usually pick correctly. The only real overlap is system_info and disk_detail, which both report disk usage, though disk_detail is clearly deeper.

Naming Consistency3/5

Names mix noun_noun (system_info, docker_ps, db_query), verb_noun (list_dir, read_file, edit_file), and noun_verb (docker_restart). The docker_ prefix groups Docker tools, but the overall set lacks a predictable verb pattern even though all names are snake_case.

Tool Count4/5

14 tools is within a reasonable range for a homelab monitor/manager and covers several domains without excessive duplication. It is slightly heavy, but nearly every tool appears to earn its place.

Completeness3/5

Monitoring coverage is strong, but lifecycle gaps exist: services only have status (no start/stop/restart), Docker only has restart (no stop/start), file operations lack create/delete, and list_hosts has no companion tools to act on remote hosts. These gaps will force agents to rely on run_command for common management tasks, which is explicitly restricted.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI assistants full SSH/SFTP remote operations — session management, command execution, interactive shells, file transfers, port forwarding, and system diagnostics.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables MCP-compatible AI clients to remotely manage a Linux server via SSH, supporting file operations, Docker control, Git pulls, and arbitrary command execution.
    5,023 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to safely explore and diagnose remote servers by providing a read-only sandbox with controlled access to files, logs, Docker, and databases. It exposes MCP tools that allow natural-language investigation and direct command execution without write permissions.
    3
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to monitor server health and capacity, diagnose outages, inspect Docker and deployment status, and perform safe, bounded recovery actions via MCP without granting unrestricted shell or SSH access.
    10
    1
    Apache 2.0