Skip to main content
Glama
sysprobe-mcp

sysprobe-mcp

sysprobe-mcp

Standalone, token-efficient MCP server for Linux system diagnostics and desktop/hardware control. Returns compact JSON with hard size limits so a single tool call can never flood the model context.

It is distro-agnostic. For Arch/CachyOS package management (pacman/AUR) use the companion cachyos-mcp, which embeds this server's tools.

Tool groups

Diagnostics (read-only, always available)

  • Filesystem/config: list_directory_tree, read_config_snippet, grep_file, check_command_exists

  • Processes/resources: get_process_top, get_process_info, inspect_process_io, find_processes

  • Sensors/power: get_hardware_sensors, get_battery_health

  • System/hardware: get_system_info, get_cpu_info, get_disk_usage, get_block_devices, list_usb_devices, list_pci_devices, get_gpu_info

  • systemd/logs: get_service_status, list_services, list_failed_services, query_journalctl, get_boot_performance

  • Debugging: list_coredumps, diagnose_crash, check_kernel_ring_buffer

  • D-Bus: list_dbus_services, get_dbus_property

  • Desktop status: get_brightness, get_power_profile, get_cpu_governor, get_volume, get_now_playing, bluetooth_status, bluetooth_devices, bluetooth_scan, get_kde_theme, list_color_schemes, list_desktop_apps

Control (mutating — needs SYSCONTROL_ALLOW_ACTIONS=1)

  • Bluetooth: bluetooth_power, bluetooth_connect, bluetooth_disconnect, bluetooth_pair

  • Display/power: set_brightness, set_power_profile, set_cpu_governor

  • Audio/media: set_volume, set_mute, media_control

  • Apps: launch_app, open_path

  • KDE: set_color_scheme, set_global_theme, kde_notify, kwin_reconfigure

  • Services/processes: control_service, kill_process

  • Session: lock_session, suspend_system

Power (double-gated — also needs SYSCONTROL_ALLOW_POWER=1)

  • power_action (reboot / poweroff)

Related MCP server: mcp-tool-server

Safety model

Read-only by default. Mutating tools return an explanatory error unless SYSCONTROL_ALLOW_ACTIONS=1 is set in the server environment. Genuinely destructive actions (reboot/poweroff) need a second, independent flag (SYSCONTROL_ALLOW_POWER=1) so they stay off even when ordinary actions are on.

Run

uv run sysprobe-mcp                       # read-only
SYSCONTROL_ALLOW_ACTIONS=1 uv run sysprobe-mcp   # + control tools

Register with Claude Code

claude mcp add sysprobe -s user \
  -e SYSCONTROL_ALLOW_ACTIONS=1 \
  -- uv --directory "/home/tom/Projekte/SE Projects/sysprobe-mcp" run sysprobe-mcp

Optional system tools

Richer output when these are installed: lm_sensors, upower, lsblk, usbutils, pciutils, bluez-utils (bluetoothctl), powerprofilesctl, cpupower, wireplumber/pulseaudio (wpctl/pactl), playerctl, qdbus6, kreadconfig6 + plasma-apply-* (KDE), brightnessctl, nvidia-utils.

Available Tools

59 tools
bluetooth_connectB

[ACTION] Connect to a paired Bluetooth device by MAC.

Inputs: mac (required). Returns: object

bluetooth_devicesC

List known/paired Bluetooth devices (name + MAC).

Inputs: paired_only. Returns: object

bluetooth_disconnectB

[ACTION] Disconnect a Bluetooth device (empty MAC = all).

Inputs: mac. Returns: object

bluetooth_pairC

[ACTION] Pair (and optionally trust) a Bluetooth device.

Inputs: mac (required), trust. Returns: object

bluetooth_powerA

[ACTION] Turn the Bluetooth adapter on or off.

Inputs: on (required). Returns: object

bluetooth_scanC

Scan for nearby Bluetooth devices for a few seconds.

Inputs: seconds. Returns: object

bluetooth_statusA

Bluetooth adapter status (powered, discoverable, pairable).

Inputs: no named parameters. Returns: object

check_command_existsB

Is a CLI tool installed? Returns presence + absolute path.

Inputs: command (required). Returns: object

check_kernel_ring_bufferA

Kernel messages by level (dmesg, falls back to journalctl -k).

Surfaces driver/hardware issues (USB resets, audio, bluetooth drops) without reading the whole boot log. level e.g. 'err,warn' or 'err'.

Inputs: level, lines, grep_pattern. Returns: object

control_serviceA

[ACTION] start/stop/restart/reload/enable/disable a systemd unit.

Gated by SYSCONTROL_ALLOW_ACTIONS. System scope may prompt for auth (polkit). Returns rc + new ActiveState.

Inputs: service (required), action (required), scope. Returns: object

diagnose_crashA

Inspect a coredump (coredumpctl info): signal, exe, stacktrace head.

Args: match: PID, executable name or COMM; empty = most recent crash. limit_lines: cap on returned lines.

Inputs: match, limit_lines. Returns: object

find_processesC

Find processes whose name/cmdline matches a substring.

Inputs: name (required), limit. Returns: object

get_battery_healthA

Battery health via upower: capacity, cycles, energy, state.

Inputs: no named parameters. Returns: object

get_block_devicesA

Block devices / partitions via lsblk -J (native JSON).

Inputs: no named parameters.

get_boot_performanceC

Slowest units at boot (systemd-analyze blame) + total boot time.

Inputs: limit. Returns: object

get_brightnessA

Current display brightness (percent) for internal backlight(s).

Inputs: no named parameters. Returns: object

get_cpu_governorB

Current CPU frequency governor + the ones available.

Inputs: no named parameters. Returns: object

get_cpu_infoA

CPU model, core counts, per-core frequency and current governor.

Inputs: no named parameters. Returns: object

get_dbus_propertyA

Read a D-Bus property (or all of an interface) via busctl.

Example: service 'org.kde.KWin', path '/KWin', interface 'org.kde.KWin'. Leave name empty to dump the whole interface.

Inputs: service (required), path (required), interface (required), name, +1 more. Returns: object

get_disk_usageC

Mounted filesystems with usage % (real disks only).

Inputs: limit. Returns: object

get_gpu_infoA

GPU summary: vendor (lspci VGA) + NVIDIA stats if nvidia-smi present.

Inputs: no named parameters. Returns: object

get_hardware_sensorsA

Live sensors: temps, fans, battery (category 'temps'/'fans'/'battery'/'all').

Inputs: category. Returns: object

get_kde_themeA

Current KDE color scheme, icon theme, look-and-feel & plasma version.

Inputs: no named parameters. Returns: object

get_now_playingA

Current media: player, status, artist/title (MPRIS via playerctl).

Inputs: no named parameters. Returns: object

get_power_profileA

Active power profile + available ones (power-profiles-daemon).

Inputs: no named parameters. Returns: object

get_process_infoA

Detailed info for one PID: cmdline, cpu/mem, threads, open files.

Inputs: pid (required). Returns: object

get_process_topA

Top resource-consuming processes (sort_by 'cpu' or 'memory').

Inputs: sort_by, limit. Returns: object

get_service_statusA

Status of a systemd unit + last few journal lines.

Args: service: unit name (e.g. 'bluetooth.service'). scope: 'system' or 'user'. log_lines: recent journal lines to include (0–40).

Inputs: service (required), scope, log_lines. Returns: object

get_system_infoA

OS, kernel, uptime, CPU/mem summary, load average. One cheap call.

Inputs: no named parameters. Returns: object

get_volumeA

Default audio sink volume & mute state (PipeWire/wpctl or pactl).

Inputs: no named parameters. Returns: object

grep_fileC

Regex-search a single file, returning matching lines with numbers.

Inputs: path (required), pattern (required), max_matches, context, +1 more. Returns: object

inspect_process_ioA

Open files & network connections held by a process (debug hangs).

Inputs: pid (required), limit. Returns: object

kde_notifyC

Send a desktop notification (notify-send). Harmless, ungated.

Inputs: summary (required), body, urgency. Returns: object

kill_processB

[ACTION] Send a signal to a PID (default SIGTERM). Gated.

Inputs: pid (required), signal. Returns: object

kwin_reconfigureA

[ACTION] Tell KWin to reload its configuration.

Inputs: no named parameters. Returns: object

launch_appA

[ACTION] Launch an app: a .desktop id, or a binary on PATH.

Examples: 'firefox', 'org.kde.dolphin', 'code'. Extra args optional. Detaches the process so it outlives the request.

Inputs: app (required), args. Returns: object

list_color_schemesA

Available KDE color schemes (for set_color_scheme).

Inputs: no named parameters. Returns: object

list_coredumpsC

Recent application crashes (coredumpctl list).

Inputs: limit. Returns: object

list_dbus_servicesA

List D-Bus names on the session or system bus (filterable).

Inputs: bus, filter. Returns: object

list_desktop_appsB

List installed .desktop application IDs (for launch_app).

Inputs: filter, limit. Returns: object

list_directory_treeA

Compact directory tree (names + sizes), depth/entry-bounded.

Understand a config dir's structure without reading any file contents. Args: path, max_depth (1–6), max_entries cap, show_hidden.

Inputs: path (required), max_depth, max_entries, show_hidden. Returns: object

list_failed_servicesB

All failed units — fastest 'what's broken?' check.

Inputs: scope. Returns: object

list_pci_devicesB

PCI devices (lspci), optionally filtered (e.g. 'VGA', 'Network').

Inputs: filter. Returns: object

list_servicesC

List systemd units. state: 'running','failed','enabled','all'.

Inputs: state, scope, limit. Returns: object

list_usb_devicesA

Connected USB devices (lsusb).

Inputs: no named parameters. Returns: object

lock_sessionA

[ACTION] Lock the screen.

Inputs: no named parameters. Returns: object

media_controlB

[ACTION] Control playback: play/pause/play-pause/next/previous/stop.

Inputs: action (required). Returns: object

open_pathB

[ACTION] Open a file/folder/URL with the default handler (xdg-open).

Inputs: target (required). Returns: object

power_actionB

[POWER] reboot / poweroff — needs SYSCONTROL_ALLOW_POWER too.

Double-gated to avoid accidental data loss.

Inputs: action (required). Returns: object

query_journalctlB

Filtered journal query — never dump the whole journal.

Args: service: unit to filter (empty = all). since: e.g. '10 min ago', 'today', '2026-06-10'. priority: e.g. 'err' to show err..emerg only. lines: max lines (1–300). grep_pattern: extra regex filter applied to the result. scope: 'system' or 'user'. kernel: kernel ring messages (journalctl -k).

Inputs: service, since, priority, lines, +3 more. Returns: object

read_config_snippetA

Read a slice of a text/config file — never the whole thing blindly.

If grep_pattern is set, returns only matching blocks (+context lines); otherwise returns lines [start_line, end_line]. Hard cap max_lines.

Inputs: filepath (required), start_line, end_line, grep_pattern, +2 more. Returns: object

set_brightnessA

[ACTION] Set display brightness to a percentage (1–100).

Inputs: percent (required). Returns: object

set_color_schemeA

[ACTION] Apply a KDE color scheme by name (see list_color_schemes).

Inputs: name (required). Returns: object

set_cpu_governorA

[ACTION] Set the CPU governor on all cores (e.g. performance, powersave).

Uses cpupower; needs root. Reports the permission requirement honestly.

Inputs: governor (required). Returns: object

set_global_themeC

[ACTION] Apply a KDE global theme / look-and-feel package.

Inputs: package (required). Returns: object

set_muteB

[ACTION] Mute or unmute the default audio sink.

Inputs: mute (required). Returns: object

set_power_profileA

[ACTION] Set power profile: performance / balanced / power-saver.

Inputs: profile (required). Returns: object

set_volumeB

[ACTION] Set default sink volume to a percentage (0–150).

Inputs: percent (required). Returns: object

suspend_systemA

[ACTION] Suspend (sleep) the system.

Inputs: no named parameters. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 59 tools

    Disambiguation5/5

    Each tool has a clearly defined and distinct purpose. Even related tools like get_process_info, find_processes, and get_process_top are differentiated by specific functions (single PID vs. substring search vs. top consumers). No ambiguity exists between tools.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case, with clear action prefixes such as get_, set_, list_, control_, etc. No mixing of conventions or irregular patterns.

    Tool Count1/5

    With 59 tools, the server far exceeds the 50+ threshold for extreme mismatch. While each tool addresses a specific need, the sheer volume makes the server unwieldy and could be consolidated or split into multiple focused servers.

    Completeness4/5

    The server covers a wide range of system probing and control functions: Bluetooth, systemd, hardware, KDE desktop, audio, display, power, and file operations. However, it lacks common areas like network interfaces or user session info, which are notable gaps for a sysprobe server.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      A
      quality
      D
      maintenance
      Lightweight MCP server that exposes tools for system information and weather lookup, designed for agent integration via stdio.
      1
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      A secure, production-grade MCP server that provides filesystem operations, AST math evaluation, and system diagnostics for LLM agents.
      MIT
    • F
      license
      Not graded
      quality
      A
      maintenance
      A safety-first MCP server enabling file inspection/editing, allowlisted command execution, process listing, and optional desktop automation. It emphasizes security with disabled writes/commands/GUI by default and local feature gates.
      1
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables controlling your own Linux desktop machines from any MCP-capable LLM client, with opt-in agent capabilities for shell, filesystem, processes, screenshots, system info, and input injection.
      1
      MIT