coolercontrol-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| COOLERCONTROL_URL | No | Daemon URL. Use https:// for a remote daemon with TLS enabled. | http://localhost:11987 |
| COOLERCONTROL_TOKEN | Yes | CoolerControl access token (cc_...) required to authenticate with the daemon. | |
| COOLERCONTROL_MIN_DUTY | No | Lowest duty percentage that set_fixed_speed will apply. A guard against stopping a pump or fan by accident; set it to 0 to allow anything the hardware accepts. | 20 |
| COOLERCONTROL_INSECURE_TLS | No | Accept self-signed certificates. | false |
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_healthB | CoolerControl daemon health: version, uptime, warning/error counts. |
| list_devicesA | List hardware CoolerControl knows about (CPU, GPUs, fan hubs, AIOs, PSUs, drives) with their speed-controllable channels and temperature sensors. Use the uids and channel names here for other tools. |
| get_statusA | Latest sensor readings: temperatures (°C), fan rpm, duty (%), power (W) and frequencies (MHz). Optionally limited to one device and channel. |
| get_channel_settingsA | What each speed-controllable channel is set to: a profile (by name), a fixed duty, or the default. Covers all devices unless one is given. |
| list_profilesB | Fan profiles (fixed, graph curves temp→duty, mixes) with their temperature source. |
| list_functionsB | Functions that shape how profiles apply duty changes (min/max duty, step sizes, hysteresis). |
| list_modesA | Saved modes (snapshots of all channel settings) and which one is active. |
| list_alertsC | Configured alerts and the recent alert log. |
| list_custom_sensorsC | User-defined custom sensors (mixes of other temps, or file-based sensors). |
| set_fixed_speedA | Set a fan/pump channel to a fixed duty %. Values below 20% are refused (COOLERCONTROL_MIN_DUTY). Returns the previous setting so it can be restored. |
| apply_profileA | Assign an existing profile (see list_profiles) to a fan/pump channel. Returns the previous setting. |
| reset_channelA | Reset a fan/pump channel to its hardware default, removing any profile or fixed speed. Returns the previous setting. |
| activate_modeA | Activate a saved mode (see list_modes), applying all of its channel settings. |
| create_profileA | Create a fan profile. Fixed: a constant duty. Graph: a temperature→duty curve following one sensor. Mix: combines member profiles (Min/Max/Avg/Diff/Sum). Overlay: offsets one base profile. Assign it to a channel afterwards with apply_profile. |
| update_profileA | Change an existing profile. Only the fields given change; a new curve or offset replaces the old one. Changing type requires the new type's fields. Channels using the profile pick up the change immediately. |
| delete_profileA | Delete a profile. Refuses if any channel, Mix/Overlay profile or mode uses it, listing where, unless force is true; with force, channels using it fall back to their default and modes drop it. |
| get_modeC | The channel settings saved in a mode, with device and profile names. |
| create_modeB | Save the current settings of every channel as a new mode, which activate_mode can restore later. |
| update_modeB | Rename a mode and/or overwrite its saved settings with the current channel settings. |
| duplicate_modeB | Copy a mode, including its saved settings. |
| delete_modeA | Delete a saved mode. Channel settings currently applied are not changed. |
| create_functionA | Create a function. Required: name. Unset fields copy the Default Function. Common fields: f_type (Identity | Standard), duty_minimum / duty_maximum (step size per change, %), step_size_min_decreasing / step_size_max_decreasing, threshold_hopping, bypass_min_at_extremes; Standard also takes deviance, response_delay, only_downward. |
| update_functionB | Change fields of an existing function; fields not given keep their values. |
| delete_functionA | Delete a function. Refuses if it is in use unless force is true. |
| create_alertB | Create a alert. Required: name, min, max, warmup_duration (s), channel_sources: [{device_uid, channel_name, channel_metric}] where channel_metric is Temp | Duty | Load | RPM | Freq (all sources share one metric; channel_name is the sensor/channel name, e.g. temp1 or fan1). Optional: cooldown_duration, repeat_interval, enabled, desktop_notify, desktop_notify_audio, desktop_notify_recovery, shutdown_on_activation. |
| update_alertA | Change fields of an existing alert; fields not given keep their values. |
| delete_alertC | Delete a alert. |
| create_custom_sensorB | Create a custom sensor. Required: id (unique; becomes the sensor's name) and cs_type. cs_type Mix: mix_function (Min | Max | Delta | Avg | WeightedAvg | Sum) and sources: [{temp_source: {device_uid, temp_name}, weight}]. File: file_path. Offset: offset, optional scale, one source. TimeAverage / ExponentialMovingAvg: time_window_seconds (1-300), one source. Optional metric (Temp default; Duty | Load | RPM | Freq use channel_source instead of temp_source in sources). |
| update_custom_sensorB | Change fields of an existing custom sensor; fields not given keep their values. |
| delete_custom_sensorA | Delete a custom sensor. Refuses if it is in use unless force is true. |
| list_api_endpointsA | Every CoolerControl 5.1.1 REST endpoint a token can call, for use with call_api: lighting, LCD, calibrations, name overrides, daemon settings, stats, hardware detection, power profiles, ThinkPad / AMD overdrive, logs, metrics and the endpoints behind the other tools. Filter by tag or text. |
| call_apiA | Call any endpoint from list_api_endpoints directly. Prefer the dedicated tools when one fits; they validate inputs. Non-GET calls change daemon state and need a token with Write Access. |
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 32 tools
Tools are grouped by distinct resources and actions (profiles, modes, functions, alerts, custom sensors, channel operations), and most boundaries are clear. The main ambiguity is the generic call_api/list_api_endpoints pair, which overlaps every dedicated tool, but the description explicitly steers agents toward dedicated tools when available.
All tool names use consistent snake_case with predictable verb_noun or action_resource structure. Variations like activate_mode, apply_profile, reset_channel, and set_fixed_speed are specific but still follow the same convention.
32 tools is heavy for a fan-control server, even though the domain has many subresources with full CRUD families. Several conveniences (duplicate_mode) and meta-REST tools push the set beyond a tightly scoped surface, making it borderline over-scoped.
The set covers CRUD for modes, profiles, functions, alerts, and custom sensors, plus device/status reads and channel assignment/reset operations. The list_api_endpoints/call_api escape hatch also fills gaps for lighting, LCD, calibration, and other daemon endpoints.