Homelab MCP Server
The Homelab MCP Server enables AI assistants to manage, deploy, and monitor homelab infrastructure through SSH, VM management, service installation, network mapping, and Proxmox integration.
SSH & Credential Management
Gather hardware/software info from remote systems, execute commands, and start interactive browser-based shell sessions
Set up a dedicated
mcp_adminuser with passwordless SSH key access and manage group membershipsRegister, list, update, and remove SSH credentials for persistent server access
Network Discovery & Topology
Discover and map individual or multiple devices into a network site map database
Analyze network topology, track device changes, and get AI-driven deployment location suggestions
Infrastructure Lifecycle
Deploy, update, scale, and decommission infrastructure (Docker/LXD services, network changes)
Validate change plans, create backups of infrastructure state, and rollback to previous backups
Detect configuration drift via Terraform state refresh
VM & Container Operations
Deploy, start/stop/restart, monitor, retrieve logs from, and remove Docker and LXD containers/VMs
Service Installation & Management
List, inspect, and install homelab services (Jellyfin, Pi-hole, Ollama, Home Assistant, etc.)
Check device requirements before installation and monitor running service status
Terraform & Ansible Integration
Generate Terraform plans, destroy/refresh Terraform-managed services
Check Ansible deployment status and run playbooks with optional tags, extra vars, and dry-run mode
Proxmox Integration
Search community installation scripts and list all cluster resources (VMs, containers, nodes, storage, pools)
Get node/VM status, manage VM states (start, stop, reboot, suspend, etc.)
Create LXC containers and QEMU VMs, clone existing instances, and delete VMs/containers
Enables deployment and management of multi-service homelab stacks through Ansible playbooks, with support for system-level configuration, cross-service orchestration, and idempotent operations across multiple hosts.
Integration for test coverage reporting and CI/CD pipeline integration.
Supports Consul as a backend for Terraform state management in high-availability configurations.
Provides comprehensive container management including deployment, lifecycle control (start/stop/restart), status monitoring, log retrieval, and removal of Docker containers across homelab infrastructure.
Supports etcd as a backend for Terraform state management in high-availability configurations.
Integration for CI/CD workflows and repository management.
Enables automated deployment of Home Assistant for smart home automation with Pi GPIO integration, Pi Camera module support, Zigbee/Z-Wave hub capabilities, and energy monitoring.
Supports Intel Neural Compute Stick (NCS2) AI accelerator detection and optimization for AI inference workloads on homelab systems.
Provides automated deployment and management of Jellyfin media server through service templates.
Enables deployment and management of K3s lightweight Kubernetes clusters for container orchestration across homelab infrastructure.
Supports Kubernetes cluster deployment and management through K3s for container orchestration.
Provides reverse proxy configuration with SSL support as part of complete AI homelab stack deployments.
Enables deployment and management of Ollama local LLM server with Pi-optimized configurations for 4GB/8GB RAM, model recommendations based on available resources, and thermal/performance tuning for sustained workloads.
Supports ONNX model format for AI accelerator inference workloads including MemryX MX3, Coral TPU, Hailo-8, and Intel NCS2.
Provides automated deployment of Pi-hole network-wide ad blocking with support for both Docker Compose and Terraform deployments, including travel hotspot configuration.
Integration for running unit and integration tests with coverage reporting.
Python-based MCP server implementation with comprehensive infrastructure management capabilities.
Supports PyTorch model format for Hailo-8 AI accelerator inference workloads.
Provides optimized deployment and management of services on Raspberry Pi 4/5 with AI accelerator support, GPIO integration, Pi Camera module support, and thermal/performance optimization.
Uses SQLite for network topology mapping, device tracking, and change history management.
Supports TensorFlow and TensorFlow Lite model formats for AI accelerator inference, particularly for Coral Edge TPU and Hailo-8 accelerators.
Provides enterprise-grade infrastructure as code with full state management, idempotent deployments, drift detection, multi-backend support (local, S3, Consul, etcd), and clean resource lifecycle management for homelab services.
Enables deployment and management of TrueNAS network-attached storage with ZFS optimization.
Uses YAML for service template definitions including configuration for Ollama, Frigate NVR, Home Assistant, Pi-hole, Jellyfin, K3s, and TrueNAS.
Supports YOLOv5 object detection models for real-time AI inference with accelerators like MemryX MX3 and Coral TPU, achieving 80+ FPS on Raspberry Pi.
Supports Zigbee USB dongle integration through Home Assistant for smart home hub capabilities.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Homelab MCP Serverinstall Frigate NVR on my Raspberry Pi with Coral TPU detection"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Homelab MCP Server
AI-Powered Homelab Infrastructure Management via the Model Context Protocol
A Python MCP server that enables AI assistants to manage, deploy, and monitor homelab infrastructure. Tools span SSH discovery, VM management, service installation, network topology mapping, Proxmox operations, and credential management.
Key Features
SSH Discovery -- Gather comprehensive hardware and software information from any system
Service Installation -- Deploy Jellyfin, Pi-hole, Ollama, Home Assistant, and more from templates
Proxmox Integration -- Full API access plus community script discovery
VM/Container Lifecycle -- Deploy, control, and remove Docker and LXD workloads
Network Mapping -- Discover devices, analyze topology, and track changes
Terraform and Ansible -- State-managed deployments with drift detection and playbooks
Credential Management -- Register servers once, connect without re-entering credentials
Related MCP server: remote-admin-mcp
Quick Start
# Install from PyPI (recommended — no clone needed)
uvx homelab-mcp
# Or clone and run from source
git clone https://github.com/washyu/homelab_mcp.git
cd homelab_mcp
uv sync && uv run python run_server.pyFor the full walkthrough (environment variables, MCP client configuration, first tool call), see the Setup Guide.
Documentation
Guide | Description |
From zero to first tool call | |
All tools with arguments and examples | |
Environment variables and CLI options | |
Claude Desktop integration guide | |
REST/OpenAPI mode, endpoints, and error contract |
How It Works
Setup -- The server generates an SSH key pair on first run (
~/.ssh/mcp_admin_rsa)Onboard a host -- Use
setup_mcp_adminto create a managed user on the target systemVerify -- Use
verify_mcp_adminto confirm passwordless SSH accessManage -- Discover hardware, install services, control VMs, and map your network
The server communicates over stdio using the MCP protocol. Connect it to any MCP-compatible client (Claude Desktop, etc.) and interact through natural language.
Credential Management
Store SSH and Proxmox credentials once so the server auto-injects them on every connection:
# Store an SSH credential
homelab-mcp credentials add 192.168.1.10 admin
# Store an SSH key-based credential (stores the key file path in the keyring, not the key)
homelab-mcp credentials add 192.168.1.10 admin --key-path ~/.ssh/id_ed25519
# Store a Proxmox API credential
homelab-mcp credentials add 192.168.1.200 root@pam --type proxmox
# Update an existing credential — `add` is upsert; re-running replaces the stored entry
homelab-mcp credentials add 192.168.1.10 admin
# List stored credentials
homelab-mcp credentials list
homelab-mcp credentials list --type proxmox
# Remove a credential
homelab-mcp credentials remove 192.168.1.10The CLI provides full CRUD over credentials: add (create/update — upsert), list (read), remove (delete). There is no separate update subcommand — re-running add replaces both the keyring secret and the registry entry's auth type.
Credentials are stored in the OS keyring (libsecret on Linux, Keychain on macOS). When the OS keyring is unavailable (headless servers), credentials fall back to environment variables.
See Credentials CLI reference for full documentation.
MCP Client Configuration
From PyPI (uvx) — recommended:
{
"mcpServers": {
"homelab": {
"command": "uvx",
"args": ["homelab-mcp"]
}
}
}From source clone:
{
"mcpServers": {
"homelab": {
"command": "uv",
"args": ["run", "python", "run_server.py"],
"cwd": "/path/to/homelab_mcp"
}
}
}Development
# Install with dev dependencies
uv sync --group dev
# Run tests (unit only, no Docker required)
uv run pytest tests/ -m "not integration"
# Code quality
uv run ruff check src/ tests/
uv run mypy src/See DEPLOYMENT.md for production deployment details.
Project Structure
src/homelab_mcp/
server.py # MCP server with JSON-RPC protocol
tool_schemas/ # Tool definitions (8 schema files)
tool_annotations.py # MCP annotation hints per tool
ssh_tools.py # SSH discovery and hardware detection
service_installer.py # Service installation framework
infrastructure_crud.py # Infrastructure lifecycle management
vm_operations.py # VM/container operations
sitemap.py # Network topology mapping
database.py # SQLite device tracking
error_handling.py # Centralized error handling
credential_store.py # OS keyring credential storage
log_filter.py # Credential redaction for log output
prompt_registry.py # MCP prompts registry
resource_readers.py # MCP resource read handlers
service_templates/ # YAML service definitions
tests/ # Unit and integration tests
docs/ # Full documentationAcknowledgments
Proxmox community script integration powered by community-scripts/ProxmoxVE (MIT License).
Contributing
Fork the repository
Create a feature branch
Write tests for new functionality
Ensure all tests pass
Submit a pull request
License
MIT License -- see LICENSE file for details.
Available Tools
58 toolsanalyze_network_topologyBRead-onlyIdempotent
Analyze the network topology and provide insights about the discovered devices
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds minimal behavioral context beyond confirming it is an analysis operation. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately conveys the tool's purpose with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple no-parameter tool, but it lacks details about the output format or the nature of insights provided. Since no output schema exists, the agent would benefit from a hint about what kind of insights (e.g., list of devices, graph data, recommendations).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, and schema coverage is effectively 100%. The description adds no parameter information, but none is needed. Baseline score is 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes network topology and provides insights, which distinguishes it from discovery or mapping tools like discover_and_map or get_network_sitemap. However, it could explicitly differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives. For example, it should mention that this is best used after a discovery step or that it provides higher-level analysis compared to raw device data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_discover_and_mapAIdempotent
Discover multiple devices via SSH and store them in the network site map database
| Name | Required | Description | Default |
|---|---|---|---|
| targets | Yes | Array of target device configurations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with annotations (readOnlyHint=false, idempotentHint=true) but adds minimal behavioral context beyond what annotations provide. No details on idempotency behavior or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single 15-word sentence, concise and front-loaded with action and outcome. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk operation with array input and no output schema, description lacks details on behavior (e.g., overwrite policy, parallelism, per-device results). Incomplete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all fields; description adds no parameter-specific info beyond what schema provides. Baseline 3 as expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Discover multiple devices via SSH and store them in the network site map database', specifying verb, resource, method, and outcome, distinguishing it from singular 'discover_and_map'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies batch usage via 'multiple devices' but lacks explicit guidance on when to use this vs sibling tools like 'discover_and_map' or 'ssh_discover'. No alternatives or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ansible_serviceBRead-onlyIdempotent
Check the status of an Ansible-managed service deployment
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false, so the description adds limited behavioral context—just that it targets Ansible-managed services. Missing details on authentication (e.g., SSH password handling) or potential timeouts, but annotations cover safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that accurately describes the tool's purpose without unnecessary words. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate but not thorough: given the tool's moderate complexity (SSH-based remote check), the description omits details about expected return values, error conditions, and authentication requirements. Sufficient for basic understanding but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have schema descriptions (100% coverage), so the description does not need to add semantics. It adds marginal context by implying hostname and service_name are key, but adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it checks the status of an Ansible-managed service deployment, specifying the action and resource. It implies differentiation from generic service status tools, but does not explicitly contrast with siblings like get_service_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool instead of alternatives, no prerequisites mentioned (e.g., SSH access required), and no examples of use cases. The description only states what it does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_service_requirementsARead-onlyIdempotent
Check if a device meets the requirements for a service installation
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the target device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to check requirements for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, which cover safety and idempotency. The description adds that the tool checks requirements via SSH (implied by parameters) but does not disclose return behavior, rate limits, or permission needs. It does not contradict annotations, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no extraneous information. It is front-loaded and efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description does not specify what the tool returns (e.g., boolean, details, error messages). This is a significant gap for an agent to understand the tool's behavior fully. The description is too minimal for the context of 4 parameters and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so each parameter is already documented. The description does not add additional meaning beyond what the schema provides, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to check if a device meets requirements for a service installation. It uses a specific verb ('check') and resource ('device requirements'), and it distinguishes itself from siblings like 'install_service' and 'check_ansible_service' by focusing on pre-installation verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before service installation but provides no explicit guidance on when to use this tool versus alternatives. No exclusions or alternative tool names are mentioned, leaving the agent to infer context from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_proxmox_vmB
Clone a VM or container to create a new one
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Full clone (true) or linked clone (false) | |
| host | No | Proxmox host (optional) | |
| name | No | New VM name (optional) | |
| node | Yes | Node name | |
| vmid | Yes | Source VM/Container ID | |
| vm_type | No | Type: 'qemu' for VM or 'lxc' for container | qemu |
| new_vmid | Yes | New VM/Container ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, destructiveHint=false. Description adds no extra behavioral context such as resource consumption, dependency on original, or execution time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence clearly stating purpose. No wasted words, directly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given lack of output schema and moderate parameter count (7), the description should mention return value, status, or whether the operation is synchronous. It does not, leaving agents uninformed about the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 7 parameters with descriptions. The tool description does not add any parameter-specific details beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool clones a VM or container to create a new one. This verb+resource combination distinguishes it from sibling 'create' tools which build from scratch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to clone vs create, or when to use linked vs full clone. No mention of prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
control_vmBIdempotent
Control VM state (start, stop, restart)
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform | |
| vm_name | Yes | Name of the VM/container | |
| platform | Yes | VM platform | |
| device_id | Yes | Database ID of the target device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true and destructiveHint=false, but the description adds no additional behavioral context (e.g., what happens if VM is already running, if restart causes downtime, or required permissions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded key information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 required parameters, no output schema, and many sibling tools, the description is too minimal. Lacks details on return values, error handling, or behavior under edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 4 parameters are fully described in the input schema (100% coverage). The description does not add extra meaning beyond listing the actions, so it meets baseline but does not exceed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool's purpose: controlling VM state with explicit actions (start, stop, restart). This distinguishes it from sibling tools like get_vm_status (monitoring) and deploy_vm (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 manage_proxmox_vm or get_vm_status. The description lacks context about prerequisites or preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_infrastructure_backupC
Create a backup of current infrastructure state
| Name | Required | Description | Default |
|---|---|---|---|
| device_ids | No | Specific device IDs to backup (for partial/device_specific) | |
| backup_name | No | Name for the backup (auto-generated if not provided) | |
| backup_scope | No | Scope of the backup | full |
| include_data | No | Include application data in backup |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readOnly and non-destructive, but the description adds no details on side effects (e.g., overwriting existing backups), required permissions, or impact on running systems. With low annotation clarity, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is concise but could benefit from slightly more detail without losing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the infrastructure context and many sibling tools, the description lacks completeness. No output schema exists, and the description fails to explain return values or post-conditions, leaving the agent with ambiguous expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds no extra meaning beyond what's already in the input schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create) and resource (infrastructure backup), distinguishing it from sibling tools like analyze_network_topology or deploy_infrastructure. However, it could be more specific about the scope or context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives such as scan_infrastructure_drift or validate_infrastructure_changes. Prerequisites or conditions for backup creation are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_proxmox_lxcB
Create a new LXC container on Proxmox
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host (optional) | |
| node | Yes | Node name | |
| swap | No | Swap size in MB | |
| vmid | Yes | Container ID (must be unique) | |
| cores | No | Number of CPU cores | |
| start | No | Start container after creation | |
| memory | No | RAM in MB | |
| storage | No | Storage for rootfs | local-lvm |
| hostname | Yes | Container hostname | |
| password | No | Root password | |
| ostemplate | No | Template (e.g., 'local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst') | local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst |
| rootfs_size | No | Root filesystem size in GB | |
| unprivileged | No | Create as unprivileged container (default: true, recommended for security) | |
| ssh_public_keys | No | SSH public keys to add to the container (one per line) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readOnly mutation, but description provides no additional context: no mention of idempotency (despite hint false), error scenarios (e.g., duplicate vmid), or required permissions. The description adds minimal behavioral insight beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, but it lacks critical information for a complex tool. It could be front-loaded with more specifics without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, no output schema, and significant complexity, the description is incomplete. It fails to explain return value, side effects, or error handling, and doesn't differentiate from similar sibling tool create_proxmox_vm.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. The description adds no extra meaning; baseline is appropriate at 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('new LXC container on Proxmox'), distinguishing it from sibling tools like create_proxmox_vm which creates VMs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use LXC vs VM, prerequisites (e.g., template existence, node availability), or when not to use this tool. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_proxmox_vmB
Create a new VM (QEMU) on Proxmox
| Name | Required | Description | Default |
|---|---|---|---|
| iso | No | ISO image to attach (e.g., 'local:iso/debian-12.iso') | |
| host | Yes | Proxmox host. Any node hostname covered by your registered credential (per-node) or cluster-scope token. Register with `homelab-mcp credentials add --type proxmox <host> <username>`, or `... --scope cluster:<name> <token_id>` for cluster tokens. | |
| name | Yes | VM name | |
| net0 | No | Network device configuration (default: 'virtio,bridge=vmbr0') | virtio,bridge=vmbr0 |
| node | Yes | Node name | |
| vmid | Yes | VM ID (must be unique) | |
| cdrom | No | CD-ROM device (e.g., 'local:iso/debian-12.iso'). Alternative to iso — use one or the other. | |
| cores | No | Number of CPU cores | |
| start | No | Start VM after creation | |
| memory | No | RAM in MB | |
| ostype | No | OS type for optimization (default: 'l26' for Linux 2.6+) | l26 |
| sockets | No | Number of CPU sockets | |
| storage | No | Storage for disks | local-lvm |
| disk_size | No | Disk size in GB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, offering no safety guarantees. The description merely states 'Create' but fails to disclose potential side effects like overwriting existing VMs, required permissions, or creation duration. As the sole bearer of behavioral info, it is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. It is concise but could benefit from additional context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, no output schema, and the complexity of VM creation, the description is too sparse. It omits return values, confirmation, error handling, and post-creation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 14 parameters with descriptions. The description adds no additional semantic value beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a new VM on Proxmox using the verb 'Create' and specifies the resource 'VM (QEMU)'. This distinguishes it from sibling tools like clone_proxmox_vm or delete_proxmox_vm.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 clone_proxmox_vm or how to handle existing VMs with the same vmid. No prerequisites or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decommission_deviceADestructiveIdempotent
Safely remove a device from the network infrastructure. Stops services, removes the device from clusters, optionally migrates services per migration_plan, then deletes the sitemap row. Use remove_device for inventory-only deletion of one row; use purge_devices for bulk filter-based inventory deletion; use decommission_device when host-side cleanup (stop services, remove from clusters) is required before deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, return a preview of what would be affected without executing any changes. | |
| device_id | Yes | Database ID of the device to decommission | |
| force_removal | No | Force removal without migration (data loss possible) | |
| validate_only | No | Only validate decommission plan without executing | |
| migration_plan | No | Plan for migrating services to other devices |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show destructiveHint=true and readOnlyHint=false. Description adds valuable behavior: stops services, removes from clusters, deletes sitemap row, and mentions optional migration. It also references `force_removal` causing data loss. However, it does not address idempotency or error handling, and the term 'safely' may understate destructiveness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first explains the core action, second provides sibling differentiation. No unnecessary words, efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the action and workflow. It mentions validation via validate_only and dry_run. However, it does not describe return values or prerequisites (e.g., device existence, permissions), which would be helpful for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context by linking migration_plan to the optional migration step and explaining the role of force_removal. This enhances understanding beyond the schema, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the specific action: 'Safely remove a device from the network infrastructure' and details the steps (stops services, removes from clusters, optionally migrates, deletes sitemap row). It distinguishes itself from sibling tools by comparing with `remove_device` and `purge_devices`, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool: 'Use `remove_device` for inventory-only deletion... use `purge_devices` for bulk... use `decommission_device` when host-side cleanup is required.' This provides clear decision guidance against alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decommission_device_previewARead-onlyIdempotent
Preview what decommission_device would affect without executing. Returns a structured dry-run report. No infrastructure is modified.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | Database ID of the device to decommission | |
| force_removal | No | Force removal without migration (data loss possible) | |
| validate_only | No | Only validate decommission plan without executing | |
| migration_plan | No | Plan for migrating services to other devices |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint, destructiveHint, idempotentHint) by stating 'No infrastructure is modified.' It adds that it returns a structured dry-run report, providing additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, front-loading the key purpose and stating the non-destructive nature. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has nested parameters and no output schema. The description does not detail the structure of the dry-run report, which may leave an agent uncertain about the return format. Some additional detail would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add new meaning to the parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to preview the effects of decommission_device without executing any changes. It distinguishes itself from the sibling tool decommission_device by emphasizing that it does not modify infrastructure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool should be used when you want to see the impact of decommissioning before committing, and that decommission_device is the alternative that executes. It provides clear context but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_proxmox_vmBDestructiveIdempotent
Delete a VM or container from Proxmox
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host (optional) | |
| node | Yes | Node name | |
| vmid | Yes | VM/Container ID to delete | |
| purge | No | Remove from all related configurations | |
| dry_run | No | If true, return a preview of what would be affected without executing any changes. | |
| vm_type | No | Type: 'qemu' for VM or 'lxc' for container | qemu |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true, so the description's 'Delete' is consistent. However, it adds no extra behavioral context such as whether the VM is permanently removed from disk, if confirmation is required, or what happens to associated resources. The dry_run parameter is mentioned in the schema but not in the description. The description is adequate but does not enhance understanding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the key action and resource. It avoids unnecessary words, though it could include more context without being overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (delete operation, no output schema) and full parameter schema coverage, the description is minimally sufficient. However, it does not mention that the deletion is permanent or irreversible (though destructiveHint covers this), nor does it address the presence of sibling tools like 'delete_proxmox_vm_preview'. More context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage (all 6 parameters have descriptions). The description does not add any additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Delete a VM or container from Proxmox'. It uses a specific verb ('Delete') and resource ('VM or container from Proxmox'), which distinguishes it from sibling tools like 'clone_proxmox_vm', 'control_vm', or 'create_proxmox_vm'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'delete_proxmox_vm_preview' (which previews the deletion) or 'remove_vm'. There is no mention of prerequisites, side effects, or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_proxmox_vm_previewARead-onlyIdempotent
Preview what delete_proxmox_vm would affect without executing. Returns a structured dry-run report. No VM is deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host (optional) | |
| node | Yes | Node name | |
| vmid | Yes | VM/Container ID to delete | |
| purge | No | Remove from all related configurations | |
| vm_type | No | Type: 'qemu' for VM or 'lxc' for container | qemu |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and destructiveHint, and the description adds that it returns a dry-run report and no VM is deleted, which is consistent. It does not detail report structure but suffices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words, front-loaded with key action and scope. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the preview nature and rich annotations, the description is largely complete. It lacks details about the dry-run report output and potential error cases, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions, so the description adds minimal value. It implies parameters map to the deletion tool, but no new semantics are introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Preview' and clearly identifies the resource ('what delete_proxmox_vm would affect'), distinguishing it from the sibling tool `delete_proxmox_vm`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage before executing `delete_proxmox_vm` by naming that tool directly, but it does not explicitly state when not to use or list alternatives (though other preview tools are for different resources).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_infrastructureB
Deploy new infrastructure based on AI recommendations or user specifications
| Name | Required | Description | Default |
|---|---|---|---|
| validate_only | No | Only validate the plan without executing | |
| deployment_plan | Yes | Infrastructure deployment plan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's not read-only, not explicitly destructive (destructiveHint=false), and not idempotent. The description adds that deployments are based on recommendations or specs, but does not disclose side effects, error handling, or state changes. Given the minimal annotation coverage, more behavioral context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. It is front-loaded with the action and resource, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a complex nested schema and no output schema, yet the description is very brief. It does not mention the 'validate_only' parameter (present in schema), nor explain what happens after deployment or what the response contains. This leaves the agent without crucial execution context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for top-level parameters, so the baseline is 3. The description adds context that the plan can come from AI or user, but does not elaborate on the nested structure or the distinction between services and network_changes, leaving the schema to carry most of the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Deploy' and resource 'infrastructure', clearly indicating the action and target. It also distinguishes the tool from siblings like 'suggest_deployments' (which suggests) and 'validate_infrastructure_changes' (which validates), by mentioning the source 'based on AI recommendations or user specifications'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when deploying infrastructure but lacks explicit guidance on when to use this tool versus alternatives like 'plan_terraform_service' or 'validate_infrastructure_changes'. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_vmB
Deploy a new VM/container on a specific device
| Name | Required | Description | Default |
|---|---|---|---|
| vm_name | Yes | Name for the new VM/container | |
| platform | Yes | VM platform to use (docker or lxd) | |
| device_id | Yes | Database ID of the target device | |
| vm_config | No | VM configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false) and non-destructive nature (destructiveHint=false). The description adds no behavioral details beyond what is implied, such as expected time, side effects, or post-deployment state. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 8 words, efficiently conveying the core function without any fluff. It is front-loaded and every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and the description does not explain return values, success/failure behavior, or any post-creation actions. Given the complexity (4 parameters including a nested object) and the fact that it creates resources, the description is too sparse to fully inform an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any additional meaning or context for the parameters beyond what the schema provides. It simply restates the tool's purpose without elaborating on parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Deploy') and resource ('new VM/container') with the scope ('on a specific device'). It distinguishes from sibling tools like clone_proxmox_vm or create_proxmox_vm which are for Proxmox, while this tool handles docker/lxd platforms as seen in the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, nor any prerequisites or conditions specified. The description does not mention that the target device must exist or that the platform must be available, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
destroy_terraform_serviceADestructiveIdempotent
Destroy a Terraform-managed service and clean up all resources
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, return a preview of what would be affected without executing any changes. | |
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to destroy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds 'clean up all resources' but does not clarify what exactly is cleaned up or how idempotency works (destroy being idempotent is unusual). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action and resource, no filler. Every word is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 5 parameters and no output schema, the description is too brief. It does not explain return values, success/failure behavior, or what 'clean up all resources' entails. More context is needed given the high stakes of this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already describes each parameter. The tool description adds no extra meaning beyond the schema. Baseline 3 is appropriate as the description does not compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (destroy), the resource (Terraform-managed service), and the goal (clean up all resources). It distinguishes from the sibling tool 'destroy_terraform_service_preview' which is a preview variant, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when destroying a Terraform service but does not explicitly state when to use this tool over alternatives like preview or other service management tools. No guidance on prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
destroy_terraform_service_previewARead-onlyIdempotent
Preview what destroy_terraform_service would affect without executing. Returns a structured dry-run report. No resources are destroyed.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to destroy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that it returns a structured dry-run report and no resources are destroyed, which aligns with annotations and provides additional context about output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: first states purpose, second describes output, third clarifies no destruction. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should explain return format. It says 'structured dry-run report' but lacks details on what fields or format the agent can expect. Adequate but incomplete for invoking and interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for all 4 parameters. Description does not add any parameter-specific information beyond what is already in the schema, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's a preview/dry-run of destroy_terraform_service, specifies what it does (returns structured report) and distinguishes from the destructive sibling. Verb 'preview' and resource 'terraform service' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when wanting to see effects before actual destruction, but doesn't explicitly state alternatives or when not to use. The presence of 'destroy_terraform_service' as sibling naturally suggests the preview is a safe check, but no explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_and_mapAIdempotent
Discover a device via SSH and store it in the network site map database. Recommended follow-up: run the configure_host_fingerprint prompt to capture per-host capability signals for drift detection.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | SSH port (default: 22) | |
| hostname | Yes | Hostname or IP address | |
| key_path | No | Path to SSH private key | |
| username | No | SSH username. Omit if credentials were stored with `credentials add` — they are auto-injected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive behavior. The description adds that the tool stores the device in a database (write operation) and suggests a follow-up, providing context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences: one for purpose, one for recommended follow-up. Every word is necessary and no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does not mention return values or potential side-effects. However, for a simple store operation with well-documented parameters and annotations, the description is mostly complete. Minor gap on return expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all 4 parameters with 100% coverage (e.g., 'Hostname or IP address', 'SSH username', etc.). The description adds no additional parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('discover a device via SSH and store it in the network site map database'), clearly distinguishing it from bulk variants or pure discovery tools like 'ssh_discover'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for single device discovery+storage but does not explicitly state when to use this tool versus alternatives like 'bulk_discover_and_map' or 'ssh_discover'. The follow-up recommendation is helpful but not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_changesBRead-onlyIdempotent
Get change history for a specific device
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of changes to return (default: 10) | |
| device_id | Yes | Database ID of the device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. Description adds only the obvious 'change history' without further behavioral context (e.g., ordering, pagination, content of changes).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, complete sentence with no superfluous words. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks details about output structure (e.g., fields in change history) and behavior of limit parameter. Sufficient for basic use but incomplete for understanding full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. Description does not add additional semantics beyond 'change history', meeting baseline but not exceeding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb ('Get'), resource ('change history'), and scope ('for a specific device'). It is distinct from sibling tools that focus on logs, status, or deployments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like get_vm_logs or get_service_status. No exclusion criteria or suggested use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_sitemapARead-onlyIdempotent
Get all discovered devices from the network site map database
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. Description adds context about data source ('network site map database') but no additional behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence (7 words) that efficiently conveys the tool's purpose without any redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no parameters, the description provides adequate context. It doesn't mention pagination or ordering, but the tool likely returns all devices at once; assuming no issues, completeness is good.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description doesn't need to add parameter meaning. Baseline score of 4 is appropriate since schema coverage is 100% and description is not expected to elaborate on non-existent parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies verb 'Get' and resource 'all discovered devices from the network site map database', differentiating from sibling tools like 'analyze_network_topology' or 'discover_and_map' that have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool instead of alternatives (e.g., when to pick 'get_network_sitemap' over 'analyze_network_topology' or 'discover_and_map'), leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_proxmox_node_statusARead-onlyIdempotent
Get detailed status of a Proxmox node (CPU, memory, uptime, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host. Register via `homelab-mcp credentials add --type proxmox <host> <username>` (per-node) or `... --scope cluster:<name> <token_id>` (cluster scope). | |
| node | Yes | Node name (e.g., 'pve', 'proxmox') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, and idempotent behavior. The description adds no additional behavioral context beyond what annotations provide, so it does not enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the tool's purpose effectively with no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with well-described parameters and annotations, the description is nearly complete. It could list more output details, but the examples given (CPU, memory, uptime) are sufficient for an agent to understand the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds no new meaning beyond the schema definitions. The mention of CPU/memory/uptime refers to output, not parameters, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'get detailed status' and specifies the resource 'Proxmox node' with examples of returned data (CPU, memory, uptime). It distinguishes from sibling tools such as get_proxmox_vm_status, which targets VMs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like get_proxmox_vm_status. Usage is implied based on the resource type but lacks 'when not to use' or explicit comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_proxmox_script_infoARead-onlyIdempotent
Get detailed information about a specific Proxmox community script
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category hint to speed up search: 'ct', 'vm', 'install', 'misc' | |
| script_name | Yes | Name of the script file (e.g. 'homeassistant.sh', 'docker.sh') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds no further behavioral info (e.g., no mention of output format, caching, or exceptions). It is consistent but provides no extra value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence directly stating purpose with no unnecessary words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should hint at what information is returned (e.g., script metadata, supported variables). Lacks this detail, but is otherwise adequate for a simple tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description does not need to add parameter details. However, it doesn't explain what 'detailed information' entails or how the category parameter affects results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action and resource: 'Get detailed information about a specific Proxmox community script'. It distinguishes from sibling 'search_proxmox_scripts' which would be for finding scripts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., when to use search vs get details). Does not mention prerequisites or that script_name must match an existing script.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_proxmox_vm_statusBRead-onlyIdempotent
Get status of a specific VM or container
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host. Register via `homelab-mcp credentials add --type proxmox <host> <username>` (per-node) or `... --scope cluster:<name> <token_id>` (cluster scope). | |
| node | Yes | Node name | |
| vmid | Yes | VM or Container ID | |
| vm_type | No | Type: 'qemu' for VM or 'lxc' for container | qemu |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description's burden is lower. However, the description adds no additional behavioral context (e.g., no mention of rate limits, authentication specifics, or the nature of the status data). It meets the minimum but doesn't enrich beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (9 words) with no wasted text. It is appropriately front-loaded for a straightforward read operation, though it could potentially be expanded slightly to cover output details without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite good schema and annotations, the description fails to explain what 'status' includes or what the return type is. For a status-checking tool, agents need to know the structure or meaning of the response. Without output schema or description, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all 4 parameters, including an enum for 'vm_type' with default. The description does not add any meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get status of a specific VM or container', which is a specific verb+resource combination. It distinguishes from sibling tools like 'control_vm' (which modifies state) and 'get_proxmox_node_status' (which targets nodes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'get_vm_status' or 'manage_proxmox_vm'. The description lacks explicit context for when-not-to-use or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_infoCRead-onlyIdempotent
Get detailed information about a specific service
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | Name of the service to get information about |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, fully covering safety and idempotency. The description adds no behavioral context such as output format, pagination, or required permissions, failing to add value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 10 words, front-loaded with the action and purpose. While concise, it could include more useful information without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and strong annotations, the description is minimally adequate. However, the lack of output schema and failure to clarify 'detailed information' (e.g., status, config, logs) or distinguish from sibling tools leaves gaps for correct agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the single parameter 'service_name'. The description does not add any additional meaning or usage details, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Get') and resource ('detailed information about a specific service'), clearly indicating the action and what it retrieves. However, with many sibling tools like 'get_service_status' and 'check_service_requirements', it does not differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description provides no context, prerequisites, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_statusCRead-onlyIdempotent
Get the current status of an installed service
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to check status for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, idempotentHint=true. The description adds no behavioral context beyond the annotations, such as network dependencies, authentication requirements, or the nature of the status check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently communicates the tool's purpose. It is front-loaded and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description does not hint at the format or content of the status response. It also omits context about the SSH parameters (hostname, username, password) implying remote access, which is crucial for an agent to understand the tool's requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already provides descriptions for all four parameters. The description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description ('Get the current status of an installed service') clearly states the action (get) and the resource (status of an installed service). It distinguishes from sibling tools like 'get_service_info' which likely returns more details, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'check_ansible_service', 'get_service_info', or other status tools. The description does not mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vm_logsARead-onlyIdempotent
Get logs from a specific VM/container
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | Number of log lines to retrieve | |
| vm_name | Yes | Name of the VM/container | |
| platform | Yes | VM platform | |
| device_id | Yes | Database ID of the target device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint, and idempotentHint, so the description adds no extra behavioral context (e.g., how logs are fetched, any limitations). It does not contradict annotations, but also doesn't enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the core functionality without unnecessary words. It is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With fully described parameters and comprehensive annotations, the description is mostly complete. It could optionally mention the format of returned logs or any pagination, but the current level suffices for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description doesn't need to add parameter details. It provides no additional meaning beyond what the schema already describes (e.g., device_id, platform, vm_name, lines).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'logs from a specific VM/container', precisely defining the tool's action and target. It easily distinguishes from sibling tools like get_vm_status or control_vm.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are provided. The description implies usage for log retrieval, but without exclusions or comparisons to siblings (e.g., get_vm_status), the guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vm_statusARead-onlyIdempotent
Get detailed status of a specific VM
| Name | Required | Description | Default |
|---|---|---|---|
| vm_name | Yes | Name of the VM/container | |
| platform | Yes | VM platform | |
| device_id | Yes | Database ID of the target device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds no extra behavioral details (e.g., whether status includes performance metrics, uptime, or just basic info). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence conveys the core purpose efficiently. No wasted words. Could be slightly improved by including output highlights, but it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description could explain what 'detailed status' includes (e.g., state, resources, IP). It also does not note that the tool is read-only and safe. However, annotations compensate partially, and the tool is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for all three parameters. The description adds no additional meaning beyond the schema; it merely restates the tool's purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('get') and the resource ('detailed status of a specific VM'). It distinguishes from siblings like 'list_vms' (lists all VMs) and 'control_vm' (modifies state), and is more general than 'get_proxmox_vm_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'get_proxmox_vm_status' or 'get_service_status'. The description implies it's for a generic VM, but does not clarify that it is not platform-specific. Agent must infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_serviceC
Install a homelab service on a target device
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the target device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to install (e.g., 'jellyfin', 'nextcloud') | |
| config_override | No | Optional configuration overrides for the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations do not convey destructive or idempotent hints, and the description adds no behavioral details such as modifications to the target system, authentication requirements, or reversibility. The agent has minimal insight into side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loading the key action. While brief, it is efficient and free of verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and behavioral context, the description is insufficient for complete understanding. The agent needs more information about return values, success criteria, and potential state changes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so parameters are well-documented. The tool description adds little beyond restating the action; it does not clarify parameter interplay or defaults beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'install' and the resource 'homelab service', making the purpose evident. It distinguishes from most siblings, though more specificity about 'homelab' could differentiate from generic deployment tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 deploy_infrastructure or check_service_requirements. No prerequisites or context provided, leaving the agent uncertain about proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_servicesARead-onlyIdempotent
List all available homelab services that can be installed
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description does not add any additional behavioral context beyond what annotations imply. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the tool's purpose. It is front-loaded and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple listing tool with no parameters. It tells the agent exactly what will be returned (a list of available services). However, it could be slightly improved by indicating the type of information returned (e.g., names or IDs), but the current level is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema description coverage is 100%. The description does not need to add parameter information. With 0 parameters, the baseline score is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and resource 'available homelab services that can be installed', clearly distinguishing it from sibling tools like install_service and get_service_info. It unambiguously indicates the tool provides a catalog of services available for installation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as get_service_info or install_service. It does not mention prerequisites, context, or situations where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_keyring_credentialsARead-onlyIdempotent
List hosts that have credentials stored in the OS keyring registry. Call this before ssh_discover or ssh_execute_command to check whether a host has stored credentials. Returns hostname and username per entry.
| Name | Required | Description | Default |
|---|---|---|---|
| credential_type | No | Credential type to list: 'ssh' (default) or 'proxmox' | ssh |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description's added value is noting the return format (hostname and username per entry). This is beneficial, though it could be more explicit about what the list contains (only hosts with stored credentials).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that front-load the purpose, then provide usage guidance and return information. Every sentence contributes essential information without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 one optional parameter and no output schema, the description sufficiently covers purpose, usage context, output contents, and behavioral traits. It is fully adequate for an AI agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter 'credential_type', with enum and default. The description does not add any additional meaning beyond what the schema provides, so it meets the baseline without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists hosts with stored credentials in the OS keyring registry, specifying the verb 'list' and resource 'hosts with credentials'. It distinguishes itself from sibling tools like ssh_discover and ssh_execute_command by explicitly recommending it as a preparatory step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this before ssh_discover or ssh_execute_command to check for stored credentials, providing clear context for when to use it. However, it does not mention situations where it should not be used or suggest alternatives, which would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_proxmox_resourcesBRead-onlyIdempotent
List all Proxmox cluster resources (VMs, containers, nodes, storage).
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host. Register via `homelab-mcp credentials add --type proxmox <host> <username>` (per-node) or `... --scope cluster:<name> <token_id>` (cluster scope). | |
| resource_type | No | Filter by resource type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safe read-only behavior (readOnlyHint=true, destructiveHint=false). The description adds only the 'list all' scope, little beyond annotations. No mention of authorization, pagination, or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, direct sentence with no fluff. Every word is meaningful and front-loaded with action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with optional parameters and no output schema, the description should clarify default behavior (e.g., what happens when no host or type is given) and return format. Currently insufficient for full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both 'host' and 'resource_type'. The description does not add additional parameter context beyond what the schema provides, so no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'list' and identifies exact resources (VMs, containers, nodes, storage), clearly distinguishing it from sibling tools like `get_proxmox_vm_status` which target individual items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as `get_proxmox_vm_status` or `search_proxmox_scripts`. With many sibling tools, the lack of usage context is a notable omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_registered_serversARead-onlyIdempotent
List all registered servers with their SSH credentials and connection status
| Name | Required | Description | Default |
|---|---|---|---|
| active_only | No | Only show active servers (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a safe, read-only operation. The description adds that the tool returns SSH credentials and connection status, which is useful behavioral context beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It effectively communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input schema and annotations, the description provides adequate context for the tool's output. Without an output schema, mentioning SSH credentials and connection status fills the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter with a description and default. The description adds no parameter-specific information, so baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all registered servers and specifies the output includes SSH credentials and connection status. It effectively distinguishes from sibling tools like list_vms or list_available_services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The description only states the action, leaving the agent to infer context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vmsARead-onlyIdempotent
List all VMs/containers on a device
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | Database ID of the target device | |
| platforms | No | Platforms to check (default: ['docker', 'lxd']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's 'List' aligns with expected behavior. The description adds little beyond confirming the read-only nature; it does not disclose potential edge cases (e.g., empty device) or behavior with invalid IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the tool's purpose without any extraneous details. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (device_id required, optional platforms) and annotations confirming safety, the description is sufficient for selecting and invoking the tool. It could mention output format, but it's not critical for a straightforward list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have clear descriptions in the input schema (device_id and platforms with enum). The description does not add additional meaning beyond what the schema provides, so it meets the baseline for 100% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all VMs/containers on a device' clearly specifies the action (list), the resource (VMs/containers), and the scope (on a device). It distinguishes itself from sibling tools like get_vm_status or list_proxmox_resources by focusing specifically on listing VMs/containers per device.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need a list of VMs/containers on a specific device). However, it does not explicitly exclude scenarios or mention alternatives like list_proxmox_resources, leaving some ambiguity for agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_proxmox_vmCIdempotent
Manage a VM or container (start, stop, shutdown, reboot, reset, suspend, resume)
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Proxmox host (optional) | |
| node | Yes | Node name | |
| vmid | Yes | VM or Container ID | |
| action | Yes | Action to perform | |
| vm_type | No | Type: 'qemu' for VM or 'lxc' for container | qemu |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only lists actions and does not disclose behavioral traits beyond what annotations provide. Annotations already indicate idempotency (idempotentHint: true) and non-destructive/non-read-only nature. The description adds no additional insights about side effects, error behavior, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 15 words, front-loading the purpose and listing actions. Every word contributes meaning with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and no output schema, the description fails to explain return behavior, effects of actions, or prerequisites. It lacks completeness for a mutation tool, especially with many sibling tools requiring differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, providing descriptions for all parameters. The description does not add any extra meaning beyond the schema, such as usage tips or ordering. Baseline 3 is appropriate per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages a VM or container and lists the specific actions (start, stop, shutdown, reboot, reset, suspend, resume). However, it does not differentiate from sibling tools like 'control_vm', which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. The description lacks context for prerequisites, when-not to use, or which sibling tools complement or substitute this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_terraform_serviceAIdempotent
Generate a Terraform plan to preview changes without applying them
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to plan | |
| config_override | No | Optional configuration overrides for the service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and non-destructive. The description adds that no changes are applied, which is consistent. No additional behavioral details like state locking or plan size limits are disclosed, but annotations cover the key safety aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence containing the essential information. No filler words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a plan/preview tool with full schema coverage and safety annotations, the description is mostly complete. The only gap is that the output format (e.g., plan text) is not described, but no output schema exists to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema fully describes all parameters. The tool description does not add any extra meaning or context beyond what is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a Terraform plan to preview changes without applying them. The verb 'Generate' and resource 'Terraform plan' are specific, and the phrase 'preview changes without applying them' distinguishes it from apply or destroy tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for previewing changes, but does not explicitly state when to use this tool vs alternatives like deploy_infrastructure or destroy_terraform_service_preview. No exclusion criteria or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_devicesADestructiveIdempotent
Bulk-delete sitemap rows by filter. Single mutually-exclusive filter per call selected by filter_type. Supported filter_types: 'hostname' (exact-match string, no glob/LIKE), 'last_seen_older_than_days' (integer N — rows where last_seen < now - N days, exclusive boundary; N=0 matches all rows older than this instant), 'status' (exact match string like 'error' or 'success'), 'ip_range' (CIDR string like '192.168.1.0/24' or '2001:db8::/32' — rows whose connection_ip is not a valid IP are silently skipped). Composite/ANDed filters are NOT supported (use two calls). Pass dry_run=true to preview the candidate set without deleting. Zero-match returns success with purged_count=0, never an error. Note: filter_type='status', value='error' covers ONLY status='error' rows; use purge_failed_discoveries for the broader failed-discovery filter (includes zombie hostnames). Use remove_device for inventory-only deletion of one row; use purge_devices for bulk filter-based inventory deletion; use decommission_device when host-side cleanup (stop services, remove from clusters) is required before deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Filter value. Shape varies by filter_type: hostname/status -> string, last_seen_older_than_days -> integer, ip_range -> CIDR string. | |
| dry_run | No | If true, return candidates without deleting (default: false). | |
| filter_type | Yes | Filter to apply (exactly one per call). See tool description for per-filter value-shape examples. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only behavior. Description adds critical details: dry_run preview, zero-match behavior returning success with purged_count=0, and silent skipping of invalid IPs for ip_range. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured, starting with purpose and then detailing filter constraints, edge cases, and sibling comparisons. While slightly verbose, every sentence contributes meaningful information. Could be marginally tighter but earns a 4 for clarity and use of white space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains return behavior (dry_run preview, zero-match success). It covers all parameters, filter shapes, boundary conditions, and alternative tools. For a complex multi-filter delete tool, it is comprehensively complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant value beyond schema: explains exact-match requirements for hostname, exclusive boundary for last_seen_older_than_days, CIDR format for ip_range, and the effect of dry_run. Provides concrete examples, making the meaning of each filter_type clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Bulk-delete sitemap rows by filter' with specific verb and resource. It distinguishes itself from siblings like remove_device, decommission_device, and purge_failed_discoveries by explicitly contrasting their use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus alternatives, including direct references to remove_device, decommission_device, and purge_failed_discoveries. Also clarifies that composite filters are not supported and suggests making two separate calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_devices_previewARead-onlyIdempotent
Preview the result of purge_devices without persisting. Returns the candidate set the bulk delete would touch. Read-only — no DB write. Phase 44 D-11.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Filter value. Shape varies by filter_type. | |
| filter_type | Yes | Filter to apply (exactly one per call). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations marking it as read-only and idempotent, the description adds that it returns the candidate set and explicitly states 'Read-only — no DB write', providing additional safety context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the core purpose. Every sentence adds value, including the project context tag 'Phase 44 D-11'. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple preview with full schema coverage and annotations, the description provides enough context about its return value ('candidate set'). The lack of output schema is compensated by the clear purpose. Could mention return format briefly, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full coverage (100%) with descriptions for both parameters. The description adds no extra meaning beyond the schema, which is already sufficient. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a preview of purge_devices, explaining it returns the candidate set without persisting. It distinguishes itself as read-only and non-destructive, differentiating it from the destructive purge_devices sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a preview before running purge_devices. It does not explicitly mention when not to use or compare with alternatives, but the read-only and preview nature is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_failed_discoveriesADestructiveIdempotent
Remove sitemap rows for devices where discovery failed (status='error' or empty/null/'unknown' hostname). Pass dry_run=true to preview the removal candidates without deleting them. (Equivalent to purge_devices with the failed-discovery filter — preserves the 4-clause OR semantics; bare purge_devices(filter_type='status', value='error') matches ONLY status='error' rows, NOT zombie hostnames.) Use remove_device for inventory-only deletion of one row; use purge_devices for bulk filter-based inventory deletion; use decommission_device when host-side cleanup (stop services, remove from clusters) is required before deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, return removal candidates without deleting (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show destructiveHint=true and idempotentHint=true. Description adds that dry_run=true previews without deleting, and explains the 4-clause OR semantics. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet comprehensive: purpose, parameter explanation, sibling differentiation, all in a few sentences. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only one parameter and no output schema, the description fully covers purpose, usage, alternatives, filter semantics, and dry_run behavior. Complete for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter is dry_run with full schema description coverage. Description explains its effect (preview vs delete) and adds context about filter semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Remove sitemap rows for devices where discovery failed', specifying the verb (remove), resource (sitemap rows), and condition. It also distinguishes from sibling tools like `remove_device`, `purge_devices`, and `decommission_device`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool vs alternatives: 'Use `remove_device` for inventory-only deletion of one row; use `purge_devices` for bulk filter-based inventory deletion; use `decommission_device` when host-side cleanup...'. Also clarifies filter semantics differences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_terraform_serviceBIdempotent
Refresh Terraform state and detect configuration drift
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| service_name | Yes | Name of the service to refresh |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and readOnlyHint=false. The description adds context about drift detection but doesn't disclose details like whether state is overwritten, if it affects running services, or what happens on drift found. Adequate with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no fluff. Front-loaded with the action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite moderate complexity (4 params, no output schema), the description lacks behavioral details, preconditions, error handling, or what happens after refresh. Insufficient for an agent to fully understand tool consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers all parameters at 100%. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly uses specific verb 'refresh' and resource 'Terraform state', and adds 'detect configuration drift' which distinguishes it from siblings like 'plan_terraform_service' or 'destroy_terraform_service'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It doesn't mention prerequisites, when to avoid, or how it relates to similar tools like 'plan_terraform_service' or 'scan_infrastructure_drift'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_serverAIdempotent
Verify SSH connectivity to a registered server using keyring credentials. Does not write any credentials — credentials must already be stored via homelab-mcp credentials add <hostname> <username> in the CLI. Returns a status object with verified=true on successful handshake.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | SSH port (default 22) | |
| hostname | Yes | Hostname or IP address of the target server | |
| username | Yes | SSH username to verify; must match a keyring entry | |
| display_name | No | Optional human-readable label |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (idempotentHint, readOnlyHint), it adds that no credentials are written, returns a status object with verified=true on success, and requires prior credential storage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff, front-loaded with the main action. Every sentence is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple verification tool with annotations and full schema, the description covers purpose, return type, and prerequisites. Could mention failure behavior but is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already described. The tool description adds no extra parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it verifies SSH connectivity, specifies the resource (registered server) and credentials source, and explicitly says what it does not do, making it distinct from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (to verify SSH connectivity) and prerequisite (credentials must exist via CLI), but does not explicitly name alternative tools for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_deviceADestructiveIdempotent
Delete a single sitemap row by device_id. Pure SQL DELETE on the sitemap row plus cascade DELETE on discovery_history rows for that device_id. No SSH dial, no Ansible runs, no Terraform plans on the handler call path. The keyring credential entry bound via ssh_credential_id is preserved — only the sitemap row is dropped, so a subsequent discover_and_map can re-bind without re-adding the credential. Pass dry_run=true to preview the would-delete row payload without writing. Use remove_device for inventory-only deletion of one row; use purge_devices for bulk filter-based inventory deletion; use decommission_device when host-side cleanup (stop services, remove from clusters) is required before deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, return the would-delete row payload without writing (default: false). | |
| device_id | Yes | Database ID of the device to remove (look up via get_network_sitemap). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by detailing the exact database operations: 'Pure SQL DELETE on the sitemap row plus cascade DELETE on discovery_history rows.' Also explains what is preserved (keyring credential) and what actions are not performed (no SSH, Ansible, Terraform).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: opening sentence with core action, then technical details, followed by usage guidance and sibling differentiation. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, no output schema, and existing annotations, the description thoroughly covers all relevant aspects: primary function, side effects, preservation of credentials, preview mode, and clear differentiation from sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds value by specifying that device_id can be looked up via get_network_sitemap and that dry_run returns the would-delete row payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the primary action: 'Delete a single sitemap row by device_id.' It also specifies what the tool does not involve (SSH, Ansible, Terraform) and distinguishes from three sibling tools with explicit use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use: 'Use `remove_device` for inventory-only deletion of one row; use `purge_devices` for bulk filter-based inventory deletion; use `decommission_device` when host-side cleanup is required.' Also mentions dry_run for previewing without writing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_device_previewARead-onlyIdempotent
Preview the result of remove_device without persisting. Returns the would-delete row payload. Read-only — no DB write, no keyring touch. Phase 44 D-11.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | Database ID of the device to preview-remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safety; description adds 'Returns the would-delete row payload', 'no DB write, no keyring touch' reinforcing read-only behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences. Front-loaded with purpose. 'Phase 44 D-11' is cryptic but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a preview tool with one param, rich annotations, and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter 'device_id' is fully described in schema. Description adds no additional parameter details, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Preview', resource 'remove_device', and that it returns the would-delete payload. Distinguishes from sibling 'remove_device'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states preview before removal and read-only nature. Implicitly guides when to use, though could mention alternatives more directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_vmCDestructiveIdempotent
Remove a VM/container from a device
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force removal without graceful shutdown | |
| dry_run | No | If true, return a preview of what would be affected without executing any changes. | |
| vm_name | Yes | Name of the VM/container | |
| platform | Yes | VM platform | |
| device_id | Yes | Database ID of the target device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent hints. The description adds no additional behavioral context (e.g., impact of removal, rollback possibilities, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence. It is front-loaded with key information. However, it could include more details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, destructive action, preview sibling) and lack of output schema, the description is insufficient. It omits information about the dry_run option, idempotency, and when to use preview.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are well-documented in the schema. The description adds no extra meaning beyond the generic action. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Remove') and resource ('VM/container from a device'). However, it does not differentiate from sibling tools like 'delete_proxmox_vm' or 'remove_vm_preview', which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. For instance, 'remove_vm_preview' exists but is not mentioned. The description lacks contextual usage hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_vm_previewARead-onlyIdempotent
Preview what remove_vm would affect without executing. Returns a structured dry-run report. No infrastructure is modified.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force removal without graceful shutdown | |
| vm_name | Yes | Name of the VM/container | |
| platform | Yes | VM platform | |
| device_id | Yes | Database ID of the target device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and the description confirms no modification and adds the nature of the output (dry-run report). This aligns with and extends the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each adding essential information. The purpose is front-loaded in the first sentence, and there is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description explains what the tool does and that it's non-destructive, it does not detail the content or format of the dry-run report. With no output schema, more context on the return value would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 4 parameters with descriptions. The tool description does not add parameter-specific guidance beyond what is in the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's a dry-run preview of remove_vm, returns a structured report, and does not modify infrastructure. This perfectly differentiates it from the sibling tool 'remove_vm'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'without executing' and 'No infrastructure is modified,' guiding the agent to use it as a safe preview before removal. It could explicitly mention 'use this instead of remove_vm when you want to preview effects,' but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_infrastructure_changesBDestructiveIdempotent
Rollback recent infrastructure changes
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, return a preview of what would be affected without executing any changes. | |
| backup_id | Yes | Backup ID to rollback to | |
| device_ids | No | Specific device IDs to rollback (for partial/device_specific) | |
| validate_only | No | Only validate rollback plan without executing | |
| rollback_scope | No | Scope of the rollback | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent behavior. Description adds 'recent' but doesn't elaborate on scope or what gets affected. Adequate disclosure but no added context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence, but omits important context. Every word earns its place, but additional details could be added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should explain return value or side effects. It doesn't mention what happens after rollback or that parameters allow preview. Incomplete for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds no parameter-specific meaning; all parameter details are in the schema. No value added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'rollback' and resource 'infrastructure changes'. Distinguishes from preview sibling by name but doesn't explicitly differentiate. Adding 'to a specific backup' would improve clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs the preview sibling or other related tools. Parameters like dry_run and validate_only suggest non-destructive testing, but description doesn't invite using them first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_infrastructure_changes_previewARead-onlyIdempotent
Preview what rollback_infrastructure_changes would affect without executing. Returns a structured dry-run report. No infrastructure is modified.
| Name | Required | Description | Default |
|---|---|---|---|
| backup_id | Yes | Backup ID to rollback to | |
| device_ids | No | Specific device IDs to rollback (for partial/device_specific) | |
| validate_only | No | Only validate rollback plan without executing | |
| rollback_scope | No | Scope of the rollback | full |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds that no infrastructure is modified and returns a structured dry-run report, providing additional context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose and key behavior (dry-run, non-destructive). No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's role as a preview but does not detail the output report structure. Given no output schema, the agent may need more context on the report content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description does not add additional parameter details beyond what the schema provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a preview of rollback_infrastructure_changes without execution, distinguishing it from the sibling tool. The verb 'Preview' and phrase 'without executing' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for dry-run purposes before actual rollback, but lacks explicit guidance on when not to use or alternatives. However, the sibling context and naming provide sufficient clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_ansible_playbookB
Run an existing Ansible playbook for a service
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Ansible tags to run specific tasks | |
| hostname | Yes | Hostname or IP address of the device | |
| password | No | SSH password (not needed for mcp_admin after setup) | |
| username | No | SSH username (use 'mcp_admin' for passwordless access after setup) | mcp_admin |
| check_mode | No | Run in check mode (dry run) | |
| extra_vars | No | Extra variables to pass to the playbook | |
| service_name | Yes | Name of the service playbook to run |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only, not destructive, and not idempotent, covering basic safety. The description does not add further behavioral context (e.g., execution time, error handling, or confirmation need). It is adequate but not enhanced 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no redundancy. However, it could be slightly expanded to include key usage constraints without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, nested objects, no output schema, important behavioral traits), the description is too brief. It does not explain return values, error handling, or the meaning of 'existing' playbook, leaving significant gaps for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 7 parameters. The tool description itself adds no additional meaning to the parameters beyond what the schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Run an existing Ansible playbook for a service' clearly states the action (run) and resource (existing Ansible playbook for a service). It is distinct from sibling tools like 'check_ansible_service' (checking status) or 'deploy_infrastructure' (more general). However, it could be more specific about what 'for a service' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 siblings such as 'check_ansible_service' or 'deploy_infrastructure'. There is no mention of prerequisites, alternatives, or context in which this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scale_servicesB
Scale services up or down based on resource analysis
| Name | Required | Description | Default |
|---|---|---|---|
| scaling_plan | Yes | Service scaling plan | |
| validate_only | No | Only validate scaling plan without executing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutation (readOnlyHint=false) and non-destructive behavior. The description adds no further behavioral context such as execution details, side effects, or reversibility, thus adding minimal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant information, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite good parameter schema coverage, the description lacks information about return values, execution flow, or what happens after scaling. The presence of nested objects and a validation-only option are not mentioned, leaving the agent underinformed about the tool's full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and provides descriptions for both parameters. The tool description does not elaborate on parameter meanings beyond what the schema already offers, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs 'scale up or down' and identifies the resource 'services' with a condition 'based on resource analysis', clearly distinguishing it from sibling tools that handle VMs, deployments, or network topology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after resource analysis, but does not explicitly state when to use this tool over alternatives like 'check_service_requirements' or 'install_service', nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_infrastructure_driftARead-onlyIdempotent
Scan for infrastructure drift against the sitemap. Returns a four-bucket coverage report — probed_ok (sitemap host probed successfully), unreachable (sitemap host that did not respond), unknown (reserved for Phase 39 — infrastructure present on a Proxmox hypervisor but absent from sitemap), and changed (reserved for Phase 39 — fingerprint differs from stored). All four buckets are always present in the response (empty arrays for Phase-39-reserved buckets) so client code can iterate without defensive checks. Each scan also returns a counts sub-dict mirroring bucket sizes and, when zero hosts were scanned (empty sitemap or filter narrowed to zero), a top-level guidance field pointing to the sitemap CRUD tools (discover_and_map, get_network_sitemap, purge_failed_discoveries, decommission_device). Recovery from credential-resolution failure is handled via 'homelab-mcp credentials add --type proxmox'.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Optional sitemap hostname filter. Exact-match only — no wildcards, no case folding. When omitted, all sitemap rows are scanned. When set to a hostname that does not match any sitemap row, the scan returns status='success' with all four buckets empty and a guidance field — never an error. | |
| vm_type | No | Reserved for Phase 39 per-VM detection; currently filters at host level only (no-op until per-VM enumeration ships). Accepts qemu, lxc, or all — all three values produce identical scan results in this release. | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: always returns four buckets, counts sub-dict, guidance field when zero hosts scanned, and behavior when node not found. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient. Each sentence adds value: main purpose, bucket details, edge-case handling, and recovery instructions. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description thoroughly explains return format (four buckets, counts, guidance). It covers parameter behavior, edge cases, and recovery, making it self-sufficient for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema: node filter is exact-match only, vm_type is reserved and currently no-op. Schema coverage is 100%, but the description provides critical runtime behavior details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans for infrastructure drift against the sitemap and explains the four-bucket coverage report. It distinguishes from siblings by naming alternative sitemap CRUD tools in the guidance section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to scan for drift) and includes guidance on recovery from credential failure. However, it does not explicitly state when not to use it or compare directly to siblings beyond the zero-hosts scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_proxmox_scriptsARead-onlyIdempotent
Search Proxmox community installation scripts from the community-scripts/ProxmoxVE repository
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (matches script name, e.g. 'home assistant', 'docker', 'pihole') | |
| category | No | Optional category filter: 'ct' (containers), 'vm' (virtual machines), 'install' (utilities), 'misc' | |
| include_metadata | No | If true, fetch and parse script metadata (CPU, RAM, disk requirements, tags). Slower but more detailed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds no behavioral details beyond 'search', which is adequate but does not provide extra context like rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the tool's purpose without superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description does not specify what the tool returns (e.g., list of script names with or without metadata). This leaves the agent guessing about the return format, which is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (three parameters all have descriptions). The description adds no additional meaning beyond what the schema already provides, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search Proxmox community installation scripts' and specifies the repository source. It uses a specific verb and resource, distinguishing it from sibling tools like get_proxmox_script_info and control_vm.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While no explicit when-not or alternatives are mentioned, the description implies usage for finding scripts, and no sibling tool performs a similar search, making the context clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ssh_discoverARead-onlyIdempotent
SSH into a system and gather hardware/system information. If credentials were stored with credentials add, username and password are auto-injected from the keyring — omit them. If authentication fails with 'No credentials found', run homelab-mcp credentials add <hostname> <username> in the terminal or call list_keyring_credentials to see what is already stored. Recommended follow-up after onboarding: run the configure_host_fingerprint prompt to capture per-host capability signals for drift detection.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | SSH port (default: 22) | |
| hostname | Yes | Hostname or IP address | |
| key_path | No | Path to SSH private key | |
| password | No | SSH password. Omit if credentials were stored with `credentials add` — they are auto-injected. | |
| username | No | SSH username. Omit if credentials were stored with `credentials add` — they are auto-injected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a read-only, idempotent, non-destructive operation. The description confirms this and adds transparency about credential auto-injection and authentication failure handling, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences), front-loaded with purpose, and every sentence adds value. No redundant or unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema exists, the description explains the tool's purpose (gathering hardware/system info) and error recovery. It is sufficient for an information-gathering tool, though it could mention what specific info is gathered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters with descriptions (100% coverage). The description adds essential usage guidance for username and password (omit if stored), which is critical for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (SSH into) and the resource (system, hardware/system information). It distinguishes from sibling tools like ssh_execute_command and start_interactive_shell by focusing on gathering information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context on when to use (onboarding, after credentials stored), when to omit parameters, and error recovery steps (run credentials add or list_keyring_credentials). It also recommends a follow-up prompt for drift detection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ssh_execute_commandA
Execute a command on a remote system via SSH. If credentials were stored with credentials add, username and password are auto-injected from the keyring — omit them. If authentication fails with 'No credentials found', run homelab-mcp credentials add <hostname> <username> in the terminal or call list_keyring_credentials to see what is already stored.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | SSH port (default: 22) | |
| sudo | No | Execute command with sudo privileges | |
| command | Yes | Command to execute on the remote system | |
| hostname | Yes | Hostname or IP address | |
| password | No | SSH password. Omit if credentials were stored with `credentials add` — they are auto-injected. | |
| username | No | SSH username. Omit if credentials were stored with `credentials add` — they are auto-injected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set destructiveHint=false and readOnlyHint=false, but the description explains auto-injection of credentials and a recovery path for missing credentials. However, it does not disclose that arbitrary commands could be destructive, which is a notable omission given the openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each adding essential information: purpose, credential handling, and failure recovery. No redundant or unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description should clarify expected output (e.g., stdout/stderr/exit code). While annotations provide some context, the description omits what the agent should expect as a result of execution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the auto-injection behavior for username/password and tying it to the keyring workflow, which goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a command on a remote system via SSH, which is a specific verb-resource combination. It distinguishes itself from sibling tools like ssh_discover and start_interactive_shell by focusing on command execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to omit username/password (if stored in keyring) and what to do if authentication fails ('run `homelab-mcp credentials add`' or call `list_keyring_credentials`). It does not, however, compare directly to alternatives like start_interactive_shell, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_interactive_shellA
Start an interactive web-based shell session on a remote system. Opens a browser-based terminal with full TTY support for running interactive commands and scripts. Perfect for Proxmox community scripts or any interactive command-line tools. Requires HTTP server mode (--http flag). In stdio mode, this tool returns an error with setup instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | SSH port (default: 22) | |
| hostname | Yes | Hostname or IP address of the target system | |
| password | No | SSH password (optional, uses SSH keys if available) | |
| username | No | SSH username (optional, uses registered credentials if available) | |
| initial_command | No | Optional command to run automatically when shell starts (e.g., Proxmox script install command) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, destructive=false, idempotent=false, openWorld=true. The description adds value by disclosing the mode requirement (HTTP mode) and that it opens a browser-based terminal. It does not mention session lifecycle or cleanup, but given annotations, the information is sufficient and consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each adding distinct value: purpose, capability, example use, and requirement. No redundant or vague statements. Information is front-loaded with the core action in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that starts an interactive session, the description covers what it does, prerequisites (HTTP mode), and example usage. Since there is no output schema, it does not explain return values, but the interactive nature makes output implicit. Minor gap: no mention of session termination or how to access the shell. However, overall it is sufficiently complete given the tool's nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions. The description enhances by providing examples for initial_command (e.g., Proxmox install command) and clarifying optional credential usage (registered credentials or SSH keys). This adds practical meaning beyond schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts an interactive web-based shell session on a remote system. It specifies the browser-based terminal with full TTY support and gives example use cases like Proxmox community scripts. This effectively distinguishes it from sibling tools such as ssh_execute_command (non-interactive) and run_ansible_playbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires HTTP server mode and explains that stdio mode returns an error with setup instructions. While it does not explicitly list alternatives or when to avoid this tool, the context of interactive scripting vs. single commands is clear, and the sibling list provides implicit contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_deploymentsBRead-onlyIdempotent
Suggest optimal deployment locations based on current network topology and device capabilities
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the tool is clearly a safe, non-mutating suggestion. The description adds little beyond the annotations, merely specifying the input context. With strong annotations, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence of 14 words. It is concise, front-loaded with the verb and resource, and every word adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately states the tool's purpose and basis, but given zero parameters and no output schema, it leaves ambiguity about what 'suggest' entails (e.g., return format, how optimal is determined). The large sibling set suggests a need for clearer differentiation, which is missing. A score of 3 reflects acceptable but incomplete guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100%, so the description does not need to explain parameters. No additional parameter info is required, earning a baseline score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'suggest' on the resource 'deployment locations' and mentions the basis ('current network topology and device capabilities'), making the purpose clear. However, it lacks specificity about what 'optimal' means and what the output format is, preventing a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'analyze_network_topology' or 'deploy_infrastructure'. No explicit context, exclusions, or when-not conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_device_configA
Update configuration of an existing device
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | Database ID of the device to update | |
| validate_only | No | Only validate changes without applying | |
| config_changes | Yes | Configuration changes to apply | |
| backup_before_change | No | Create backup before applying changes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only, not destructive, and not idempotent. The description merely repeats 'Update', adding no behavioral context (e.g., whether it restarts services or requires downtime). With annotations present, the description does not provide additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of only 5 words, conveying the core action efficiently. No superfluous text; every word is essential. While minimal, it is appropriately concise for a tool with detailed schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested config objects, multiple options like backup and validation) and lack of output schema, the description is insufficiently complete. It does not explain return values, sequencing, or effects of parameters like 'backup_before_change' or 'validate_only'. The schema partially compensates, but the description should provide workflow context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all parameters with 100% coverage. The description adds no parameter-level meaning beyond what the schema already provides, so it meets the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Update configuration') and the resource ('an existing device'). It distinguishes from sibling tools like 'update_device_fingerprint' which update different aspects. The verb and resource are precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., 'deploy_infrastructure' or 'install_service' for broader changes). There is no mention of prerequisites, limitations, or context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_device_fingerprintAIdempotent
Merge fingerprint data (kernel, OS, package digest, capabilities) into a device's sitemap row. Top-level keys overwrite (last-write-wins). The capabilities sub-dict updates one level deep — each incoming top-level capability key REPLACES its stored entry entirely (NOT a recursive merge); stored capability keys not present in the call are preserved. Callers updating any field within a capability must pass the full capability dict. Run discover_and_map first to populate the device. See the configure_host_fingerprint prompt for the conversational workflow. Persists to DB and bumps updated_at; last_seen is preserved (Phase 38 REVIEW-FIX WR-03).
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname of the device to fingerprint | |
| fingerprint | Yes | Fingerprint dict. Recognized top-level keys: kernel_name, kernel_version, os_name, os_version, package_fingerprint, capabilities. Unknown top-level keys are dropped server-side. capabilities is a freeform sub-dict. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the merge strategy (top-level overwrite, capabilities subdict updates one level deep, non-recursive), persistence to DB, updated_at bump, last_seen preservation, and that unknown top-level keys are dropped. This adds significant detail beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: first sentence states purpose, then details merge behavior in a logical order. Every sentence adds value, with no redundant or unclear wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is thorough for a complex tool with nested objects and merge semantics, covering behavior, prerequisites, and side effects. However, it does not describe the return value (e.g., success message or updated device status), which is a minor gap given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% description coverage, and the description adds critical behavioral details: top-level keys overwrite last-write-wins, capabilities subdict updates are not recursive, and unknown top-level keys are dropped. This clarifies the semantics of the fingerprint parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool merges fingerprint data (kernel, OS, package digest, capabilities) into a device's sitemap row. It specifies the merge behavior for top-level keys and capabilities subdict, and distinguishes from the sibling update_device_fingerprint_preview by implying this is the actual update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: 'Run discover_and_map first to populate the device' and 'See the configure_host_fingerprint prompt for the conversational workflow.' It tells when to use the tool but does not explicitly state when not to use it or provide alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_device_fingerprint_previewARead-onlyIdempotent
Preview the merge result of update_device_fingerprint without persisting. Returns the would-be merged fingerprint dict using the same merge rules: top-level overwrite + capabilities one-level overwrite (incoming capability keys replace stored entries entirely; not recursive). Read-only — no DB write, no last_seen or updated_at mutation. Phase 38 D-05c.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname of the device to preview-fingerprint | |
| fingerprint | Yes | Same shape as update_device_fingerprint.fingerprint. Recognized top-level keys: kernel_name, kernel_version, os_name, os_version, package_fingerprint, capabilities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explicitly states read-only, no DB write, no last_seen or updated_at mutation, aligning with annotations. It adds value beyond annotations by detailing merge rules (top-level overwrite, capabilities one-level overwrite) and idempotency implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph but packs essential information: purpose, merge rules, read-only nature, and phase reference. Slightly front-loaded but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two params, clear behavior), the description covers merge behavior and read-only guarantee. No output schema but description hints at return type. Annotations complement well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides full coverage with descriptions for both parameters. Description adds minimal extra semantics (e.g., shape of fingerprint referencing update_device_fingerprint). Baseline adjusted for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and description clearly state this is a preview of updating device fingerprint without persistence. It distinguishes itself from the sibling update_device_fingerprint by explicitly mentioning 'Preview' and 'without persisting', and specifies merge rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (to preview merge result before committing) and that it is read-only. It does not explicitly contrast with other preview tools, but the context is clear enough for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_infrastructure_changesARead-onlyIdempotent
Validate infrastructure changes before applying them
| Name | Required | Description | Default |
|---|---|---|---|
| change_plan | Yes | Infrastructure change plan to validate | |
| validation_level | No | Level of validation to perform | comprehensive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, which are consistent with the description. The description adds no additional behavioral traits beyond the annotations, so no contradiction but no extra value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded. While efficient, it could benefit from slightly more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite good annotations and schema, the description lacks details on validation behavior, return values (no output schema), and edge cases. For a tool with nested objects and enums, it is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so both parameters are already documented. The description does not add any meaning beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates infrastructure changes before application, specifying the verb 'validate' and resource 'infrastructure changes'. This distinguishes it from sibling tools like deploy_infrastructure and rollback_infrastructure_changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a pre-deployment usage but lacks explicit guidance on when to use or not use this tool versus alternatives. No mention of scenarios or exclusions, leaving the agent to infer context.
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. Dates show when Glama detected each change.
41 tool updates
v1.7.0- Changed
bulk_discover_and_map3 fields changed- removed
Input schema / properties / targets / items / properties / passwordRemoved value: -{ - "type": "string" -} - changed
Input schema / properties / targets / items / requiredPrevious value: -[ - "hostname", - "username" -]New value: +[ + "hostname" +] - added
Input schema / properties / targets / minItemsAdded value: +1
- Changed
check_ansible_service1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Changed
check_service_requirements1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Changed
create_proxmox_lxc3 fields changed- added
Input schema / properties / ssh_public_keysAdded value: +{ + "description": "SSH public keys to add to the container (one per line)", + "type": "string" +} - added
Input schema / properties / swapAdded value: +{ + "default": 512, + "description": "Swap size in MB", + "type": "integer" +} - added
Input schema / properties / unprivilegedAdded value: +{ + "default": true, + "description": "Create as unprivileged container (default: true, recommended for security)", + "type": "boolean" +}
- Changed
create_proxmox_vm6 fields changed- added
Input schema / properties / cdromAdded value: +{ + "description": "CD-ROM device (e.g., 'local:iso/debian-12.iso'). Alternative to iso — use one or the other.", + "type": "string" +} - changed
Input schema / properties / host / descriptionPrevious value: -"Proxmox host (optional)"New value: +"Proxmox host. Any node hostname covered by your registered credential (per-node) or cluster-scope token. Register with `homelab-mcp credentials add --type proxmox <host> <username>`, or `... --scope cluster:<name> <token_id>` for cluster tokens." - added
Input schema / properties / net0Added value: +{ + "default": "virtio,bridge=vmbr0", + "description": "Network device configuration (default: 'virtio,bridge=vmbr0')", + "type": "string" +} - added
Input schema / properties / ostypeAdded value: +{ + "default": "l26", + "description": "OS type for optimization (default: 'l26' for Linux 2.6+)", + "type": "string" +} - added
Input schema / properties / socketsAdded value: +{ + "default": 1, + "description": "Number of CPU sockets", + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "node", - "vmid", - "name" -]New value: +[ + "node", + "vmid", + "name", + "host" +]
- Changed
decommission_device1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If true, return a preview of what would be affected without executing any changes.", + "type": "boolean" +}
- Added
decommission_device_preview - Changed
delete_proxmox_vm1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If true, return a preview of what would be affected without executing any changes.", + "type": "boolean" +}
- Added
delete_proxmox_vm_preview - Changed
destroy_terraform_service2 fields changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If true, return a preview of what would be affected without executing any changes.", + "type": "boolean" +} - removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Added
destroy_terraform_service_preview - Changed
discover_and_map3 fields changed- removed
Input schema / properties / passwordRemoved value: -{ - "description": "SSH password (not needed for mcp_admin after setup)", - "type": "string" -} - changed
Input schema / properties / username / descriptionPrevious value: -"SSH username (use 'mcp_admin' for passwordless access after setup)"New value: +"SSH username. Omit if credentials were stored with `credentials add` — they are auto-injected." - changed
Input schema / requiredPrevious value: -[ - "hostname", - "username" -]New value: +[ + "hostname" +]
- Changed
get_proxmox_node_status1 field changed- changed
Input schema / properties / host / descriptionPrevious value: -"Proxmox host (optional, uses PROXMOX_HOST env var)"New value: +"Proxmox host. Register via `homelab-mcp credentials add --type proxmox <host> <username>` (per-node) or `... --scope cluster:<name> <token_id>` (cluster scope)."
- Changed
get_proxmox_vm_status1 field changed- changed
Input schema / properties / host / descriptionPrevious value: -"Proxmox host (optional)"New value: +"Proxmox host. Register via `homelab-mcp credentials add --type proxmox <host> <username>` (per-node) or `... --scope cluster:<name> <token_id>` (cluster scope)."
- Changed
get_service_status1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Changed
install_service1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Added
list_keyring_credentials - Changed
list_proxmox_resources2 fields changed- changed
Input schema / properties / host / descriptionPrevious value: -"Proxmox host (optional, uses PROXMOX_HOST env var if not provided)"New value: +"Proxmox host. Register via `homelab-mcp credentials add --type proxmox <host> <username>` (per-node) or `... --scope cluster:<name> <token_id>` (cluster scope)." - changed
Input schema / properties / resource_type / enumPrevious value: -[ - "vm", - "lxc", - "node", - "storage", - "pool" -]New value: +[ + "qemu", + "lxc", + "node", + "storage", + "pool" +]
- Changed
plan_terraform_service1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Added
purge_devices - Added
purge_devices_preview - Added
purge_failed_discoveries - Changed
refresh_terraform_service1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Changed
register_server8 fields changed- changed
Input schema / properties / display_name / descriptionPrevious value: -"Friendly name for the server (optional)"New value: +"Optional human-readable label" - changed
Input schema / properties / hostname / descriptionPrevious value: -"Hostname or IP address of the server"New value: +"Hostname or IP address of the target server" - removed
Input schema / properties / key_pathRemoved value: -{ - "description": "Path to SSH private key (optional, uses default MCP key if not provided)", - "type": "string" -} - changed
Input schema / properties / port / descriptionPrevious value: -"SSH port (default: 22)"New value: +"SSH port (default 22)" - removed
Input schema / properties / username / defaultRemoved value: -"mcp_admin" - changed
Input schema / properties / username / descriptionPrevious value: -"SSH username (default: mcp_admin)"New value: +"SSH username to verify; must match a keyring entry" - removed
Input schema / properties / verify_connectionRemoved value: -{ - "default": true, - "description": "Whether to verify SSH connection before saving (default: true)", - "type": "boolean" -} - changed
Input schema / requiredPrevious value: -[ - "hostname" -]New value: +[ + "hostname", + "username" +]
- Added
remove_device - Added
remove_device_preview - Removed
remove_server - Changed
remove_vm1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If true, return a preview of what would be affected without executing any changes.", + "type": "boolean" +}
- Added
remove_vm_preview - Changed
rollback_infrastructure_changes1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "If true, return a preview of what would be affected without executing any changes.", + "type": "boolean" +}
- Added
rollback_infrastructure_changes_preview - Changed
run_ansible_playbook1 field changed- removed
Input schema / properties / portRemoved value: -{ - "default": 22, - "description": "SSH port (default: 22)", - "type": "integer" -}
- Added
scan_infrastructure_drift - Removed
setup_mcp_admin - Changed
ssh_discover3 fields changed- changed
Input schema / properties / password / descriptionPrevious value: -"SSH password (not needed for mcp_admin after setup)"New value: +"SSH password. Omit if credentials were stored with `credentials add` — they are auto-injected." - changed
Input schema / properties / username / descriptionPrevious value: -"SSH username (use 'mcp_admin' for passwordless access after setup)"New value: +"SSH username. Omit if credentials were stored with `credentials add` — they are auto-injected." - changed
Input schema / requiredPrevious value: -[ - "hostname", - "username" -]New value: +[ + "hostname" +]
- Changed
ssh_execute_command3 fields changed- changed
Input schema / properties / password / descriptionPrevious value: -"SSH password (not needed for mcp_admin after setup)"New value: +"SSH password. Omit if credentials were stored with `credentials add` — they are auto-injected." - changed
Input schema / properties / username / descriptionPrevious value: -"SSH username (use 'mcp_admin' for passwordless access after setup)"New value: +"SSH username. Omit if credentials were stored with `credentials add` — they are auto-injected." - changed
Input schema / requiredPrevious value: -[ - "hostname", - "username", - "command" -]New value: +[ + "hostname", + "command" +]
- Added
update_device_fingerprint - Added
update_device_fingerprint_preview - Removed
update_mcp_admin_groups - Removed
update_server_credentials - Removed
verify_mcp_admin
49 tool updates
v0.2.0- First observed
analyze_network_topology - First observed
bulk_discover_and_map - First observed
check_ansible_service - First observed
check_service_requirements - First observed
clone_proxmox_vm - First observed
control_vm - First observed
create_infrastructure_backup - First observed
create_proxmox_lxc - First observed
create_proxmox_vm - First observed
decommission_device - First observed
delete_proxmox_vm - First observed
deploy_infrastructure - First observed
deploy_vm - First observed
destroy_terraform_service - First observed
discover_and_map - First observed
get_device_changes - First observed
get_network_sitemap - First observed
get_proxmox_node_status - First observed
get_proxmox_script_info - First observed
get_proxmox_vm_status - First observed
get_service_info - First observed
get_service_status - First observed
get_vm_logs - First observed
get_vm_status - First observed
install_service - First observed
list_available_services - First observed
list_proxmox_resources - First observed
list_registered_servers - First observed
list_vms - First observed
manage_proxmox_vm - First observed
plan_terraform_service - First observed
refresh_terraform_service - First observed
register_server - First observed
remove_server - First observed
remove_vm - First observed
rollback_infrastructure_changes - First observed
run_ansible_playbook - First observed
scale_services - First observed
search_proxmox_scripts - First observed
setup_mcp_admin - First observed
ssh_discover - First observed
ssh_execute_command - First observed
start_interactive_shell - First observed
suggest_deployments - First observed
update_device_config - First observed
update_mcp_admin_groups - First observed
update_server_credentials - First observed
validate_infrastructure_changes - First observed
verify_mcp_admin
TDQS
While most tools target distinct actions, the abundance of deletion/removal variants (remove_device, purge_devices, decommission_device, etc.) and overlapping VM management tools create ambiguity. Agents may struggle to differentiate between subtly different tools like decommission_device and purge_failed_discoveries.
Tool names follow a consistent verb_noun pattern with snake_case (e.g., create_proxmox_vm, get_network_sitemap). Preview tools append '_preview' uniformly. Minor deviations like start_interactive_shell are clear but break the pattern slightly.
At 58 tools, the count is high for a single server. The broad scope (network discovery, Proxmox, services, Terraform) justifies many tools, but some could be consolidated (e.g., multiple deletion methods). The set feels slightly heavy but not extreme.
The tool set covers major lifecycle stages (create, read, update, delete, preview) across multiple domains. Notable gaps include lack of a direct sitemap update tool and limited service management beyond installation. However, the presence of preview tools for dangerous operations strengthens completeness.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Your AI Agent's Infrastructure Layer. Connect Claude, Copilot, Codex, or ChatGPT to 200+ managed open source services. Start databases, pipelines, and applications through natural language.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables management of homelab infrastructure, including Docker/Podman containers, Ollama AI models, Pi-hole DNS, Unifi networks, and Ansible inventory, with built-in security checks and automated pre-push validation.1MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to manage remote servers via SSH with agentless command execution, file operations, and service management.9MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Proxmox VE infrastructure, including VMs, containers, storage, and cluster operations via natural language.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI assistants real-time access to your homelab infrastructure. It enables querying node status, managing Docker containers, controlling Proxmox VMs, and inspecting OPNsense firewall state through natural conversation.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/washyu/homelab_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server