mcp-ssh
Manage Docker containers on remote hosts: view, start, stop, restart containers, and check resource usage.
Execute Git commands like git pull on remote servers for deployment and version control.
Inspect Kubernetes cluster nodes and host resource usage for container orchestration.
Comprehensive remote Linux server management including system monitoring, process management, file operations, and diagnostics.
Manage MySQL service: start, stop, restart, check status, and perform database operations via commands.
Manage NGINX web server: restart, reload, check status, and edit configuration files.
Manage Redis service: start, stop, restart, and check status.
Click on "Deploy 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., "@mcp-sshcheck system status and show CPU, memory, and disk usage"
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.
SSH MCP Server
基于 Model Context Protocol (MCP) 的远程 Linux/Unix 服务器管理服务,让 AI 助手通过自然语言即可完成服务器运维、诊断、文件操作等全套任务。
English | 中文
目录
Related MCP server: mcp-ssh-multi
功能概览
功能模块 | 说明 |
连接管理 | 多主机配置、连接测试、自动重连 |
命令执行 | 执行单条命令或多行脚本,支持任意 Shell 解释器 |
系统信息 | CPU、内存、磁盘、网络、系统日志一键采集 |
服务管理 | systemd 服务的启停、重启、状态查看 |
进程管理 | 进程列表、搜索、终止信号发送 |
文件操作 | 读写、追加、列目录、搜索、正则内容匹配 |
文件传输 | SFTP 上传/下载、元信息查询 |
系统诊断 | 磁盘健康、高负载分析、网络连通性、安全审计、日志分析 |
应用场景
日常运维
一句话查服务器状态:「帮我看一下服务器现在的系统情况」,AI 立即返回 CPU、内存、磁盘、负载汇总。
服务快速管理:「重启 nginx」、「查看 mysql 服务状态」、「把 redis 设为开机自启」。
批量服务器巡检:配置多台主机,逐一采集系统信息生成巡检报告。
故障排查
高负载排查:「服务器 CPU 跑满了,帮我看看是什么进程」,AI 自动分析 top 进程并给出建议。
OOM 内存溢出排查:查看 dmesg OOM 事件、内存占用最高进程,快速定位问题。
磁盘爆满告警:「磁盘快满了」,AI 检查各分区使用率、inode 占用并找出大文件。
网络异常诊断:测试出站连通性、DNS 解析、路由表,定位网络层问题。
日志快速分析:「分析一下 /var/log/app.log 的错误」,AI 统计 ERROR/WARN/CRITICAL 数量并给出近期错误样本。
安全审计
登录异常检测:统计 SSH 暴力破解失败次数,查看近期登录记录。
端口安全扫描:列出所有监听端口及关联进程,发现可疑开放端口。
SUID 文件检查:扫描系统中 SUID 提权文件,识别潜在安全风险。
世界可写文件:检查 /tmp、/var/tmp 等目录中的高危权限文件。
文件与配置管理
远程配置热改:直接读取并修改
/etc/nginx/nginx.conf、/etc/hosts等配置文件,无需手动 SSH 登录。日志实时查尾:「看一下 nginx 最近 100 行错误日志」,即时返回结果。
配置文件批量下发:将本地修改好的配置文件通过 SFTP 上传到多台服务器。
跨服务器文件同步:下载远程文件到本地后,再上传到其他服务器。
自动化脚本执行
执行复杂运维脚本:发送多行 Bash/Python 脚本到远程服务器执行,支持任意 Shell 解释器。
数据库备份:在远端执行
mysqldump/pg_dump并将备份文件下载到本地。定时任务检查:查看 crontab 配置,确认定时任务是否正确配置并运行。
应用部署辅助:远程
git pull、重建容器、重启服务,完成一键部署流程。
多环境管理
开发/测试/生产环境并行管理:通过
SSH_HOSTS_JSON配置多台服务器,按名称切换,一次会话管理所有环境。容器宿主机管理:查看 Docker/Kubernetes 宿主机的资源使用,辅助容器调度决策。
云服务器集群巡检:批量连接 ECS/EC2 实例,汇总各节点状态。
环境要求
Python 3.10+
uv(推荐)或 pip目标服务器:Linux / Unix(支持 systemd 的发行版效果最佳)
安装方式
方式一:uvx 直接运行(无需安装)
uvx ssh-mcp-zlzero --host 192.168.1.100 --username admin --key-file ~/.ssh/id_rsa方式二:pip 安装
pip install ssh-mcp-zlzero
ssh-mcp-zlzero --host 192.168.1.100 --username admin --key-file ~/.ssh/id_rsa方式三:源码安装(开发调试)
git clone https://github.com/zhouxiangjing/mcp-ssh.git
cd mcp-ssh
uv pip install -e ".[dev]"配置说明
环境变量
变量名 | 默认值 | 说明 |
|
| 远程主机 IP 或域名 |
|
| SSH 端口 |
|
| SSH 用户名 |
| — | 密码(使用密钥认证时可省略) |
| — | 私钥路径,如 |
| — | 加密私钥的口令 |
|
| 连接超时秒数 |
|
| 跳过主机密钥校验(生产环境不推荐) |
|
| 自定义 known_hosts 路径 |
| — | 多主机 JSON 配置(见下方) |
|
| 日志级别: |
将 .env.example 复制为 .env 并填写配置,服务器启动时会自动加载。
CLI 参数
所有环境变量均可通过 CLI 参数覆盖:
ssh-mcp-zlzero \
--host 192.168.1.100 \
--port 22 \
--username admin \
--key-file ~/.ssh/id_rsa \
--timeout 60运行 ssh-mcp-zlzero --help 查看完整参数列表。
多主机配置
通过 SSH_HOSTS_JSON 管理多台服务器,工具调用时传入 host_name 参数即可切换目标主机,省略时使用默认主机:
export SSH_HOSTS_JSON='[
{"name": "web", "host": "10.0.0.1", "port": 22, "username": "admin", "key_file": "~/.ssh/web_key"},
{"name": "db", "host": "10.0.0.2", "port": 22, "username": "root", "password": "secret"},
{"name": "edge", "host": "10.0.0.3", "port": 2222, "username": "ops", "key_file": "~/.ssh/edge_key"},
{"name": "dev", "host": "10.0.0.4", "port": 22, "username": "dev", "key_file": "~/.ssh/id_rsa"},
{"name": "prod", "host": "10.0.0.5", "port": 22, "username": "admin", "key_file": "~/.ssh/prod_key"}
]'MCP 客户端接入
Claude Desktop
在 claude_desktop_config.json 中添加:
{
"mcpServers": {
"ssh": {
"command": "uvx",
"args": ["ssh-mcp-zlzero"],
"env": {
"SSH_HOST": "192.168.1.100",
"SSH_USERNAME": "admin",
"SSH_KEY_FILE": "~/.ssh/id_rsa"
}
}
}
}Cursor / 其他 MCP 客户端
{
"mcpServers": {
"ssh": {
"command": "uvx",
"args": ["ssh-mcp-zlzero"],
"env": {
"SSH_HOST": "your-server-ip",
"SSH_USERNAME": "your-username",
"SSH_KEY_FILE": "~/.ssh/id_rsa"
}
}
}
}DeepV Code
在 ~/.deepv/settings.json 的 mcpServers 中添加:
{
"ssh": {
"command": "uvx",
"args": ["--from", "ssh-mcp-zlzero", "ssh-mcp-zlzero"],
"env": {
"SSH_HOST": "your-server-ip",
"SSH_USERNAME": "your-username",
"SSH_PASSWORD": "your-password",
"SSH_IGNORE_KNOWN_HOSTS": "true"
}
}
}多主机示例(生产/测试/开发环境并行):
{
"ssh": {
"command": "uvx",
"args": ["--from", "ssh-mcp-zlzero", "ssh-mcp-zlzero"],
"env": {
"SSH_HOSTS_JSON": "[{\"name\":\"prod\",\"host\":\"10.0.0.1\",\"username\":\"admin\",\"key_file\":\"~/.ssh/prod_key\"},{\"name\":\"dev\",\"host\":\"10.0.0.2\",\"username\":\"dev\",\"key_file\":\"~/.ssh/id_rsa\"}]"
}
}
}工具列表
连接管理
工具 | 说明 |
| 验证 SSH 连接,返回主机名、当前用户、系统负载 |
| 列出 |
| 关闭指定主机的 SSH 连接(下次调用自动重连) |
| 关闭所有活跃的 SSH 连接 |
命令执行
工具 | 说明 |
| 执行单条 Shell 命令,返回 stdout/stderr 及退出码 |
| 执行多行脚本,支持 |
系统信息
工具 | 说明 |
| 一键采集主机名、OS、内核、负载、CPU、内存、磁盘、网络接口 |
| CPU 实时负载、各核使用率、top CPU 进程 |
| 内存与 Swap 使用详情(free/used/cached/available) |
| 各分区磁盘使用率、inode 占用、I/O 统计 |
| 网络接口详情、路由表、活跃连接列表 |
| 读取 journald / syslog 日志,支持按服务过滤 |
| 查看 systemd 服务状态(active/inactive/failed) |
| 启动/停止/重启/重载/启用/禁用 systemd 服务 |
进程管理
工具 | 参数说明 |
| 按 CPU / 内存 / PID 排序列出进程,默认显示 20 条 |
| 按名称或关键字搜索进程,返回 PID 及详情 |
| 向指定 PID 发送信号: |
| 列出所有 TCP/UDP 监听端口及关联进程 |
文件操作
工具 | 说明 |
| 读取远程文件内容,支持 |
| 覆盖写入远程文件,自动创建父目录 |
| 追加内容到远程文件末尾 |
| 列出远程目录(等价于 |
| 删除文件或目录, |
| 按文件名模式在目录树中搜索,支持 |
| 在远程文件中正则搜索,支持递归、忽略大小写、上下文行数 |
SFTP 文件传输
工具 | 说明 |
| 将本地文件通过 SFTP 上传到远程服务器,返回传输字节数 |
| 将远程文件下载到本地,自动创建本地目录 |
| 查询远程文件元信息:大小、权限、UID/GID、修改时间 |
系统诊断
工具 | 说明 |
| 检查内核磁盘错误日志、失败的 systemd 单元、inode 超 80% 的分区 |
| 分析高负载原因:top CPU/内存进程、OOM 事件记录 |
| 从远程服务器出发测试 ping 和 DNS 解析,诊断出站网络问题 |
| 安全审计:SSH 失败登录、监听端口、SUID 文件、高危权限文件、近期登录记录 |
| 读取日志文件末尾 N 行(默认 50 行) |
| 统计日志中 ERROR / WARN / CRITICAL / Exception 数量,并返回近期错误样本 |
开发指南
环境准备
git clone https://github.com/zhouxiangjing/mcp-ssh.git
cd mcp-ssh
uv pip install -e ".[dev]"运行测试
pytest tests/ -v测试覆盖率
pytest tests/ --cov=src --cov-report=term-missing代码检查与格式化
ruff check src/ tests/
ruff format src/ tests/项目结构
mcp-ssh/
├── src/
│ ├── common/
│ │ ├── config.py # 环境变量与多主机配置解析
│ │ ├── connection.py # SSH 连接池与自动重连
│ │ ├── server.py # MCP Server 实例
│ │ └── utils.py # 公共工具函数
│ └── tools/
│ ├── connection_mgmt.py # 连接管理工具
│ ├── diagnostics.py # 系统诊断工具
│ ├── exec.py # 命令/脚本执行工具
│ ├── file.py # 文件操作工具
│ ├── process.py # 进程管理工具
│ ├── sftp.py # SFTP 传输工具
│ └── system.py # 系统信息采集工具
└── tests/ # 单元测试安全说明
优先使用密钥认证,避免在配置中明文存储密码。
生产环境禁止开启
SSH_IGNORE_KNOWN_HOSTS=true,防止中间人攻击。所有凭据通过环境变量或
.env文件读取,不会硬编码在代码中。.env文件已通过.gitignore排除在版本控制之外。delete_file拒绝删除/、~、.等危险路径。kill_process仅允许发送固定白名单信号:TERM/KILL/HUP/USR1/USR2/INT/QUIT。manage_service仅允许执行白名单操作:start/stop/restart/reload/enable/disable。
免责声明
请在使用本项目前仔细阅读以下声明。使用本项目即表示您已阅读、理解并同意以下所有条款。
风险告知
本项目(SSH MCP Server)通过 AI 模型驱动的自然语言指令对远程服务器执行真实操作,包括但不限于:
执行任意 Shell 命令与脚本
读写、删除远程文件及目录
启停、重启系统服务
终止运行中的进程
通过 SFTP 上传/下载文件
上述操作均为不可逆或难以回滚的真实变更,一旦执行无法撤销。
责任限制
本项目作者及贡献者对以下情形概不负责,亦不承担任何直接、间接、附带、特殊或衍生损失:
AI 模型误解用户意图导致执行了错误命令
误删文件、误停服务、误杀进程造成的数据丢失或业务中断
错误配置导致服务器权限泄露或安全漏洞
在生产环境中未经充分验证直接使用造成的任何后果
凭据(密码、私钥)通过不安全渠道泄露引发的安全事故
因网络中断、SSH 会话异常导致命令执行状态不确定引发的问题
第三方 AI 服务(Claude、GPT 等)产生幻觉或错误推理导致的误操作
推荐安全实践
为将操作风险降至最低,强烈建议遵循以下方案:
1. 最小权限原则
为 MCP 专用的 SSH 账号授予最低必要权限,禁止直接使用 root:
# 创建专用运维账号
useradd -m -s /bin/bash mcp-ops
# 仅允许执行特定命令(通过 sudoers 精细控制)
echo 'mcp-ops ALL=(ALL) NOPASSWD: /bin/systemctl status *, /bin/journalctl *' >> /etc/sudoers.d/mcp-ops
chmod 440 /etc/sudoers.d/mcp-ops2. 生产环境操作前必须备份
# 操作配置文件前先备份
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%Y%m%d%H%M%S)
# 重要数据目录快照
tar czf /backup/data-$(date +%Y%m%d).tar.gz /var/data/3. 环境隔离策略
环境 | 建议 |
开发环境 | 可直接使用,风险可控 |
测试环境 | 可使用,建议开启操作日志 |
预发布环境 | 只读操作自动执行,写操作需人工二次确认 |
生产环境 | 强烈建议只读模式,所有变更操作须人工审批后执行 |
4. 网络访问控制
# 通过 iptables / firewalld 限制 SSH 来源 IP
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 service name=ssh accept'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 service name=ssh drop'
firewall-cmd --reload5. 操作审计日志
# 开启 SSH 会话完整审计(记录所有执行命令)
# 在 /etc/ssh/sshd_config 中添加:
ForceCommand /usr/bin/script -q -f /var/log/ssh-audit/$(date +%Y%m%d-%H%M%S)-$USER.log或使用 auditd 记录所有 execve 系统调用:
audit -a always,exit -F arch=b64 -S execve -k mcp-ops-audit6. 密钥安全管理
为 MCP 配置专用 SSH 密钥对,与个人密钥严格隔离
私钥设置口令(
SSH_KEY_PASSPHRASE),禁止使用无口令裸私钥连接生产服务器定期轮换密钥,离职人员的密钥立即吊销
禁止将密钥或密码提交到代码仓库
7. 高危操作二次确认建议
在使用 AI 执行以下操作时,务必在 AI 给出命令后,先阅读确认再批准执行,切勿一键允许:
任何包含
rm -rf的删除操作systemctl stop/disable关键服务修改
/etc/sudoers、/etc/passwd、/etc/ssh/sshd_config等系统配置涉及防火墙规则变更的命令
数据库清空或 truncate 操作
适用场景声明
本项目适合用于:
个人开发/测试服务器的日常管理
内网受控环境下的运维自动化
学习 MCP 协议与 AI 运维工具集成
只读监控与信息采集场景
本项目不建议直接用于:
无备份机制的生产数据库服务器
金融、医疗等对数据完整性有严格要求的系统
多人共享且无操作审计的服务器环境
License
MIT — 详见 LICENSE。
Available Tools
34 toolsanalyze_log_errorsA
Analyze a log file for error patterns and summarize findings.
Searches for ERROR, WARN, CRITICAL, Exception, and similar keywords.
Args: path: Absolute path to the log file. host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Error/warning summary with counts and recent examples.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It notes the tool searches for specific keywords and returns a summary with counts and examples, and mentions default host behavior. However, it does not disclose prerequisites such as needing an active SSH connection or failure modes for missing files.
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 with a one-sentence summary followed by concise Args and Returns sections. Every sentence serves a purpose, and it avoids redundant 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?
The tool is moderately complex (remote file analysis, 2 parameters), and the description, combined with the output schema, covers the essential invocation details. It lacks explicit usage guidance, but the purpose is clear enough for an agent to select and call 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?
Schema description coverage is 0%, but the description thoroughly explains both parameters: 'path' is an absolute path to the log file, and 'host_name' is a named host from SSH_HOSTS config with a default if omitted. This adds clear 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 clearly states a specific verb and resource: 'Analyze a log file for error patterns and summarize findings.' It lists search keywords (ERROR, WARN, CRITICAL, Exception) which defines the scope and distinguishes it from sibling tools like grep_file or tail_log.
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 the tool is for log error analysis and summarization, but it gives no explicit when-to-use vs alternatives. Sibling tools like tail_log and grep_file are not mentioned, and there are no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_fileA
Append content to a remote file.
Args: path: Absolute path to the file. content: Text content to append. host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Success message or error details.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It explains arguments and return value but does not disclose whether the file is created if missing, permission requirements, or side effects. It only says 'Returns: Success message or error details' which is minimal.
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 concise and structured with Args and Returns sections. It is not overly verbose, but the Args/Returns formatting adds a few lines; still 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?
For a simple append tool, the description provides core information. However, it omits important edge cases such as file creation behavior, permission requirements, and error conditions beyond generic error details. This is adequate but has clear 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?
Schema has no property descriptions, so the description fully compensates. It explicitly defines path, content, and host_name, including the host_name default behavior. This adds meaning beyond the bare 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 'Append content to a remote file' with a specific verb and resource. This distinguishes it from sibling tools like write_file and read_file, which have different operations.
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 does not mention that append is for adding to existing files or that write_file overwrites. The implied usage is not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_disk_healthB
Check disk health using SMART data and filesystem errors.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Disk health status and any detected errors.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the method (SMART data and filesystem errors) and return type (status and errors), but omits details like possible side effects, permissions, or failure behavior. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Text is concise and structurally clear with separate Args and Returns blocks. Every sentence adds value, but it is slightly terse and could include a brief example of usage.
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 optional parameter and an output schema, the description covers the core purpose, parameter, and return value. It does not explain edge cases like unreachable hosts, but this is acceptable given the low complexity.
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 0%, but the description's Args section fully explains the only parameter (host_name) including its default behavior. This compensates for the schema gap, though it lacks details on format or examples.
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 uses a specific verb 'Check' with resource 'disk health' and elaborates the method ('using SMART data and filesystem errors'). It is clear and distinct from similarly named siblings like get_disk_info, though it does not explicitly name alternatives.
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 no guidance on when to use this tool versus alternatives. No mention of conflict with get_disk_info or other check tools, nor prerequisites like SSH configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_high_loadA
Diagnose high CPU/memory load and identify resource hogs.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Top resource consumers and system load details.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It mentions the host_name parameter comes from 'SSH_HOSTS config' implying SSH-based remote execution, and states the return includes 'top resource consumers and system load details.' It does not disclose read-only status, potential side effects, or performance implications, but for a diagnostic read-only tool this is minimally adequate.
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 very concise and well-structured in two short sections: a one-sentence purpose statement and a minimal Args/Returns overview. Every sentence adds value; there is no fluff 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?
This is a simple one-parameter diagnostic tool with an output schema present. The description covers the parameter and gives a high-level summary of the return ('Top resource consumers and system load details'). It does not explain output format, but the existence of an output schema relieves the description of that burden. It could mention the SSH connection context more explicitly, but the parenthetical reference to SSH_HOSTS 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?
The schema provides a nullable string with a default of null, but no description. The tool's description compensates by explaining the parameter's meaning: 'Named host from SSH_HOSTS config; uses default host if omitted.' This adds clear semantic value beyond the schema for the single parameter.
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 function: 'Diagnose high CPU/memory load and identify resource hogs.' This is a specific verb ('diagnose') and resource ('high CPU/memory load') that distinguishes it from sibling tools like get_cpu_info or list_processes, though it does not explicitly name any alternative.
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 usage context is implied by the phrase 'Diagnose high CPU/memory load' – it should be used when load is suspected. However, there is no explicit guidance on when to use this tool instead of related tools (e.g., get_system_overview, list_processes) or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_network_connectivityA
Test outbound network connectivity from the remote server.
Args: target: IP or hostname to ping/reach (default "8.8.8.8"). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Ping results and DNS resolution status.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | 8.8.8.8 | |
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states that the tool performs a ping/reach test and returns ping results and DNS resolution status, which implies a read-only diagnostic operation. However, it does not explicitly state safety (no system modifications), required credentials, or rate-limit considerations. The return value description is helpful but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, followed by an Args section that documents both parameters, and a Returns section. No fluff or redundant 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?
Given the tool's simplicity (2 optional params), the description covers the essentials, but it leaves ambiguity around when to use this tool versus siblings (e.g., test_connection), and the lack of annotations means the agent doesn't know if the operation is side-effect-free. A bit more context about typical use cases would make it 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?
The schema only provides type and default for each parameter (0% coverage), so the description must compensate. It does: 'target' is explained as 'IP or hostname to ping/reach', with default shown; 'host_name' is explained as 'Named host from SSH_HOSTS config'. This adds functional meaning beyond the bare 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 opens with a clear, specific action: 'Test outbound network connectivity from the remote server.' This distinguishes it from sibling tools like get_network_info (likely about local network config) and test_connection (likely about SSH connectivity). The scope is explicit (outbound, remote server).
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 does not explicitly reference alternatives or state when-not-to-use. It implies usage context via 'from the remote server' but leaves the agent to infer that it is for outbound reachability checks. No exclusion guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_securityA
Run a basic security audit of the remote server.
Checks for: failed login attempts, listening ports, SUID files, world-writable directories, and recent auth log entries.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Security audit report.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses what is checked and mentions it returns a 'Security audit report.' However, with no annotations, it does not explicitly state that the tool is read-only, whether it requires elevated permissions, or the impact on the remote host. The listed checks imply a passive audit, but this is not stated.
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 with a summary, a bullet list of checks, an args section, and a returns section. It is concise, every sentence adds value, and the formatting makes it easy to scan.
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 one optional parameter and an output schema (per context), the description sufficiently explains the operation and parameter. The return value is vaguely described as 'Security audit report,' but given the output schema exists, the description does not need to detail the structure.
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 only provides type and default for host_name, with no description. The tool description compensates by explaining it as 'Named host from SSH_HOSTS config; uses default host if omitted.' This adds meaningful semantic context 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 'Run a basic security audit of the remote server' and enumerates specific checks (failed login attempts, listening ports, SUID files, world-writable directories, recent auth log entries). This makes the tool's purpose specific and distinguishes it from sibling tools like check_disk_health or check_network_connectivity.
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 establishes a clear usage context: it is a basic security audit covering specific areas. It does not explicitly name alternatives or provide when-not-to-use guidance, but the scope is sufficiently clear for an agent to select this tool over general health or performance checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_service_statusA
Check the status of a systemd service.
Args: service: Service name (e.g., "nginx", "mysql", "docker"). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Service status including active state, PID, and recent logs.
| Name | Required | Description | Default |
|---|---|---|---|
| service | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must disclose side effects. It mentions host_name behavior and return contents, but does not state that the operation is read-only or that it may open network connections to remote hosts, which are relevant behavioral traits.
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 structured with Args and Returns, front-loaded with the purpose, and includes only essential details. It is moderately sized and each 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 output schema, return values are sufficiently summarized. The tool is simple, and the description covers the key parameters and return behavior, but lacks any safety or error semantics.
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 has no parameter descriptions (0% coverage), but the description provides meaningful semantics: examples for service names and explanation that host_name defaults to host config. This compensates for schema 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?
Description explicitly states 'Check the status of a systemd service', a specific verb and resource. It clearly differentiates from sibling tools like check_disk_health or manage_service by focusing solely on status retrieval.
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 vs alternatives, but the mention of systemd service status implies a clear use case. It does not mention when not to use or point to alternatives such as manage_service.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_all_connectionsA
Close all active SSH connections.
Returns: Confirmation message.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the action and return value but does not mention potential side effects, such as disrupting running commands or affecting other users' sessions, nor does it note irreversibility.
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 extremely concise, consisting of two short sentences. It front-loads the core purpose and avoids any redundant information, making it efficient for an agent 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?
For a zero-parameter operation, the description is mostly adequate, but it lacks context about the scope of 'all connections' (e.g., current user vs. system-wide) and the disruptive nature of closing all sessions. Given no annotations, additional caveats 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 tool has zero parameters and the schema's properties are empty, so schema coverage is 100%. With 0 params, the baseline is 4; the description does not need to add parameter 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 action ('Close all active SSH connections') with a specific verb and resource. The inclusion of 'all' effectively distinguishes it from the sibling tool close_connection, which presumably closes a single connection.
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 is given on when to use this tool versus alternatives like close_connection. However, the scope ('all active SSH connections') implies a batch operation, and the context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_connectionA
Close the SSH connection to a host.
The connection will be re-established automatically on the next tool call.
Args: host_name: Named host to disconnect; disconnects default host if omitted.
Returns: Confirmation message.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must cover behavioral traits. It discloses the notable behavior that the connection auto-reconnects on the next tool call, and clarifies the default host disconnection behavior. It does not reveal potential error conditions, but the core side effects are covered adequately.
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 and well-structured: a one-sentence purpose, a key behavioral note, and labeled Args/Returns sections. Every sentence contributes useful information without redundant elaboration.
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 one-parameter tool, the description covers purpose, key behavior (auto-reconnect), parameter semantics, and the return type (confirmation message). With an output schema present and simple scope, no further details are necessary for correct invocation.
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 no description for the sole parameter host_name (0% coverage), so the description must compensate. The Args section fully explains the parameter: 'Named host to disconnect; disconnects default host if omitted.' This adds substantial meaning beyond the bare 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's specific verb and resource: 'Close the SSH connection to a host.' It distinguishes itself from the sibling 'close_all_connections' by specifying that it targets a single ('a host') connection, with optional host_name for targeting.
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 the context of use by noting that the connection will be re-established automatically on the next tool call, which informs when closing is useful. It also explains the default behavior when host_name is omitted. However, it does not explicitly contrast with alternatives like close_all_connections, missing the 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileA
Delete a file or directory on the remote server.
Args: path: Absolute path to delete. recursive: If True, delete directory and all its contents (use with caution). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Success message or error details.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| host_name | No | ||
| recursive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the recursive delete behavior with a cautionary note, describes host_name default handling, and mentions return values. It could additionally note irreversibility, but the 'delete' verb and recursive caution cover the core 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?
The description is efficiently structured with an Args list and a Returns line, using concise bullet-like formatting. Every sentence contributes to understanding the tool's behavior, with no unnecessary verbiage.
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 (3 parameters, no annotations, and an output schema), the description fully covers the necessary context: what is deleted, how recursion works, host selection, and the nature of the return value. The output schema covers return format details, so the description need not elaborate further.
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 0% description coverage, so the description must fully compensate. It thoroughly explains each parameter: path as an absolute path, recursive with caution about deleting contents, and host_name with its default behavior. This adds significant value beyond the bare 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 explicitly states 'Delete a file or directory on the remote server', using a specific verb and resource. This clearly distinguishes it from sibling tools like write_file or execute_command, and there is no other delete tool among the 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 context is clear: this tool is for deleting files or directories. However, it does not explicitly mention when to prefer this tool over alternatives (e.g., execute_command for complex deletion scenarios) or any exclusions. The purpose is self-evident, so it earns a 4 rather than a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_fileA
Download a file from the remote server to local via SFTP.
Args: remote_path: Absolute file path on the remote server. local_path: Destination absolute local path (on the machine running this MCP server). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Success message with transferred file size, or error details.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No | ||
| local_path | Yes | ||
| remote_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It mentions the SFTP protocol and return format, but does not disclose potential overwrite behavior, directory creation, authentication prerequisites, or other side effects. This leaves some ambiguity for a file operation.
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 with Args and Returns sections, front-loaded with the core purpose. Every sentence provides necessary information without redundancy or padding.
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 covers the tool's purpose, parameters, and return values, making it complete for a straightforward download operation. It does not cover edge cases like overwrite policy or error handling specifics, but these are not critical given the tool's simplicity and the presence of an 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 description provides thorough explanations for all three parameters, adding meaning beyond the schema. It clarifies that paths are absolute and that host_name selects from SSH_HOSTS config with a default fallback, which significantly aids correct 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 tool downloads a file from remote to local via SFTP, using specific verbs and resources. It is distinct from siblings like upload_file, which performs the reverse operation.
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 about the host_name parameter and default behavior, but does not explicitly mention when to use this tool versus alternatives like upload_file. However, the purpose is so specific that usage is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandA
Execute a shell command on the remote SSH server.
Runs any shell command and returns stdout + stderr. Suitable for one-off commands, diagnostics, log tailing, service control, etc.
Args: command: The shell command to execute (e.g., "df -h", "systemctl status nginx"). timeout: Maximum seconds to wait for the command to finish (default 60). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Command output (stdout), or combined stdout/stderr on error.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| timeout | No | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It mentions that output includes stdout and stderr, and that on error they are combined. However, it fails to disclose that executing arbitrary shell commands may have side effects, require permissions, or be irreversible. This is a significant gap for a potentially destructive tool.
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 and well-structured, starting with a clear verb sentence, followed by a brief explanation, then an Args section, and finally a Returns section. Every sentence adds value, and the format is 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?
The description covers the core functionality and parameters, and the presence of an output schema reduces the need to detail return values. However, it omits important context such as whether an SSH connection must be established first, how the host is selected, or warnings about potential destructive consequences. Given the tool's power, this leaves the description incomplete for an agent deciding whether and how to invoke it.
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 properties lack descriptions (0% coverage), but the description compensates fully with an 'Args' section that explains each parameter: command (with examples), timeout (max seconds, default 60), and host_name (named host from config). This provides complete, useful semantics 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's function: 'Execute a shell command on the remote SSH server' and 'Runs any shell command and returns stdout + stderr.' This is specific and unambiguous. However, it does not explicitly differentiate from sibling tools like execute_script, though the 'any shell command' wording implies a distinction from script-based 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 clear usage context: 'Suitable for one-off commands, diagnostics, log tailing, service control, etc.' This helps the agent understand when to use it. It does not explicitly state exclusions or mention alternative tools, but the context is sufficient to infer appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_scriptA
Execute a multi-line shell script on the remote SSH server.
Uploads the script via stdin and runs it with the specified shell. Useful for multi-step automation, configuration changes, or complex checks.
Args: script: The full script content (multi-line bash/sh/python script). shell: Shell interpreter to use: "bash", "sh", "python3", etc. (default "bash"). timeout: Maximum seconds to wait (default 120). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Script output or error details.
| Name | Required | Description | Default |
|---|---|---|---|
| shell | No | bash | |
| script | Yes | ||
| timeout | No | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the execution mechanism (uploads via stdin), shell selection, timeout, and returns output or error. However, it does not warn about potentially destructive side effects or permission requirements, only hinting at 'configuration changes.' This is moderately transparent but lacks a safety profile.
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 with a brief intro, useful context, an Args breakdown, and a Returns section. Every sentence provides functional value, and the format is easy to scan, making it an ideal length.
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 covers all parameters, use cases, and return behavior, and the output schema handles return specifics. It lacks an explicit note on whether an SSH connection must already exist or if it auto-connects, which is relevant given the sibling connection-management tools. Overall, it is quite complete but has a small 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 description coverage is 0%, yet the description includes a detailed 'Args' section explaining every parameter: script, shell, timeout, and host_name, including defaults and examples. This fully compensates for the sparse schema and adds meaning beyond the raw JSON 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 opens with a specific verb and resource: 'Execute a multi-line shell script on the remote SSH server.' It also distinguishes itself from the sibling execute_command by emphasizing multi-line scripts and multi-step automation, making its purpose unmistakable.
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 states it is 'Useful for multi-step automation, configuration changes, or complex checks,' providing clear context for when to use it. However, it does not explicitly name alternatives or say when not to use it, such as pointing to execute_command for single commands, so it misses a fully explicit guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_processA
Search for processes by name or keyword.
Args: name: Process name or keyword to search (e.g., "nginx", "python"). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Matching processes with their PIDs and details.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses the return value (matching processes with PIDs and details) and the host_name fallback behavior. However, it does not mention potential side effects (e.g., read-only nature is implied but not explicit) or details like case sensitivity or regex support.
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 and well-structured with clear Args and Returns sections. Every sentence adds value and there is no redundant 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?
Given the tool's low complexity, an output schema exists, and the description covers both parameters and return values. It is complete for a search tool, though it could be enhanced by explicitly contrasting with list_processes for added contextual 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?
Schema description coverage is 0%, but the description fully explains both parameters. It clarifies that 'name' is a search keyword ('e.g., "nginx", "python"') and that 'host_name' is a named host from SSH_HOSTS config with default host if omitted. This adds significant meaning beyond the bare 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 uses a specific verb and resource ('Search for processes by name or keyword') and clearly distinguishes it from the sibling list_processes tool, which lists all processes. It also gives concrete examples like 'nginx' and 'python'.
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 finding a process by name or keyword and mentions host_name behavior (default host when omitted), but it does not explicitly state when to use this tool instead of list_processes or other alternatives. No exclusion criteria or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cpu_infoA
Get detailed CPU usage and statistics.
Returns current CPU load, per-core usage, and top CPU-consuming processes.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: CPU usage report.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the safety burden. The verb 'Get' implies a read-only operation, and the description adds useful details about the return content (per-core usage, top processes) and host connection via SSH_HOSTS config. However, it does not explicitly state that it is non-destructive or disclose any side effects, leaving some ambiguity.
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 and well-structured: a one-line summary followed by a bulleted list of returns and an Args section. Every sentence contributes meaning, with no fluff or redundancy beyond a minor repetition of 'returns' in the Returns header.
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 one-parameter read tool, the description covers purpose, returns, and the host parameter. The existing output schema likely documents the return structure in detail. The main gap is the absence of usage exclusions or error-handling information, but this is not critical given the tool's simplicity.
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 only a title and default for host_name with no description (0% coverage). The description compensates by explaining that host_name is a 'Named host from SSH_HOSTS config' and that it 'uses default host if omitted,' giving the agent an understanding of how to populate the parameter.
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 opens with a specific verb and resource: 'Get detailed CPU usage and statistics.' It further enumerates concrete outputs (current CPU load, per-core usage, top CPU-consuming processes), making it clearly distinct from sibling tools like get_memory_info or get_disk_info.
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_high_load or get_system_overview. The only context is the host parameter, but there are no exclusions, prerequisites, or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_disk_infoA
Get disk usage and I/O statistics.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Disk usage per filesystem and I/O stats.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states what the tool retrieves (disk usage and I/O stats) and the output format, but it does not disclose potential behaviors such as requiring an active SSH connection, error conditions, or performance impact. The read-only nature is implied by 'Get' but not explicitly stated.
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 and front-loaded with the main purpose. The Args and Returns sections are clearly structured. Minor redundancy exists between the first sentence and the Returns line, but overall it is efficient and scannable.
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 low complexity (one optional parameter) and the presence of an output schema, the description covers the essentials: what it does, the parameter, and the return value. However, it lacks usage guidance and deeper behavioral context, making it incomplete for an agent that needs to decide between this and similar disk-related 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 0%, so the description must and does compensate. It explains host_name as 'Named host from SSH_HOSTS config; uses default host if omitted', adding meaningful context beyond the schema's simple string/null type. It clarifies the source of valid values and the default behavior.
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 a specific action ('Get disk usage and I/O statistics') on a specific resource (disk). This distinguishes it from sibling tools like check_disk_health (focused on health) and get_system_overview (system-wide).
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 explicit guidance on when to use this tool versus alternatives. It only explains the optional host_name parameter, but does not mention contexts, prerequisites, or exclusions relative to sibling tools like check_disk_health or get_system_overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_infoA
Get detailed metadata of a remote file or directory.
Args: path: Absolute path on the remote server. host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: File metadata: size, permissions, owner, modification time.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral transparency burden. It discloses useful behaviors like the optional host_name defaulting to the configured host and the requirement for an absolute path. However, it does not explicitly state that the operation is read-only or describe error behaviors such as missing files or inaccessible paths.
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 compact and well-structured with clear 'Args' and 'Returns' sections. Every sentence adds value, and the key information is front-loaded 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?
Given the simple two-parameter tool and the presence of an output schema, the description is complete. It concisely covers the purpose, parameter semantics, and return value highlights, leaving no critical gaps for an agent to select 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 provides only titles with no descriptions (0% schema coverage), so the description fully compensates by explaining both parameters. It clarifies that 'path' must be an absolute remote path and that 'host_name' comes from SSH_HOSTS config and defaults when omitted, adding 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 uses a specific verb 'Get' plus the resource 'detailed metadata of a remote file or directory,' making the tool's function immediately clear. It distinguishes itself from sibling tools like read_file and list_directory by focusing on metadata rather than content or directory entries.
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 purpose clearly implies when to use the tool (whenever metadata is needed), but it does not explicitly mention alternatives or when not to use it. No comparison with sibling tools is provided, leaving the agent to infer the use case from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memory_infoA
Get memory and swap usage details.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Memory usage report including free, used, cached, and swap.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the burden falls on the description. It discloses the return contents (free, used, cached, swap) and the behavior that a default host is used when omitted. However, it does not explicitly state side-effect-free nature or remote connection implications, leaving some ambiguity.
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 appropriately brief and front-loaded with the main action. It includes only necessary details about the parameter and return value, 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?
For a simple read-only memory tool with an output schema, the description adequately covers the single parameter and return contents. It does not mention error handling or edge cases, but given tool simplicity and sibling context, it is sufficiently 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?
The schema provides only type/default for host_name with 0% schema description coverage. The description compensates fully by explaining that host_name references a named host from SSH_HOSTS config and that omitting it uses the default host, adding significant meaning.
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 memory and swap usage details' with a specific verb and resource. It distinguishes itself from sibling tools like get_cpu_info, get_disk_info, and get_network_info by focusing on memory/swap specifics.
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 only explains the host_name parameter (default host if omitted) but does not mention tool selection criteria, 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_network_infoA
Get network interface status, connections, and statistics.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Network interfaces, active connections, and routing table.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It discloses the return type and default host behavior, giving some transparency. However, it does not explicitly state that this is a read-only operation, whether it requires an active SSH connection, or any error conditions. It adds a bit of context about host_name but omits broader behavioral traits.
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 very concise and front-loaded with the main purpose. The Args and Returns sections are clearly structured and contain no filler. Every sentence adds value, making it an efficient and well-organized description.
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 (one optional parameter), the description covers the purpose and the parameter adequately. An output schema exists, so detailed return structures are not required. It lacks usage guidelines and deeper behavioral notes, but for this simple tool, it is sufficiently 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?
The only parameter, host_name, is fully explained in the description: 'Named host from SSH_HOSTS config; uses default host if omitted.' This adds significant meaning beyond the schema, which only declares the field type and default null. The description fully compensates for the 0% schema description 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 function with a specific verb ('Get') and resource ('network interface status, connections, and statistics'), and lists return items (interfaces, connections, routing table). It does not explicitly distinguish from sibling tools like check_network_connectivity or get_open_ports, but the resource scope is distinct enough.
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. It does not mention any exclusions, prerequisites, or suggest sibling tools for different scenarios. The only contextual hint is the optional host_name parameter, but no usage scenarios are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_portsA
List all open listening ports and their associated processes.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Listening ports with protocol, port number, and process name.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the return format (protocol, port number, process name) and explains the host_name parameter. However, it does not explicitly state that the operation is read-only, nor does it address error conditions or permission requirements. For a simple list operation, this is adequate but not fully transparent.
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 exceptionally concise, with a single clear sentence followed by structured Args and Returns sections. Every piece of information earns its place, and the structure makes it 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?
For a simple tool with one optional parameter and an output schema, the description covers the purpose, parameter semantics, and return values. It lacks explicit alternative guidance, but this is a minor gap given the tool's simplicity and the clarity of its function.
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 zero description coverage for the host_name parameter, but the description compensates by explaining it: 'Named host from SSH_HOSTS config; uses default host if omitted.' This adds meaningful context beyond the schema's minimal type/title info.
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 function: 'List all open listening ports and their associated processes.' This is a specific verb ('List') and resource ('open listening ports') with a clear scope, distinguishing it from siblings like list_processes or check_network_connectivity.
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 the description implies its use case (listing open ports), it does not explicitly state when to use it versus alternatives or provide exclusions. No alternatives are mentioned, so guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_logsA
Retrieve system logs from journald or /var/log/syslog.
Args: lines: Number of recent log lines to retrieve (default 100). unit: Optional systemd service name to filter logs (e.g., "nginx", "sshd"). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Recent system log entries.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| lines | No | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context beyond the name: it specifies the log sources (journald or /var/log/syslog), the config-based host selection (SSH_HOSTS), and the optional unit filter. However, it does not disclose behavior such as error handling, whether it requires an existing SSH connection, or how 'or' between journald and syslog is resolved. With no annotations, this leaves some gaps.
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 compact four-sentence docstring with an Args/Returns structure. No filler words; each sentence adds 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 retrieval tool with optional parameters and an output schema, this description is largely sufficient. It covers source, parameters, and return type. However, it omits prerequisites (e.g., whether a connection must be open) and error behavior, which slightly reduces its 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 coverage is 0%, so the description carries full responsibility. It explains all three parameters: lines (count, default 100), unit (service name filter), and host_name (SSH_HOSTS named host, default fallback). This exceeds 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 opens with a clear verb ('Retrieve') and specific resources ('system logs from journald or /var/log/syslog'). This distinguishes it from siblings like tail_log and analyze_log_errors, which have different scopes.
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 choose this tool over tail_log, analyze_log_errors, or get_system_overview. The description focuses only on mechanics and does not state use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_overviewA
Get a comprehensive system overview of the remote server.
Collects hostname, OS release, kernel, uptime, CPU, memory, disk, and load average in one call. Best starting point for system analysis.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Formatted system overview report.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It discloses that it collects read-only system information and returns a formatted report, which implies no side effects. However, it does not explicitly state it is non-destructive or note any permissions/connection behaviors, so it is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a clear opening sentence, a concise list of collected metrics, a usage note, and a clear Args/Returns format. Every line adds value and there is no padding 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 tool with one optional parameter and an output schema, the description covers all essential aspects: purpose, scope, parameter semantics, and return value. It does not mention potential failures or limitations, but these are not critical for such a straightforward read-only overview within a rich sibling 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 has zero description coverage, but the description fully explains host_name: it comes from SSH_HOSTS config and defaults to the default host if omitted. This adds meaningful semantic context beyond the schema's raw type definition, earning a strong score.
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 states a specific verb ('Get') and resource ('comprehensive system overview') and lists the exact data collected (hostname, OS release, etc.), distinguishing it from sibling tools like get_cpu_info or get_memory_info by explicitly positioning it as a holistic overview.
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 phrase 'Best starting point for system analysis' clearly suggests when to use this tool, implying that for deeper specifics, one would turn to more specialized sibling tools. It gives a clear context but does not explicitly name alternatives or exclusions, so one point is deducted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grep_fileA
Search for a text pattern in remote files.
Args: path: File path or directory to search. pattern: Text or regex pattern to search for. recursive: Search recursively in directories (default False). ignore_case: Case-insensitive search (default True). context_lines: Lines of context around each match (default 2). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Matching lines with file names and line numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pattern | Yes | ||
| host_name | No | ||
| recursive | No | ||
| ignore_case | No | ||
| context_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It adds return format ('Matching lines with file names and line numbers') and default behaviors (recursive=false, ignore_case=true, context_lines=2). However, it does not explicitly state that the operation is read-only or non-destructive, nor does it mention limitations like binary file handling or permission requirements. The word 'search' implies safety, but more explicit disclosure would be better.
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 well-structured docstring with a one-line summary, an Args section, and a Returns section. Each parameter description is concise and informative, with no unnecessary fluff. The format is easy to scan and the summary is front-loaded. All information 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?
For a tool with 6 parameters, no annotations, and no structured output schema, the description is largely complete: it covers all parameters and states the return format. It lacks guidance on when to use the tool and does not mention error handling or edge cases, but given the simplicity of a grep-like operation, it is sufficiently comprehensive. A 4 reflects the minor 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?
The input schema has 0% description coverage, but the description fully compensates by explaining each parameter: 'path: File path or directory to search', 'pattern: Text or regex pattern', 'recursive: Search recursively', 'ignore_case: Case-insensitive', 'context_lines: Lines of context', and 'host_name: Named host from SSH_HOSTS config; uses default host if omitted'. This adds significant meaning beyond the schema's bare titles and defaults, so a 5 is warranted.
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 for a text pattern in remote files' which is a specific verb and resource. It does not explicitly distinguish from the sibling tool 'search_files' (which likely searches file names), but the verb 'search' plus 'text pattern' implies content search. This meets 'clear' but lacks sibling differentiation, so 4 is appropriate.
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 search_files, read_file, or tail_log. It only documents parameters and return values, not strategic context or exclusion criteria. There is no mention of specific use cases or when not to use it, so this is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kill_processA
Send a signal to a process by PID.
Args: pid: Process ID to signal. signal: Signal name: "TERM" (graceful, default), "KILL" (force), "HUP" (reload). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Result of the kill command.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| signal | No | TERM | |
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does offer meaningful behavior details: TERM is graceful, KILL is force, HUP is reload, and host_name falls back to a configured default. However, it does not warn about the destructive nature of KILL, permission requirements, or what the returned result actually contains.
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 compact and well-structured with Args and Returns sections. There is no filler content, though a few line breaks and the 'Args:' scaffold add minor structural noise.
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 covers the tool's purpose, all parameters, and the return value. Given the moderate complexity and presence of an output schema, this is sufficient, though explicit use-case guidance and safety warnings would push it higher.
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 Args section fully explains all three parameters, including the meaning of pid, the signal values with defaults, and the host_name source from SSH_HOSTS with default-host fallback. This fully compensates for the 0% schema description 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 opens with a clear verb and object: 'Send a signal to a process by PID.' This is specific and distinguishes the tool from sibling process tools like list_processes and find_process, which do not send signals.
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 explicit guidance on when to use kill_process versus alternatives such as manage_service or execute_command. It explains signal semantics and host defaults but does not state when-not-to-use or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_configured_hostsA
List all SSH hosts configured in SSH_HOSTS_JSON.
Returns: Table of configured host names and their connection details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It mentions the data source (SSH_HOSTS_JSON) and that the return is a table of host names and connection details, which is useful. However, it does not explicitly state that the operation is read-only, whether it may reveal sensitive connection details, or if any prerequisites exist, leaving gaps in behavioral disclosure.
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 extremely concise and well-structured: a single opening sentence stating the purpose, followed by a short 'Returns' section. Every sentence earns its place; no waste, and the main action is 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?
For a simple zero-parameter tool with an output schema (not shown but indicated as present), the description is adequately complete. It states what the tool does and what it returns, which is sufficient for an agent to select and invoke it. The lack of explicit read-only or permission details is a minor gap given the inherently read-only nature of listing.
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 zero parameters, so per the rubric the baseline is 4. The description adds context about what the tool does (lists configured hosts) but there are no parameter semantics to elaborate on, as the input schema is empty.
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 SSH hosts configured in SSH_HOSTS_JSON, using a specific verb and resource. It distinguishes from sibling tools like test_connection or execute_command by focusing on configuration listing, not connecting or executing.
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 this is for viewing configured hosts before connecting, but it does not explicitly state when to use it or contrast it with alternatives. No exclusions or alternative tool references are provided; usage context is only implied by the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directoryA
List files and directories at a remote path.
Args: path: Directory path to list (default "/"). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Directory listing with permissions, size, and modification time.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | / | |
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description carries the full burden due to lacking annotations. It does disclose useful behavioral context, such as returning directory listing with permissions, size, and modification time, and the host_name default behavior. However, it omits details like whether listing is recursive, includes hidden files, or how errors are handled, so transparency is moderate.
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 and well-structured, with a clear one-line summary followed by Args and Returns sections. Every sentence adds value—no fluff or repetition. It is front-loaded with the core 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?
For a simple list tool with no required parameters and an output schema (though not shown), the description adequately covers the return format and parameter usage. It doesn't discuss edge cases or error behavior, but for this low-complexity tool, the provided context 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?
With schema description coverage at 0%, the description compensates well. It clarifies that 'path' defaults to '/' and that 'host_name' refers to a named host from SSH_HOSTS config, falling back to the default host when omitted. This adds meaningful context beyond the bare schema definitions.
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 specific verb+resource: 'List files and directories at a remote path.' This unambiguously distinguishes it from siblings like read_file, search_files, and list_processes, which perform different actions.
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 when-not-to-use guidance is provided. The description simply states what the tool does and explains its parameters. There is no mention of alternatives or conditions that would make this tool the right choice versus a sibling, 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.
list_processesA
List running processes sorted by resource usage.
Args: sort_by: Sort field: "cpu" (default), "mem", or "pid". limit: Number of processes to show (default 20). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Process list with PID, user, CPU%, MEM%, and command.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sort_by | No | cpu | |
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the transparency burden. It provides default sorting and limit behavior, explains host_name selection from SSH_HOSTS, and lists the exact return fields (PID, user, CPU%, MEM%, command). It does not mention error behavior or sort order direction, but for a simple listing tool this is reasonably transparent.
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 and well-structured, with a one-sentence purpose, a compact Args section, and a Returns section. Every sentence adds value and there is no fluff 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 tool with three optional parameters and a provided output schema, the description covers the key behavioral aspects: sorting, limiting, host selection, and return content. It is complete enough for an agent to select and invoke the tool correctly without further clarification.
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 0%, and the description fully compensates by explaining all three parameters: sort_by with allowed values and default, limit with default, and host_name with its source and fallback behavior. This is far more helpful than the bare 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 lists running processes sorted by resource usage, which is a specific verb+resource combo. It also distinguishes itself from sibling tools like find_process and kill_process by focusing on a general sorted listing rather than searching or terminating.
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 through its purpose and argument defaults, but it does not explicitly mention when to use this tool versus alternatives like find_process or get_system_overview. It also lacks any exclusionary guidance or prerequisite notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_serviceA
Start, stop, restart, or reload a systemd service.
Args: service: Service name (e.g., "nginx", "mysql", "docker"). action: Action to perform: "start", "stop", "restart", "reload", "enable", "disable". host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Result of the service management action.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| service | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the mutating nature (start/stop/etc.) and remote host behavior, but does not mention permissions, side effects, reversibility, or failure handling. This is a significant transparency gap for a mutation tool.
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 with a title-like first sentence, a concise Args block, and a Returns line. Each sentence contributes meaningful information 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 covers the tool's purpose, parameters, and return value, and the presence of an output schema reduces the need to detail return semantics. However, it lacks operational side effects and permission requirements, leaving it slightly incomplete for a mutating 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?
The schema has 0% description coverage, but the description's Args section thoroughly explains each parameter: service with examples, action with valid values, and host_name with its default behavior. This compensates fully.
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 first sentence clearly states the tool's function: 'Start, stop, restart, or reload a systemd service.' This is a specific verb+resource that distinguishes it from siblings like check_service_status. The Args section further clarifies enable/disable actions.
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 context through the actions and host_name parameter, but does not explicitly mention alternatives or when not to use this tool. It could benefit from noting that check_service_status is for status checks, but the clear scope is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileA
Read the content of a remote file.
Args: path: Absolute path to the file (e.g., "/etc/nginx/nginx.conf"). max_lines: Maximum number of lines to return (default 200, 0 = unlimited). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: File content as text.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| host_name | No | ||
| max_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the return format and parameter defaults but does not mention error handling (e.g., missing file, permissions) or any side effects. It provides basic transparency but lacks depth on failure modes.
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 with clear Args and Returns sections. Every sentence provides useful information without redundancy, and the formatting makes it easy to scan quickly.
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 file-reading tool with 3 parameters and an output schema, the description is nearly complete. It covers parameters, return value, and the optionality of host_name. It lacks edge-case behavior (e.g., file not found) but is otherwise sufficient for an agent to 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 Args section explains each parameter with examples and defaults, fully compensating for the 0% schema coverage. It clarifies that host_name is optional and defaults to the configured host, and that max_lines=0 means unlimited, adding meaning beyond the schema's raw type definitions.
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 reads the content of a remote file, using the specific verb 'read' with a clear resource. It distinguishes itself from sibling tools like write_file, delete_file, and tail_log by focusing on full file content reading, including an absolute path requirement.
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 reading a remote file's content but does not explicitly state when to prefer this over alternatives like tail_log or grep_file. It lacks clear exclusions or alternative guidance, so the usage context is only inferred from the tool's purpose and parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesA
Search for files by name pattern in a remote directory tree.
Args: path: Root directory to search from. pattern: File name pattern (e.g., "*.log", "nginx.conf"). file_type: Filter by type: "file" (f), "dir" (d), or "any" (default). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: List of matching file paths.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pattern | Yes | ||
| file_type | No | any | |
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that search is remote (via host_name from SSH_HOSTS config) and returns a list of paths, but it does not explicitly state whether the operation is read-only, whether it recurses into subdirectories, or error behavior. While 'directory tree' implies recursion, explicit disclosure of non-destructive behavior would strengthen 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 efficiently structured: a one-sentence purpose, a bullet-style Args section, and a Returns line. Every sentence provides useful information with zero filler, making it easy to parse quickly.
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 four parameters and an output schema, the description covers all parameters and the return type, which is sufficient. It does not explicitly mention search semantics like case sensitivity or recursion depth, but the phrase 'directory tree' implies recursion, and the output schema exists to document return details. Overall, it is complete enough for the agent's needs.
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 0%, but the description compensates by documenting all four parameters with concrete examples ('*.log', 'nginx.conf'), allowed values ('file', 'dir', 'any'), and host configuration details. This adds meaningful semantics beyond the raw schema types and defaults.
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 function: 'Search for files by name pattern in a remote directory tree.' This is specific and distinguishes it from siblings like grep_file (content search) and list_directory (directory listing). The use of the verb 'search' and resource 'files' makes 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 usage for finding files by name pattern (e.g., '*.log') but does not explicitly contrast with alternatives or state when not to use it. No mention of grep_file for content search or list_directory for directory browsing, so the agent has no explicit guidance on tool selection beyond the obvious purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tail_logA
Tail the end of a remote log file.
Args: path: Absolute path to the log file (e.g., "/var/log/nginx/error.log"). lines: Number of lines to retrieve from the end (default 50). host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Last N lines of the log file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| lines | No | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the read-only nature via 'Tail' and 'Returns', and clarifies behavior with default lines and host selection, but does not mention potential side effects or permissions (though none are expected).
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 structured with a clear one-liner summary, Args, and Returns, 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?
For a simple tail tool with an output schema, the description covers all parameters, behavior, and return value; it is self-contained and contextually 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?
Schema description coverage is 0%, but the description thoroughly documents all three parameters: path with an example, lines with a default, and host_name with a fallback explanation, adding 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 states a specific verb ('Tail') and resource ('remote log file'), clearly distinguishing it from siblings like read_file or grep_file by focusing on the end of the file.
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 reading the last N lines of a remote log file, but does not explicitly contrast it with alternatives like read_file or get_system_logs, or 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.
test_connectionA
Test SSH connectivity to the target host.
Verifies the connection is alive and returns basic server identity.
Args: host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Connection status and remote hostname.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It states the operation is a test and mentions return values, but does not clarify whether a persistent connection is established, side effects, or error behavior. It gives some transparency but not full disclosure.
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 two short sentences plus structured Args/Returns sections. It front-loads the primary purpose and every sentence contributes value, with no redundant 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 tool with one optional parameter and an output schema, the description covers the purpose, parameter meaning, and return values. It does not mention prerequisites like needing SSH_HOSTS configured or error handling, but the core is adequately 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 description coverage is 0%, but the description compensates by explaining host_name as 'Named host from SSH_HOSTS config; uses default host if omitted.' This adds practical meaning beyond the bare string/null type in 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's action ('Test SSH connectivity') and resource ('to the target host'), distinct from sibling tools like check_network_connectivity by specifying SSH. It also notes the return of server identity, adding specificity.
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?
Usage is implied through 'Test SSH connectivity' and 'Verifies the connection is alive', but there is no explicit guidance on when to prefer this over alternatives like list_configured_hosts or close_connection. No exclusions 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.
upload_fileA
Upload a local file to the remote server via SFTP.
Args: local_path: Absolute local file path (on the machine running this MCP server). remote_path: Destination absolute path on the remote server. host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Success message with transferred file size, or error details.
| Name | Required | Description | Default |
|---|---|---|---|
| host_name | No | ||
| local_path | Yes | ||
| remote_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does add useful context: local_path is relative to the MCP server, host_name defaults from SSH_HOSTS config, and the return includes file size or error. However, it fails to disclose critical mutation behaviors such as overwrite semantics, directory creation, permission requirements, or failure handling for missing local files. This is a significant gap for a file-transfer tool.
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 and well-structured: a one-sentence summary, a bulleted Args section, and a Returns line. Every part is informative, with no filler or redundancy. The format is easy to scan and front-loads the core 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 description covers the essential information for invocation: what the tool does, all parameters with detailed semantics, and the return format. It also provides useful context about the execution environment and host configuration. The main gap is missing behavioral details like overwrite behavior, but for a simple upload tool, the provided information is sufficient for an agent to select and invoke it correctly. An output schema exists, so return values are further documented.
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 0%, so the description must compensate. It fully compensates with an Args block that explains each parameter in detail: local_path is an absolute path on the MCP server, remote_path is a destination absolute path, and host_name is a named host from SSH_HOSTS config with a default. This adds meaning beyond the bare schema and even clarifies ambiguous aspects like 'absolute' and the default host behavior.
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 states a specific verb and resource: 'Upload a local file to the remote server via SFTP.' This clearly distinguishes the tool from siblings like download_file (remote to local) and write_file (writing content directly to a remote file). The direction (local->remote) and protocol (SFTP) are explicit, 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?
The description provides clear context for when to use the tool: when you need to transfer a local file to a remote server. It does not explicitly mention alternatives or exclusions, but the purpose is specific enough that the intended use case is clear. The description also notes host_name behavior, which aids correct selection. Lacks explicit 'when not to use' guidance, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileA
Write content to a remote file (overwrites existing content).
Creates parent directories if they do not exist.
Args: path: Absolute path to the destination file. content: Text content to write. host_name: Named host from SSH_HOSTS config; uses default host if omitted.
Returns: Success message or error details.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| host_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently discloses that the tool overwrites existing content, creates parent directories if needed, uses a default host when host_name is omitted, and returns success or error details. This is substantial, though it does not cover permissions or irreversibility beyond the word 'overwrites'.
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 and well-structured: a single front-loaded sentence stating the core purpose, followed by supplemental details in a clear Args/Returns format. Every sentence earns its place 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 covers the tool's purpose, parameters, and return value, and it handles host selection. Given the simplicity of the tool and the presence of an output schema, this is nearly complete. Minor omissions like file permissions or encoding edge cases prevent a perfect score.
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 provides only parameter names and types (0% coverage). The description compensates fully with an 'Args' section that explains path must be absolute, content is text, and host_name is a named host from SSH_HOSTS config with default behavior. This adds meaning well beyond the raw 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's function with a specific verb and resource: 'Write content to a remote file (overwrites existing content).' The explicit mention of overwriting distinguishes it from sibling tools like append_file, 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?
The description provides clear context for when to use the tool—when you want to write or overwrite a file, and it mentions that parent directories are created. However, it does not explicitly state when not to use it or mention alternatives like append_file for preserving existing content.
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.
34 tool updates
v0.1.5- First observed
analyze_log_errors - First observed
append_file - First observed
check_disk_health - First observed
check_high_load - First observed
check_network_connectivity - First observed
check_security - First observed
check_service_status - First observed
close_all_connections - First observed
close_connection - First observed
delete_file - First observed
download_file - First observed
execute_command - First observed
execute_script - First observed
find_process - First observed
get_cpu_info - First observed
get_disk_info - First observed
get_file_info - First observed
get_memory_info - First observed
get_network_info - First observed
get_open_ports - First observed
get_system_logs - First observed
get_system_overview - First observed
grep_file - First observed
kill_process - First observed
list_configured_hosts - First observed
list_directory - First observed
list_processes - First observed
manage_service - First observed
read_file - First observed
search_files - First observed
tail_log - First observed
test_connection - First observed
upload_file - First observed
write_file
TDQS
Scored across 34 tools
Most tools are clearly distinct, targeting specific resources and actions (file ops, process ops, system info). However, some overlap exists between diagnostic tools like check_high_load and get_cpu_info/get_memory_info, and between execute_command and execute_script, which could cause agents to select the wrong tool in ambiguous situations.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., read_file, list_processes, get_system_overview, manage_service). Even less conventional names like tail_log and grep_file are still recognizable and fit the pattern.
With 34 tools, this server significantly exceeds the recommended range for a typical MCP server. While the domain is broad, many tools could be consolidated (e.g., get_cpu_info, get_memory_info, get_disk_info could be subsumed into get_system_overview), and the high count introduces unnecessary complexity for agents.
The tool set provides comprehensive coverage of SSH operations: connection management, file transfer and editing, process control, system monitoring, log inspection, service management, and diagnostics. No obvious dead ends or missing CRUD operations exist for the stated purpose.
Maintenance
Related MCP Connectors
Remote MCP server for managing Muninx tickets, messages, ticket search, and support analytics.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Related MCP Servers
- AlicenseAqualityBmaintenanceAn MCP server for read-only Linux system administration and diagnostics on RHEL-based systems via SSH. It enables users to troubleshoot remote hosts by accessing system information, services, logs, and network configurations through natural language.19293Apache 2.0
- AlicenseAqualityBmaintenanceMCP server for managing multiple SSH servers via AI assistants, offering tools for remote command execution, file operations, and system monitoring.111MIT
- AlicenseAqualityCmaintenanceMCP server for managing remote servers via SSH, enabling command execution, file transfer, rsync, tunnels, health checks, backups, and database operations.174251MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server for managing Ubuntu/Linux systems, enabling AI assistants to execute commands, manage services, files, logs, and packages via local or SSH connection.-