linux-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SSH_HOST | No | Remote host IP or hostname. Required when LOCAL_MODE is not true. | |
| SSH_PORT | No | SSH port. Default: 22 | 22 |
| SSH_USER | No | SSH username. Required when LOCAL_MODE is not true. | |
| LOG_PATHS | No | Comma-separated list of allowed log file path prefixes. Default: /var/log | /var/log |
| TRANSPORT | No | Transport mode: 'stdio' or 'http'. Default: stdio | stdio |
| LOCAL_MODE | No | Set to 'true' to manage the local machine directly (no SSH). Default: false | false |
| SSH_KEY_PATH | No | Path to private key. Default: ~/.ssh/id_rsa | ~/.ssh/id_rsa |
| MCP_HTTP_HOST | No | HTTP bind address when TRANSPORT=http. Default: 127.0.0.1 | 127.0.0.1 |
| MCP_HTTP_PORT | No | HTTP port when TRANSPORT=http. Default: 3300 | 3300 |
| SUDO_PASSWORD | No | Optional. Provide if the SSH user requires a password for sudo. | |
| COMMAND_TIMEOUT_MS | No | Max time (ms) for any single command. Default: 30000 | 30000 |
| SSH_STRICT_HOST_CHECK | No | Set to 'false' to skip host key verification. Default: true | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_system_infoA | Returns hostname, OS version, kernel, uptime, and architecture. |
| get_cpu_usageA | Returns CPU load averages, core count, and a top snapshot. |
| get_memory_usageA | Returns RAM and swap usage (free -h and /proc/meminfo). |
| get_disk_usageA | Returns disk usage per mount point (df -h) and block device layout (lsblk). |
| get_network_interfacesA | Returns all network interfaces with IPs and link status (ip addr, ip link). |
| apt_list_installedA | List installed apt packages. Optional filter by name substring. |
| apt_searchA | Search available apt packages by name or description. |
| apt_showB | Show detailed information about a package (apt-cache show). |
| apt_installA | Install one or more apt packages (runs apt-get install -y via sudo). |
| apt_removeA | Remove one or more apt packages, leaving config files (apt-get remove). Use run_command_sudo for purge. |
| apt_updateB | Run apt-get update to refresh package index (sudo). |
| apt_upgradeA | Upgrade installed packages (apt-get upgrade). Set dry_run=true to preview without applying. |
| service_listB | List systemd services. scope: "system" (default) or "user". Optional state filter (e.g. "running", "failed"). |
| service_statusB | Get systemctl status for a named service. |
| service_startA | Start a system service (sudo). System scope only. |
| service_stopA | Stop a system service (sudo). System scope only. |
| service_restartA | Restart a system service (sudo). System scope only. |
| service_enableA | Enable a system service to start at boot (sudo). System scope only. |
| service_disableA | Disable a system service from starting at boot (sudo). System scope only. |
| get_journal_logsB | Fetch systemd journal logs with optional filters. unit: service name, since/until: time range (e.g. "1 hour ago"), lines: count, priority: 0-7 or emerg/alert/crit/err/warning/notice/info/debug. |
| tail_fileB | Tail a log file. Path must start with an allowed prefix (default: /var/log). |
| search_logsA | Search journal logs for a pattern (grep -i). Optional unit filter. Returns last 200 matching lines. |
| list_processesA | List running processes (ps aux), sorted by cpu, memory, or pid. Returns top 60. |
| get_processB | Get details about a specific process by PID or name. |
| get_top_processesC | Get top N processes sorted by CPU or memory usage. |
| kill_processA | Send a signal to a process by PID. Default signal is SIGTERM (graceful). Use SIGKILL to force. Runs via sudo. |
| read_fileB | Read the contents of a file. Subject to 1MB output limit. |
| write_fileA | Write text content to a file (creates or overwrites). Text only — binary files are not supported. Requires appropriate filesystem permissions. |
| list_directoryB | List directory contents with details (ls -la). |
| get_file_infoB | Get file metadata: permissions, owner, size, timestamps (stat). |
| make_directoryA | Create a directory (mkdir -p, creates parent dirs as needed). |
| delete_fileA | Delete a file or directory. Set recursive=true to delete non-empty directories. |
| run_commandA | Execute an arbitrary shell command and return stdout/stderr. Subject to 30s timeout and 1MB output limit. Use for operations not covered by structured tools. |
| run_command_sudoA | Execute an arbitrary shell command with sudo. Same limits as run_command. Use for privileged operations not covered by structured tools (e.g. apt purge, iptables). |
| zfs_list_poolsA | List all ZFS pools with size, allocation, fragmentation, health, and autotrim status. |
| zfs_pool_statusA | Show detailed ZFS pool status including vdev tree, scrub results, and errors. Optionally filter to a specific pool. |
| zfs_list_datasetsA | List ZFS datasets with used, available, compression, recordsize, and mount info. Optionally filter by pool. |
| zfs_pool_iostatA | Show ZFS pool I/O statistics (ops, bandwidth, latency) sampled over 3 seconds. |
| zfs_list_snapshotsB | List ZFS snapshots with size and creation time, sorted by creation date. |
| zfs_run_scrubA | Start a scrub on a ZFS pool to verify data integrity (sudo). |
| zfs_stop_scrubA | Stop an in-progress scrub on a ZFS pool (sudo). |
| zfs_get_propertyA | Get one or more properties from a ZFS dataset or pool. Use "all" for all properties. |
| zfs_set_propertyB | Set a property on a ZFS dataset (sudo). |
| zfs_create_snapshotB | Create a ZFS snapshot (sudo). Use format dataset@snapname. |
| zfs_destroy_snapshotB | Permanently delete a ZFS snapshot (sudo, destructive). |
| zfs_pool_get_propertyB | Get a property from a ZFS pool (e.g. autotrim, ashift, health). |
| zfs_pool_set_propertyB | Set a property on a ZFS pool (sudo), e.g. autotrim=on. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 47 tools
Most tools target distinct resources, but there are overlapping pairs: zfs_get_property can read from pools while zfs_pool_get_property also does; list_processes and get_top_processes both return top processes; tail_file and search_logs/get_journal_logs overlap on logs. Descriptions mitigate some confusion but boundaries are not always crisp.
Naming is largely predictable with verb_noun or prefix_action patterns (apt_*, service_*, zfs_*). Minor inconsistencies exist like zfs_pool_status vs zfs_list_pools and zfs_pool_get_property vs zfs_get_property, but overall the set is readable and consistent.
47 tools is well above the 25-tool threshold for 'too many' despite covering many domains. The breadth may justify some tools, but the set feels heavy and could be consolidated (e.g., ZFS pool vs dataset property tools).
Covers system info, packages, services, files, commands, ZFS, logs, and processes—broad for Linux administration. Gaps like user management or network configuration can be handled via run_command, so core lifecycle is mostly complete.