vela-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for the HTTP server (default: 8000) | |
| AGENT_ID | No | Required when using a Relay Secret (e.g. agt_783985743) | |
| VELA_TOKEN | No | JWT token or Relay Secret | |
| VELA_API_URL | No | Your Vela API or VPS relay tunnel |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| count_toolsA | Count how many assistant tools are available on this host. Use when the user asks how many tools/capabilities/commands you have, or how many things you can do. |
| list_toolsA | List all assistant tool names available on this host, optionally filtered by a search term. Use when the user asks what tools/capabilities/commands you have, what you can do, or whether a specific capability exists. |
| get_system_infoA | Static hardware specs bundle: CPU model, RAM capacity, GPU model, disk partitions, OS version, USB devices, monitor config, and BIOS. Use when the user wants to know WHAT their machine is made of. Do NOT use for live usage — use get_snapshot for live metrics. |
| get_system_cpuA | Static CPU specs: model name, core/thread counts, base clock, architecture. Use when the user asks WHAT CPU they have. Do NOT use for live CPU load — use monitor_cpu for current usage. |
| get_system_ramA | Static RAM capacity: total installed memory and swap size. Use when the user asks how much RAM they have. Do NOT use for live memory usage — use monitor_ram for that. |
| get_system_gpuA | Static GPU info: GPU device names and models. Use when the user asks WHAT GPU they have. Do NOT use for live GPU load — use monitor_gpu for that. |
| get_system_diskA | Static disk layout: partition names, mount points, filesystem types, and total sizes. Use when the user asks about drive partitions or disk setup. Do NOT use for free space or usage stats — use get_disk_usage for that. |
| get_system_osA | OS identity: distro name, kernel version, hostname, current username. Use for OS/kernel-specific questions. For a full device summary including hardware vendor and model, use get_device_info instead. |
| get_system_usbB | Connected USB devices. |
| get_system_monitorsA | Static monitor hardware info: display names, resolutions, refresh rates. Use when the user asks about their monitor specs. Do NOT use to check if the monitor is on/off — use get_monitor_state for that. |
| get_system_biosB | BIOS vendor, version, release date, and motherboard. |
| get_device_infoA | High-level device identity: laptop model (e.g. ThinkPad X1 Carbon Gen 9), vendor (e.g. Lenovo), OS distro, kernel, architecture, hostname. Use when the user asks 'what device/laptop/computer is this'. For deeper hardware specs use get_system_info; for OS-only details use get_system_os. |
| get_network_ipA | Local and public IP addresses. |
| get_network_locationA | Public IP with geo-location: city, region, country, timezone, ISP, coordinates. |
| get_wifi_statusA | Current WiFi connection state only: connected/disconnected, active SSID, signal strength. Use when the user asks if they are connected or what network they are on. Do NOT use to browse nearby networks — use list_wifi_networks for that. |
| list_wifi_networksA | Scan and list all nearby WiFi networks with SSID and signal strength. Use when the user wants to see what networks are available nearby, not just their current connection. |
| connect_wifiC | Connect to a WiFi network. |
| disconnect_wifiB | Disconnect from the current WiFi network. |
| toggle_wifiB | Enable or disable the WiFi radio. |
| list_bluetooth_devicesA | List connected Bluetooth devices and paired devices available to connect. |
| pair_bluetooth_deviceC | Pair with a Bluetooth device. |
| unpair_bluetooth_deviceC | Unpair a Bluetooth device. |
| toggle_bluetoothA | Enable or disable the Bluetooth radio. |
| ping_hostB | Ping a host and return packet loss and average RTT. |
| get_snapshotA | Live system metrics snapshot: current CPU load, RAM usage, GPU usage, disk I/O rates, network I/O rates, temperatures, fan speeds, battery level, top processes. Use for 'how is my PC doing' or real-time status. Do NOT use for static hardware specs — use get_system_info for that. |
| monitor_cpuA | Live CPU usage: current load percentage overall and per core. Use when the user asks how loaded their CPU is right now. Do NOT use for CPU specs or model — use get_system_cpu for that. |
| monitor_ramA | Live memory usage: how much RAM and swap is currently used vs free. Use when the user asks how much memory is being used right now. Do NOT use for total RAM capacity — use get_system_ram for that. |
| monitor_gpuA | Live GPU usage: current GPU utilization percentage and VRAM used. Use when the user asks how hard their GPU is working right now. Do NOT use for GPU model info — use get_system_gpu for that. |
| monitor_disk_ioB | Per-disk I/O rates. |
| monitor_network_ioA | Network I/O rates per interface. |
| monitor_temperaturesC | Sensor temperature readings. |
| monitor_fansC | Fan speed sensor readings. |
| get_batteryA | Battery percentage, plugged state, and remaining seconds. |
| get_top_processesA | Top resource-consuming processes ranked by CPU and memory usage. Use when the user asks what is slowing down or eating up their system. Do NOT use to find a specific process by name — use list_processes for that. |
| get_volumeA | Current master volume level and mute state. |
| set_volumeA | Set audio volume to a specific percentage. |
| volume_upB | Increase the master volume by a step. |
| volume_downB | Decrease the master volume by a step. |
| mute_audioA | Mute or unmute the master audio channel. |
| audio_devicesA | List available audio sinks and sources. |
| set_output_deviceC | Switch the default audio output device. |
| get_currently_playing_songB | Current playback status, title, artist, album, album art URL, and position. |
| toggle_play_pauseA | Toggle media playback on or off. |
| next_trackA | Skip to the next media track. |
| previous_trackA | Skip to the previous media track. |
| seek_mediaA | Seek media playback to a position in seconds. |
| read_clipboardA | Read the current clipboard text. |
| write_clipboardA | Write text to the clipboard. |
| clear_clipboardA | Clear the clipboard contents. |
| display_screenshotA | Capture the current screen with flameshot to ~/Pictures and return it to the client as base64 image data (compressed for relay delivery when large). The AI model only receives a success confirmation — the image is delivered to the user interface separately. |
| display_recordB | Record a short screen clip and return MP4 as base64. |
| monitor_offA | Turn the monitor/screen off (blank the display). Use when the user says 'turn off the screen', 'blank the display', or similar. |
| monitor_onA | Turn the monitor/screen back on. Use when the user says 'turn on the screen', 'wake the display', or similar. |
| get_monitor_stateA | Check whether the monitor is currently on or off. Use before toggling monitor state if unsure of the current state. |
| get_display_brightnessA | Get the current screen brightness. |
| set_display_brightnessC | Set the screen brightness. |
| get_resolutionA | Get the current display resolution and refresh rate. |
| lock_screen_displayA | Lock the screen via the display manager (fast path, no fallbacks). Prefer lock_screen_security unless you specifically need the display-manager lock. |
| set_night_lightA | Enable or disable night light and set colour temperature. |
| list_filesC | List files and directories at a path. |
| download_fileA | Download a file from the local filesystem and send it to the user interface. Images are shown in the UI (not to the AI model) — you only get a success confirmation with path/size. Files larger than the configured limit are rejected with size details; do not retry the same path. Use for transferring a file the user asked to see or receive, not for reading file contents yourself. |
| upload_fileC | Upload a file to a destination path. |
| delete_pathB | Delete a file or directory. |
| make_directoryA | Create a new directory. |
| rename_pathC | Rename or move a file or directory. |
| search_filesA | Search files and directories by name under allowed directories. Prefer path under the user home (e.g. /home/). If path is / or omitted, search is automatically limited to configured allowed_base_dirs. |
| get_disk_usageA | Disk space usage: how much free and used space each mounted partition has. Use when the user asks how much space is left or available. Do NOT use for partition layout or filesystem type — use get_system_disk for that. |
| zip_pathsC | Create a zip archive from files and directories. |
| unzip_pathB | Extract a zip archive to a destination directory. |
| open_pathA | Open a file or directory with the default system application. |
| type_keyboardA | Type text at the current focused input. |
| press_keyboard_keysB | Press one or more keyboard keys or shortcuts. |
| list_processesA | Full list of all running processes with PIDs. Use when the user wants to find a specific process by name or get a PID to kill. Do NOT use to see what is consuming the most resources — use get_top_processes for that. |
| is_process_runningA | Check whether a process or app is currently running by name. Use FIRST when asked if an application/process is open — do NOT launch it just to check. |
| list_installed_applicationsA | List installed desktop applications from this machine (.desktop entries): display name, desktop id, exec binary. Use when the user asks what apps are installed, what browser/IDE they have, or before opening an ambiguous app name. |
| kill_processB | Kill a process by PID. |
| kill_process_by_nameB | Kill all processes matching a name. |
| schedule_jobC | Schedule a command at a specific time or on a cron schedule. |
| list_jobsB | List all scheduled tasks. |
| cancel_jobA | Cancel a scheduled task. |
| run_job_nowB | Trigger a scheduled task immediately. |
| open_applicationA | Open a desktop/GUI application. Accepts friendly names ('Chrome', 'firefox'), .desktop ids ('google-chrome.desktop'), or exec binaries — resolved against installed .desktop entries on this PC. Use list_installed_applications when unsure of the exact name. |
| close_applicationA | Close a desktop/GUI application. Accepts the same friendly names and .desktop resolution as open_application (e.g. 'Chrome', 'firefox'). Matches running processes by exec binary and process name. |
| active_windowA | Get the currently focused window title and app path. |
| minimize_windowC | Minimize a window by window ID. |
| close_windowB | Close a window by window ID. |
| get_power_profileA | Get the current power profile (performance, balanced, power-saver). |
| set_power_profileC | Set the power profile. |
| lock_screen_securityA | Lock the screen with multiple fallbacks (most reliable). Use this when the user says 'lock', 'lock the screen', or 'lock my computer'. Prefer this over lock_screen_display. |
| logout_userA | Log out the current user session. |
| disable_webcamA | Disable the webcam by unloading the kernel module. |
| enable_webcamA | Enable the webcam by loading the kernel module. |
| webcam_snapshotA | Capture a webcam image and return it as base64 PNG. |
| disable_micA | Mute the default microphone source. |
| enable_micA | Unmute the default microphone source. |
| login_historyA | Get recent login events from system auth logs. |
| ssh_sessionsA | List active SSH sessions. |
| send_notificationC | Send a desktop notification. |
| clear_notificationsA | Clear all desktop notifications. |
| read_notificationsA | Read only the notifications that were sent by this agent in the current session. Do NOT use for system-wide notification history — use list_notifications for that. |
| list_notificationsA | List all desktop notification history system-wide (all apps). Use when the user asks to see recent notifications or missed alerts. |
| clear_cacheA | Clear /tmp and user cache directories. |
| get_logsA | Get the last N lines of a systemd service log. |
| check_updatesA | Check for available system updates. |
| run_updateA | Run a full system update (requires confirmation). |
| sync_timeA | Sync the system clock via NTP. |
| list_servicesA | List systemd services and their status. Use filter to narrow results and scope=system|user|all for system vs user units (Vela runs as user services). Do NOT use to answer whether one specific service is running — use get_service_status instead. |
| get_service_statusA | Check whether a specific systemd service is running, failed, or stopped. Use FIRST when the user asks if a service is up/running/active. Do NOT start or restart the service to answer a status question. |
| list_failed_servicesB | List failed systemd units from the current boot. |
| list_timersA | List systemd timers and when they next run. |
| check_package_installedB | Check whether a package is installed (apt/dnf/pacman). |
| get_boot_errorsA | Recent error-level journal entries from the current boot. |
| restart_serviceB | Restart a systemd service. Use only when the user asks to restart/fix it — not to check status. |
| stop_serviceC | Stop a systemd service. |
| start_serviceA | Start a systemd service. Use get_service_status first when the user asks if it is running; only start when they ask to start it or it is down and they want it fixed. |
| get_docker_infoA | Check whether Docker is installed and the daemon is running. |
| list_docker_containersA | List Docker containers. Use when the user asks what containers are running or to find a container by name/image. |
| get_container_statusA | Detailed status for one Docker container. Use FIRST when asked if a container is running. |
| get_container_logsB | Recent logs from a Docker container. |
| start_containerA | Start a Docker container. Check status first unless the user explicitly asked to start it. |
| stop_containerB | Stop a Docker container. |
| restart_containerC | Restart a Docker container. |
| compose_statusB | List services from a Docker Compose project. |
| speed_testA | Run a network speed test (download, upload, ping). |
| check_portA | Find what process is listening on a TCP port on this machine. Use when the user asks what service/app uses a port, what's on port X, or if a port is open (e.g. 8765 for the local Vela API). Returns PID, process name, and command line. |
| health_checkC | Probe an HTTP(S) URL and report whether it responds. |
| get_firewall_statusA | Get ufw firewall status when installed. |
| get_vpn_statusA | Check whether a VPN interface or NetworkManager VPN connection is active. |
| monitor_battery_healthA | Get detailed battery health information (cycle count, capacity, health percent). |
| get_uptimeA | Get system uptime: how long the laptop has been running since last boot, returned as seconds, minutes, hours, days, and a human-readable formatted string. |
| get_system_configA | Get system configuration (home directory, username). |
| get_directory_treeB | Get directory tree structure for folder navigation. |
| beep_audioA | Play a simple notification beep sound. |
| check_alert_statusA | Check the monitoring system status: whether spike alerts and daily summaries are scheduled, alerts today, and recipient email from .env. No email input needed — reads RECIPIENT_EMAIL from .env. |
| send_test_spike_alertA | Manually check CPU/memory and send an alert email if thresholds are exceeded. Email goes to RECIPIENT_EMAIL from .env (no prompt). Optional: cpu_threshold (default 80%), memory_threshold (default 85%). |
| send_daily_summary_nowA | Send the daily system summary email right now. Includes CPU, memory, vnstat network stats, top processes. Goes to RECIPIENT_EMAIL from .env — no email prompt. |
| send_test_emailA | Send a test spike alert email to RECIPIENT_EMAIL (from .env) to verify Resend is working. Always sends regardless of CPU/memory. No email input needed. |
| check_vnstat_statusA | Check if vnstat is installed, its version, and which network interfaces it's monitoring. |
| get_vnstat_dataA | Get network usage from vnstat for a specific period. period: 'day' (today — default), 'month' (this month), 'hour' (current hour). Use when the user asks about their data usage or bandwidth. |
| get_system_statsA | Get current system stats on demand: CPU usage, memory, vnstat network (today + month), top processes, uptime. Use when the user asks 'how's my system', 'give me stats', 'show system status'. |
| send_push_notificationA | Send a push notification to the user's registered mobile devices. |
| search_and_playA | Search Spotify for a song and immediately play it. If no active device is available, Vela opens the local Spotify app and registers this PC as a playback device before retrying. Use when the user wants to hear a specific song. |
| spotify_devicesA | Get list of available Spotify playback devices (speakers, computers, phones). Use when the user asks what devices are available for playback. |
| spotify_authA | Start Spotify account linking. Returns an auth URL the user must open in a browser to sign in and approve access. After approving, Spotify redirects to the configured callback URL and Vela finishes linking automatically — the browser should show a success or failure page. |
| spotify_callbackA | Legacy/manual completion of Spotify linking with an authorization code. Prefer the automatic browser redirect to /spotify/callback; only use this if the redirect could not finish linking. |
| gatekeeper_list_projectsA | List all Gatekeeper client projects (slug, name, domain, status, due date, amount due). Use for billing/access overview across hosted clients. |
| gatekeeper_get_projectA | Get one Gatekeeper project with payment history and audit log. Use when the user asks about a specific client site or slug. |
| gatekeeper_create_projectA | Create a new Gatekeeper project registration. PREREQUISITE: Docker container must already exist and be running (use gatekeeper_create_container first). DEPLOYMENT ORDER: This is step 2 of 4. 1) gatekeeper_check_image_status → gatekeeper_create_container → ensure running 2) gatekeeper_create_project (this step) 3) gatekeeper_nginx_wizard_context → gatekeeper_nginx_enable 4) gatekeeper_install_certificate. Use for onboarding new clients. |
| gatekeeper_update_projectA | Update Gatekeeper project fields for an existing client project. PATCH semantics: provide slug to target the project plus ONLY the fields the user asked to change — every body field is optional but at least one is required. Editable fields: name, domain, containerName, type (frontend|backend), clientName, clientEmail, amountDue (number), currency (e.g. KES/USD), dueDate (YYYY-MM-DD, or null to clear), gracePeriodDays (integer). Do NOT send fields the user did not ask to change. |
| gatekeeper_delete_projectA | Archive a Gatekeeper project (soft delete). Preserves payments and audit log. Use when removing a client while keeping historical data. |
| gatekeeper_list_overdueA | List active Gatekeeper projects past their due date, sorted by days overdue. Use for payment triage — who is late and when auto-block kicks in. |
| gatekeeper_list_paymentsA | List payments across all Gatekeeper projects with optional filters: status (pending/success/failed/abandoned/reversed), project_slug, from/to dates, limit, offset. |
| gatekeeper_revenue_reportB | Gatekeeper revenue summary: total this month, last month, and monthly breakdown. Optional input: period (default month), months (default 6). |
| gatekeeper_list_auditA | Recent Gatekeeper audit log entries across all projects (block/unblock/payments). |
| gatekeeper_get_project_auditA | Get audit log for a specific project. |
| gatekeeper_initialize_paymentA | Generate a Paystack payment link for a project. Requires slug and email. Creates a pending payment and returns a checkout URL. |
| gatekeeper_block_projectA | Manually block a Gatekeeper client project (gates their site/API). Requires slug and a non-empty reason. Confirmation gate applies. |
| gatekeeper_unblock_projectA | Manually unblock a Gatekeeper client project after payment or agreement. Requires slug and a non-empty reason. Confirmation gate applies. |
| gatekeeper_nginx_wizard_contextA | Wizard helper: fetch project + nginx context to drive a step-by-step UI (status, container hints, certificate options). |
| gatekeeper_nginx_validateB | Wizard helper: validate nginx enable inputs and return a config preview without applying changes. |
| gatekeeper_nginx_statusB | Check if a project has an nginx site configured and enabled, and whether SSL is set up. |
| gatekeeper_nginx_enableA | Generate and enable an nginx site config for a project. PREREQUISITE: Project must exist and container must be running. DEPLOYMENT ORDER: This is step 3 of 4. Use gatekeeper_nginx_wizard_context first to fetch project details and validate. After enabling, proceed to gatekeeper_install_certificate for SSL. |
| gatekeeper_nginx_disableA | Disable (unlink) an nginx site without removing the config file. |
| gatekeeper_nginx_removeA | Remove an nginx site completely (both sites-available file and sites-enabled symlink). |
| gatekeeper_list_certificatesA | List installed SSL certificates found under /etc/letsencrypt/live. |
| gatekeeper_install_certificateA | Install an SSL certificate for a domain using certbot. DEPLOYMENT ORDER: This is step 4 of 4 — do this last. PREREQUISITE: nginx site must be enabled (use gatekeeper_nginx_enable first). Requires domain and email. This completes the deployment. |
| gatekeeper_remove_certificateB | Remove an SSL certificate for a domain. |
| gatekeeper_check_certificate_statusA | Check whether an SSL certificate is installed for a domain. |
| gatekeeper_check_image_statusA | Wizard helper: check whether an image is available locally before attempting container creation. |
| gatekeeper_create_containerA | Create and start a new Docker container with custom configuration. DEPLOYMENT ORDER: This is step 1 of 4 — do this first. Requires image. Optional: name, projectSlug, ports, env, network, volumes, restartPolicy. If the user provides .env variables, pass them in the env field. If the user says the env vars are already in a local .env file on the Docker host, prefer passing envFilePath (absolute path) so Gatekeeperd can load it server-side. After creation, verify the container is running before proceeding to project creation. |
| gatekeeper_containers_wizard_contextA | Wizard helper: fetch Docker container-creation context (networks + internal network info). |
| gatekeeper_containers_wizard_ports_checkB | Wizard helper: check whether host ports are already in use on the Docker host. |
| gatekeeper_containers_wizard_validateB | Wizard helper: validate and normalize a CreateContainerRequest without applying changes. |
| gatekeeper_list_containersA | List all Docker containers visible to Gatekeeperd on the host. |
| gatekeeper_get_containerA | Get details for a single container by name or ID prefix. |
| gatekeeper_start_containerC | Start a stopped container. |
| gatekeeper_stop_containerB | Stop a running container. |
| gatekeeper_restart_containerC | Restart a container. |
| gatekeeper_delete_containerB | Delete a container permanently. |
| gatekeeper_get_container_healthB | Get container health/running state. |
| gatekeeper_list_networksA | List Docker networks. |
| gatekeeper_pull_imageC | Pull a Docker image from a registry. |
| gatekeeper_delete_imageA | Delete a Docker image from the local Docker host. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| deploy-client | Full client onboarding: pull image → create container → create Gatekeeper project → enable nginx → install SSL cert. Use when the user wants to deploy a new client site or app (e.g. 'deploy image X for domain Y'). |
| billing-triage | Payment runbook for the hosting business: list overdue projects, review revenue, generate payment links for late clients, and block/unblock as needed. Use when the user asks who is late on payment, what to do about overdue clients, or to review billing health. |
| system-diagnose | System health/performance diagnosis: snapshot metrics, top processes, disk usage, battery, and temperatures embedded as live context. Use when the user reports the PC is slow, sluggish, overheating, or they want to know what's wrong. |
| network-troubleshoot | Network troubleshooting: WiFi status, data usage, firewall and VPN state embedded as live context, plus ping and speed-test steps. Use when the user reports slow internet, disconnects, no connectivity, or wants their network checked. |
| security-audit | Security review briefing: recent login history, active SSH sessions, firewall status, failed services, and boot errors rendered as a briefing. Use when the user asks for a security check, whether anyone unauthorised has logged in, or to review the machine's security state. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 183 tools
Descriptions are unusually careful with cross-references ('Do NOT use X for Y'), which makes most tools easy to tell apart. Still, some clusters overlap enough to cause misselection, such as Docker container tools vs. Gatekeeper container tools, and lock_screen_display vs. lock_screen_security.
The overwhelming majority of tools use a clear snake_case verb_noun pattern (list_, get_, set_, monitor_, start_, stop_, etc.). A few outliers like audio_devices, active_window, login_history, and health_check break the pattern but do not make the set chaotic.
183 tools is an extreme count for any MCP server, far beyond the 50+ threshold for a low score. Even with a broad all-in-one device-management scope, this volume creates heavy context overhead and makes tool selection expensive.
Within the domains the server targets, coverage is quite thorough: files, processes, services, Docker, Gatekeeper deployment, media, notifications, and network monitoring all have lifecycle-oriented operations. Minor gaps exist, such as no Compose up/down, no per-PID process details beyond listing, and no explicit payment-success recording, but these are workable.