Skip to main content
Glama
SysControl MCP
by ks6573

SysControl

An AI agent for your Mac or Windows 11 PC that answers questions about your system — and can extend itself with new tools on the fly.

116 built-in tools covering CPU, RAM, GPU, disk, network, processes, iMessage, email, clipboard, browser, weather, reminders, Docker, Time Machine, Wi-Fi, calendar, contacts, Notes, Homebrew, media control, file management, Spotlight search, spreadsheets, Word documents, PDFs, image generation, deep web research, sub-agent orchestration, code editing, git integration, and more. Each platform receives only the tools it can execute; the agent picks the right ones automatically, runs them in parallel, and answers in plain English.

Three ways to run it — pick whichever fits your workflow:

How

Best for

App (macOS)

Download the .dmg

One-click native macOS (SwiftUI) experience — no setup required

App (Windows)

Download the .zip

Native Windows 11 desktop app (Flet) — unzip and run

CLI

syscontrol (one-line install)

Terminal-first workflow, scripting, SSH sessions (macOS · Windows · Linux)

Claude Desktop

MCP server

Using SysControl tools inside Claude Desktop

All interfaces share the same agent, tools, and providers — they're interchangeable.


App (macOS)

A native SwiftUI app with streaming chat, Markdown rendering, chat history sidebar, and auto-save — no Python, no terminal, no dependencies to install. Just download, open, and configure your provider in Settings.

Download

Option A — Pre-built DMG (no Xcode required):

Download the latest SysControl.dmg from GitHub Releases, drag to Applications, then bypass Gatekeeper on first launch (the app is ad-hoc signed, not notarized):

xattr -r -d com.apple.quarantine /Applications/SysControl.app

Or right-click the app → Open → Open the first time.

Option B — Install from source (compiles locally, bypasses Gatekeeper automatically):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ks6573/SysControl/master/swift/install.sh)"

To update later: use Check for Updates in the app (⇧⌘U), or run syscontrol-update from Terminal.

To uninstall: re-run with --uninstall.

Option C — Build manually:

git clone https://github.com/ks6573/SysControl.git
cd SysControl/swift
./build.sh release
open .build/SysControl.app

Requires: macOS 14 (Sonoma) or later. Options B and C also require Xcode Command Line Tools (xcode-select --install).

Features

  • Streaming responses — tokens appear as they arrive with live Markdown rendering

  • Auto-save — every conversation is saved automatically with an LLM-generated title

  • Chat history sidebar — browse and delete past chats

  • Settings — switch between local (Ollama) and cloud providers in-app

  • In-app updates — check for new versions from the menu bar (⇧⌘U) or Settings; DMG users get a one-click download, source-install users update automatically

  • No setup — everything is configured through the app itself

First Launch

On first launch an onboarding sheet appears automatically:

  1. Choose Local (Ollama) — requires Ollama running locally, no API key needed

  2. Or choose Cloud — enter your API key

  3. Click Done and start chatting

To change providers later, open Settings (⌘,).

Chat history is saved as Markdown in ~/.syscontrol/chat_history/ — view, edit, or delete freely.


Related MCP server: Windows Operations MCP

App (Windows)

A native Windows 11 desktop app (built with Flet) with streaming chat, Markdown rendering, expandable tool-call cards, inline charts, a session sidebar, and in-app settings. It runs the same Python agent backend as the macOS app and CLI, bundled into a standalone .exe — no separate Python install to manage.

Download

  1. Download the latest SysControl-windows-x64.zip from GitHub Releases

  2. Unzip it anywhere (e.g. %LOCALAPPDATA%\Programs\SysControl)

  3. Run SysControl.exe

First launch: the build is not code-signed, so Windows SmartScreen may warn you. Click More info → Run anyway.

Requires: Windows 11 (x64). For local models, install Ollama for Windows and pull a model (ollama pull qwen3:30b); for cloud, enter your Ollama Cloud API key during onboarding.

Build from source

git clone https://github.com/ks6573/SysControl.git
cd SysControl
uv sync --extra gui --extra build
uv run pyinstaller SysControl.spec     # -> dist\SysControl\SysControl.exe

Or run it directly without bundling: uv run syscontrol-gui.

Platform notes

The Windows app exposes the same agent and tools as macOS. System tools — CPU, RAM, GPU, disk, network, processes, battery, files, clipboard, screenshots, volume, Wi-Fi, system logs (Event Log), shell (PowerShell/cmd), web research, charts, spreadsheets/Word/PDF, sub-agents — work natively. macOS-only integrations (iMessage, Apple Mail, Calendar/Contacts, Notes, Time Machine, Homebrew) report that they're unavailable on Windows rather than failing.


CLI

A terminal agent that runs the same backend as the app. Two install paths:

Option A — One-line install (recommended):

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ks6573/SysControl/master/install-cli.sh)"

Installs uv if missing, then runs uv tool install against the GitHub repo, exposing syscontrol and syscontrol-server on your PATH in an isolated venv. No clone required.

To update later: run syscontrol --update (or /update inside the REPL); the standalone syscontrol-cli-update script is also still installed.

To uninstall: re-run with -- --uninstall.

Option B — From a clone (for development):

git clone https://github.com/ks6573/SysControl.git
cd SysControl
curl -LsSf https://astral.sh/uv/install.sh | sh   # if uv not installed
uv sync
uv run agent.py

Requirements

  • macOS, Windows 11, or Linux

  • Python 3.11+ (uv will fetch one if your system Python is older)

  • Ollama for local mode, or an Ollama Cloud API key for cloud mode

CLI Flags

syscontrol                                          # interactive
syscontrol --provider local --model qwen3:30b      # local, skip prompt
syscontrol --provider cloud --api-key sk-...       # cloud, skip prompt (key is remembered)
syscontrol --provider cloud --no-save-key          # cloud, prompt every time
syscontrol --provider custom --base-url https://example.com/v1 --model my-model --api-key sk-...
syscontrol --continue                              # resume the most recent session
syscontrol --resume                                # pick a previous session from a list
syscontrol --coding --approval normal              # coding agent, ask before edits/shell
syscontrol --coding --approval plan                # read-only planning mode
syscontrol --coding --approval auto                # auto-accept coding edits/shell

Cloned (Option B) users can substitute uv run agent.py for syscontrol in any of the commands below.

The first time you enter your Ollama Cloud API key (via --api-key or the prompt), it's saved to ~/.syscontrol/cli_credentials.json (0600) so you won't be asked again. Use --no-save-key to opt out, or /logout from the REPL to forget it.

Coding Mode

The CLI can run as a coding agent with a narrowed code tool set: file search/read/edit, git status/diff, and shell commands. Approval modes:

Mode

Behavior

plan

Read-only. The agent can inspect and produce an implementation plan, but edits and shell commands are blocked.

normal

Reads are automatic; file writes and shell commands ask for approval in the terminal.

auto

"Just do it" mode. Auto-accepts coding edits and shell commands for the session.

Press Shift+Tab to toggle between system monitor mode and coding mode. Inside coding mode, use /approval plan, /approval normal, or /approval auto to switch policies. The old standard and nuke names still work as aliases.

Slash Commands & Keyboard Shortcuts

The interactive CLI feels like Codex / Claude Code: type / to pop a completion menu, @ to inline a file from the cwd, ! to run a one-off shell command, and the bottom toolbar shows the active model, provider, approval mode, and message count at all times.

Command

Description

/help

Show all commands and keyboard shortcuts

/clear

Clear the screen

/reset

Clear conversation history (keeps system prompt)

/tools [filter]

List available tools, optionally filtered by substring

/model

Show the active model and provider

/mode [system|coding] [plan|normal|auto]

Toggle system/coding mode or enter a coding sub-mode

/test [command]

Run a detected test command, or a provided command, in coding mode

/lint [command]

Run a detected lint/typecheck command, or a provided command, in coding mode

/memory <note>

Append a timestamped note to SysControl_Memory.md

/show [tool_name]

Dump the full output of the most recent tool call

/sessions

List recently saved CLI sessions

/init

Generate a CLAUDE.md for the current project

/compact [undo]

Summarize the conversation; undo restores the prior history

/approval plan|normal|auto

Switch coding-mode approval policy

/update [force]

Check for and install the latest SysControl release

/logout

Forget the saved Ollama Cloud API key

/exit

Quit the session

Key

Action

Enter

Submit a single-line buffer; insert a newline once the buffer is multi-line

Ctrl+D

Submit any non-empty buffer; exit on an empty buffer

Ctrl+C

Cancel the in-flight LLM/tool stream (press again within 1s to exit cleanly)

↑ / ↓

History navigation

Ctrl+R

Reverse history search

Tab

Complete the current slash command, @file, or argument

Shift+Tab

Toggle system/coding mode

Ctrl+L

Clear the screen

Esc, Enter

Always insert a newline (alternative to letting Enter add one in multi-line mode)

Type @<partial> to pop a file picker scoped to the current directory (uses git ls-files when available; falls back to a recursive walk). Selected paths stay literal in the buffer and are inlined at submit time as fenced code blocks (capped at 64 KB per file).

Type !<command> to run a shell command directly — output prints inline and the LLM is bypassed. Requires allow_shell=true in ~/.syscontrol/config.json.

History is persisted to ~/.syscontrol/cli_history. Conversations auto-save to ~/.syscontrol/cli_sessions/; resume the most recent with syscontrol --continue or pick from a list with syscontrol --resume.

Local Mode (Ollama)

ollama pull qwen3:30b   # recommended
ollama serve
syscontrol --provider local

Tool-calling capable models:

Model

Notes

qwen3:30b

Default. Best tool use and reasoning

qwen3:8b

Faster, lower memory — includes thinking mode

qwen2.5:7b

Lightweight alternative

llama3.1:8b

Battle-tested fallback

Models without native tool-calling (e.g. gemma3) will error.

Cloud Mode (Ollama Cloud)

syscontrol --provider cloud
# Enter your key when prompted — not echoed or stored in shell history

Get a key at ollama.com/settings/keys. Default cloud model: gpt-oss:120b.

Any service that implements the OpenAI-compatible chat-completions and tool-calling APIs can be used with --provider custom, --base-url, --model, and --api-key. Custom-provider keys are used for the current session and are not written to the Ollama credential entry.

Ending a Session

Say any natural goodbye (bye, exit, quit, done, farewell, cya, goodnight, …) or press Ctrl-C. The agent will offer to save your session before exiting.

Session Memory

On exit you are prompted to save a short note about the session. Notes are appended to SysControl_Memory.md with a timestamp. On next startup, if the file exists its contents are injected into the system prompt so the agent has context from prior sessions. The file is append-only and plain text — edit or delete entries freely.

The agent can also save and recall memory mid-session via the read_memory and append_memory_note tools — no need to wait for exit.

Privacy: SysControl stores only what you explicitly save. Ollama processes queries locally by default.


Permissions & Security

Sensitive tools are disabled by default. Enable them in ~/.syscontrol/config.json:

{
  "allow_shell":           true,
  "allow_messaging":       true,
  "allow_message_history": true,
  "allow_screenshot":      true,
  "allow_file_read":       true,
  "allow_file_write":      true,
  "allow_calendar":        true,
  "allow_contacts":        true,
  "allow_accessibility":   true,
  "allow_tool_creation":   true,
  "allow_deep_research":   true,
  "allow_email":           true,
  "allow_notes":           true,
  "allow_brew":            true,
  "allow_agents":          true,
  "allow_automations":     true,
  "allow_connectors":      true
}

Each disabled tool returns an error with the exact flag needed to enable it.


Claude Desktop Setup

1. Add the MCP server to your config

Platform

Config path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "system-monitor": {
      "command": "/path/to/uv",
      "args": ["run", "/absolute/path/to/SysControl/mcp/server.py"],
      "env": {}
    }
  }
}

Use which uv to get the uv path.

2. Set the system prompt — create a Claude Desktop Project and paste the contents of mcp/prompt.json into the Project Instructions field.

3. Restart Claude Desktop — system-monitor will appear in the MCP servers list.


Self-Extension

When you ask for something no tool covers, the agent offers to build it:

You: What song is playing in Spotify right now?

Agent: I don't have a tool for that. Want me to create one? (yes/no)

You: yes

Agent: ✓ Tool `get_spotify_track` installed. Restart and ask again.

The agent writes a Python function, validates syntax, scans for dangerous patterns (eval, exec, etc.), and appends it to mcp/server.py. Requires:

{ "allow_tool_creation": true }

Tools (116 total)

Monitoring

Tool

What it does

get_cpu_usage

CPU load (total + per-core), clock frequency, inline bar chart

get_ram_usage

RAM and swap — used, available, percent, inline stacked chart

get_gpu_usage

GPU load, VRAM, temperature per device (NVIDIA/pynvml), inline chart

get_disk_usage

Per-partition space and cumulative I/O counters

get_network_usage

Cumulative bytes sent/received and per-interface status

get_realtime_io

Live disk read/write and network download/upload speed (MB/s)

get_top_processes

Top N processes by CPU or memory

get_full_snapshot

Single call: CPU + RAM + GPU + disk + network + top processes

get_system_alerts

Triage scan returning prioritized critical/warning alerts

System & Hardware

Tool

What it does

get_device_specs

Static profile: CPU model, core count, RAM, GPU VRAM, disks, OS

get_battery_status

Percent, charging state, time remaining

get_temperature_sensors

CPU/motherboard sensors (Linux/Windows)

get_system_uptime

Boot time, uptime, 1/5/15-min load averages

get_hardware_profile

Live pressure + specs + OC capability + upgrade feasibility + bottleneck analysis

Process Management

Tool

What it does

get_process_details

Deep inspection of a PID: path, cmdline, user, RSS/VMS, threads, open files

search_process

Find processes by name (case-insensitive partial match)

kill_process

SIGTERM (default) or SIGKILL a PID. Refuses critical system processes.

Network & Connectivity

Tool

What it does

get_network_connections

All active TCP/UDP connections with state and owning process

network_latency_check

Pings gateway, Cloudflare, Google DNS in parallel and diagnoses slowness

get_wifi_networks

Nearby networks with SSID, channel, security, signal strength

Storage

Tool

What it does

find_large_files

Top N largest files under a path. Skips .git, node_modules, .venv

eject_disk

Unmount and eject an external disk by mountpoint

Messaging & Communication

Tool

What it does

send_imessage

Send an iMessage or SMS via Messages.app. macOS only.

get_imessage_history

Read recent messages from ~/Library/Messages/chat.db. macOS only.

read_emails

Read recent emails from Mail.app (by folder). Requires allow_email. macOS only.

send_email

Send an email via Mail.app. Requires allow_email. macOS only.

search_emails

Search emails across all accounts and mailboxes. Requires allow_email. macOS only.

Browser & Web

Tool

What it does

web_search

DuckDuckGo search — title, URL, snippet. No API key.

web_fetch

Fetch a URL as plain text. No browser required.

grant_browser_access

Unlock browser control (called once, after user consent)

browser_open_url

Open a URL in the default browser

browser_navigate

Navigate the active tab via AppleScript (macOS)

browser_get_page

Return the URL, title, and text of the current tab (macOS)

Clipboard & Screen

Tool

What it does

get_clipboard

Return current clipboard text

set_clipboard

Write text to the clipboard

take_screenshot

Full-screen PNG returned inline. Optionally save to file. macOS and Windows.

generate_image

Generate an inline visual image artifact from a prompt. Requires an OpenAI image API key.

App Control & System

Tool

What it does

open_app

Open an app by name on macOS or Windows.

quit_app

Gracefully quit or force-kill an app on macOS or Windows.

get_volume

Output, input, and alert volume; mute state

set_volume

Set system output volume (0–100)

get_now_playing

Currently playing track in Music.app or Spotify (title, artist, album, position). macOS only.

media_control

Play, pause, skip, or stop Music.app / Spotify. Auto-detects active player. macOS only.

get_frontmost_app

Return the name of the focused application

toggle_do_not_disturb

Enable/disable Focus / DnD

run_shortcut

Run a named Shortcut via shortcuts run. macOS 12+.

File I/O & Shell

Tool

What it does

read_file

Read a text file (up to 16,000 chars)

write_file

Write text to any path, creating directories as needed

list_directory

List directory contents with name, type, size, and modification time

move_file

Move or rename a file or directory

copy_file

Copy a file to a new location

delete_file

Delete a file or directory (Trash by default on macOS, recoverable)

create_directory

Create a directory and any missing parents

search_files

Search for files system-wide using macOS Spotlight (mdfind). Instant. macOS only.

read_spreadsheet

Read cells from .xlsx or .csv — supports sheet selection and cell ranges

edit_spreadsheet

Write cells (A1 notation) or append rows to .xlsx / .csv. Create new files.

read_document

Read paragraphs from .docx, .txt, or .md with word count

edit_document

Find/replace text, overwrite paragraphs, or append to .docx files

read_pdf

Extract text from PDF files, page by page (up to 200 pages)

run_shell_command

Execute a bash command and return stdout/stderr. Disabled by default.

Calendar, Contacts & Logs

Tool

What it does

get_calendar_events

Upcoming events from Calendar.app for the next N days. macOS only.

get_contact

Search Contacts.app by name — phone and email. macOS only.

list_notes

List notes from Notes.app with title, folder, and timestamps. Requires allow_notes.

read_note

Read the full body of a note by title (partial match). Requires allow_notes.

create_note

Create a new note in Notes.app. Requires allow_notes.

get_startup_items

Auto-start items (macOS LaunchAgents, Windows Registry, Linux .desktop)

tail_system_logs

Last N lines of the system log with optional keyword filter

Utilities

Tool

What it does

set_reminder

Schedule a native desktop notification. Accepts "in 2 hours", "tomorrow at 9am", etc.

list_reminders

All pending reminders with IDs and fire times

cancel_reminder

Cancel a reminder by ID

get_weather

Current weather + clothing recommendations. Auto-detects location from IP.

check_app_updates

Available app/package and operating-system updates on macOS, Windows, or Linux

brew_list

List all installed Homebrew formulae and casks. Requires allow_brew.

brew_install

Install a Homebrew formula or cask. Requires allow_brew.

brew_upgrade

Upgrade one or all Homebrew packages. Requires allow_brew.

brew_uninstall

Uninstall a Homebrew formula or cask. Requires allow_brew.

get_docker_status

Running containers with live CPU%, memory, image, status, and ports

get_time_machine_status

Last backup time, phase and progress if running, destination. macOS only.

track_package

Track UPS, USPS, FedEx, or DHL shipments by tracking number

Memory

Tool

What it does

read_memory

Read the persistent memory file — facts and notes saved across sessions

append_memory_note

Append a concise note to the memory file for future recall

Research

Tool

What it does

deep_research

Multi-step web research agent: plans subquestions, searches multiple sources, extracts and cross-verifies claims, returns a citation-backed answer. Takes 1-3 minutes.

Code Editing & Navigation

Tool

What it does

read_file_lines

Read a file with line numbers, offset, and limit — large-file friendly. Requires allow_file_read.

edit_file

Targeted find-and-replace editing. Exact string match, fails if ambiguous. Requires allow_file_write.

glob_files

Find files by glob pattern (e.g. **/*.py). Skips .git, node_modules, .venv.

grep_files

Regex content search across files with optional context lines. Skips binary files.

git_status

Show branch, staged/unstaged/untracked files, and recent commits.

git_diff

Show git diff for unstaged or staged changes.

Sub-Agent Orchestration

Tool

What it does

list_agents

List available sub-agents with names and descriptions

run_agent

Delegate a focused task to a named sub-agent (explorer, analyst, researcher, writer) running in an isolated subprocess with restricted tools. Requires allow_agents.

Self-Extension

Tool

What it does

create_tool

Write, validate, and install a new MCP tool into server.py. Requires allow_tool_creation.

list_user_tools

List all tools installed via create_tool

Skills & Housekeeping

Tool

What it does

list_skills

List built-in and user-installed workflow skills

run_skill

Load a skill playbook for the agent to execute

tail_file

Read the tail of a large text file with optional filtering

cleanup_downloads

Preview or remove old files from Downloads

cleanup_caches

Inspect or clean supported application cache directories

summarize_directory

Summarize a directory tree and its largest contents

battery_health_report

Report battery capacity, cycle count, and condition

process_tree

Show a process and its parent/child relationships

notify_user

Display an immediate system notification on macOS, Windows, or Linux

do_not_disturb_status

Report the current Focus / Do Not Disturb state

focus_mode_set

Activate or deactivate a named Focus mode

open_file_at_path

Open a local file in its default or selected application

Scheduled Automations

Tool

What it does

create_automation

Schedule a recurring read-only tool call at a bounded interval

list_automations

List configured automations and their next run times

update_automation

Enable or pause an automation

delete_automation

Delete an automation

run_automation_now

Run a configured automation immediately

list_automation_runs

Inspect recent results and failures

get_health_trends

Summarize CPU, RAM, disk, and alert history from scheduled checks

get_audit_log

Review local tool actions without storing argument or result values

Automations are local, disabled by default, and limited to read-only tools. Enable them with allow_automations; mutating or destructive tools cannot be scheduled.

External MCP Connectors

Tool

What it does

list_connectors

List configured external MCP servers and connection state

add_connector

Add a stdio MCP server without invoking a shell

remove_connector

Remove a configured connector and stop its process

refresh_connectors

Restart connectors and rediscover their tools

External connector tools are namespaced as <connector>__<tool>, so a GitHub connector named github might expose github__list_issues. Connector processes receive a minimal environment; secret values are passed only through explicitly named environment variables and are never written to connectors.json. Connector execution is disabled until allow_connectors is enabled.


Overclocking Support

Detected automatically from hardware and platform:

Platform

CPU OC

GPU OC

Apple Silicon (M-series)

✗ Not supported

✗ Not supported

Intel Mac

✗ Not supported (no BIOS)

✗ Not supported (macOS)

Intel K/KF/KS — Windows/Linux

✅ Intel XTU or BIOS

✅ MSI Afterburner

AMD Ryzen — Windows/Linux

✅ Ryzen Master / PBO

✅ MSI Afterburner


Project Structure

SysControl/
├── agent.py                 # CLI entry-point shim
├── install-cli.sh           # One-line CLI installer (curl one-liner)
├── agent/
│   ├── cli.py               # Interactive terminal REPL
│   ├── core.py              # Shared agent logic: MCP client, streaming loop, helpers
│   ├── bridge.py            # JSON-over-stdio bridge for the Swift app
│   ├── agents.py            # Sub-agent specs: AgentSpec, AgentRegistry, built-in agents
│   ├── runner.py            # Sub-agent runner: isolated context, filtered tools
│   └── paths.py             # Path resolution (repo root, user data dir, memory file)
├── mcp/
│   ├── server.py            # MCP tool server (104 tools + self-extension)
│   └── prompt.json          # System prompt for the agent
├── deep_research/           # Deep research agent (iterative web research with citation verification)
├── swift/
│   ├── Package.swift         # SwiftPM package definition
│   ├── build.sh              # Builds the .app bundle and DMG
│   ├── install.sh            # One-line source installer
│   └── SysControl/           # SwiftUI source (App, Models, Views, Services, Storage)
├── scripts/
│   └── make_icon.py          # Generates the .icns app icon from source PNGs
├── pyproject.toml            # Python project config, dependencies, linting
├── VERSION                   # Current release version (single source of truth)
└── tests/                    # Pytest suite for agent core + MCP helpers

Architecture

┌──────────────────────┐
│    SwiftUI App       │   Native macOS frontend
│  (swift/SysControl/) │   Onboarding, chat, settings, history
└────────┬─────────────┘
         │  JSON-over-stdio (bridge.py)
┌────────▼─────────────┐
│    Agent Core        │   Streaming agentic loop, LLM client
│  (agent/core.py)     │   Provider selection, tool dispatch
└────────┬─────────────┘
         │  JSON-RPC (stdio)
┌────────▼─────────────┐
│    MCP Server        │   104 tools, self-extension, permission checks
│  (mcp/server.py)     │   Concurrent tool execution via client pool
└──────────────────────┘

The Swift frontend communicates with the Python backend through agent/bridge.py, which speaks a simple JSON-over-stdio protocol. The bridge reuses the same MCPClientPool and streaming loop used by the CLI, so all tools and capabilities are shared across every interface.


Entry Points

After installing via the one-liner (or pip install -e . from a clone):

Script

Description

syscontrol

Interactive CLI agent

syscontrol --update

Check for and install the latest release in place

syscontrol --version

Print the installed version and exit

syscontrol-server

MCP server (stdio)

syscontrol-cli-update

Standalone updater script (same as syscontrol --update)

From a clone without installing, use uv run:

Command

Description

uv run agent.py

Interactive CLI agent

uv run -m mcp.server

MCP server (stdio) — for Claude Desktop integration


License

This project is licensed under the MIT License. See LICENSE.

Available Tools

84 tools
add_connectorA

Configure an external stdio MCP server. Requires allow_connectors. The process is launched without a shell, receives a minimal environment, and its tools are namespaced as __.

Inputs: name (required), command (required), args, enabled, +1 more.

append_memory_noteA

Append a concise note or key fact to the persistent memory file. Use this proactively when the user shares a preference, important system fact, or decision that would be useful to recall in a future session. Keep notes brief (1-3 sentences).

Inputs: note (required).

browser_open_urlA

Open a URL in the user's default browser as a new tab/window. Requires prior browser permission (grant_browser_access). macOS: uses open command. Linux/Windows: uses webbrowser module.

Inputs: url (required).

cancel_reminderA

Cancel a pending reminder by its ID. Get the ID from set_reminder or list_reminders.

Inputs: id (required).

check_app_updatesA
Read-onlyIdempotent

macOS only: checks for outdated applications via Homebrew (formulae + casks), the Mac App Store (requires the 'mas' CLI — install with 'brew install mas'), and macOS system software updates. Returns lists of outdated apps with current vs available versions.

Inputs: no named parameters.

cleanup_downloadsA
Destructive

Find or delete files in ~/Downloads older than N days. Defaults to dry_run so nothing is removed without an explicit dry_run=false call. Requires allow_file_write when dry_run is false.

Inputs: dry_run, older_than_days.

copy_fileA

Copy a file to a new location. If dst is a directory, the file is copied into it preserving its name. Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: dst (required), src (required), overwrite.

create_automationA

Create a recurring local automation that runs a read-only SysControl tool. Requires allow_automations. Mutating, destructive, extension, and automation tools cannot be scheduled.

Inputs: name (required), tool (required), interval_minutes (required), arguments.

create_directoryA

Create a new directory (and any missing parent directories). Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: path (required).

create_toolA

Generates, validates, and installs a new MCP tool permanently into the server. Requires allow_tool_creation: true in ~/.syscontrol/config.json. The tool is available after restarting the agent.

Inputs: name (required), description (required), implementation (required), prompt_doc, +1 more.

deep_researchA
Read-onlyIdempotent

Conduct deep, multi-step web research on a topic. Plans subquestions, searches multiple sources, extracts claims, cross-verifies facts, and returns a citation-backed answer. Use for questions needing current information, evidence verification, or multiple perspectives. Takes 1-3 minutes. Requires allow_deep_research in ~/.syscontrol/config.json.

Inputs: question (required), max_loops, max_sources.

delete_automationA
Destructive

Delete a scheduled automation. Requires allow_automations.

Inputs: id (required).

delete_fileA
Destructive

Delete a file or directory. On macOS, moves to Trash by default (recoverable); pass permanent=true to permanently delete. Safety: only allows deletion within the home directory. Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: path (required), permanent.

edit_documentA

Edit a Word document (.docx): find-and-replace text, overwrite a paragraph by index, or append new paragraphs at the end. 'replacements' is a list of {find, replace} objects. 'set_paragraph' is {index, text} to overwrite one paragraph. 'append_paragraphs' is a list of strings to add at the end. Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: path (required), replacements, set_paragraph, append_paragraphs.

edit_fileA

Make targeted edits to a file using find-and-replace. Provide the exact text to find (old_string) and its replacement (new_string). By default, old_string must appear exactly once (fails if ambiguous). Set replace_all=true to replace all occurrences. ALWAYS read the file first to get the exact text to replace. Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: path (required), new_string (required), old_string (required), replace_all.

edit_spreadsheetA

Write cells or append rows to a spreadsheet file (.xlsx or .csv). 'updates' is a list of {cell, value} objects using A1 notation (e.g. {"cell": "B3", "value": 500}). 'append_rows' is a list of rows (each row is a list of values) to add at the end. Set create_if_missing=true to create the file if it does not exist (.xlsx only). Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: path (required), sheet, updates, append_rows, +1 more.

find_large_filesA
Read-onlyIdempotent

Finds the top N largest files under a given directory path (default: home directory). Skips hidden directories, .git, pycache, node_modules, .venv, and Library. Use when the user asks what is using disk space or wants to free up storage.

Inputs: n, path.

generate_imageA

Generate a new visual image artifact from a text prompt and return it as an inline PNG for the GUI/chat. Use when the user asks for an image or when a small visual artifact would clearly make the answer more useful. Prefer built-in chart-returning metric tools for system data. Requires an OpenAI image API key.

Inputs: prompt (required), size, model, quality, +1 more.

get_audit_logB
Read-onlyIdempotent

Return the local privacy-preserving tool audit log. Argument names, risk, status, and errors are recorded; argument and result values are not persisted.

Inputs: tool, limit.

get_battery_statusA
Read-onlyIdempotent

Returns battery percentage, charging state, and estimated time remaining. Returns an error on desktops with no battery.

Inputs: no named parameters.

get_clipboardA
Read-onlyIdempotent

Return the current text content of the system clipboard. macOS only (uses pbpaste).

Inputs: no named parameters.

get_cpu_usageA
Read-onlyIdempotent

Returns CPU usage percentage (total and per-core), core count, and frequency, with an inline bar chart.

Inputs: no named parameters.

get_device_specsA
Read-onlyIdempotent

Returns static hardware specifications: CPU model, core count, total RAM, GPU model and VRAM, disk capacities, and OS details.

Inputs: no named parameters.

get_disk_usageA
Read-onlyIdempotent

Returns disk partition usage and I/O counters.

Inputs: no named parameters.

get_docker_statusA
Read-onlyIdempotent

Returns all running Docker containers with their CPU%, memory usage, image, status, and ports. Also reports total container count (including stopped). Returns an actionable error if Docker is not installed or the daemon is not running.

Inputs: no named parameters.

get_full_snapshotA
Read-onlyIdempotent

Returns a full system snapshot: CPU, RAM, GPU, disk, network, and top processes.

Inputs: no named parameters.

get_gpu_usageA
Read-onlyIdempotent

Returns GPU load, VRAM usage, and temperature (requires nvidia-ml-py on NVIDIA hardware), with an inline grouped bar chart.

Inputs: no named parameters.

get_hardware_profileA
Read-onlyIdempotent

Returns a full hardware profile for a given use-case: specs, live pressure, overclocking capability (where supported), upgrade feasibility per component, and workload-specific bottleneck analysis. Use this when the user asks about speeding up a specific task, upgrading their machine, or overclocking.

Inputs: use_case.

get_network_connectionsA
Read-onlyIdempotent

Returns all active TCP/UDP connections with local/remote addresses, status, and the owning process name.

Inputs: no named parameters.

get_network_usageA
Read-onlyIdempotent

Returns total bytes sent/received and network interface status.

Inputs: no named parameters.

get_process_detailsA
Read-onlyIdempotent

Returns detailed information about a specific process by PID: executable path, command line, user, memory breakdown, open file count, and more.

Inputs: pid (required).

get_ram_usageA
Read-onlyIdempotent

Returns RAM and swap memory usage (total, used, available, percent), with an inline stacked bar chart.

Inputs: no named parameters.

get_realtime_ioA
Read-onlyIdempotent

Measures actual disk and network I/O throughput by sampling twice over an interval. Returns disk read/write in MB/s and network download/upload in MB/s and Mbps. Call this instead of get_disk_usage or get_network_usage when the user asks about current speed or throughput.

Inputs: interval.

get_startup_itemsA
Read-onlyIdempotent

Lists applications and services configured to launch automatically at startup/login. macOS: scans ~/Library/LaunchAgents, /Library/LaunchAgents, /Library/LaunchDaemons. Windows: reads Run registry keys. Linux: scans ~/.config/autostart. Use when the user asks what runs at startup or wants to speed up boot times.

Inputs: no named parameters.

get_system_alertsA
Read-onlyIdempotent

Scans all key system metrics (CPU, RAM, swap, disk partitions, GPU, battery) and returns a prioritized list of critical/warning alerts. Call this first for general 'why is my machine slow?' questions as a quick triage tool.

Inputs: no named parameters.

get_system_uptimeA
Read-onlyIdempotent

Returns how long the system has been running, the last boot time, and the 1/5/15-minute load averages.

Inputs: no named parameters.

get_temperature_sensorsA
Read-onlyIdempotent

Returns CPU and motherboard temperature sensor readings. On macOS, returns a helpful message with alternatives (psutil cannot access kernel sensors on Darwin). On Linux/Windows, returns sensor groups with current, high, and critical thresholds.

Inputs: no named parameters.

get_top_processesA
Read-onlyIdempotent

Returns the top N resource-hungry processes sorted by CPU or memory usage.

Inputs: n, sort_by.

get_weatherA
Read-onlyIdempotent

Returns current weather conditions and clothing suggestions. Auto-detects location from IP if no location is provided. Pass a city name for a specific location (e.g. 'Tokyo' or 'London, UK').

Inputs: units, location.

git_diffA
Read-onlyIdempotent

Show git diff output for a repository. By default shows unstaged changes; set staged=true for staged changes. Optionally scope to a specific file path.

Inputs: path, staged.

git_statusA
Read-onlyIdempotent

Show git repository status: current branch, staged/unstaged/untracked files, and the 5 most recent commits. Auto-detects the repo root.

Inputs: path.

glob_filesA
Read-onlyIdempotent

Find files matching a glob pattern (e.g. '/*.py', 'src//*.ts'). Searches recursively from the given base path. Skips .git, node_modules, .venv, pycache directories.

Inputs: pattern (required), path.

grant_browser_accessA

Grants the agent permission to control the user's browser. ONLY call this tool after the user has explicitly said yes/granted/allow. Writes a permission flag; subsequent browser_* calls will then work.

Inputs: no named parameters.

grep_filesA
Read-onlyIdempotent

Search file contents for a regex pattern, like grep/ripgrep. Returns matching lines with file paths and line numbers. Optionally filter by file glob (e.g. '*.py') and include context lines. Skips binary files and .git, node_modules, .venv, pycache.

Inputs: pattern (required), path, include, max_results, +1 more.

kill_processA
Destructive

Terminates a process by PID. Sends SIGTERM (graceful) by default; SIGKILL if force=True. Refuses to kill critical system processes (PID 1, launchd, systemd, init, kernel_task, core Windows services). Always confirm with the user before calling.

Inputs: pid (required), force.

list_agentsA
Read-onlyIdempotent

List all available sub-agents with their names and descriptions. Call this before run_agent if you are unsure which agent to delegate to.

Inputs: no named parameters.

list_automation_runsA
Read-onlyIdempotent

Return recent scheduled automation results for audit and diagnosis.

Inputs: limit.

list_automationsA
Read-onlyIdempotent

List all persisted scheduled automations and their next run times.

Inputs: no named parameters.

list_connectorsA
Read-onlyIdempotent

List configured external MCP connectors and their latest connection state.

Inputs: no named parameters.

list_directoryA
Read-onlyIdempotent

List the contents of a directory. Returns each entry's name, type (file/dir), size, and modification time. Use to browse the filesystem or verify file presence. Requires allow_file_read in ~/.syscontrol/config.json.

Inputs: path, show_hidden.

list_remindersA
Read-onlyIdempotent

List all pending (unfired) reminders with their IDs, messages, and scheduled fire times.

Inputs: no named parameters.

list_skillsA
Read-onlyIdempotent

List the user-installed skills (workflows) from ~/.syscontrol/skills. Each entry includes a description, tool allowlist, and the optional sub-agent it runs inside.

Inputs: no named parameters.

list_user_toolsA
Read-onlyIdempotent

Lists all custom tools installed via create_tool.

Inputs: no named parameters.

move_fileA

Move or rename a file or directory. Use for renaming files, moving files to different folders, or reorganising directories. Requires allow_file_write in ~/.syscontrol/config.json.

Inputs: dst (required), src (required).

network_latency_checkA
Read-onlyIdempotent

Pings the local gateway, Cloudflare DNS (1.1.1.1), and Google DNS (8.8.8.8) concurrently and returns per-target latency and reachability. Includes an automatic diagnosis (router issue / ISP issue / congestion / normal). Use when the user asks if their internet is slow or to locate where latency is introduced.

Inputs: no named parameters.

notify_userA

Show a native desktop notification immediately. Distinct from set_reminder, which schedules a reminder. Use for skill completion alerts and the like.

Inputs: title (required), body, sound.

open_file_at_pathA

Open a file in the default application on macOS, Windows, or Linux, or in a specific desktop application. Requires allow_file_read.

Inputs: path (required), with_app.

process_treeA
Read-onlyIdempotent

Returns a process tree. With a pid, includes ancestors + descendants. Without a pid, returns the system tree at the requested depth.

Inputs: pid, depth.

read_documentA
Read-onlyIdempotent

Read paragraphs from a Word document (.docx) or plain text file (.txt, .md). Returns a list of non-empty paragraphs with their index, and a total word count. Requires allow_file_read in ~/.syscontrol/config.json.

Inputs: path (required).

read_fileA
Read-onlyIdempotent

Read the text contents of a file at the given path. Returns up to max_chars characters (default 16,000, max 32,000). Useful for reading config files, logs, scripts, notes, etc.

Inputs: path (required), max_chars.

read_file_linesA
Read-onlyIdempotent

Read a file with line numbers, supporting offset and limit for navigating large files. Returns content formatted like 'cat -n'. Use this instead of read_file when you need line numbers or want to read a specific section. Requires allow_file_read in ~/.syscontrol/config.json.

Inputs: path (required), limit, offset.

read_memoryA
Read-onlyIdempotent

Read the persistent memory file that stores notes and key facts from past sessions. Call this when the user references something from a previous session, asks what you remember, or when prior context seems relevant to their request.

Inputs: no named parameters.

read_pdfA
Read-onlyIdempotent

Extract text from a PDF file, returned page by page. Use this when a user shares or mentions a PDF and wants you to read, summarise, or answer questions from its contents. Supports up to 200 pages per call (default 50); pass max_pages for larger documents. Encrypted/password-protected PDFs are not supported. Requires allow_file_read in ~/.syscontrol/config.json.

Inputs: path (required), max_pages.

read_spreadsheetA
Read-onlyIdempotent

Read rows and cells from a spreadsheet file (.xlsx or .csv). Returns headers and row data up to max_rows (default 200). For .xlsx files, optionally specify a sheet name and/or cell range (e.g. 'A1:D10'). Requires allow_file_read in ~/.syscontrol/config.json.

Inputs: path (required), sheet, max_rows, cell_range.

refresh_connectorsA

Restart external MCP connector processes and rediscover their namespaced tools. Requires allow_connectors.

Inputs: no named parameters.

remove_connectorA
Destructive

Remove an external MCP connector. Requires allow_connectors.

Inputs: name (required).

run_agentA

Delegate a focused task to a named sub-agent that runs in an isolated context with a restricted tool set. The sub-agent completes the task independently and returns only its final answer. Use list_agents to discover available agents. Do not delegate tasks you can complete directly with other tools. Requires allow_agents in ~/.syscontrol/config.json.

Inputs: task (required), agent_name (required).

run_automation_nowA

Run a configured automation immediately and record the result. Requires allow_automations.

Inputs: id (required).

run_shell_commandB

Execute an arbitrary shell (bash) command and return stdout, stderr, and exit code. DISABLED by default for safety. Enable by adding {"allow_shell": true} to ~/.syscontrol/config.json. Timeout is 30s by default (max 120s). Always confirm with the user before running destructive commands.

Inputs: command (required), timeout.

run_skillA

Fetch the playbook for a named skill and (optionally) a task to perform. Returns the skill body for the LLM to execute step-by-step. Use list_skills to see what's available.

Inputs: name (required), task.

search_filesA
Read-onlyIdempotent

Search for files using macOS Spotlight (mdfind). Much faster than find — searches the entire system instantly. Use for finding files by name, content keywords, or type. macOS only.

Inputs: query (required), kind, limit, scope.

search_processA
Read-onlyIdempotent

Searches for running processes by name (case-insensitive, partial match). Returns PID, CPU%, memory%, and status for each match.

Inputs: name (required).

set_clipboardA

Write text to the system clipboard. macOS only (uses pbcopy). Use to copy a result or command output so the user can paste it anywhere.

Inputs: text (required).

set_reminderA

Schedule a reminder that fires a macOS notification at the specified time. Accepts natural-language time: 'in 2 hours', 'in 30 minutes', 'at 9:00 am', 'at 3pm', 'tomorrow at 8am'. Returns a reminder ID that can be used with cancel_reminder.

Inputs: time (required), message (required).

summarize_directoryA
Read-onlyIdempotent

Walk a directory tree up to a configurable depth and return per-subdirectory sizes and file counts, plus a flat top-N list of the largest subdirs. Saves many list_directory calls. Requires allow_file_read.

Inputs: path, depth, top_n.

tail_fileA
Read-onlyIdempotent

Tail the last N lines of any text file, optionally filtered by substring. Caps reads at 50 MB and accepts up to 5000 lines. Requires allow_file_read in ~/.syscontrol/config.json.

Inputs: path (required), lines, filter_str.

tail_system_logsA
Read-onlyIdempotent

Returns the last N lines from the system log. macOS: reads from the unified system log (last 5 minutes) via log show. Linux: reads from journalctl or /var/log/syslog. Optional filter_str narrows results to lines containing that keyword. Use to diagnose crashes, kernel panics, or application errors.

Inputs: lines, filter_str.

take_screenshotA

Capture a screenshot of the entire screen and return it as an inline image. Optionally saves to a file path. macOS only (uses screencapture -x, no shutter sound).

Inputs: path.

track_packageA
Read-onlyIdempotent

Track a package by tracking number. Auto-detects the carrier (UPS, USPS, FedEx, DHL). Returns current status and recent tracking history. Note: Amazon TBA numbers must be tracked at amazon.com/orders.

Inputs: tracking_number (required).

update_automationA

Enable or pause a scheduled automation. Requires allow_automations.

Inputs: id (required), enabled (required).

web_fetchA
Read-onlyIdempotent

Fetch the plain-text content of any public web page. HTML is stripped. No browser needed, no permission required. Use this to read articles, docs, pricing pages, or any URL the user mentions.

Inputs: url (required), max_chars.

write_fileA

Write text content to a file at the given path. Creates parent directories as needed. Overwrites by default. Use for saving notes, configs, scripts, or any text output.

Inputs: path (required), content (required), overwrite.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 84 tools

    Disambiguation2/5

    Many tools overlap in purpose: multiple system-info tools (get_cpu_usage, get_system_alerts, get_full_snapshot, get_hardware_profile), several disk/file analysis tools (find_large_files, summarize_directory, list_directory), and many file-reading variants (read_file, read_file_lines, tail_file, read_document, read_pdf, read_spreadsheet). While descriptions help, the boundaries are blurry and an agent could easily select the wrong tool.

    Naming Consistency4/5

    The vast majority of tools follow a clear verb_noun snake_case pattern (get_cpu_usage, list_reminders, write_file, create_automation). A few exceptions like 'process_tree' and 'deep_research' break the pattern, but they are minor and do not cause confusion.

    Tool Count1/5

    With 84 tools, this server is extremely oversized. It expands far beyond system control to include web search, image generation, file editing, reminders, and more. The sheer number makes it difficult for an agent to discover and select among so many options, and many tools could be consolidated or removed.

    Completeness3/5

    The server aims for broad coverage and mostly achieves it: process lifecycle, file CRUD, automations, connectors, memory, and web search are present. However, there are notable gaps such as no update_reminder, no delete_memory_note, and no process-start tool, leaving some workflows incomplete.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      Enables comprehensive Windows system management through Claude Desktop, including PowerShell/CMD execution, file operations, archive handling, Git tools, network testing, and system monitoring. Provides a complete toolkit for Windows automation and administration tasks.
      59
      6
      MIT
    • F
      license
      Not graded
      quality
      Not graded
      maintenance
      Extends Claude Desktop with custom tools for file management, system operations, and command execution. Supports creating/reading/deleting files, directory listing, system information retrieval, and file searching capabilities.
      -
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables control of Windows PC through Claude Desktop, including executing shell commands, managing system resources, controlling audio/power, launching applications, taking screenshots, and managing windows and processes.
      -